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

ATMEGA8 - sterownik silników krokowych. Częstotliwość i gubienie krków

lukim00 28 Lut 2012 21:49 3063 12
  • #1 28 Lut 2012 21:49
    lukim00
    Poziom 10  

    Witam wszystkich. Przejdę od razu do rzeczy. Chciałbym zbudować prosty sterownik silników krokowych oparty na jednej Atmedze 8. Rzecz w tym że w fazie testów z programem Mach3 uC wyłapywał około 20% kroków. W resztę jak rozumiem musial "nie trafić". Procek działał na standardowym wewnętrznym oscylatorze. Moje pytanie brzmi czy po zwiększeniu prędkości do powiedzmy 8Mhz uC przestanie gubić kroki? tzy to nie jest za dużo jak na jeden uC. Z tego co widziałem dużo projektów składa się osobnego kontrolera dla każdej osi. Próbowałem rozwiązać problem używając przerwań. Wszystko działało wyśmienicie, tzn wyłapywane były wszystkie kroki jednak mega 8 ma tylko 2 piny z obsługą przerwań a to dla mnie za mało. Dodam że mach był ustawiony na najwolniejszą prędkość. Z góry dziękuję za pomoc.

    0 12
  • SterControl
  • #2 28 Lut 2012 22:01
    tmf
    Moderator Mikrokontrolery Projektowanie

    Nie wiem co to jest ten mach3, ale M8 ma wystarczająco mocy żeby sterować kilkoma silnikami - także problem jest raczej w kodzie programu. Pokaż schemat i opisz co konkretnie procesor ma robić i jak tym silnikiem sterować. Jeśli chodzi tylko o sterowaniem mostkiem H bez bajerów to problemu nie ma. Jeśli dodatkowo interesuje cię jakiś PWM i sterowanie mikrokrokowe to istotnie jest to trudniejsze. Z drugiej strony nie prościej kupić dedykowany sterownik krokowców? Albo chociaż AVR dostosowany do sterowania silnikami?

    0
  • SterControl
  • #3 28 Lut 2012 22:07
    sulfur
    Poziom 24  

    tmf: co masz na myśli pisząc "dedykowany sterownik krokowców" ? I jakies AVRy są do tego dostosowane ?

    0
  • #4 28 Lut 2012 22:18
    lukim00
    Poziom 10  

    Sterownik ma sterować silnikami krokowymi więc o mostku H nie ma tutaj mowy. Mach3 to program do obsługi cnc. Wysyła on sygnał Step/Dir. Najmniejszą częstotliwość jaką można w nim ustawić to 25kHz. Przy standardowym 1Mhz na tej M8 i przy obsłudze tylko jednego silnka (kod bardzo prymitywny), uC nie dawał rady wyłapać wszystkich sygnałów kroku. Dopiero się uczę programowania AVR i zastanawiam się czy takie zadania w ogole można tak rozwiązać czy po prostu jedyna możliwość to przerwania reagujące na zbocze narastające.

    0
  • #5 28 Lut 2012 22:29
    Piotrek-787
    Poziom 15  

    Podaj typ silnika skokowego. Częstotliwość komutacji równa 25 kHz to dość sporo jak na silnik skokowy.

    0
  • #6 28 Lut 2012 22:48
    lukim00
    Poziom 10  

    Silnik to MINEBEA 17PM-J801 ale myślę że nie ma to znaczenia. Po prostu uC nie nadąża z wyłapywaniem stanów wysokich na wejściu. Tak jak napisałem, przy przerwaniach wszystko działa dobrze. Po prostu chciałbym wiedzieć czy to jedyna możliwość rozwiązania tego problemu. Czy może da się taktowanie zwiększyć na tyle żeby wszystko można było zrobić w głównej pętli. Dowiedziałem się już z w medze8 można wykorzystać jeszcze jedno dodatkowe przerwanie.

    0
  • #7 28 Lut 2012 23:02
    janbernat
    Poziom 38  

    Oj- to tak nie będzie działać.
    Mach3 wysyła z lpt sygnały step i dir na trzy osie.
    Sygnał enable o ile pamiętam wysyła naraz na wszystkie osie.
    Nalepiej gdyby każda z osi miała swój własny procesor odbierający swój własny step i dir.
    Enable może być wspólny.
    Gotowe sterowniki mają wejścia step i dir- oddzielnie dla każdej osi.
    Zrobiłem jakiś czas temu taki sterownik na ATtiny2313- z prymitywnym sterowaniem silnikiem unipolarnym z półkrokiem na ULN.
    Jak znajdę to dam.
    Ale lepiej jednak kupić trzy gotowe sterowniki- najlepiej z mikrokrokiem.
    Bo te dedykowane układy do sterowania są jednak lepsze.

    0
  • #8 28 Lut 2012 23:08
    tmf
    Moderator Mikrokontrolery Projektowanie

    Nie wiem dlaczego uważasz, że do sterowania srokowcem nie stosuje się mostka H? Zapewne masz silnik unipolarny, ale to nie jedyny typ jaki istnieje.
    Co do częstotliwości, żeby była jasność - na step/dir nie masz chyba 25 kHz? Zresztą nawet jakby, to dla M8, masz 16MHz/25kHz=640 taktów na okres, co jest aż nadto. Czyli program do kitu. Napisz co ten procesor w ogóle ma robić, bo jeśli tylko zamieniać sygnały step/dir na sterowanie tranzystorami, to są do tego dedykowane scalaki i nie ma co kijem Wisły zawracać.

    Dodano po 3 [minuty]:

    sulfur napisał:
    tmf: co masz na myśli pisząc "dedykowany sterownik krokowców" ? I jakies AVRy są do tego dostosowane ?


    Mam na myśli dedykowane scalone sterowniki silników. Dostosowane do takiego sterowania są rózne AVR, np. z rodziny ATTiny, czy XMEGA, które cechują się tym, że mają rozbudowane timery, m.in. o dead time i układy zabezpieczeń.

    0
  • #9 28 Lut 2012 23:18
    lukim00
    Poziom 10  

    No w wielkim skrócie to program ma właśnie to robić + dodatkowo półkrok lub inne usprawnienia. Zawracanie kijem Wisły ma sens w ramach nauki programowania. Wracając do częstotliwości. Żaden silnik nie będzie pracować z taką prędkością (na pewno nie te które mam). Jest to po prostu prędkość komunikacji softu ze sterownikiem. Wynika z tego że sygnał kroku trwa 40 us i przez to że jest taki krótki uC nie może go wykryć. Na innym forum powiedziano mi żeby zastosować prostu układ przedłużający impuls. Myślę że to powinno pomóc.

    0
  • #10 28 Lut 2012 23:28
    kuba1im
    Poziom 19  

    lukim00 napisał:
    Zawracanie kijem Wisły ma sens w ramach nauki programowania.

    A czy to nie aż nad to, żeby w takim celu wykupywać licencję Macha? Jeśli już tak chcesz uczyć się programowania to ja robię w tej chwili projekt tokarki (Ty jak mniemam frezarka lub ploter), gdzie program w javie komunikuje się poprzez rs232 ze sterownikiem opartym na mega32 a ten dopiero wysyła sygnały step dir do dedykowanych układów - w moim przypadku to sterowniki sskb01.

    0
  • #11 28 Lut 2012 23:39
    tmf
    Moderator Mikrokontrolery Projektowanie

    lukim00 napisał:
    No w wielkim skrócie to program ma właśnie to robić + dodatkowo półkrok lub inne usprawnienia. Zawracanie kijem Wisły ma sens w ramach nauki programowania. Wracając do częstotliwości. Żaden silnik nie będzie pracować z taką prędkością (na pewno nie te które mam). Jest to po prostu prędkość komunikacji softu ze sterownikiem. Wynika z tego że sygnał kroku trwa 40 us i przez to że jest taki krótki uC nie może go wykryć. Na innym forum powiedziano mi żeby zastosować prostu układ przedłużający impuls. Myślę że to powinno pomóc.


    Przedłużanie impulsu to kiepski pomysł. Zapewne z jakiegoś powodu te impulsy wyglądają tak a nie inaczej. Pewnie dlatego, żeby płynnie sterować silnikiem, np. przy pomocy PWM. Co będzie trudno oddać za pomocą procesora. Niemniej jeśli się uparłeś na procesor to podaj te impulsy na wejście przerwań (jak ci ich brakuje to zmień procka, na jakiegoś któy generuje przerwania z całego portu), albo zmień podejście. Sygnały step można np. podać na wejście timera co oszczęda jeden pin przerwań i powoduje, że żadnego nie zgubisz. Dodatkowo DIR można podać na ICP - będziesz miał timestampa kiedy zmienił się kierunek.

    0
  • #12 29 Lut 2012 20:27
    janbernat
    Poziom 38  

    To co kuba1im napisał ma sens- pod warunkiem że potrafisz napisać jakiś sensowny program na PC do sterowania.
    Wtedy ta ATMega pełni rolę bufora- jak Ci Windows "wywłaszczy" proces sterowania i zacznie sobie robić coś innego to sterujesz na podstawie tych danych z bufora.
    Próbowałem kiedyś coś robić na MACH2- ale to porażka.
    Pół godziny pracuje normalnie i raptem Windows zajmuje się czymś innym a silniki zaczynają warczeć i nie pracują.
    Jakiś czas temu zajrzałem na stronę MACH i zobaczyłem że sprzedają jakieś przystawki buforujące.
    Czyli idą w słusznym kierunku.
    Ale ponieważ przedtem kupiłem CNCgraf to już później się tym nie interesowałem.
    Rozwiązaniem może być zainstalowanie na jakimś zabytku DOS-a i ściągnięcie darmowego CNCgraf dla DOS.
    DOS nie robi takich numerów jak nowsze systemy.
    A co do doświadczeń ze sterowaniem silnika za pomocą procesora i jakiegoś ULN albo mostka- faktycznie na początek to jest kształcące.
    Ale tylko do początków- sterowanie silników napięciem nominalnym sprawia że chodzą jak żółwie.
    A z kolei wykorzystanie dość wolnego przetwornika ADC z procesora do sterowania PWM i zasilania silnika napięciem 10-20 razy większym niż nominalne- nie sprawdzałem- ale mam poważne wątpliwości ze względu na szybkość ADC.
    Chociaż są procesory dedykowane do tego- Microchip i Texas Instruments takie robi.

    0
  • #13 29 Lut 2012 20:37
    M. S.
    Poziom 34  

    Z mojego doświadczenia (budowa małej frezarki gdzie niedopuszczalne jest zgubienie nawet jednego kroku) wynika, że silnik krokowy gubi kroki kiedy impulsy sterujące przychodzą szybciej niż wirnik silnika zdąży się obrócić. Każdy silnik przy określonych parametrach zasilania i obciążenia może osiągnąć pewną prędkość, której nie da się zwiększyć poprzez wzrost prędkości taktowania gdyż wtedy zaczyna gubić kroki. Każdy zgubiony krok powoduje często zgubienie kroku następnego.

    Zrób sterownik ze zmienną częstotliwością taktowania, podłącz silnik i sprawdź jaką maksymalną szybkość osiągnie. Można to "badać" na słuch. Jeśli kroki nie są gubione to silnik obraca się płynne i dość cicho. Jak zaczyna gubić kroki to słychać terkotanie i czuć drgania. Jeśli prędkość będzie mniejsza od spodziewanej to zwiększ napięcie zasilania.

    P. S. Moje silniki w frezarce zasilam ze źródeł prądowych. Dzięki temu w półkroku (zasilanie 2 cewek) silnik pobiera taki sam prąd jak w pełnym kroku. Zaobserwowałem przez to spokojniejszą pracę krokowców.

    Do frezarki używam MACH 3 demo pod Windows XP. Maszyna potrafi pracować przez 1,5h frezując w kilkudziesięciu krokach ten sam kształt i nie mam jakichkolwiek zakłóceń od strony PC. Inaczej każdy kolejny przebieg nie trafiałby w ślady poprzedniego.

    0