logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Sterowanie silnika krokowego (step,dir) za pomoca AVR

karol1010 03 Lis 2009 16:40 13124 38
  • #1 7210472
    karol1010
    Poziom 21  
    Witam wszystkich.

    Pisze w Bascomie , procesor atmega128

    Mam 3 silniki krokowe podlaczone do sterownikow ktore sterujemy za pomoca sygnalow step/dir. (krok/kierunek).

    Do tej pory robilem to tak: zeby silnik zrobil np. 100 krokow

    
    dim A as byte
    dim B as byte
    
    B=100
    
    for A=0 to B 
    set portb.0
    waitms 100
    reset portb.0
    waitms 100
    next A
    



    Problem polega na tym ze silnik powinien mieć miękki start i miękki stop.
    W tym przypadku częstotliwość jest cały czas ta sama.
    Na początku powinna płynnie rosnąc a procesor licząc przy tym cały czas kroki silnika rozpędzić go i gdy już widzi ze zbliża się do tych 100 kroków zwalniać. I stanąć na setnym kroku.

    Nie wiem jak do tego się zabrać czy wykorzystac jakieś generatory sprzętowe?

    Jak powinien wyglądać taki kod żeby można było uruchamiać taki generator który ilość kroków czerpał by ze zmiennej?

    Moze macie jakieś wskazówki albo ktoś już robił coś podobnego.
  • #2 7210759
    tmf
    VIP Zasłużony dla elektroda
    Zmien czas trwania opoznienia w zaleznosci od kroku. Bo jak rozumiem chcesz go rozpedzac zmieniajac czas pomiedzy krokami?
    Jesli chcesz powoli przechodzic z kroku na ktrok to zastosuj driver z funkcja microstepping.
  • #3 7210843
    bogdan_p
    Poziom 39  
    jeżeli silnik nie jest przeciążony i sterowany optymalnymi parametrami to każdy impuls sterujący wywoła odpowiedni krok dlatego nie za bardzo rozumie po co Ci miękki start i stop , ponadto ważniejszą sprawą jest prawidłowe zasilanie silnika ( napięcie / prąd ) niż robienie miękkiego startu / stopu , w przypadku super precyzji to i tak liczenie programowe kroków nie daje 100% pewności zawsze może nastąpić zgubie kroków przez silnik
    co do programu to poza pętlą For - Next można zastosować np. pętlę Do - Loop Until , warunki If lub Select Case przypisać stałe wartości od których ma nastąpić zmiana paramentów a dane z czasami umieścić w Data , należy pamiętać że silnik krokowy ma swoje parametry graniczne częstotliwość sterowania przekroczenie której skończy się gubieniem kroków lub zatrzymaniem , kolega mnie wyręczył dodatkowe możliwości daje odpowiedni sterownik z mikro krokiem
  • #4 7210937
    karol1010
    Poziom 21  
    Koledzy wiem strerowniczek dziala z podzialem 10000krokow/obrot.

    Silniki pracuja w maszynie "CNC" własnej konstrukcji która ostrzy piły widiowe.

    Program juz mam napisany okolo 1800linii kodu wyswietlacz graficzny 240x128 , suporty na japońskich skrobanych jaskolczych ogonach napedzane srubami kulowymi i wogole śmajer...bajer. I niema mowy o zgubieniu kroku , chyba ze przesadze z pradkoscia :)
    Tylko ze to sterowanie mnie denerwuje.
    Za bardzo to szarpie przy ruszaniu i hamowaniu. Zresztą wydaje mi się ze to sterowanie powinno być zrobione na generatorach sprzętowych jak są, a są.
  • #5 7211067
    bogdan_p
    Poziom 39  
    czyli to odmierzania czasu chcesz wykorzystać Timery a nie instrukcję Waitms , tylko czy zastanawiałeś się nad tym że przy tak dużym programie w Bascomie po prostu brakuje czasu na wykonanie niektórych poleceń , może warto spróbować wysterować maszynę tylko programem sterującym i zobaczyć czy nadal szarpie
  • #6 7211158
    tmf
    VIP Zasłużony dla elektroda
    No ale krokowiec szarpie, taka jego natura. Jesli nie chcesz, zeby szarpal zastosuj microstepping, wtedy masz dodatkowo np. 16 pozycji pomiedzy pozycjami glownymi i mozesz sobie powoli rozpedzac. Niesadze, zeby opoznienie pomiedzy krokami glownymi cos zmienilo, zreszta latwo to sprawdzic wydluzajac okres kroku.
    BTW, jesli silnik nie jest przezony z enkoderem to skad masz gwarancje, ze nie zgubi kroku?
  • #7 7211232
    avatar
    Poziom 36  
    Popelnilem kiedys taki kod - sterownik pompy perylostatycznej
    wolny start - praca - wolny stop
    lub inne tryby programowanie za pomoca portu com i przyciskami .
    uC kontroluje a3977

    "  Print "Ustawienia trybu pracy: 1= normalna praca, 2=wolny start-praca,3=wolny start-praca-wolny stop,"
       ' Print "4= praca-wolny stop, 5= prog.praca,6=wolny start-prog.praca,7=wolny start-prog.praca-wolny stop,"
       ' Print "8=prog.praca-wolny stop""
  • #8 7211266
    Konto nie istnieje
    Poziom 1  
  • #9 7212436
    janbernat
    Poziom 38  
    Wskazówki (ale w tym wypadku tylko pomysł a nie gotowe zastosowanie) są na str.116 książki "Mikrokontrolery dla początkujących".
    A "rampa" w dobrych sterownikach bywa ustawiana zworką.
    Wybierz co chcesz.
  • #10 7227633
    karol1010
    Poziom 21  
    Problemem iz programowo jest to utrudnione to to ze pod waitus nie wstawimy zmiennej bo nie pojdzie. :(
  • #11 7227674
    janbernat
    Poziom 38  
    A w którym miejscu program podarowany przez avatar używa waitus?
    Patrzę- nie widzę.
    Ale stary jestem i ślepy- pokaż gdzie.
    Używanie wait w Bascomie albo delay w C powinno być karalne.
    No chyba że naprawdę musi być.
  • #12 7227805
    avatar
    Poziom 36  
    janbernat napisał:
    A w którym miejscu program podarowany przez avatar używa waitus?
    Patrzę- nie widzę.
    Ale stary jestem i ślepy- pokaż gdzie.
    Używanie wait w Bascomie albo delay w C powinno być karalne.
    No chyba że naprawdę musi być.


    Waitus jest w paru miejscach ... ale jego wartosc nie jest ustawiona jako zmienna ... wiec nie wiem oco chodzi
  • #13 7227898
    janbernat
    Poziom 38  
    Przepraszam- stary i ślepy.
    Jest.
  • #14 7227964
    Konto nie istnieje
    Poziom 1  
  • #15 7230224
    karol1010
    Poziom 21  
    Chodziło mi oto ze ja ozywam waitus pomiedzy krokami. Jeśli by dało sie je zmieniac to miekki start jest możliwy.
  • #16 7230619
    Konto nie istnieje
    Poziom 1  
  • #17 7231463
    karol1010
    Poziom 21  
    Tutaj jest prosta sytuacja bo w danym momencie moze pracowac tylko jeden silnik.
  • #18 7231601
    Konto nie istnieje
    Poziom 1  
  • #19 7232925
    karol1010
    Poziom 21  
    do atom1477

    A moze jakas wskazowka i maly przyklad ... zarys? tej metody z przerwaniami?
  • #20 7233855
    janbernat
    Poziom 38  
    To jest tylko wskazówka, a nie prawdziwy kod:

    
    $regfile = "M8def.dat"
    
    $crystal = 16000000
    'Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portb.1 , Db5 = Portb.2 , Db4 = Portb.3 , E = Portb.4 , Rs = Portb.5
    
    Config Portb = Output
    
    Enable Interrupts
    Ocr2 = 199                                        ' tak daje 40kHz
    Tccr2 = 25                                        'To daje CTC dla T2.Bascom nie chciał się tak ustawić więc dałem mu
                                                       'spokój i ustawiłem ręcznie
    Enable Oc2
    On Oc2 Licz
    Dim Zadana_liczba As Byte
    Zadana_liczba = 100
    Dim Liczba_krokow As Byte
    Liczba_krokow = 0
    Reset Portb.4
    
    Do
    
    Loop
    
    End
    
    Licz:
    Incr Liczba_krokow
       If Liczba_krokow = Zadana_liczba Then
       Stop Timer2
       End If
    
    Return

    To nie Twój procesor- zmień.
    To nie Twoja cząstotliwość- zmień.
    Częstotliwość w przyzwoitych sterownikach ok.25kHz-dopasować.
    A poza tym jak najmniej zmian w stosunku do Twojego programu- tylko przerwania.
    Ale to tylko idea- chociaż pozwala się skompilować.
    Ale to tylko1% sukcesu-=kompilacja.
  • #21 7235090
    karol1010
    Poziom 21  
    do janbernat

    no super z tego co widze jest to generator. Tylko njiemoge dopatrzyc sie narastania czestotliwosci. ;(

    Dodano po 3 [minuty]:

    zmieniając ocr2 i tccr2 ustalam częstotliwość??

    Krotko mowiac procesor sprzętowo generuje częstotliwość a ja mogę spokojnie na boku zmieniać ją jakimś algorytmem??
  • #22 7238851
    janbernat
    Poziom 38  
    No pewnie że tylko generator.
    Chodziło o pokazanie jak to zrobić w przerwaniach.
    Ale ponieważ muszę zrobić coś takiego z narastaniem częstotliwości i innymi bajerami to proszę o dopominanie się co kilka dni na priv o sprawozdanie nad postępem prac.
    Najlepiej na dwa dni przedtem zanim o to samo zapyta mnie boss:D
    Będę to robił na Atmega168 a nie na Atmega8.
    Pierwsze zderzenie- ma dwa rejetry OCR i dwa TCCR.
    Z tym sobie poradzę.
    Ale gotowy kod będzie na tę grupę procesorów.
    :D
    P.S.
    Bossa stosunkowo łatwo spacyfikować.
    Nie zna się na tym.
    Ale wyrzutów sumienia że zamiast pisać grzebię na elektrodzie- nie.
    To forum jednak ma wadę- uzależnia.
  • #23 7245440
    karol1010
    Poziom 21  
    A jeśliby procesor dokonywał tylko liczenia impulsów i włączania i wyłączania zewnętrznego generatora?

    Sterowanie silnika krokowego (step,dir) za pomoca AVR
  • #24 7245569
    janbernat
    Poziom 38  
    To też dobrze.
    Silnik by chodził.
    Ale pracuję nad tym.
  • #25 7632114
    karol1010
    Poziom 21  
    Cytat:
    To też dobrze.
    Silnik by chodził.
    Ale pracuję nad tym.


    I jak prace.. Ja z powodu braku czasu zbudowałem tylko powyższy układ na 555 silnik rusza i zatrzymuje się pięknie aż milo :) tylko co użyć w atmedze żeby to działało...

    Jeśli chodzi o start to spoko uruchamiam licznik i 555. Procek liczy.... a co jak już zliczył??

    Rampa zatrzymania nie zawsze ma tyle samo impulsów. :(

    Chyba ze są gotowe układy ze wysyłam z atmegi słowo cyfrowe: jedz 122 korki w prawo a on już wie co i jak z impulsami :)
  • #27 7632437
    karol1010
    Poziom 21  
    hmm no brzmi wyśmienicie tylko co to za układ.... nawet rozpiski niema.... może to tylko algorytm??
  • #28 7632532
    Konto nie istnieje
    Poziom 1  
  • #30 7632667
    karol1010
    Poziom 21  
    Dzieki ale to co mi wysłałeś jest dla mnie za ciężkie i niezrozumiale :(((
REKLAMA