Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Kolejny DIY watomierz/miernik energii elektrycznej z RS485

Sareph 26 Apr 2017 16:36 11151 5
phoenixcontact
  • Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Mam wrażenie, że każdy elektronik w którymś momencie swojego życia konstruuje zegar i jakaś formę miernika. Czas na mnie z miernikiem. Projekt bazujący na moich wcześniejszych zabawkach używających RS458 - https://www.elektroda.pl/rtvforum/topic3305389.html - używa tego samego protokołu komunikacji co reszta zabawek, dzięki temu bramka automatycznie rozpoznaje je wszystkie i nie wymaga żadnej konfiguracji na poziomie sieci. Dało by się oczywiście kupić jakiś gotowy, bardziej kompaktowy nawet, ale raz że niczego się człowiek przy tej okazji nie nauczy dwa, że nie dalo by się go zintegrować w prosty sposób z istniejącą siecią.

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Urządzenie ma cztery analogowe kanały do pomiaru rzeczy. Właściwie 7, ale trzy są na potrzeby wewnętrzne, mierzą temperaturę CPU, napięcie odniesienia i napięcie zasilania. Kanały są konfigurowalne (mamy szeregowy EEPROM), w prawie całości SMD, dzięki czemu (jak się pominie moduł złącz RJ45/zasilania) ma całe 6x4cm. A, że ma różnej maści złącza, to zawsze może pełnić jeszcze jedną dodatkową funkcję, kwestia napisania do tego programu. Schematu oczywiście nie ma, jak (prawie) zwykle przeszedłem do zaprojektowania PCB. Całość zrobiona na moim ostatnio ulubionym STM32F030(C8), tani, dostępny w chinach, lepsze możliwości niż AVR.

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Zaczynając od modułu złącz i zasilania RS485:

    A - Zworki włączające w magistralę rezystor 100Ohm, terminator magistrali.
    E - Złącza Rj45 od magistrali RS485. Układ pinów jest kompatybilny z ethernetem, dzięki czemu można używać dokładnie tego samego okablowania do jednego i drugiego. Ot może kiedyś zmienię siec na eth? Poza tym po prostu wygodnie, można kupic gotowe i tanie kable jak by były potrzebne. Schemat pinów zasilania identyczny jak w PoE, napięcie dostarczane jest parą 3 i 4. Prawie cała sieć ma jedno źródło zasilania. Jedno ze złącz ma dwa LEDy, jeden oryginalnie sygnalizował zasilanie drugi transmisję. Aktualnie zielony sygnalizuje zasilanie (ale miga jak coś jest odbierane) a żółty miga w momencie wysłania czegoś.
    B - Złączka do podłączenia modułu do właściwej płytki. Dlaczego są osobno? Bo można przylutować kabeki na stałe, przez co ograniczamy objętość obudowy, a poza tym opcja komunikacji radiowej, tylko że nie działa -a le o tym za chwilę.
    F - Drugi kanał ADC, można go skonfigurować do pomiaru napięcia, prądu albo podłączyć czujnik przepływu cieczy.
    G - Kanały 0, 1 i 3. Konfigurowane w EEPROM jako pomiar prądu, czujnik oświetlenia albo optyczny czujnik mierzący kWh używając zewnętrznego miernika. W moim przypadku kanały 0 i 1 są ustawione do współpracy z przekładnikami prądowymi, o takimi konkretnie:

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Ostatni kanał ma podłączony fototranzystor, który umieszczony przy diodzie licznika energii zlicza z niego kWh, widać na pierwszym zdjęciu.

    C - złącze I2C, pozwalające na podpięcie modułów z różnymi czujnikami I2C, piny pasują do większości chińskich płytek, więc jakbym wpadł na pomysł pomiaru wilgotności w rozdzielnicy to się da.
    D - Złącze na urządzenia 1-Wire.
    M - Port SWD. Bardzo się polubiłem ze złączami z rodziny Micro JST (1,25mm). Małe to a jednak w miarę wytrzymałe. Jedyny minus to umieszczanie przewodów we wtyczkach. Ale zawsze można kupić gotowe.
    J - to samo co B, tylko z drugiej strony. ;)
    K - Układ zasilania na LM1117, całość nie pobiera za dużego prądu, więc ie było sensu wkładać tam typowego regulatora impulsowego.
    L - Złącze czujnika PIR albo czujnika przepływu. Do wyboru przez EEPROM, i tak maja podobne poziomy napięć na których działają. Jak się chce, to zamiast miernika energii można mieć wodomierz. ;)

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    I - ST3485. Kory okazał się być jakoś mniej problematyczny niż MAX3485.
    H - Porażka. Sekcja odpowiedzialna za komunikację radiową używając Si4455. Założenie było takie, że skoro zakładamy po jednej sieci RS485 na pomieszczenie, a w przedpokoju takiej sieci nie ma, to wszelkie czujniki "nie związane z pomieszczeniem" można by odczytywać i programować drogą radiową. I w sumie by można było gdyby nie to, że wpadłem na genialny pomysł aby źródłem zegara dla Si4455 był pin MCO kontrolera (STM32F030). Kontroler ma swój własny 30MHz kryształ, jest akurat z tej strony bo niewygodnie było mi go umieścić pod chipem radia. No i mam. Chip radiowy nie akceptuje sygnału zegarowego tego typu. Jedyna opcja jest dla niego TXCO albo normalny kwarc. Także w tej wersji płytki radio nie działa.

    Ale za to okazało się, że mój protokół multimasterowy na RS485 działa jeszcze lepiej przy około 20 metrowej magistrali niż przy 5 metrowej. Jak normalnie liczba błędów CRC wynosiła około 0,2% tak spadła teraz o połowę. Nie będę narzekał.

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    O ile CT można podłączyć do modułu bezpośrednio, tak modułu pomiaru napięcia już nie, za wysokie. Do kompletu jest osobna płytka zawierająca transoptor H11AA1 i zestaw rezystorów (2x470k od strony diody). Nie jest to idealna metoda pomiaru - ale w przyszłości sobie to zmienię na jakiś izolowany wzmacniacz różnicowy a poza tym, potrzebuję tylko informacje o tym gdzie i jaka była górka i gdzie wystąpiło przejście przez zero. Przy takich założeniach optyczna izolacja "daje radę". CT są obciążone 100 Ohm rezystorami i mają bias na poziomie połowy napięcia zasilania, czyli maksymalne wychylenie napięcia dla nich to 1,65V +- 1V.

    ADC kontrolera używa zegara 14Mhz, w efekcie próbkowanie odbywa się z częstotliwością 333kHz, kanałów ADC ustawionych jest ogólnie 7, czyli wychodzi po 47kHz na kanał. Wyniki transportowane są za pomocą DMA do pamięci. W głównej pętli programu odbywają się właściwe pomiary, niezsynchronizowane z pracą ADC. Co 50 pełnych przebiegów napięcia, czyli co 1s program wykonuje obliczeń i umieszcza wyniki w pamięci. Stamtąd system może je przetransportować po magistrali do celu.

    Obudowa tradycyjnie zaprojektowana specjalnie dla danego urządzenia i wydrukowana z ABS+ na drukarce 3D, ma miejsce na magnes, dzięki czemu trzyma się bezinwazyjnie rozdzielnicy.

    A wyniki:

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Jak dla mnie ok. Pierwszy licznik kWh bazuje na pomiarach dokonywanych przez miernik. Drugi (z końcówką FF) to odczyt z migania diodą miernika Tauronu. Różnica <1,2%. Także wygląda na to, że pomiar mocy czynnej dokonywany jest w miarę poprawnie, a przynajmniej wystarczająco jak na moje potrzeby. Acz jakby przeprowadzić dokładniejsza kalibrację to dało by się lepiej.

    Wyniki zbiera sobie serwer, dzięki czemu mam podgląd danych na wykresie. Poza tym można sobie dane z modułów odczytać też na telefonie.

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485 Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Każdy punkt to uśrednione dane z 5 minut. Rozdzielczość samych danych wynosi jedna minute.
    "Ale po co?" - Bo lubię wykresy, statystyki i optymalizacje - wiedzieć czy jak coś zmieniam, na przykład żarówki to przynosi jakiś sensowny efekt. ;)

    /**************************************************************************
    *** Wersja numer dwa
    **************************************************************************/


    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Wymiary i generalnie projekt identyczny z pierwsza wersja. Różnice w szczegółach. Si4455 ma teraz swój kryształ, dzięki czemu w ogóle działa. I całkiem dobrze działa bez anten, a po dodaniu "bacika", spokojnie się widzą przez 6 pięter. Poza tym inny układ zasilania, bazujący na MCP16301, inny układ pomiaru i wejść analogowych.
    Tutaj ciekawostka, przy montażu pierwszego egzemplarza jakimś cudem udało się mi odwrócić o 90 stopni cewkę tegoż zasilacza, to spowodowało zwarcie pól cewki ze sobą. Spodziewał bym się w takiej sytuacji braku działania całego układu zasilania. Okazało się jednak, że układ z takim "kosmicznym" błędem instalacji cewki - działa. Nie tak jak powinien, bo przy testach układu radia wszystko się resetowało z powodu nagłego wzrostu poboru prądu przez układ radia, co powodowało ogólny spadek napięcia i w konsekwencji reset. Tym niemniej, gdyby tak błędnie zmontowany układ nie miał radia/nic nie nadawał - działał poprawnie, co w sumie było zaskakujące.

    Jak wspomniane w poście poniżej, układ z uwagi na zasadę wykrywania "zera" jest nieco niestabilny przy niskim prądzie. Idealnie byłoby gdyby do każdego przekładnika był podłaczony różnicowy ADC, załatwiło by problem. STM32F0xx niestety różnicowych ADC nie mają, ale w sumie... zawsze można sobie zrobić pseudo-różnicowy ADC, no po paru zmianach. Zamiast osobnego dzielnika rezystorowego dla każdego kanału CT i napięcia generującego napięcie odniesienia, zastosowałem tylko jedno źródło takie napięcia. To napięcie doprowadzone jest bezpośrednio do jednego kanału ADC, i tak odejmując jego wartość od wyniku napięcia na przekładnikach mamy jako taki różnicowy ADC. Acz nie idealny bo zawsze to jakieś przesuniecie w czasie dla pomiaru napięcia odniesienia i właściwego z CT, ale w sumie każdy kanał sprawdzany jest z częstotliwością około 11kHz, co dla 50Hz przebiegów nie powinno być jakimś wielkim problemem. I jak się okazało - nie jest, tak zrobiony układ jest dokładny w granicach 1LSB. Co dla zakresu 0-21A daje rozdzielczość pomiaru prądu na poziomie 100mA/LSB (2,4W). Ale z uwagi na spory oversampling praktyczna rozdzielczość wynosi około 0,3W, a różnica między pomiarem dokonanym przez ten układ a licznikiem energii nie przekracza 0,4%.

    Sama cześć analogowa dla przekładników aktualnie wygląda tak:

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Poza układem do pomiaru napięcia przekładnika może być skonfigurowany jako dzielnik rezystorowy lub jego część, co daje opcje podłączenia na przykład fototranzystora (ot dla porównania wyników pomiarów własnych z miernikiem głównym).

    Do tego nowy układ pomiaru napięcia:

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Dodatkowo doszedł wykrywacz przejścia przez zero zbudowany na wzmacniaczu operacyjnym. Wzmocnienie układu wynosi około ~0,0028 co daje napięcie wyjściowe w granicach 0,6-2,6V. A wykrywacz przejścia przez zero zdejmuje z MCU konieczność dbania o szczegóły jak znajdywanie miejsca początku pomiaru poprzez analizę wartości odczytów ADC, ot aktualnie mierzy parametry "od przerwania do przerwania". Plus małe zabezpieczenie w postaci warystora na wejściu.

    Aktualnie transciver RS485 da się pominąć instalując dwa rezystory na dolnej stronie płytki co udostępnia standardowy port szeregowy na złączu komunikacyjnym, można podłączyć bluetooth albo moduł GSM.

    Doszło także złącze I2C dedykowane wyświetlaczowi, konkretnie czymkolwiek na UC1601. Co przy daje opcje zrobienia chcociazby monitora do zasilacza awaryjnego (ale to w osobnym poście).

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Czy po prostu wyświetlania aktualnego stanu "liczników licznika". Także udało się poprawić dokładność pomiaru i naprawić to co było źle zaprojektowane w oryginale bez znacznych zmian w projekcie.

    Cool? Ranking DIY
    About Author
    Sareph
    Level 24  
    Offline 
    Sareph wrote 620 posts with rating 337, helped 65 times. Been with us since 2004 year.
  • phoenixcontact
  • #2
    Pawel1812
    Level 26  
    A nie lepiej kupić pierwszy lepszy licznik Modbus u Chińczyka i się bezpośrednio połączyć? Izolacja galwaniczna jest, odczyt parametrów, instrukcja.
  • phoenixcontact
  • #3
    Sareph
    Level 24  
    Nie. Nie mogę wpiąć czegoś z protokołem modbusa do tej sieci która już istnieje. Czyli musiałbym i tam zrobić jakiś konwerter który odczyta dane z takiego licznika i pogada z istniejącą siecią. A skoro i tak muszę mieć do tego dodatkowe urządzenie to równie dobrze samo może dokonać pomiarów. A jakby nie błąd w projekcie to byłby bezprzewodowy.

    Poza tym, przy obecnym układzie w rozdzielnicy nie mogę wpiąć licznika nie-na-(nieinwazyjnych)-przekładnikach-prądowych, bo musiało by być ich pięć. ;)

    Dodatek: Ale izolacja galwaniczna to tu jest, przekładniki tak z zasady mają, a od strony pomiaru napięcia jest (chwilowo) transoptor. ;)
  • #4
    Hetii
    Level 16  
    Gratuluję wykonania projektu i mam takie oto pytanie odnośnie transformatora CT.
    Jaki minimalny prąd jest wstanie wskazać?

    Jakiego rodzaju (przekładni) wypadało by zamówić jeżeli chciałbym wykorzystać go w roli pomiaru prądu dla przewodu ochronnego, czyli takie zabezpieczenie RCD, powiedzmy na 30mA?

    Pozdrawiam.
  • #5
    Sareph
    Level 24  
    Hetii wrote:
    Jaki minimalny prąd jest wstanie wskazać?

    Doskonałe pytanie, bo tego akurat nie sprawdzałem. Ale - jest mało stabilny poniżej około 3VA czyli 13mA. Także nie bardzo chce pokazywać 0, przy braku obciążenia kręci się gdzieś < 3VA. Ale - to wynika z tego, że program sam usiłuje na bieżąco określić gdzie właściwie jest to zero. Jakby było idealnie to byłoby na 1/2 napięcia zasilania (2048), a że rezystory idealne nie są to no, trzeba kompensować. Ale akurat w tym zastosowaniu to "mi to lotto".
    Gdyby mnie nie interesowało to w której połówce jest aktualnie przebieg, i nie było by biasu na połowie zasilania dla ADC to by ten problem nie istniał, poza tym...

    Hetii wrote:
    Jakiego rodzaju (przekładni) wypadało by zamówić jeżeli chciałbym wykorzystać go w roli pomiaru prądu dla przewodu ochronnego, czyli takie zabezpieczenie RCD, powiedzmy na 30mA?
    O takim maksymalnym mierzonym prądzie, jakiego się spodziewasz w przewodzie. Prądu przekładnika i tak nie mierzysz jako takiego a napięcie, które się generuje na rezystorze który go obciąża. W moim wypadku przekładniki nie mają rezystorów wbudowanych, same z siebie mają zakres 0-100A. Ale 100 Omowy rezystor limituje ich skuteczny zakres do (o ile pamięć mnie nie myli) ~25A. Także im większy rezystor dasz tym większe napięcie się będzie tworzyć/lepszy SNR. Ale ten rezystor tez musi się zmieścić w tym do czego zaprojektowany jest sam przekładnik.

    Choć wydaje mi się, że jak zabezpieczenie to nie zużyciem ADC a jakiejś formy komparatora.
  • #6
    Sareph
    Level 24  
    Wersja numer dwa

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Wymiary i generalnie projekt identyczny z pierwsza wersja. Różnice w szczegółach. Si4455 ma teraz swój kryształ, dzięki czemu w ogóle działa. I całkiem dobrze działa bez anten, a po dodaniu "bacika", spokojnie się widzą przez 6 pięter. Poza tym inny układ zasilania, bazujący na MCP16301, inny układ pomiaru i wejść analogowych.
    Tutaj ciekawostka, przy montażu pierwszego egzemplarza jakimś cudem udało się mi odwrócić o 90 stopni cewkę tegoż zasilacza, to spowodowało zwarcie pól cewki ze sobą. Spodziewał bym się w takiej sytuacji braku działania całego układu zasilania. Okazało się jednak, że układ z takim "kosmicznym" błędem instalacji cewki - działa. Nie tak jak powinien, bo przy testach układu radia wszystko się resetowało z powodu nagłego wzrostu poboru prądu przez układ radia, co powodowało ogólny spadek napięcia i w konsekwencji reset. Tym niemniej, gdyby tak błędnie zmontowany układ nie miał radia/nic nie nadawał - działał poprawnie, co w sumie było zaskakujące.

    Jak wspomniane w poście poniżej, układ z uwagi na zasadę wykrywania "zera" jest nieco niestabilny przy niskim prądzie. Idealnie byłoby gdyby do każdego przekładnika był podłaczony różnicowy ADC, załatwiło by problem. STM32F0xx niestety różnicowych ADC nie mają, ale w sumie... zawsze można sobie zrobić pseudo-różnicowy ADC, no po paru zmianach. Zamiast osobnego dzielnika rezystorowego dla każdego kanału CT i napięcia generującego napięcie odniesienia, zastosowałem tylko jedno źródło takie napięcia. To napięcie doprowadzone jest bezpośrednio do jednego kanału ADC, i tak odejmując jego wartość od wyniku napięcia na przekładnikach mamy jako taki różnicowy ADC. Acz nie idealny bo zawsze to jakieś przesuniecie w czasie dla pomiaru napięcia odniesienia i właściwego z CT, ale w sumie każdy kanał sprawdzany jest z częstotliwością około 11kHz, co dla 50Hz przebiegów nie powinno być jakimś wielkim problemem. I jak się okazało - nie jest, tak zrobiony układ jest dokładny w granicach 1LSB. Co dla zakresu 0-21A daje rozdzielczość pomiaru prądu na poziomie 100mA/LSB (2,4W). Ale z uwagi na spory oversampling praktyczna rozdzielczość wynosi około 0,3W, a różnica między pomiarem dokonanym przez ten układ a licznikiem energii nie przekracza 0,4%.

    Sama cześć analogowa dla przekładników aktualnie wygląda tak:

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Poza układem do pomiaru napięcia przekładnika może być skonfigurowany jako dzielnik rezystorowy lub jego część, co daje opcje podłączenia na przykład fototranzystora (ot dla porównania wyników pomiarów własnych z miernikiem głównym).

    Do tego nowy układ pomiaru napięcia:

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Dodatkowo doszedł wykrywacz przejścia przez zero zbudowany na wzmacniaczu operacyjnym. Wzmocnienie układu wynosi około ~0,0028 co daje napięcie wyjściowe w granicach 0,6-2,6V. A wykrywacz przejścia przez zero zdejmuje z MCU konieczność dbania o szczegóły jak znajdywanie miejsca początku pomiaru poprzez analizę wartości odczytów ADC, ot aktualnie mierzy parametry "od przerwania do przerwania". Plus małe zabezpieczenie w postaci warystora na wejściu.

    Aktualnie transciver RS485 da się pominąć instalując dwa rezystory na dolnej stronie płytki co udostępnia standardowy port szeregowy na złączu komunikacyjnym, można podłączyć bluetooth albo moduł GSM.

    Doszło także złącze I2C dedykowane wyświetlaczowi, konkretnie czymkolwiek na UC1601. Co przy daje opcje zrobienia chcociazby monitora do zasilacza awaryjnego (ale to w osobnym poście).

    Kolejny DIY watomierz/miernik energii elektrycznej z RS485

    Czy po prostu wyświetlania aktualnego stanu "liczników licznika". Także udało się poprawić dokładność pomiaru i naprawić to co było źle zaprojektowane w oryginale bez znacznych zmian w projekcie.