Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 25 lis 2024, o 08:17


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 1 paź 2016, o 15:42 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 13
Pomógł: 0

Witam,

Mam problem z normalnym działaniem programu napisanego na atmedze 328p.
Po kolei:
Zrobiłem z bratem swój sterownik, na potrzeby kilku szaf sterowniczych. Projekt w załączniku, płytki drukowane przez firmę zewnętrzną, wykonane solidnie, profesjonalnie.
Szafy docelowo mają załączać sekwencyjnie kilka silników o mocy w granicach 1-2kW (+ jeden większy, ale o tym potem), dodatkowo obsługiwać kontrolę wejść alarmowych, oraz przycisków wł/wył.
Program jest dość prosty, po prostu instrukcja warunkowa if(), która sprawdza czy na wejścia są podane sygnały, jeśli tak, to cyklicznie załącza wentylatory.
Pierwszy na 10 sek, przerwa 5 sek.
Drugi na 10 sek, przerwa 5 sek.
Trzeci na 10 sek, przerwa 5 sek.
Czwarty na 10 sek, przerwa 5 sek.
i tak w kółko.
Program pisałem kilka razy w różnych wersjach (pierwotnie myślałem, że wina leży po stronie programu), program nie używa żadnych delay'ów, tylko operuje na porównaniu czasu od początku programu.
Tak czy inaczej problem występuje w każdej z szaf, na każdej wersji programu, mimo że wszędzie jest inaczej napisany program (nie powiela się, więc o błędzie ze strony programu raczej nie powinno być mowy).

Wniosek - Zakłócenia, lub wina po stronie sprzętu.

Tylko teraz jak sobie z tym poradzić?

Wejścia sterownika:
Wejścia działają na zasadzie podania na nie MASY, która jeśli już tam trafi (wejście aktywne) przechodzi przez filtrację, tj rezystor, kondensator, dioda, znowu rezystor, transoptor i przed samą nóżką procesora jest rezystor 10k podciągający do VCC.
Wejść jest w sumie 8.

Wyjścia sterownika:
Wyjścia sterowane są przez podanie przez procesor stanu wysokiego, który idzie przez rezystor, na tranzystor i na przekaźnik.
Zasilanie procesora wygląda tak, że z zasilacza 12V idzie przez bezpiecznik, dwie diody, kondensatory, stabilizator na wszystkie wejścia VCC procesora.
Reset jest podciagnięty opornikiem 4,7k (pierwotnie był 10k) do VCC,
wszystkie wejścia VCC procesora mają dołożony kondensator.

Objawy:
Program losowo się resetuje. Wydaje mi się, że w momencie lub w okolicach momentu, gdy stycznik (zapalany przez przekaźnik wlutowany w sterownik) "puszcza", wtedy idzie duży prąd. Może to dlatego. Program czasem też się "zawiesi" na dłuższą chwilę (około kilkanaście - kilkadziesiąt sekund) lub dłużej.
Ktoś wie dlaczego?
Czytałem poradniki ..., zgodnie z informacjami tam napisanymi wdrożyliśmy kilka zmian. Wejścia nieużywane w programie mimo, że są fizycznie podciągnięte do VCC, też programowo podciągnąłem do VCC. Zmniejszyliśmy rezystor podciągający pin RESET do VCC z 10k na 4,7K (najmniejszy z przedziału który podał producent w nocie katalogowej). Wczoraj to zrobiliśmy i program nadal się resetuje. Dodatkowo wyczytałem, że w przypadkach niesprzyjającego środowiska można też obudowę z kwarcu zewnętrznego 16MHz przylutować do masy. Przylutowaliśmy.
Niestety problem nie ustąpił.

Jedna z szaf ma jeszcze duży silnik 20kW, ale on załącza się na początku programu, a sam program nie wykonuje sekwencji. Tutaj restartów nie ma. Co tym bardziej utwierdza mnie w przekonaniu, że biorą się one albo od przekaźników, albo styczników, które są przez nie załączane.

Bardzo proszę o pomoc kogoś bardziej doświadczonego ode mnie.
Przekaźniki mają napięcie cewki 12V, więc zasilanie moim zdaniem jest odseparowane, a jednak problem wygląda jakby było coś nie tak z zasilaniem.

W załączniku pełny schemat płytki w pdf (z Eagla, ale plik .sch nie przechodzi), wraz z podanymi wartościami rezystorów, kondensatorów, numerami układów, itd.
Link do przekaźnika: http://lispol.com/produkt/przekaznik-ce ... pr-s-112-a

Liczę na jakieś wskazówki. Z góry dziękuję i pozdrawiam.

Załącznik:
sterownik mały1.pdf


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 15:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

TYM razem przeniosę ....
ale następnym razem proszę umieszczać posty we właściwych działach ...
i czytać zasady działów ...

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 18:55 
Offline
Nowy

Dołączył(a): 01 lip 2016
Posty: 19
Pomógł: 1

Witam
Program jest na 8P czy na 328 ? Różnice są subtelne - ale są.

Czy resetowanie występuje z dołączonymi silnikami czy w pracy "na sucho" z samymi przekaźnikami?

Schemat jest ok, jeśli problemem jest szeroko rozumiana kompatybilność elektromagnetyczna to istnieje prawdopodobieństwo błędu w PCB - np źle poprowadzona masa.
Warto by było sprawdzić kod programu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 23:08 
Offline
Użytkownik

Dołączył(a): 07 gru 2013
Posty: 90
Pomógł: 6

Nie wiem czy płytka PCB na to pozwoli; spróbuj 12V na przekaźniki dać poprzez dławik 47uH albo nawet 100uH a za nim kondensator 470uF lub większy i drugi dławik 10uH szeregowo z zasilaniem UP ( za nim również kondensator np 47uF ). Jak na płytce idzie masa i plus 12V od przekaźników, nie idzie za blisko ścieżki reset ?. p.s. zasilasz to z oddzielnego zasilacza czy napięciem z szafy sterowniczej w której jest to zamontowane.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 23:19 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 13
Pomógł: 0

Doktur: 328p. Kod programu mogę podrzucić na jutro, teraz nie mam go "pod ręką". Kod pisałem w Arduino IDE.

jony15: Do szafy przychodzą 3 fazy, które są porozdzielane na styczniki/silniki, oraz gniazdko, do którego wpięty jest zasilacz impulsowy 12V, który z kolei zasila PCB. Także sam sterownik zasila zasilacz. Co do reszty Twoich sugestii sprawdzę to jak najszybciej i dam znać w kolejnym poście. Dzięki póki co za sugestie Panowie.

edit: dorzucam jeszcze plik projektu płytki, wraz z zalaną masą.

Obrazek

Załącznik:
sterownik mały1.pdf


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 paź 2016, o 06:33 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 291
Lokalizacja: okolice Opola
Pomógł: 20

Witam

U mnie pracuje sterownik co prawda wykonany na stm32f030 i sterujący silnikami podobnej mocy przez triaki zalaczajace styczniki. Ale nie wydaje mi się aby to było problemem. Za to problemy i to spore miałem z wejściami. Mimo filtrowania itp. miałem non stop z nimi problemy. Rozwiązanie ostatecznie było banalne czyli próbkowanie non stop wejść i reakcja na nie dopiero gdy stan aktywny utrzymuje się na nich co najmniej 50ms.
Ale w ramach testu weź po prostu diodę z kawałkiem przewodu i rezystorem, i podłącz pod jeden wolny pin np portu C.A w programie non stop zmieniaj jej stan. Jeżeli w momencie zwisu przestanie migac to problem z sprzętem. Inaczej program. Tylko miganie zaimplementuj najlepiej w osobnym przerwaniu z Timera.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 paź 2016, o 07:58 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27310
Lokalizacja: Szczecin
Pomógł: 1041

Wg mnie płytka PCB nie jest najlepiej zaprojektowana do pracy w silnie zakłóconym środowisku. Widać co najmniej kilka rażących błędów, które będą się mściły nieprzewidywanym zachowaniem procka, resetami itp ... tzn mogą ale nie muszą.

1. Sygnał reset - stworzona z niego mega wspaniała długaśna ANTENA na PCB i to jeszcze biegająca sobie w okolicy sygnałów wejściowych

2. Złącze programowania KANDA - umieszczone w tak dużej odległości od procka ? Już nawet nie o sam reset chodzi ale też o inne sygnały, a do tego również umieszczone w okolicy sygnałów wejściowych ...

3. Totalnie źle prowadzona masa na PCB. Ale taką NAJPOWAŻNIEJSZĄ wadą w tym zakresie co od razu bije po oczach to np wylany poligon masy w sekcji wejściowej - oblanie WSZYSTKICH elementów wejściowych do optoizolatorów - no to już jawne i takie wprost proszenie się o kłopoty. Gdy stosuje się optoizolatory to wydziela się zwykle wyraźnie sekcję wejściową z nimi na PCB i w tej sekcji nie powinien znaleźć się ANI MILIMETR kwadratowy czy ścieżka masy.

4. Totalnie źle prowadzona masa również w sekcji WYJŚĆ - czyli pod przekaźnikami :( ... tu też powinna być ładnie wydzielona sekcja na PCB z przekaźnikami - masa powinna docierać tylko do emiterów tranzystorów i najlepiej żeby była poprowadzona oddzielną gałęzią do nóżki wejścia zasilania 12V a nie wszystko mieszane jest z jednym całym polygonem masy na PCB

5. Troszkę dziwnie mi wygląda ta cała optoizolacja wejść .... i to bardzo dziwnie - bo niby jest optoizolacja a tak na prawdę to jej W OGÓLE NIE MA :( .... toż u ciebie nie ma ŻADNEJ SEPARACJI GALWANICZNEJ! ... więc po co w ogóle te optoizolatory ? skoro latające wkoło od styczników, silników i innych tam takich - zakłócenia przepięknie włażą do twojego procka przez masę którą podajesz na wejścia optoizoloatorów - bo o ile dobrze zrozumiałem to ta sama masa co do procka leci tak ? Czy źle zrozumiałem ?

6. Filtracja zasilania procka jak dla mnie jest ... hmmm no zrypana (widać wpływ tego bloga na którego się powoływałeś) ... Sterujesz tranzystory BD prądowo a przy zasilaniu procka tylko jeden kondensator 100 nF :( ... zaś kompletnie niepotrzebnie aż 100uF przy stabilizatorze. To dla procka nic nie daje. Już nie wspomnę, że z uwagi na sposób prowadzenia twoich ścieżek - twoje kondensatory C12 i C14 a szczególnie ten C14 nic nie dają ... Prawie jakby ich nie było w układzie no ale stąd też wynika kolejny punkt. Chcesz zobaczyć zasady podstawowego podłączania procka ale przede wszystkim jego filtracji ? To zajrzyj tutaj: http://mirekk36.blogspot.com/2012/04/mi ... lanie.html (na tym sposobie na pewno nie stracisz)

7. Totalnie zmasakrowane prowadzenie zasilania +5V - a od MEGA POPRAWNEGO prowadzenia zasilania na PCB powinno się zaczynać przy tego typu projektach. Widać że po prostu - na zasadzie "jakoś tam" łączyłeś ścieżkami - tak żeby było "jakoś wygodnie" je poprowadzić. Nie obraź się ale tu kompletnie nie widać żadnego nawet minimalnego przemyślenia, jakiejś koncepcji prowadzenia tego zasilania. A to jest albo bywa pierwszym gwoździem do trumny i to nawet dla projektów działających w zwykłych warunkach - a co dopiero mówić o takich szafach sterowniczych.

Generalnie wg mnie (ale mogę się mylić - tyle że ja bym właśnie CAŁKOWICIE inaczej podszedł do zaprojektowania takiego PCB) taki układ wręcz powinien się ciągle resetować w środowisku silnie zakłóconym.

Twój procek po samej masie (GND) dostaje tak w kość, że ledwo zipie ...

Przy okazji żeby spróbować się chociaż jako tako jeszcze ratować przy tym co jest:

1. dodaj KONIECZNIE ! ... kondensator 100nF pomiędzy pinem reset procka i GND (ale kondek na samym pinie procka a nie gdzieś daleko od niego)

2. nic nie napisałeś czy ustawiłeś a jeśli tak to na jakim poziomie fusebity BOD (a od tego też będzie DUŻO zależeć w takim układzie)

3. czy w programie podciągnąłeś WSZYSTKIE nie używane piny procka do VCC (jeśli pozostały wejściami)

............. Na przyszłość zaś jeśli będziesz projektował od nowa PCB to mówię ci weź pod rozwagę te sugestie odnośnie błędów na PCB o których pisałem wyżej ale też postaraj się może:

1. albo zamienić tranzystory bipolarne BD na jakieś mosfety (sterowane napięciowo) bo te są sterowane prądowo a brak małego elektrolicika przy zasilaniu procka już może powodować szarpania zasilania

2. albo wprowadź optoizolację dla sterowania wyjść - ale na zeusa - GALWANICZNĄ ok ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 paź 2016, o 09:36 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 13
Pomógł: 0

krafin: Program w trakcie zwisu nie reaguje nawet na wyłącznik awaryjny, który jest nadrzędnym warunkiem. Nie reaguje na nic, po prostu wisi.

mirekk36: Dziękuję za obszerną wypowiedź. Faktycznie z tym pinem reset i masą są związane błędy projektowe.. Teraz je widzę. Postaram się zastosować do tych zaleceń które napisałeś, a jak nie pomoże, to zamówię w ostateczności nową płytkę PCB ze zmienionym projektem. Konieczne Twoim zdaniem będzie przesunięcie samego procesora gdzieś bliżej złącza kanda?

Co do pytań:
ad1. Dodam. Napiszę jaki efekt.
ad2. O jakich dokładnie mowa? Mam Twój program mkAVRcalculator i zmieniłem w nim fuse bity tylko te odpowiedzialne za zewnętrzny kwarc >8MHz. Powinienem zmienić jakieś jeszcze?
ad3. Tak. Te nieużywane zdefiniowałem jako piny WEJŚCIOWE i podciągnąłem do plusa na początku programu.

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 paź 2016, o 11:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lip 2013
Posty: 208
Lokalizacja: Kielce
Pomógł: 15

trolodk napisał(a):
Konieczne Twoim zdaniem będzie przesunięcie samego procesora gdzieś bliżej złącza kanda?


Odwrotnie. Przesunięcie złącza kanda bliżej procesora, a tak by w miarę możliwości skrócić ścieżki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 paź 2016, o 11:17 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27310
Lokalizacja: Szczecin
Pomógł: 1041

trolodk napisał(a):
Konieczne Twoim zdaniem będzie przesunięcie samego procesora gdzieś bliżej złącza kanda?


danny napisał(a):
Odwrotnie. Przesunięcie złącza kanda bliżej procesora, a tak by w miarę możliwości skrócić ścieżki.

A ja tylko uzupełnię - żeby też obie rzeczy były w ramach swojej sekcji na PCB.

trolodk napisał(a):
ad2. O jakich dokładnie mowa? Mam Twój program mkAVRcalculator i zmieniłem w nim fuse bity tylko te odpowiedzialne za zewnętrzny kwarc >8MHz. Powinienem zmienić jakieś jeszcze?

Napisałem jakie fusebity - te odpowiedzialne za BOD (Brown Out Detector) ...

Obrazek

No warto o tym poczytać do czego ten mechanizm ten jest. Niestety bardzo często jest on pomijany szerokim łukiem przez początkujące osoby, a później bywają przykre przypadki np utraty danych w EEPROM albo i nawet we Flash. Poza tym, żeby on poprawnie działał to wywal zbyt duże pojemności z zasilania. Np na takiej płytce wrzucenie kondensatora 100uF już może być problemem. Mówię popatrz na moim blogu jak organizować poprawne zasilanie dla procka - to Ważne.

trolodk napisał(a):
ad3. Tak. Te nieużywane zdefiniowałem jako piny WEJŚCIOWE i podciągnąłem do plusa na początku programu.

Tzn uzupełnię - definiować ich jako wejściowe to nie musiałeś bo zrobiłeś nadmiarowe operacje, to oczywiście niczemu nie szkodzi ale warto jednak zapamiętać - a jest to w nocie pokazane, że po resecie WSZYSTKIE wartości rejestrów DDRX ale nie tylko tych większości innych również są zerowane. A więc jeśli DDRX są wyzerowane to piny są WEJŚCIAMI ok? ... Wtedy wystarczy tylko włączyć im podciąganie do VCC programowo wpisując jedynki do rejestrów PORTX.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO