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

[ATmega32][ASM/AVR Studio 5] Sterownik silnika krokowego ze zmianami trybów

20 Lis 2011 19:47 2036 5
  • Poziom 19  
    Witam wszystkich. Muszę na zajęcia z energoelektroniki napisać sterownik silnika krokowego. Efekt stanów na poszczególnych wyprowadzeniach ATmegi symulujemy na diodach LED. Program ma mieć sterowanie krokowe i półkrokowe, przyspieszanie i zwalnianie sekwencji oraz odwracanie sekwencji. Wszystkie te operacje napisałem lecz mam problem z jedną rzeczą i totalnie nie mam żadnego pomysłu. Program ma mieć zabezpieczenie silnika - dajmy na to: leci sobie sekwencja sterowania półkrokowego i zmieniamy na tryb krokowy, zmiana nie ma być "sztywna" jak w moim teraźniejszym programie lecz gdy sekwencja jest bardzo szybka należy po wciśnięciu zmiany trybu najpierw sukcesywnie zwolnić prędkość do zera a następnie rozpędzić sekwencję z wybranym trybem...Za nic nie mogę wymyślić jak to zrobić. Liczę na Waszą pomoc :) Oto kod programu:

    Kod: asm
    Zaloguj się, aby zobaczyć kod
  • Poziom 38  
    Tu:
    https://www.elektroda.pl/rtvforum/topic1804999.html
    coś podobnego robiłem.
    Ale w C.
    Działało.
    W temacie jest podana nota Atmela o liczeniu rampy do sterowania silnikiem.
    Ale to strasznie rozbudowana kobyła.
    Poza tym nie rozumiem po co zwalniać do zera przy zmianie kroków.
    Przy zmianie kierunku jest to konieczne.
  • Poziom 19  
    Niestety nie możemy pisać w C na tym przedmiocie...jest jakiś sposób na to w ASM ?
  • Poziom 38  
    Pewnie że jest- ostatecznie program napisany w C jest zamieniany najpierw na asm.
    Nie znam asm- ale z tego co widzę wynika chyba że procesor jest sterowany impulsami zewnętrznymi i wystawia sygnały do sterowania silnikiem.
    Popraw mnie jeśli źle ten program zrozumiałem.
    Jeśli tak jest jak zrozumiałem to koncepcja jest błędna.
    No bo jak silnik ma zwalniać jeśli stale przychodzą impulsy sterujące.
    Trzeba by je zapisywać do jakiegoś bufora a potem odczytywać.
    Prędkość zmieniać można zmieniając wartość początkową licznika albo wartość w rejestrze porównania albo przy stałej prędkości licznika ustawiać w nim jakąś flagę i liczyć w pętli głównej.
    Poza tym- asm też wymaga komentarzy.
  • Poziom 19  
    Dobrze zrozumiałeś program. Sterowanie następuje zewnętrznymi impulsami a dokładnie impulsami z przerwań zewnętrznych. Po ich wywołaniu jak widać zmienia się wartość rejestru OCR0 do którego zlicza licznik w trybie CTC - jest to prędkość sekwencji. W przerwaniu zewnętrznym 2 każde kolejne wciśnięcie przycisku powoduje zmianę sekwencji, krokowe, półkrokowe oraz odwracanie tych sekwencji.
  • Poziom 38  
    A, to jednak niezupełnie zrozumiałem.
    Sterowanie polega na tym że przyciskiem na przerwaniu 2 zmieniasz sekwencję (i kierunek?) a na przerwanie 1 i 3 przychodzi ?( DIR) i STEP.
    To jeśli tak to po wciśnięciu przycisku zmieniającego kierunek (krok, półkrok?)musisz stopniowo zmieniać szybkość impulsów podawanych na uzwojenia prawie aż do zera.
    Zmieniając wartość rejestru porównania.
    Bez przesady- jak silnik będzie się bardzo wolno kręcił to bezboleśnie zmieni kierunek nie gubiąc kroków.
    No ale dalej pytanie- impulsy sterujące przychodzą stale- możesz to zlekceważyć i stopniowo zwalniać a potem przyspieszać silnik czy też trzeba te impulsy gdzieć zapisać?
    Cały problem przy takich silnikach jest taki że należy stale znać ich "położenie"- ile impulsów dostały i "gdzie" w danej chwili są- no bo jeśli nie to zalety silników krokowych mocno maleją.
    Czyli w zasadzie trzeba by znać całą sekwencję programu- od początku do końca.
    Najpierw zapisać a potem wykonać.
    Tylko na takiej podstawie można jakoś sensownie liczyć rampę.