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

Wielokanałowy (od 1 do 3) kontroler temperatury Pt100 z RS-485

paluszasty 25 Dec 2018 14:54 4848 11
Automation24
  • Wielokanałowy (od 1 do 3) kontroler temperatury Pt100 z RS-485
    Witam wszystkich kolegów.
    Na samym początku życzę wszystkim wesołych świąt i wielu interesujących pomysłów na nowe konstrukcje.

    Chciał bym wam przedstawić konstrukcje swojego wielokanałowego kontrolera temperatury współpracującego z czujnikami Pt100. Zastanawiałem się czy pewno pokazać tą konstrukcję bo niestety okazało się że ma drobny błąd. Trzeba było dodać jeden układ jako "dead bug" (lub jak mawia mój kolega "na martwego zwierza"). Ale zdecydowałem się z dwóch powodów:
    -takie błędy się zdarzają nawet w profesjonalnych rozwiązaniach (chyba komputery ZX-Spectrum były tak łatane)
    -obecnie znaczną część czasu przebywam ze Francji i w zasadzie następna szansa poprawy projektu i jego prezentacji była by w sierpniu.
    Mam nadzieje ze będziecie wyrozumiali.

    A teraz bardziej do rzeczy. Układ powstał jako kontroler do:
    -rejestrator temperatury w piecu laboratoryjnym
    -akwarium kolegi (będzie to jeszcze rozwijane)
    -wędzarni
    -temperatury w przedsionku.
    -kurnika kolegi

    Do układu można podłączyć od 1 do 3 czujników Pt100 w konfiguracji 4 przewodowej. Każdy czujnik jest całkowicie niezależny i posiada własny dedykowany przetwornik analogowo-cyfrowy MAX31865.

    Możliwości układu to:
    -pomiar 3 temperatur
    -kontrola stanu 4 przekaźników w zależności od temperatur lub godziny.
    (tutaj żeby wybrać jakie mają być zależności muszę zmieniać kod, zrobienie tego uniwersalnie z menue przekracza moje zdolności programistyczne)
    -wysyłanie danych o temperaturze po RS485
    -wysyłanie danych po USB
    -kontrola stanu 8 wyjść otwarty-kolektor

    Układ składa się z trzech dwustronnych płytek drukowanych o wymiarach dokładnie 100x100 (jest limit wymiarów dla tanich płytek z chin).
    Są to następujące moduły:
    1) "płyta główna" z przetwornikami i uC
    2) wyświetlacz z klawiaturą
    3)płyta zasilająca i wykonawcza.

    Teraz opis każdej z płytek:
    1) "płyta główna" z przetwornikami i uC
    W jej skład wchodzi:

    - uC ATxmega serii A4U (16/32/64/128) i chyba nie trzeba wyjaśniać co on robi, ale dla formalności obsługuje on komunikacje SPI z przetwornikami A/D, kontroluje wyświetlacz i klawiaturę, wysyła i odbiera dane po RS485. Przewidziana jest również opcja USB i wyprowadzone są linie TXD/RXD interfejsu RS485

    -zegar RTC DS3232M

    -Pretworniki A/D. Jak już wspomniałem każdy kanał ma swój niezależny układ MAX31865 dedykowany do czujników rezystencjach (Pt100, Pt1000, Ni1000 itp) Każdy kanał ma swoje niezależne izolowane zasilanie za pomocą przetwornicy DC/DC 1W (AM1S-0505SZ) które następnie jest stabilizowane za pomocą dwóch (osobno zasilanie części cyfrowej i analogowej) układów TC1015-3.3V. Może takie rozwiązanie zasilania to lekka przesada, ale te układy są bardzo tanie i zajmują bardzo mało miejsca na PCB. Układ MAX31865 wymaga też zastosowania rezystora wzorcowego. Tutaj zdecydowałem się na zastosowania rezystora serii PTF-56 Vishay o bardzo małym dryfcie temperaturowym.

    -Każdy kanał ma również izolowaną komunikacje SPI zrealizowaną za pomocą układu ADuM152N0. Tu pojawił się problem. Po za liniami CS wszystkie linie SPI połączone są równolegle. Niestety powoduje to problem jeśli pracuje więcej niż 1 kanał. Problem polega na tym że ciężko jest sprowadzić stan linii MISO do "0". Problem ten rozwiązałem przecinając każda z linii MISO zaraz za układem ADuM (po stronie uC) i dodając prostu układ na 7400 rozwiązujący ten problem. Rozwiązanie polega na tym że żeby sygnał MISO z układu ADuM "przechodził" dalej na uC wybrana linia CS musi być w stanie niskim. Problem ten będzie rozwiązany w następnej wersji oczywiście ale muszę zamówić nowe płytki. Miejsce na 7400 się znajdzie.

    -MAX3485 do komunikacji RS485

    Schemat:
    Pt100.pdf Download (154.25 kB)




    2) wyświetlacz z klawiaturą
    Na płytce znajdują się:
    -wyświetlacz w standardzie ST7565R
    -8 przycisków
    -układ debouncer MAX6818
    -złącza pozwalające na dołączenie zewnętrznych przycisków w stosunku do tych które są używane na płytce (mogą pracować równolegle).
    -DIP-Switch do wyboru które przyciski będą podłączone do wejść uC

    Schemat:
    LCD_100x..0.pdf Download (45.31 kB)

    3) płyta zasilająca i wykonawcza.
    -przetwornica AC/DC ( AC 100-230V->5V DC) TracoPower TMLM 04105
    -4 przekaźniki
    -Układ MCP23017
    -2 układu ULN2803
    -złącze z wyprowadzonymi 8 liniami "wysokoprądowymi" z ULN2803A

    Przekaźniki kontrolowane są przez układ MCP23017 po protokole I2C.

    Schemat:
    Zasila..pdf Download (43.55 kB)


    Całego kodu w obecnej chwili nie przedstawie, natomiast najistotniejsza wg mnie część to ta związana z obsługą MAX31865 i tutaj jest istotny kawałek. Może nie jest to wersja optymalna bo używam typów zmiennoprzecinkowych w jednym miejscu ale mogłem sobie na to pozwolić. Co ważne w pliku konfiguracyjnym łatwo zmienić dane dotyczące rezystencji czujnika oraz rezystencji wzorca. Jak dopracuje kod na tyle żeby go upublicznić to wtedy może go zamieszczę. Jednak nie wiem czy będzie miało to duży sens.

    MAX31865_SPI.h
    Code: c
    Log in, to see the code


    MAX31865_SPI.c
    Code: c
    Log in, to see the code


    Kod jest może trochę skomplikowany, natomiast wynika to z tego że są dwie opcje kompilacji. Jedna dla zakresu -50 do 150degC gdzie można użyć jednego równanie 2 stopnia do dokładnego wyliczenia temperatury (z rozdzielczością na jaką pozwala MAX31865). Dla szerokiego zakresu temperatur trzeba by użyć równania wyższego stopnia, lub zastosować funkcje sklejaną tak jak ja tutaj.

    Zdjęcia układu w wersji 2 kanałowej (zabrakło mi złącz M8) :
    a) "Płyta główna"

    Wielokanałowy (od 1 do 3) kontroler temperatury Pt100 z RS-485

    b) Zasilacz i moduł wykonawczy

    Wielokanałowy (od 1 do 3) kontroler temperatury Pt100 z RS-485

    c) Wyświetlacz i klawiatura

    Wielokanałowy (od 1 do 3) kontroler temperatury Pt100 z RS-485

    d) Po złożeniu na kanapkę
    Wielokanałowy (od 1 do 3) kontroler temperatury Pt100 z RS-485



    Jeśli chodzi o działanie układu to jestem zadowolony. Układ pracuje stabilnie. Jeśli podłącze zewnętrznie rezystor 100ohm 0.01% 5ppm (ptf56) to wskazywana jest temperatura 0.04degC (czasem przeskakuje do 0.07degC, czyli o 1 LSB). Współpraca z prawdziwym czujnikiem tez przebiega bez problemu.

    Cool? Ranking DIY
    About Author
    paluszasty
    Level 25  
    Offline 
    Has specialization in: chemia(profesjonalnie)
    paluszasty wrote 1106 posts with rating 255, helped 56 times. Live in city Łódź. Been with us since 2006 year.
  • Automation24
  • #2
    LChucki
    Level 31  
    Widzę USB. Użyłeś CDC-AVR lub czegoś podobnego? Nie lepiej było wybrać AVR z wbudowanym USB?
    Buforujesz wyświetlacz w RAM uC?
  • #3
    tmf
    Moderator of Microcontroller designs
    Bardzo profesjonalnie zrobiona konstrukcja. Z ciekawości - gdzie mierzysz temperatury, że separujesz galwanicznie każdy kanał?
    paluszasty wrote:
    Każdy kanał ma również izolowaną komunikacje SPI zrealizowaną za pomocą układu ADuM152N0. Tu pojawił się problem. Po za liniami CS wszystkie linie SPI połączone są równolegle. Niestety powoduje to problem jeśli pracuje więcej niż 1 kanał. Problem polega na tym że ciężko jest sprowadzić stan linii MISO do "0". Problem ten rozwiązałem przecinając każda z linii MISO zaraz za układem ADuM (po stronie uC) i dodając prostu układ na 7400 rozwiązujący ten problem. Rozwiązanie polega na tym że żeby sygnał MISO z układu ADuM "przechodził" dalej na uC wybrana linia CS musi być w stanie niskim. Problem ten będzie rozwiązany w następnej wersji oczywiście ale muszę zamówić nowe płytki. Miejsce na 7400 się znajdzie.

    Jak rozumiem, problem polega na tym, że wyjścia tego układu nie są trójstanowe? Może zamiast 7400, lepiej dać po prostu 74xxx125, sterowany sygnałem CS. Wtedy dodasz wyjście trójstanowe i będziesz mógł połączyć razem MISO.
    Skoro będziesz zamawiał nową płytkę to rozważ jeszcze inne poprawki:
    - sygnał RE/DE dla transceivera ściągnij rezystorem do masy - w stanie resetu, stan tego sygnału jest nieustalony, co może przypadkowo aktywować nadajnik. Problem niewielki, jeśli masz dobry protokół transmisji RS485, niemniej koszt rezystora jeszcze mniejszy :)
    - deobuncing można zrobić programowo, więc MAX6818 jest niepotrzebny. Można go użyć, ale w sumie po co.
    - sterowanie przekaźnikami, przez dodatkowy układ w sumie też niepotrzebne. Masz wystarczająco pinów IO, a jeśli potrzebujesz więcej to użyj np. XMEGA256A3BU - masz oprócz dodatkowych pinów także wbudowany RTC z podtrzymywaniem, więc odpada konieczność użycia zewnętrznego RTC.

    LChucki wrote:
    Widzę USB. Użyłeś CDC-AVR lub czegoś podobnego? Nie lepiej było wybrać AVR z wbudowanym USB?

    XMEGA A4U ma sprzętowe USB. Na schemacie widać, że autor je wykorzystał.
  • Automation24
  • #4
    LChucki
    Level 31  
    tmf wrote:
    Masz wystarczająco pinów IO, a jeśli potrzebujesz więcej to użyj np. XMEGA256A3BU - masz oprócz dodatkowych pinów także wbudowany RTC z podtrzymywaniem, więc odpada konieczność użycia zewnętrznego RTC.

    XMEGA256A3BU w TME kosztuje 26..30zł netto
    STM32F103RCT6 24zł netto
    Nie będę porównywał tych procesorów, bo jak może wypaść porównanie Trabanta do Mercedesa? Natomiast to, że Mercedes jest tańszy od Trabanta jest ciekawe, prawda?

    Dodano po 1 [minuty]:

    tmf wrote:
    XMEGA A4U ma sprzętowe USB. Na schemacie widać, że autor je wykorzystał.

    Pomroczność jasna :-) Moje oczy widziały Mega324 a nie Xmega32U4 :-) A ja się zastanawiałem czemu Megę zasila z 3,3V.
  • #5
    tmf
    Moderator of Microcontroller designs
    LChucki wrote:
    tmf napisał:
    Masz wystarczająco pinów IO, a jeśli potrzebujesz więcej to użyj np. XMEGA256A3BU - masz oprócz dodatkowych pinów także wbudowany RTC z podtrzymywaniem, więc odpada konieczność użycia zewnętrznego RTC.


    XMEGA256A3BU w TME kosztuje 26..30zł netto
    STM32F103RCT6 24zł netto
    Nie będę porównywał tych procesorów, bo jak może wypaść porównanie Trabanta do Mercedesa? Natomiast to, że Mercedes jest tańszy od Trabanta jest ciekawe, prawda?


    No i co z tego? Wg ciebie autor ma przepisać cały kod, żeby zaoszczędzić parę zł? I co mu ułatwi użycie tego STMa? Napisałem o tym a nie innym procesorze, bo:
    - autor użył procesora z którego kod można przenieść bez najmniejszych modyfikacji na zaproponowany przeze mnie,
    - A3BU ma RTC z osobną domeną zasilania dla podtrzymania RTC, co umożliwi wyeliminowanie jednego, nietaniego, układu. Zaproponowany przez ciebie STM32F103RCT6 najwyraźniej osobnej domeny dla RTC nie ma, więc po podsumowaniu ani nie będzie wygodniejszy, ani nawet tańszy.
    Zastanawiam się, z czym niektórym osobom się kojarzy skrót STM lub ARM, bo najwyraźniej jest to jakiś uniwersalny fetysz.

    Marek_Skalski: Przepraszam, ale Kolega się myli.
    Każdy uC z rodziny STM32, w obudowie posiadającej przynajmniej 32 wyprowadzenia, posiada osobne zasilanie dla podtrzymania bateryjnego. Dotyczy to LSE, RTC i rejestrów pamięci RAM od 32x32 bity do 1024x32 bity.
  • #6
    Darek0026
    Level 28  
    PCB bardzo mi przypomina te znane ze sterowników do bram przesuwnych i przemysłowych
    firmy np. GFA, CAME, FAAC ze względu na rodzaj złączek wygląd przekaźników i chociaż złącza
    micro-match. Konstrukcja mi się bardzo podoba ;)
  • #7
    simw
    Level 26  
    tmf wrote:
    Marek_Skalski: Przepraszam, ale Kolega się myli.
    Każdy uC z rodziny STM32, w obudowie posiadającej przynajmniej 32 wyprowadzenia, posiada osobne zasilanie dla podtrzymania bateryjnego. Dotyczy to LSE, RTC i rejestrów pamięci RAM od 32x32 bity do 1024x32 bity.

    Nie każdy. Rodzina F030 nie ma oddzielnego zasilania do RTC, niezależnie od wersji "nóżkowej".
    Co nie zmienia faktu, że akurat STM32F103RCT6 ma takowe.
  • #8
    paluszasty
    Level 25  
    Witam wszystkich kolegów i przepraszam jako autor tematu że nie odpisałem wcześniej ale świąteczno-rodzinne obowiązki uniemożliwiły mi szybkie odpisanie.

    Kolego LChucki:
    Wszystkie ATxmegi z literką U na końcu (A1U,A3U,A4U itd) mają obsługę USB. Miejsce na złącze jest ale nie było jeszcze używane. Zresztą na pytanei to odpowiedział już TMF.

    Wyświetlacz jest buforowany w RAM uC. Funkcje obsługujące wyświetlacz zaczerpnięte są z książki "AVR układy peryferyjne" autorstwa naszego kolegi z forum TMF. I tu serdecznie koledze dziękuje za napisanie tej (i innych książek) o uC.

    Kolego TMF. Dziękuje za miłe słowa.

    Jeśli chodzi o to co mierze, to raczej nic specjalnego, po za bardziej domowymi zastosowaniami ma być to loger temperatury do pieca laboratoryjnego (z zawodu jestem chemikiem) który sam w sobie takiej możliwości nie ma. Ponieważ są w nim dodatkowe kanały do wprowadzenia czegoś z zewnątrz to wolałem takie rozwiązanie niż modyfikowanie oryginalnego (słabego) sterownika. Separacja galwaniczna każdego kanału wynika raczej z tego że chciałem uniknąć problemu pętli mas na ekranach itp. Nie jestem 100% pewien czy takie rozwiązanie jest konieczne. Możliwe ze układ działał by tak samo dobrze bez tej separacji.

    Jeśli chodzi o problem z linią MISO to tak wygląda na to że ukłąd ADUM nie ma wyjść trój-stanowych i stąd cały problem. 74xxx125 to bardzo dobry pomysł. Niestety nie posiadałem go w swoich zapasach a 7400 tak. Natomiast w kolejnej wersji PCB prawdopodobnie skorzystam z Twojego pomysłu.

    Pomysł z RE/DE bardzo dobry na pewno zastosuje.

    Co do układu MAX6818 to zgadzam się że problem drgań styków można rozwiązać programowo. Myślałem o tym, jednam wolałem zastosować ten układ. To raczej kwestia gustu. Jest też kilka plusów:
    -układ ma zabezpieczenie przed ESD i napięciem do ±25V, ja mam wszystkie linie wyprowadzone na boczne złącza i przewiduje dodanie zewnętrznych przełączników na kablach. Tutaj oczywiście można zastosować inny układ ochrony przed przepięciami.
    -Mam dostęp również do wyjść "bez śmieci" pochodzących z drgań styków, nie wiem czy to kiedyś wykorzystam, ale taka opcja jest.

    Jeśli chodzi o zewnętrzny układ do obsługi przekaźników, to tu się nei zgodzę do końca. W zasadzie wszystkie piny w uC są wykorzystane. W obecnych zastosowaniach 8 przycisków nie ma zastosowania ale wolałem zostawić sobie furtkę. Oczywiście zastosowania większego uC A3 jest równie dobrym podejściem do rozwiązania problemu.

    Podobnie z zegarem RTC lubię układ DS3231 i pokrewne. Maja tez lepsza stabilność niż kwarce zegarkowe. Ale jeśli miało by być to urządzenie komercyjne to fakt cena układu stanowiła by motywacje do zastosowania RTC w uC.

    Jeśli chodzi o to czy można zastosować jakiegoś ARM (STM itd) oczywiście można. Czemu nie. To w zasadzie kwestia gustu i doświadczenia. Używam układów AVR a w zasadzie ostatnio tylko xmeg i mam z nimi doświadczenie. Możliwość przeniesienia kodu z moich innych projektów też była ważna. Z ARM serii STM32xxxxxx nie mam jak do tej pory doświadczenia.

    Kolego Darek0026
    PCB zostało wykonane w JLCPCB. O firmach o których mówisz nawet nie słyszałem. Instalowałem tylko raz koledze w sierpniu silnik do bramy przesuwnej i akurat tamten miał zupełnie inne złącza.

    Złącza micro-match to fajna alternatywa dla typowych złącz IDC w rasterze 2.54, szczególnie atrakcyjne są ich wymiary. Problemem jest cena praski, ale daje się te złącza zacisnąć bez niej np:
    - ściskając w imadle na płaskowniku z otworem
    - wkładając złącze do gniazda, gniazdo w płytkę i dociskając czymś od góry.
    Trzeba tylko uważać bo złącza są delikatne.
    Nie zastosował bym tez tych złącz do przewodów które mają być często odpinane (np programator), zdarzyło mi się takie złącze już uszkodzić - dokładniej ułamałem bolec który umożliwia tylko jedną orientacje złącza.
  • #9
    tmf
    Moderator of Microcontroller designs
    Marek mnie naprostował, moja wina. Zaglądnąłem do dokumentacji układu, po pobieżnym przeglądzie nie zauważyłem, że jest tak jak piszesz.
    Co do układu - chyba skorzystam z rozwiązania - muszę sobie zbudować sterownik do opiekacza, do "wypiekania" płytek lutowanych pastą. Zwykle robię to na czuja, ręcznie, korzystając z termopary w mierniku uniwersalnym. Niestety ostatnio za szybko grzałem i kilka układów mi "wstało". Układ autora rozwiązałby problem.
  • #10
    elektronik999
    Level 26  
    A jak wygląda sprawa z PID i VID urządzenia USB?
  • #12
    paluszasty
    Level 25  
    A zapomniałem. Powstała też wcześniejsza wersja (2.0).

    Wersja ta jest jednokanałowa i na ATmega328P (lub 88P, 168P itp.). Są też tylko 2 przekaźniki. Brak RTC, wyświetlacza,przycisków. Komunikacją możliwa tylko za pomocą RS-485. Za pomocą DIPSwitch można wybrać adres urządzenia. Płytki mają wymiary trochę mniejsze niż 50x100.

    Może komuś taka wersja się przyda.
    Schemat w pdf-ie
    Oraz cały spakowany projekt w KiCad

    Jak znajdę to wstawię zdjęcia.