Urządzenie służy do zdalnego sterowania boilerem do grzania wody. Boiler jest zasilany przez przekaźnik BIS-411 , żeby nie prowadzić grubych kabli w dwa miejsca, skąd jest włączany. Do sterowania przekaźnikiem bistabilnym służą przyciski typu „dzwonkowego”. Do zdalnego sterowania takim układem wystarczy dołożenie urządzenia, które będzie udawać przycisk „dzwonkowy”. Z uwagi na to, że podanie impulsu na przekaźnik bistabilny włącza lub wyłącza boiler konieczne jest również badanie stanu wyjścia – stąd pomysł na sterownik programowalny o jednym wejściu i jednym wyjściu. |
This device is used for remote control of a hot water boiler. The boiler is controlled by a bistable latching relay BIS-411 , so it can be turned on and off (with a doorbell-type switch) from two places without heavy wiring. Any amount of switches can be connected in parallel, so a remote control device will have to look like a switch. A single pulse can turn on or off the bistable relay, so the device will also need to sense the relay’s output. The main idea is a Modbus-enabled module with a single high-voltage output and input. |
Sterownik będzie zamontowany w obudowie typu DIN (2 moduły) w rozdzielnicy obok przekaźnika bistabilnego i bezpieczników, do komunikacji zostanie wykorzystany protokół Modbus po magistrali RS-485, a dalej router z systemem OpenWRT i prostym programem. Projekt wykonałem z myślą o częściach z mojego „junk boxu”, stąd np. ATmega8 w obudowie DIP, mimo iż wersja SMD byłaby dużo łatwiejsza do zmieszczenia w obudowie DIN.
Z uwagi na styk z zasilaniem 230VAC moduł jest wyraźnie podzielony ze względów bezpieczeństwa na część niskonapięciową i wysokonapięciową. Część niskonapięciowa to ATmega8, stabilizator 7805, transceiver typu MAX485, kwarc, dwa LEDy i dwa przyciski. Część wysokonapięciowa jest izolowana optycznie. Do udawania wyłącznika „dzwonkowego” służy triak+optotriak, a do wykrywania zasilania służy transoptor.
Tak wygląda płytka drukowana dopasowana do obudowy modułowej DIN. Od strony wysokonapięciowej znajdują się dwa styki do zasilania transoptora i dwa styki wyjścia triaka. Od strony niskonapięciowej jest plus i minus zasilania, linie A i B RS-485. Wyprowadziłem też magistralę I2C mikrokontrolera. Jeżeli będę potrzebował więcej funkcji czy linii sterujących to wystarczy dostawić obok moduł np. z gołym ekspanderem I2C (a po jakimś czasie kolejny i kolejny aż prowizorka rozmnoży się na całą rozdzielnicę 😀 ).
Schemat elementu wykonawczego – triaka – jest oczywisty, natomiast część badająca obecność napięcia 230VAC jest trochę bardziej interesująca. Główne sposoby bezpiecznego przekazania stanu jest/nie_ma napięcia 230V do mikrokontrolera to transformator (który nie zmieściłby się do obudowy modułowej), albo transoptor. Schemat podłączenia podchodzi pod standardowy projekt „LED zasilany prosto z fazy”. Kondensator i rezystor po stronie wysokiego napięcia jest mało istotny, natomiast strona „wtórna” wymaga trochę uwagi. Zrobiłem dwie symulacje układu wejścia w LTspice. Sinus sieci pojawia się na chwilę, a następnie zanika. Pullup 22k odpowiada wbudowanemu w piny mikrokontrolera. Widać, że układ spełnia swoją rolę i po stronie wtórnej widać wyraźne zmiany w takt sinusa z sieci. Można wykrywać zmiany tego sygnału, lecz ja chciałem mieć po prostu stan 0/1 (i bardzo prosty firmware).
W drugiej symulacji zwiększyłem pullup do 1M i dołożyłem kondensator 100n. Teraz, po pojawieniu się sinusa, napięcie momentalnie spada i nie podnosi się powyżej wartości maksymalnej logicznego zera. Jedyna wada, to powolny czas narastania po zaniku sinusa z sieci, przez co układ wykrywa brak napięcia dopiero po około jednej sekundzie.
Część wysokonapięciowa została zabezpieczona lakierem Plastik70 z obu stron. Od strony firmwaru urządzenie ma tylko jeden rejestr Modbus (adres 1000). Odczyt rejestru zwraca stan wejścia (1 – włączone, 0 – wyłączone). Zapis jedynki włącza boiler, zapis zera wyłącza (czyli moduł wygeneruje krótki impuls wyjściowy tylko, jeżeli stan trzeba zmienić).
Do sterowania napisałem prosty program z użyciem biblioteki libmodbus. Odczytuje lub zapisuje pojedynczy rejestr. Od strony użytkownika znajduje się skrypt CGI shella, który wyświetla stan urządzenia i dwa przyciski. Całość działa na routerze z systemem OpenWRT.
– – – > > SP2AGX_boiler_control_v1.0.zip < < - - - schemat, PCB, firmware, software
Artur SP2AGX
The module will fit a 2 unit wide DIN case and will be mounted in a DIN-rail case alongside with circuit breakers and the bistable relay. An OpenWRT router will talk to the module using Modbus over RS-485. I used only my junk-box parts, so some elements are big, through-hole mounted.
Outputs will be connected to 230VAC so safety is very important. I split the PCB to high and low-voltage sides. The low voltage side includes an ATmega8, 7805 linear regulator, MAX485 transceiver, quartz, two LEDs and two buttons. The high voltage side contains a triac (to emulate a doorbell switch) and an optocoupler (to sense boiler voltage). Both sides are isolated optically.
Here is a view of the PCB. The high voltage side has two terminals for voltage sense input and two triac output terminals. The low voltage side has six terminals for: power supply and ground, RS-485 A and B. I also exposed I2C bus of the ATmega, so if I will want more features I can hook up another module with a bare I2C expander (and another one, and another until they fill up all the free slots).
Output part of the schematic is trival – just an optotriac and a triac. The sensing input is a little bit more interesting. The best ways to sense high voltage using an microcontroller is a transformer or an optocoupler. A transformer would not fit a small DIN-rail case, so an optocoupler is the only solution. The main idea is a „mains powered LED”. Voltage and current limiting is carried out by the series capacitor and resistor. Low voltage side of the optocoupler requires some attention. I did two simulations in LTspice. The mains sine wave appears for a while and then ceases. A 22k pullup corresponds to a built-in pullup of an ATmega pin. The circuit seems to work, 50Hz pulses are visible on the low voltage side. I could sense those pulses but I decided to have a simple logic level (and very simple firmware).
The second case features a external 1M pullup and a 100n cap. Now the output voltage rapidly decays and does not cross the maximum level for logic zero. When the sine disappears the output voltage slowly rises. The only issue is a slow time of the voltage buildup, but it takes below a second.
High voltage side of the PCB is covered by Plastik70 coating on two sides. The firmware exposes a single Modbus register (address 1000). Reading that register returns the state of the relay (1 – the boiler is on, 0 – the boiler is off). Writing one turns the boiler on, writing zero turns the boiler off (so the module only triggers a pulse if the requested state is different then the current one).
I wrote a short program using libmodbus that can read or write a single register. The user interacts with a bash CGI script that displays current state and two buttons. Everything runs on a router with OpenWRT.
– – – > > SP2AGX_boiler_control_v1.0.zip < < - - - schematics, PCB, firmware, software
Artur SP2AGX
0 komentarzy