Elektroda.pl
Elektroda.pl
X
PLC Fatek
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie).

adambehnke 05 Lut 2012 20:43 15652 49
  • #31 05 Lut 2012 20:43
    adambehnke
    Poziom 24  

    Postanowiłem dołożyć do mojego układu czujnik zaniku fazy aby w razie zaniku napięcia sieci sterownik mógł zadbać o awaryjne zamknięcie przepustnic itp.
    Oczywiście cały system ogrzewania wspiera zasilacz awaryjny (starcza na jakieś 1.5h).

    Poniżej zamieszczam schemat układu który powinien spełnić swoje zadanie. Proszę o opinię na jego temat.

    [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie).

  • Semicon
  • Pomocny post
    #32 05 Lut 2012 20:54
    SylwekK
    Poziom 29  

    A nie było by bezpieczniej wstawić rezystor przed diodę zenera. Wiem, że prąd tam nieduży bo kondensator na większy nie pozwoli mimo to byłbym za ochroną diody zenera.
    W moim rozwiązaniu badania zaniku fazy (przy awaryjnym zasilaniu mieszkania) zastosowałem podobne rozwiązanie tyle, że na przekaźniku zamiast transoptora.
    Półtora roku chodzi bez problemu.

    [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie).

  • #33 05 Lut 2012 21:16
    adambehnke
    Poziom 24  

    A no bezpieczniej :) . Koniecznie chcę użyć transoptora gdyż mam "fobię" przekaźnikową .
    A i tak stopnie końcowe sterowania pompami itd. muszę zrealizować na przekaźnikach.

    Czyli jak miałaby wyglądać po zmianach moja wersja? Czy wystarczy że dołożę rezystor pomiędzy mostek a zenerkę? I jakiej wartości miałby być?

  • Semicon
  • #34 05 Lut 2012 21:17
    tmf
    Moderator Mikrokontrolery Projektowanie

    Jeśli możesz sobie pozwolić na połączenie GND z N lub L sieci to najprościej zrezygnować z optoizolacji i połączyć L do wejścia AVR przez rezystor (najlepiej dwa) rzędu 1-2MOm. Jeśli zależy ci na optoizolacji to zastosuj transoptor z dwoma antyrównoległymi diodami, żeby się wzajemnie ochraniały i w szereg rezystor. Dla prądów diody takiego LTV814 rzędu 1mA możesz sobie kondensator odpuścić i cały układ zasilić poprzez rezystor, 0,25W wystarczy. Odpadną elementy typu mostek i cała reszta drobnicy.

  • #35 05 Lut 2012 21:22
    adambehnke
    Poziom 24  

    Ale jestem "durny". Przecież mogę wykorzystać układ jaki stosowałem w detekcji zera sieci gdzie stosowałem PC814 :) . Przepraszam za durne pytania jakie zadaję ale czasami myślenie widać opornie mi przychodzi...
    A co do łączenia się z N lub L sieci to nie chcę tego robić. Zależy mi na maksymalnej optoizolacji.


    Po zastosowaniu takiego rozwiązania układ "troszkę" się uprości w porównaniu do poprzedniej proponowanej wersji.
    Dodatkowo mogę podłączyć to pod któryś INT procesora i w prosty sposób wykrywać w przerwaniu zanik fazy. A i dodatkowo może mi to posłużyć jako sygnał zegarowy do wykonywania jakichś funkcji. W końcu otrzymuję w ten sposób dość precyzyjne 100Hz.

    [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie).

  • #36 05 Lut 2012 21:58
    tmf
    Moderator Mikrokontrolery Projektowanie

    Jak na wyjściu dasz kondensator tworząc filtr RC to zanik fazy sprawdzisz po prostu poprzez zbadanie stanu pinu IO. Ale wykorzystanie tego jako wzorzec czasu też jest dobrym pomysłem. Podepnij to pod wejście zegarowe timera, będzie zliczał cykle, można to wykorzystać jako RTC bez dodatkowych elementów typu kwarc.

  • #37 07 Lut 2012 19:56
    adambehnke
    Poziom 24  

    Poniżej wklejam aktualny schemat.
    Nie wszystkie piny procesora są podłączone. Podyktowane jest to tym iż prawdopodobnie i tak część z nich zostanie inaczej podłączona w celu uproszczenia PCB kiedy zacznę rozmieszczać elementy.
    Nie za bardzo mam pomysł na izolację pinów sterujących przepustnicą.
    Problem w tym iż kabel od sterownika do przepustnicy będzie miał dobre 5m długości i będzie przebiegał przy pompach i grzałkach. Nie chcę puszczać linii bezpośrednio z procesora do przepustnicy gdyż obawiam się że jest duże prawdopodobieństwo iż zadziałają jak anteny i będą zbierać zakłócenia . Wolałbym je jakoś odizolować np. optycznie.
    W sumie tak też zrobiłem ale wolę aby ocenił to ktoś bardziej zorientowany w temacie niż ja.

  • #39 10 Lut 2012 10:51
    tmf
    Moderator Mikrokontrolery Projektowanie

    To po kolei:
    1. Zasilanie. Widzę, że masz prostownik jednopołówkowy, dlaczego? Dla takiego kondensator na wejściu musi być 2*większy niź dla Graetza. W dodatku 47uF to zdecydowanie za mało. Policz prąd pobierany przez układ, ale na ślepo strzelałbym, że koło 2200uF jest potrzebny i nie na 10V tylko co najmniej na 25. Rozważ też użycie prostej przetwornicy impulsowej zamiast grzejnika 7805.
    2. RTC. Można zastosować baterię, można pomyśleć nad supercap doładowywanym z zasilania. To tylko sugestia.
    3. Klawiatura. Wywal te kondziole. Raz, że debouncing można zrobić programowo, dwa, że zwieranie pojemności przyciskiem jest słabym pomysłem. Generuje to spore zakłócenia bo w krótkim czasie wyzwalasz sporą energię kondensatora. Jeśli chcesz je mieć to zrób filtry RC jak należy.
    4. Co to jest IC1 i IC4? Jeśli to jakieś drivery to czy dla włączonych wszystkich przekaźników nie przekraczasz maksymalnego ich prądu liczonego na scalak, nie na pin? Wydaje mi się, że tak.
    5. Sterowanie MAX485. W stanie nieustalonym po resecie procesora pin DR/RE jest w stanie 1, co włącza nadajnik i blokuje całą transmisję po rs485. Rezystor powinien być nie do Vcc lecz do GND, dzięki temu będziesz miał włączony odbiornik, co nie wpłynie na transmisję.

  • #40 10 Lut 2012 18:54
    adambehnke
    Poziom 24  

    Dziekuję za uwagi.
    1. Co do zasilania to rzeczywiście nie wprowadziłem zmiany z 10 na 16-25v ale i tak by tam trafiły 16V gdyż mam sporo takich kondensatorów w takich samych obudowach ale na napięcia 10V i 16V.
    Dioda w zasilaniu jest montowana tylko w fazie testów i zabezpiecza przed zamianą biegunów w razie pomyłki. Zasilam układ stabilizowanym napięciem 12V/4A.

    2. RTC - mam zastosowane baterię CR2032 ale chętnie wysłucham uwag na temat alternatywnej możliwości awaryjnego zasilania , gdyż osobiście nie lubię baterii na moich PCB. Czytałem że można zastosować kondensator 0.47F ale gdzie ja upchnę na PCB takiego "lapsa" ? Chyba prościej pozostawić baterię i dać ewentualnie test stanu baterii poprzez ADC. Nie wiem czy to potrzebne gdyż na takiej bateryjce PCF i tak będzie chodził wieki a samo testowanie stanu przez ADC także powolutku wypompuję mi bateryjkę. Chyba że się mylę..

    3. Kondensatory wyrzucone. Debouncing rzeczywiście będę realizował programowo.

    4. Drivery to ULN2803. Używałem ich wcześniej z tymi przekaźnikami i nie miałem problemów. Fakt że nie sprawdziłem jak bardzo można je obciążać. Zaraz sprawdzę.

    5. Moja pomyłka . To niedopatrzenie by się w moim przypadku na 100% zemściło. Zresztą akurat o ten moduł obawiam się najbardziej.
    Identyczne rozwiązanie co do RS485 mam zamiar zastosować we wszystkich innych modułach jakie będą pracować w mojej sieci więc zrobię wszystko aby były tak zrealizowane aby pracowały bez zastrzeżeń.


    Jeszcze mam pytanko na temat sterowania przepustnicą.
    Muszę wyprowadzić z procesora 4 linie (przepustnica odbiera jako ustawienia pozycji kod BCD 0-15 pozycji otwarcia) aby wysterować przepustnicę. Odległość na jaką będę je musiał wyprowadzić to kilka metrów( pewnie przekroczę 5) . I teraz pytanie jak je odizolować. Myślałem o optoizolacji i tak też zrobiłem ale nie do końca jest to prawdziwa optoizolacja gdyż zasilam transoptory i tak z tego samego źródła. Nie chcę ładować na PCB kolejnej przetwornicy. Chcę tylko zabezpieczyć piny procesora. Macie może koledzy jakąś alternatywę dla mojego chyba kiepskiego rozwiązania? A może nie ma potrzeby izolowania tych pinów?

    Drugie pytanie to czy jednak magistralę 1wire można by izolować optycznie za pomocą szybkich transoptorów? Wiem że może przesadzam ale linia będzie dośc długa a i cały sterownik jaki wykonam ma działać porządnie gdyż to już nie będzie zabawka tylko urządzenie które będzie sterować całym systemem ogrzewania i wentylacji .
    Nie może się po prostu zawieszać w przypadku zapchania przepustowości RS485 , nie może "się nic zjarać" w przypadku uszkodzenia DS-a (uszkodzenie czujnika, przewodu,zwarcie itd).
    A taka optoizolacja by mi to przykładowo dla linii 1wire wyeliminowała. Wiem że chcę zrobić armatę na muchy ale lepiej strzelić raz z armaty niż dać się "obsr.. " muchom :D

  • Pomocny post
    #41 12 Lut 2012 16:17
    danthe
    Poziom 29  

    Cytat:
    2. RTC - mam zastosowane baterię CR2032 ale chętnie wysłucham uwag na temat alternatywnej możliwości awaryjnego zasilania , gdyż osobiście nie lubię baterii na moich PCB. Czytałem że można zastosować kondensator 0.47F ale gdzie ja upchnę na PCB takiego "lapsa" ? Chyba prościej pozostawić baterię i dać ewentualnie test stanu baterii poprzez ADC. Nie wiem czy to potrzebne gdyż na takiej bateryjce PCF i tak będzie chodził wieki a samo testowanie stanu przez ADC także powolutku wypompuję mi bateryjkę. Chyba że się mylę..


    Kondensator 3F (tu przykład) ma wymiary 20,2 mm średnica, 6,5 mm wysokość. Gniazdko na baterię CR2032 - odpowiednio 22,5 mm i 8,9 mm. Jakoś wydaje mi się że GOLD CAP jest nieco mniejszy.

  • #42 13 Lut 2012 10:22
    tmf
    Moderator Mikrokontrolery Projektowanie

    ad 1. Ok, jeśli masz stabilizator przed to jest w porządku.
    ad 2. CuperCapy są małe, jak kolega wyżej napisał wyjdzie to mniejsze niż bateria. Potrzebujesz jeszcze diodę do doładowywania kondensatora.
    ad 3. Kondensatory mogą być, tylko nie rozładowywuj ich przez switcha. Albo tak jak piszesz po prostu je wyrzuć i zrób debouncing programowy.

    Co do optoizolacji - nie popadajmy w paranoję. Zwykły filtr RC + diody zabezpieczające są IMHO wystarczające. Tak samo nie ma sensu aż tak cudować z 1-wire.

  • #43 14 Lut 2012 22:16
    adambehnke
    Poziom 24  

    A więc tak:

    -Kondensatory usunięte (jak nie są wymagane to bez sensu je dawać)
    -Optoizolacja przepustnicy pozostawiona (wiem, wiem ale nic na to nie poradzę że mam paranoję)
    -Optoizolacja 1wire - odpuściłem ją sobie ale źle się z tym czuję :D


    Poniżej przedstawiam stan bieżący mojego układu.
    Obecnie pracuję nad panelem czołowym i obudową.
    Docelowo front będzie wykonany ze szkła (4mm) , sterowanie klawiaturką zrealizowane będzie za pomocą okręgu wykonanego z 6mm plexiglassu w którym zostaną do połowy nawiercone otwory od środka pod microswitche których ośki zostaną wklejone i tym samym otrzymamy coś na styl "joysticka". Srodkowy klawisz także zrealizuję w postaci małego kółka zamocowanego analogicznie jak reszta switchy.
    Boki i tył obudowy wykonam w całości z plexiglassu (nie cierpię tego materiału ale łatwo się go obrabia. Jedynie front będzie dość kosztowny ale mój szklarz już się do moich dziwnych pomysłów przyzwyczaił. A z kolei ja lubię wszystko co szklane i czego nie idzie tak szybko zarysować jak plexi.

    Cały czas jeszcze myślę czy nie zastosować większego LCD , ale wydaje mi się że tej powinien starczyć. Co prawda w poprzednim sterowniku używałem dwóch takich LCD które sterowałem dwoma liniami "E" , ale i tak całe ustawienia realizowałem na jednym wyświetlaczu a parametry ważniejsze wrzucałem na drugi. Troszkę także żałuję że nie wrzuciłem w układ także fotorezystora który by mi umożliwił automatyczne ściemnianie podświetlenia przy ciemności w pomieszczeniu. Ale trudno.
    Także troszkę mi się nie podoba rozdzielenie sterowania LCD na różne piny z różnych portów , ale spowodowane to jest tym iż na PCB bardziej mi pasowało takie poprowadzenie ścieżek.

    Zastanawiam się tylko nad portem G procesora. Czy te piny mogę sobie używać jak mi się podoba ? Z tego co pamiętam używałem już tych pinów jako I/O ale nie pamiętam na 100%.Może ktoś z kolegów mógłby się przyjrzeć jeszcze raz schematowi zanim popełnię wytrawienie PCB .

    [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie).

  • Pomocny post
    #44 19 Lut 2012 08:12
    RomanFilipecki
    Poziom 17  

    Głupia sprawa ale złącza śrubowe ARK doprowadzające zasilanie 230VAC powinny mieć raster 7,5 mm a nie 5,08, spójrz na odległości ścieżek po stronie sieciowej i DC oraz odległość N i L koło bezpiecznika

    Roman

  • #45 19 Lut 2012 10:34
    adambehnke
    Poziom 24  

    Co do złącz ARK to rzeczywiście odległości są małe ale spowodowane jest to tym iż mam cały karton tych złącz na stanie które zostały mi po modułach jakie kiedyś robiłem.
    Płytki już wytrawione i czekają na wiercenie. Proszę mi wierzyć ale na "żywo" odległości nie wyglądają na taki minimalne.
    Bardziej bałem się o ścieżki przy M128.
    Miałem też dylemat czy zastosować warystor ale wydał mi się przesadą.

    Na fotkach są także trzy małe płytki , jak zapewne zauważycie odpowiadają pinologią przekaźnikom .
    I rzeczywiście zostaną zastosowane jako "przekaźniki" , tyle że elementem wykonawczym będzie triak. Chciałem dla testu sprawdzić jak będzie działać sterowanie pompami poprzez optotriak-triak. Jak nie będzie działać poprawnie to wyciągnę taką płyteczkę i wlutuję przekaźnik. A jak będzie działać to zastosuję takie płytki zamiast większości przekaźników.
    Po prostu musiałem to sprawdzić a nie chciałem projektować na płytce głównej sterowania opartego na triakach gdyż w przypadku jakichś problemów całe PCB poszło by do kosza , a tak wlutuję przekaźnik i po sprawie. A nawet jak kiedyś uszkodził by się triak w takiej płytce to mogę najzwyczajniej w świecie wyciągnąć uszkodzony modulik i włożyć nowy. :D


    edit:

    Wytrawiłem płytki. Poniżej zamieszczam fotki :D .
    Mam spore problemy z tonerem drukarki. Poprzednio płytki jakie robiłem wychodziły (prawie idealnie) ale robiłem je na oryginalnym tonerze Samsung-a . Teraz zakupiłem toner w (nie będę ukrywał , niech będzie to przestrogą dla innych) w Olinex -ie za 170PLN i toner jest po prostu "gówniany". Mam spore problemy z przenoszeniem tonera na płytki. Jak już prawie go wtopię w miedź to po wytrawieniu okazuje się że poligony i ścieżki są podtrawione. Próbowałem już na różnym stopniu zaciemnienia ale to samo. Jak zużyję ten pseudo toner to już nigdy nie zakupię nieoryginalnego. Ale to tak na marginesie. Zresztą zobaczcie sami jak "pożarło" mi znowu poligony.

    [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie).






    Kolejne fotki z postępami przy tworzeniu frontu i klawiatury .Miało zostać użyte szkło lakierowane na czarno ale szklarz zwalił mnie z nóg ceną jaką podał za wycinanie otworów wiec użyłem 2mm aluminium :D

    [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie). [AVR][C] Projekt sterownika C.O. (koncepcja i wykonanie).

  • #46 11 Mar 2012 20:10
    adambehnke
    Poziom 24  

    Witam
    Właśnie zaczynam pisanie programu do sterownika. Jako że jest to jeden z moich pierwszych programów w C to już potrzebuję pomocy..

    Dodam że oczywiście nie chcę żadnych gotowców bo się w ten sposób niczego nie nauczę ale.


    Pierwszy problem związany jest z wykrywaniem zewnętrznych przerwań.
    Otóż pod piny obsługujące wykrywanie zewnętrznych przerwań INT4-INT7 mam podłączone transoptory które podają na piny procesora stan niski w momencie wykrycia zdarzenia. Oczywiście piny są zewnętrznie podciągnięte do VCC.
    Przerwanie ma zostać wykryte w momencie pojawienia się stanu niskiego na pinie , ale.. No właśnie jest "ale" jak tego dokonać. PRzekopywałem elektrodę i net w poszukiwaniu prostych przykładów ale albo przykłady te są pisane w sposób niezrozumiały dla mnie albo są to przerwania głównie od USART. A ja potrzebuję maksymalnie proste wykrycie przerwania. Po wykryciu ma wykonać się jakaś procedurka.
    Przekopywałem datasheet od atmega 128 i owszem widzę bity kontrolne i całą resztę ale jestem jeszcze zbyt ciemny.
    Mógłby mi ktoś z kolegów przybliżyć jak skonfigurować i wykrywać przerwanie np. dla INT7 ? W Bascomie to wszystko było proste jak "drut" a w C trzeba się nagimnastykować jak... :D

    Znalazłem taki fragmencik kodu (fakt że obsługujący impulsator) :

    Kod: c
    Zaloguj się, aby zobaczyć kod


    I takie rozwiązanie było by dla mnie proste i idealne ale.. nie wiem jak skonfigurować rejestr MCUCR i GICR w M128. Notę katalogową od procesora mam prawie rozszarpane.. i nic...

  • #47 11 Mar 2012 21:50
    tmf
    Moderator Mikrokontrolery Projektowanie

    Zobacz opis rejestrów EICRA i EICRB oraz EIMSK - są związane z przerwaniami zewnętrznymi INT0-7. Miejmy nadzieję, że do nich masz podłączone te transoptory, bo jak nie to... kaplica.

  • #48 11 Mar 2012 22:00
    adambehnke
    Poziom 24  

    A więc tak. Wyskrobałem taki kodzik. Przedstawiam go w tej formie gdyż nie chcę wklejać całego kodu.
    Piny pod które mam podpięte transoptory to E4-E7 więc tak jak trzeba.

    Oto kodzik. Czy to powinno zadziałać? Chyba tak..

    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #49 15 Mar 2012 19:31
    adambehnke
    Poziom 24  

    Poza poprzednim pytaniem (które już sprawdziłem jesli chodzi o INT4- i działa) mam kolejne odnośnie PCF 8583p. Chodzi mi o to czy posiada może ktoś jakiś prosty fragment kodu odpowiedzialny za odczyt i dekodowanie daty z PCF-a? Odczytać godziny ,minuty i sekundy potrafię ale mi zależy głównie na dniach tygodnia a nie potrafię przeprowadzić tego okropnego przesuwania i mieszania bitami. Nawet nie jest mi potrzebny miesiąc i dzień miesiąca.Zależy mi tylko na tym abym wiedział jaki jest dzień tygodnia.

    edit: OK, obsługa PCF-a opanowana już ze zrozumieniem.
    Pomógł mi temat w którym kolega Villen dokładnie opisuje odczyt i przesunięcia bitowe potrzebne do wyciągnięcia wszystkich danych.

  • #50 09 Kwi 2012 22:48
    adambehnke
    Poziom 24  

    Tak wygląda mój sposób na odczyt PCF-a:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Trochę się męczę jeszcze z przesunięciami bitowymi i zerowaniem poszczególnych bitów ale ważne że kod działa poprawnie .



    Prace nad moim urządzeniem posuwają się powoli do przodu.
    Obecnie "walczę" z RS485.
    Otóż, jest tak:
    Na żądanie mastera (w tej chwili PC) mój moduł wysyła odpowiedź (raport) w postaci string-a :

    <001_@_/A1/B23/C23/D25/E21/F23/G40/H23/I38/J0/K25/L80/M25/N37/O2/P1/R255/S8/T5/U255/V255/W255/X0/Y0/Z0/Q21/*17/#0/$0/&0/?0/%214>

    Pytanie jest takie , jak obliczyć CRC ? Szukałem już chyba wszędzie i czytałem o CRC16 i 32 ale nie mam bladego pojęcia jak to wyliczyć z tak dużego string-a.
    Finalnie CRC będzie obliczane i porównywane w każdym module jaki będzie pracował w mojej sieci. Mógłbym sobie stworzyć jakiś własny sposób na sumę kontrolną ale aplikację na PC piszę w Visual Studio i tam mam kontrolki do obliczania CRC16 i CRC32 i tego się muszę trzymać.
    Może ktoś z kolegów mógłby podpowiedzieć jak ugryźć ten problem. Czy wyliczać CRC dla całego stringa czy tylko dla części (dla mnie to by było trochę nie tak).