No to koniec......
Nie koniec projektu a zakończenie wykonania układu elektronicznego sterującego pracą chłodzenia Canona.
Największe podziękowania należą się naszemu koledze forumowemu Łukaszowi " JOLO" za cierpliwość , wyrozumiałość , poświęcony czas i bezinteresowną pomoc w uruchomieniu układu.
Założeń było wiele , przemyśleń jeszcze więcej. Przejżałem setki stron z podobnymi projektami szukając odpowiedzi na nurtujące mnie pytania.
Nie wiedząc jeszcze czy układ będzie zabudowany w aparacie(miejsce,wprowadzane zakłócenia na Canona), czy np. w AstroHubie , czy sterowanie i odczyt warości będą w komputerze czy np na LCD ,
założyłem wersję uniwersalną która pozwoli na dowolne i proste modyfikowanie układu.
Znalazłem w sieci stronę:
https://ragnablade.myon.no/?page_id=10
Mogę powiedzieć że na tym przykładzie się wzorowałem i praktycznie wykonałem kopię tego układu wraz z wykorzystaniem zamieszczonego kodu ARDUINO.
Z opisu na podlinkowanej stronie wynikało że moduł ARDUINO odczytując temperaturę na matrycy przez czujnik DS18B20 tak steruje ogniwem peltiera aby utrzymać zadaną wartość.
Wykorzystano również czujnik DHT22 za pomocą którego z odczytanych parametrów , ARDUINO
oblicza kiedy wystąpi roszenie w obudowie.
Na podłączonym wyświetlaczu LCD można odczytać takie dane:
- w lewym górnym rogu - na zmianę temperaturę wnętrza obudowy/wilgotność/temperaturę punktu rosy (odczytane z DHT22 i wyliczone z algorytmu w ARDUINO)
- w prawym górnym rogu - zadana temperatura matrycy (wprowadzona przez użytkownika)
- w lewym dolnym rogu - moc PWM sterowania peltierem (wyliczona w algorytmie ARDUINO)
- w prawym dolnym rogu - odczytana temperatura z zimnego palca w okolicy matrycy (odczytane z DS18B20)
Temperaturę którą chcemy uzyskać na matrycy wprowadzamy podłączonym enkoderem obrotowym lub po przez monitor portu szeregowego np. ten w programie IDE ARDUINO.
W monitorze tym możemy również odczytać w/w wartości które widzimy na LCD.
Myślę że w niedalekiej przyszłości , jak tylko JOLO znajdzie chwilę czasu napisze mi prosty programik do sterowania chłodzeniem z komputera .
Wtedy będzie można zrezygnować z LCD i enkodera a wszystkie parametry odczytywać i wprowadzać z poziomu programu.
Kiedy do tego dojdzie będzie można pokusić się o zabudowanie całej elektroniki w obudowie aparatu wyprowadzając z niej tylko zasilanie 12V , usb Canon i usb Arduino.
Nie wiem jeszcze czy cały ten układ nie będzie wprowadzał zakłóceń w elektronice Canona ale to wykażą ewentualne testy....
No i przyszedł dzień kiedy dotarły do mnie zamówione elementy do budowy układu.
Podłączenie całości w wersji prototypowej na tzw. "pająka" zajęło mi może godzinkę i ściągnięty z podlinkowanej strony kod próbowałem wgrać do ARDUINO MINI PRO.
Ale żeby oczywiście nie było zbyt prosto , przy programowaniu wyskakiwał mi błąd już w trakcie samej kompilacji.
Doszedłem do tego że brakuje mi biblioteki do obsługi LCD - LCDI2C4Bit
Niestety nie potrafiłem znaleźć takiej która by nie powodowała błędu przy kompilacji.
Jolo wysłał mi przygotowaną bibliotekę libraries i kazał podmienić z tą którą posiadałem na swoim komputerze . Wtedy udało się przeprowadzić weryfikację w IDE bez błędu.
Ale programowanie nadal nie przechodziło.
Przeinstalowałem program IDE , wgrałem jego nową wersję , zmieniałem porty - nic nie pomagało - cały czas błąd programowania .
Nie wiem ile bym jeszcze nad tym siedział gdyby nie przypadek.
Siedząc nad chyba już setnym programowaniem modułu , podszedł do mnie syn i poprosił o wyłączenie karty Wi-Fi w moim komputerze , bo miał u siebie jakiś problem z internetem .
Karta OFF...........................programowanie przeszło bez błędu!!! Szok!!!
Nie wierzyłem że to karta ma taki wpływ i że to był tylko przypadek więc zrobiłem próbę i za każdym razem gdy:
- Karta Wi-Fi jest ON - błąd programowania
- Karta Wi-Fi jest OFF - programowanie bez błędu.
Do tego był ważny moment puszczenia przycisku reset na module ( jak już wcześniej sugerował mi JOLO) , w moim przypadku gdy po zakończeniu kompilacji szkicu
i pojawieniu się w oknie dialogowym informacji o jego wielkości muszę odczekać około 2 sek. i dopiero wtedy puścić przycisk reset na module ARDUINO.
Po wgraniu programu okazało się że niewyświetlają się żadne informację na LCD.
I znowu "JOLO RATUJ"
Czekając na wskazówki od Łukasza sam zacząłem grzebać w programie , wprowadzać zmiany i wpadłem na pomysł podmiany w "// global objects" linijki dotyczącej LCD
na zawartą w JoloFokuserze ver.2 - bo tam mi LCD działał.
To był strzał w dziesiątkę! LCD ożył!
Pierwszą zmianą jaką zrobiłem było wprowadzenie własnego ekranu startowego który pojawia się po załączeniu zasilania
Gdy miałem już podgląd na pracę sterownika zacząłem testy z chłodzeniem .
Z monitora portu szeregowego IDE wprowadzałem temperaturę i sprawdzałem jak działa peltier , jak utrzymuje zadaną wartość.
Układ działał dość dziwnie tzn.
przy PWM 0%- pobór prądu przez ogniwo wynosił około 2,5A
przy PWM 80% - pobór prądu 0,0A
Okazało się że w oryginalnym kodzie linijkę " byte pwm_out = 255 - (byte)(out*255);" trzeba było zmienić na "byte pwm_out = (byte)(out*255);".
Doszliśmy do wniosku z Łukaszem że twórca oryginału sterował pracą Peltiera przez przetwornicę DC/DC i prawdopodobnie to ona potrzebowała odwrotnego sygnału PWM.
Niestety nie mogłem wykorzystać tego sposobu bo na podlinkowanej stronie nie ma schematu podłączenia przetwornicy. Wszelkie próby kontaktu z twórcą były nieudane.
Po wprowadzeniu tej zmiany chłodzenie zaczęło działać prawidłowo.
Zauważyłem jednak że przy ograniczeniu PWM do około 40-50% dosyć mocno grzeje się gorąca strona Peltiera a co za tym idzie spadała siła chłodzenia.
Czytając różne informacje w necie dowiedziałem się że ogniwa te nie lubią być sterowane bezpośrednio przez sygnał PWM i tranzysor MOSFET.
Skutkuje to właśnie przy ograniczeniu sygnału PWM nadmiernym wzrostem gorącej strony Peltiera.
Z tego właśnie powodu twórca oryginału zastosował sterowanie przez przetwornicę DC/DC.
Można również pomiędzy tranzystorem a ogniwem w celu wyeliminowania tego zjawiska zastosować prosty filtr LC którego zadaniem jest
zasilenie peltiera napięciem jak najbardziej stałym i wygładzenie sygnału prostokątnego.
Wartości cewki i kondensatora zależne są od częstotliwości sygnału PWM z ARDUINO.
Przy standartowych wartościach 490Hz należało by zastosować kondensator np 470uF i cewkę około 30-50mH , niestety cewki takie są trudno dostępne.
Możliwym rozwiązaniem jest zwiększenie częstotliwości PWM w ARDUINO do 31kHz co spowoduje zmniejszenie wartości cewki do około 68uH - cewka bezproblemowo dostępna i gabarytowo dużo mniejsza.
No to próby zwiększenia częstotlwości PWM
W tym celu należy zmienić wyjście PWM w Arduino z pinu 5 na np 9 , gdyż zmiana częstotliwości
na pinie 5 wprowadza również zmianę w zegarach systemowych modułu ARDUINO a tego musimy unikać gdyż może to zaburzać pracę całego układu.
Zacząłem wgrywać biblioteki i zmiany w programie podsyłane przez Łukasza mające na celu ustawienie PWM na 31kHz.
Żadne nie działały poprawnie , cały czas były jakieś problemy z pracą ogniwa , grzaniem się tranzystora .
Kilka razy na polecenie Łukasza wgrywałem nowy program z odłączonym filtrem LC , potem kolejno podłączałem jego elementy testując działanie układu.
Prostym testem sprawdzającym czy udało się zmienić częstotliwość jest słuchanie cewki LC...
tak tak .... cewka przy częstotliwości 490Hz delikatnie piszczy a przy częstotliwości 31kHz już tego nie słychać.
Moja cewka nawet gdy wydawało się że wszystko już działa prawidłowo cały czas piszczała.
I kolejny przypadek ...........
Koledzy jak już Łukasz wam pomaga i mówi przełącz sterowanie PWM z pinu 5 na 9 to zróbcie to!!!
Ja w ferworze walki pozmieniałem wszystko w programie zapominając przepiąć sterowanie na pin 9!!!
Zmarnowałem mnóstwo cennego czas Łukaszowi który za wszelką cenę starał się mi pomóc.
I właśnie przez przypadek spojrzałem na moduł i zauważyłem swoj błąd.
Po zmianie pinu wszystko zadziałało jak należy i cewka przestała do mnie piskać :)
W celu zmiany częstotliwości PWM została dopisana do programu linijka
TCCR1B = TCCR1B & B11111000 | B00000001;
Dokładny opis na którym pinie i na jaką częstotliwość zmienić PWM znajdziecie tu :
https://arduino-info.wikispaces.com/Arduino-PWM-Frequency?responseToken=0be180100d858bdc85f549448a474bca1
No i tak dobrneliśmy z Łukaszem do końca.
Układ działa poprawnie , bardzo dokładnie , w zakresie kilku dziesiątych stopnia utrzymuje zadaną temperaturę , na peltierze wyraźnie zmniejszyła się temperatura po gorącej stronie.
A czy to się sprawdzi ? To już zobaczymy po złożeniu wszystkiego w jedną całość.....
Dla zainteresowanych schemat układu
A wieczorem wrzucę jeszcze program z bibliotekami