Witam
Buduje sterownik silnika DC 24V który docelowo ma otwierać i zamykać drzwi przesuwne. Kod do sterownika napisałem w języku C na Atmega664p. W projekcie wykorzystałem PWM 8-bitowego który steruje mostkiem H zbudowanym na IRS2004 i IRF540.
Zrobiłem również płytkę PCB tego sterownika. Problem polega na tym że wszystko działa idealnie gdy nie jest podpięty silnik. Po podpięciu silnika i wprawienia go w ruch uC się resetuje albo się zawiesza.
Reset następuje głównie w sytuacji gdy :
1. na wyjscie PWM podaje wypełnienie np. OCR0A = 36. Wartosć podana od razu bez OCR0A++.
Gdy zastosowałem OCR0A++ co 1ms to problem znika.
2. gdy już rozpędzę silnik do OCR0A = 180 i zmienię OCR0A na 0 od razu bez OCR0A-- występuje reset
Tu też zastosowałem OCR0A-- co 1 ms do 0 i problem znika
3. gdy zablokuje silnik ręką i podam OCR0A = 180 z OCR0A++ co 1ms.
Tu okazało się że źle poprowadziłem masy na pcb. Porozdzielałem masy na cyfrową i analogową i połączyłem je w jednym punkcie przy trzech kondensatorach 1000uF (Poradnik nr 6 o Eagle).
Układ zasilam z zasilacza laboratoryjnego 30V/5A . Ustawiam na nim 20V i prąd 5A.
I teraz chciał bym się dowiedzieć czy można cos jeszcze zrobić, poprawić, dodać żeby bez tych "sztuczek programowych" z punktu 1 i 2 procesor się nie resetował?? Czy może to co zrobiłem jest już rozwiązanie mojego problemu??
Chciał bym poznać powód resetu z punktu 1 i 2.
Myslałem o izolacji galwanicznej uC od silnika i IRS2004 ale chcę wykorzystać ADC do pomiaru prądu silnika a jak to wykorzystam to masę cyfrową i analogową muszę w końcu gdzies połączyć.
Zamieszczam schemat
Od razu mówię że jest to moja pierwsza konstrukcja więc proszę o wyrozumiałosć.
Pozdrawiam.