Witam,
Projektuje sterowniki do unipolarnego sterowania silnikami krokowymi do frezarki CNC sterowanej z programu Mach3 (step/dir). Ze względu na małą dostępność gotowych aplikacji dla prądów >3A i nieograniczone możliwości zmian postanowiłem zastosować procesor ATMega8 i podwójny mostek H na mosfetach IRFPZ44.
Napisałem banalny program, który wydaje się działać bardzo dobrze, ale brakuje mi pomysłu na rozwiązanie jednego problemu. Mianowicie kiedy z komputera przychodzą impulsy step w jakiejś tam częstotliwości układ przełącza kombinacje tranzystorów zasilając odpowiednio cewki silnika. Problem powstaje gdy impulsy chwilowo nie dochodzą (dana oś nie jest w użyciu) - wtedy ostatnio użyta kombinacja cały czas zasila jedną lub dwie cewki silnika (sterowanie półkrokowe), przez uzwojenie płynie stały prąd o dużym natężeniu i silnik oraz tranzystory się grzeją, a nie ma takiej potrzeby gdyż śruby napędowe będą zamocowane na stałe. Nie wiem w jaki sposób najlepiej wykryć brak przychodzących impulsów wyzwalających przerwanie INT0.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Próbowałem od przepełnienia timera0 w stałym interwale czasowym generować następne przerwanie, które będzie sprawdzało stan pinu INT0 i jeżeli jest on niewysterowany przez okres dłuższy niż okres przy najmniejszej używanej częstotliwości silnika będzie wprowadzało zmienną step w krok nr 9 - wszystkie klucze niewysterowane, ale nie mogę dobrać częstotliwości wyzwalania tego przerwania tak, aby zawsze "trafiało" w ewentualne pojawienie się sygnału step na pinie INT0.
Badanie czy zmienna step pozostaje bez zmian przez jakiś okres czasu też wydaje się być nie najlepszym rozwiązaniem bo ona może się zmieniać ale akurat mogę trafić dwukrotnie przypadkowo na tą samą wartość. W jaki sposób można rozwiązać ten problem tak, aby rozwiązanie zawsze się sprawdzało bez względu na częstotliwość sygnału STEP ?
Z góry dzięki za każde sugestie odnoście programu, pozdrawiam.