Skocz do zawartości
zorg

Algorytm kompensacji temperatury fokusera, algorytm dla grzałek

Rekomendowane odpowiedzi

1. Zmontowałem sterownik fokusera na bazie DRV8834. Chciałbym dodać pomiar temperatury na bazie DS18B20. Jak powinna wyglądać obsługa kompensacji temperatury od strony algorytmu?. Może jest dostępny jakiś przykładowy kod Arduino lub c. ?

2. Jaki stosujecie algorytm dla zapobiegania roszeniu ?. Czy wystarczy pomiar wilgotności wewnątrz odrośnika, czy trzeba liczyć temperaturę punktu rosy? Jeżeli tylko pomiar wilgotności to od jakiego poziomu np. 70% etc uruchamiać grzanie z pełna mocą? Ewentualnie może zmienna moc w zależności od poziomu wilgotności?

Z góry dziękuje za pomoc.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Mogę w skrócie opisać jak sam to robię.

1. Algorytm jest prosty, bo zakładam (podobnie jak wszystkie rozwiązania które widziałem) że ta zależność jest liniowa. Czyli zmiana o jeden stopień powoduje przesunięcie o ileś kroków. Przesunięcie następuje automatycznie, kiedy różnica temperatury osiągnie np 1 albo 2 *C. Niestety bez integracji z programem do akwizycji fotek nie ma się wpływu na moment, w którym ta korekta nastąpi, więc pewnie nastąpi w trakcie naświetlania klatki - to jest minus kompensacji automatycznej.

2. Ja bazuję na pomiarze wilgotności względnej. Domyślnie grzanie sterowane jest płynnie przez PWM i włącza się przy 50%, a przy 95% grzeje już na max. Robiłem jakiś czas temu różne próby z utrzymaniem temperatury np 2*C powyżej punktu rosy, ale to niepotrzebnie komplikuje cały system, a przy okazji jest bardzo wrażliwe na położenie czujników i na całą konfigurację. Bo co z tego, że odrośnik ma temperaturę wyższą niż punkt rosy - to tylko oznacza, że rosa nie osiądzie na odrośniku :) Można mierzyć temperaturę optyki jakimś termometrem bezdotykowym  MLX, ale to już wg mnie przerost formy nad treścią, szczególnie, że dobrze dobrana grzałka na odrośniku nigdy mnie nie zawiodła przy tym prostym algorytmie, który opisałem wcześniej. 

A jak sterujesz DRV? Z Arduino?

  • Like 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

DRV sterowany jest z Raspberry PI, na którym jest zainstalowany astroberry serwer.  Sterowanie grzałkami mam na Arduino z uwzględnieniem punktu rosy ale średnio się sprawdzało. Dziękuje za podanie praktycznego rozwiązania. Oba urządzenia chcę włożyć do jednej obudowy i przy okazji robię porządek z sterowaniem grzałek.

W jaki sposób wyznaczasz o ile kroków przesunąć ostrość przy zmianie np. o jeden stopień?. Notujesz kilka pomiarów i liczysz współczynnik dla konkretnego zestawu etc?.

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W urządzeniu ma być też sterownik peltiera do kamerki CCD (obecnie pracuje z pełną mocą i ciężko dobierać darki). Z tego co wiem peltiery "nie lubią" PWM i można dodać filtr LC lub RC etc?. Czy wiesz jak taki filtr policzyć?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Kiedyś czytałem sporo o tym jak umieszczać grzałki i u mnie najlepiej się sprawdziło umieszczenie jej na odrośniku tak, że grzałka jest około 3-4 cm przed powierzchnią soczewki refraktora. Współczynnik wyznaczyć jest najlepiej tak jak piszesz - zanotować sobie w czasie jednej sesji punkty temperatura vs pozycja focusera i je potem aproksymować do prostej, np w jakimś arkuszu kalkulacyjnym.

Tak, peltiery nie lubią PWM, bo w czasie kiedy PWM jest niski, peltier jest wyłączony i są straty ciepła. Idealnym rozwiązaniem jest sterowanie napięciem przez jakąś przetwornicę DC step down, ale filtr LC też się sprawdza. Warto wybrać jakąś w miarę wysoką częstotliwość PWM (w Arduino np 31kHz) wtedy elementy LC mogą być mniejsze. Przy 31kHz cewka rzędu 10uH (na odpowiedni prąd) z kondensatorem rzędu 200-300uF już dobrze się sprawdzają. Napięcie na wyjściu nie jest idealnie gładkie oczywiście, ale straty już są minimalne. Przy wahaniach napięcia na wyjściu w granicy 10% peltier już pracuje bardzo dobrze. 

Tylko przy 31kHz już najlepiej peltiera sterować przez jakiś tranzystor MOSFET o niskiej rezystancji Ron, a dodatkowo sam tranzystor mocy sterować z jakiegoś dedykowanego sterownika do MOSFETów (np IR4426) żeby zminimalizować czas przełączania bramki i straty mocy na MOSFEcie. 

  • Like 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dziękuje za wyjaśnienia.

Początkowo sterowanie rozwiązałem modułem przetwornicy za 6 zł na LM2596 (do 3A, 150Khz). Jednak nie działało to zbyt dobrze. Pewnie brak radiatora ograniczał prąd przetwornicy. Docelowo zrobiłem zasilacz na LM338 (stabilizator liniowy, prąd do 5A) sterowany przez cyfrowy potencjometr MCP41010 z interfejsem SPI. Minusem jest konieczność stosowania dużego radiatora ze względu na małą sprawność stabilizatora liniowego. Delta T jest obecnie na poziomie 20 stopni co mnie już zadawala. W przyszłości zmienię radiator peltiera na wydajniejszy co pozwoli na lepsze osiągi.

Próbuję wykorzystać bibliotekę https://github.com/br3ttb/Arduino-PID-Library/blob/master/PID_v1.h  Na razie bez większych sukcesów, bo wymaga tuningu parametrów (osiąganie zadanej temperatury trwa bardzo wolno). Zwykły algorytm on/off nawet z histerezą pewnie powodowałby, że temperatura oscylowałaby wokół zadanej. Może jest jakiś gotowy algorytm, np. do jakiegoś zakresu chłodzimy pełną mocą a później bardziej zachowawczo np. z wykorzystaniem PID etc.  Nigdy nie posiadałem kamerki z regulowanym fabrycznym chłodzeniem. Jak wygląda zmiana temperatury w czasie po ustawieniu setpoint ?.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ja w AstroHubie wykorzystałem taki kawałek kontrolera PID:

#define T_LIMIT         3.0                 // delta for full PWM=1 action
#define AO_PEL_OFFSET   10
#define sign(x) ((x>0.0)-(x<0.0))           // adapted from old Utility.h library

int getPIDdrive(float TNow, float TSet) {

  float TErr = TSet - TNow;
  float Drive;

  static float Integral, TLast;
  if (ctx.Kdir != 0) TErr = -TErr;
  Integral = (abs(TErr) < T_LIMIT) ? Integral += TErr : Integral = 0.0;

  Drive = ctx.Kscale * (ctx.Kp * TErr + ctx.Ki * Integral + ctx.Kd * (TLast - TNow)) + AO_PEL_OFFSET;
  TLast = TNow;
  return constrain((int) Drive, 0, 100);
}

Działało to dobrze zarówno w ustalaniu temperatury grzałki, czy peltiera. Metoda zwraca bezpośrednio moc grzania czy chłodzenia w zakresie 0 do 100, którą ewentualnie trzeba przemapować na PWM z zakesu 0-255. Jeśli różnica temperatury pomiędzy aktualną i zadaną jest większa od 3.0 stopni (pierwsza linijka) to całość działa jako ON/OFF. Potem pracę zaczyna PID. Współczynniki jakie zastosowałem na starcie to:

  ctx.Kp = 0.35;
  ctx.Ki = 0.001;
  ctx.Kd = 0.01;
  ctx.Kscale = 100.0;
  ctx.Kdir = 1;

Kdir określa po prostu czy całość ma chłodzić czy grzać. W fabrycznych kamerkach (przynajmniej tych, które miałem) temperatura ustala się po 1-2 minutach. Ale wtedy już współczynniki dostrojone są do konkretnego systemu. Dużo zależy od umieszczenia czujnika temperatury i od "nadmiaru" mocy, czyli jak szybko zmienia się temperatura układu przy maksymalnej mocy grzania/chłodzenia. Ten wklejony algorytm przy domyślnych ustawieniach współczynników stabilizował temperaturę grzałki 8W na odrośnik w ciągu około 5 minut. Metoda była wywoływana co 2 sekundy, po każdym pomiarze temperatury i obliczona wartość podawana na wyjście PWM. 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W moim urządzeniu pomiar też jest co 2s. W przypadku grzania nie planuję PID, bo tam stabilność temperatury chyba nie jest taka istotna.

Widzę, że temat doboru współczynników i czasu próbkowania nie jest trywialny. Musze przez więcej czasu poobserwować działanie chłodzenia. Brzydka pogoda ma się długo utrzymać, więc będę miał czas testować i dobrać parametry.

 

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×
© Robert Twarogal, forumastronomiczne.pl (2010-2017)