Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Sterownik silnika krokowego

danrok 21 Oct 2009 17:32 9405 30
IGE-XAO
  • #1
    danrok
    Level 13  
    Witam,
    dopiero zaczynam przygodę z elektroniką, więc proszę o wyrozumiałość. Dostałem jako projekt do wykonania sterownik silnika krokowego, ze sterowaniem mikrokrokowym za pomocą mikroprocesora. Wybrałem Atmege8, bo w niej już mam doświadczenie z programowaniem.

    Ogólnie koncepcja układu wygląda tak, że za pomocą uP generuję sygnał PWM binanie na wyjściach dołączonych do układu D/A. Z przetwornika D/A otrzymuję na wyjściu sygnał sin i cos, który mogę puścić na dwa mostki H, do których dołączony jest silnik.

    Trochę się naczytałem na ten temat, pogrzebałem, przekopałem parę sterowników gotowych i zmontowałem swój układ. Zanim jednak zacznę go lutować, wytrawiać itd. chciałbym zapytać się bardziej doświadczonych elektroników, czy ma on szansę zadziałać?

    Sterownik silnika krokowego

    Z góry dziękuję za konstruktywną krytykę.
  • IGE-XAO
  • #2
    janbernat
    Level 38  
    Wydaje mi się że będzie jakoś działać.
    Wszystko zależy od liniowości pracy mostka H.
    Chociaż rozwiązanie z przetwornikami D/A jest dość kuriozalne.
    Wady:
    Tranzystory mocy będą się wściekle grzać-sprawność 50%-czyli tyle mocy traconej w stopniu sterującym ile ma silnik.
    konieczne jest zasilanie silnika napięciem nominalnym czyli dla współczesnych silników 1-3V-bardzo trudno jest zrobić zasilacz na takie napięcie o rozsądnej sprawności.

    Poczytaj jeszcze.
    Zwłaszcza zwróć uwagę dlaczego scalone sterowniki są zasilane napięciem 30-40V a sterują silnikami o napięciu nominalnym 1-3V.
    Polecam stronę Wobit o sterowaniu silników krokowych.
    A także przestudiowanie danych katalogowych układów do sterowania- można też ściągnąć ze strony Wobit-u.
  • #3
    danrok
    Level 13  
    Ten silnik jest na napięcie 12V właśnie. Mówisz, że będą się grzały MOSFETY? Może je wymienić, ale na co, bipolarne chyba też dałyby radę? Co do D/A, to dlaczego rozwiązanie jest dziwaczne? Wydawało mi się najłatwiejsze i najbardziej oczywiste. Muszę mieć możliwość regulacji PWM za pomocą Atmegi i jak inaczej zamieniać sygnał bitowy który otrzymam na pinach na faktyczną sinusoidę?
  • #4
    janbernat
    Level 38  
    Zwróć uwagę że uzyskanie sterowania zbliżonego do sinusoidy- tzw. mikrokrokowego odbywa się tak:
    włączamy całkowicie mostek H -jedną z gałęzi oczywiście.
    Zaczyna przez tę gałąź płynąć prąd- z zasilania np. 30V do silnika który ma uzwojenie np. o oporności 1 Ohm i prądzie dopuszczalnym 1A.
    No, by się spalił.
    Ale to uzwojenie ma jakąś indukcyjność- więc prąd narasta stopniowo.
    Jak prąd osiągnie zadaną wartość-(to na opornikach zwanych często Rsens je mierzymy) to wyłączamy zasilanie tej gałęzi.
    Wykorzystujemy indukcyjność uzwojeń i PWM (Pulse Width Modulation)
    do sterowania silnikiem.
    Wtedy tranzystory w mostku H albo są włączone albo wyłączone.
    Wtedy nie ma na nich strat mocy- tylko przy przełączaniu.
    I dlatego stosunkowo małe układy mogą sterować silnikami.
    Bo w Twojej koncepcji radiatory do chłodzenia tranzystorów musiały by być dużo większe niż silnik.
  • #5
    danrok
    Level 13  
    Wszystko rozumiem, ale ja potrzebuje sterować amplitudą sygnału także - warunek sterowania mikrokrokami. U mnie nie wystarczy włączanie i wyłączanie tranzystora, tylko jego częściowe włączenie i zwiększanie napięcia na uzwojeniach. Silnik ma uzwojenia o rezystancji 13Ohmów, więc niewiele, prąd popłynie zapewne duży, bo ponad 1.1A.
  • #6
    janbernat
    Level 38  
    Przecież przy sterowaniu włączaniem/ wyłączaniem tranzystorów w dobrych sterownikach też masz 256 mikrokroków czyli 256 bitów rozdzielczości.
    Indukcyjność uzwojeń działa tak jak filtr dolnoprzepustowy na wyjściu przetwornika D/A.
    Który i tak należałoby dać.
    A odpada wielki radiator do chłodzenia tranzystorów.
    Amplitudą prądu musisz sterować.
    A to dają scalone sterowniki.
    Gdyby Twój pomysł był dobry to znalazłbyś mnóstwo takich rozwiązań układowych.
    Ale wszyscy producenci robią układy wykorzystujące PWM i indukcyjność uzwojeń silnika.
  • #7
    danrok
    Level 13  
    No właśnie na forum o CNC znalazłem sporo układów z D/A. Nawet na tej stronce
    http://en.nanotec.com/steppermotor_animation.html jest animacja układu, zawierającego przetwornik D/A. Mógłbyś dać jakieś namiary na opis sterowania takiego mosfetami za pomocą ON/OFF, aby otrzymać rozdzielczość conajmniej 2^4?

    Z góry dzięki i pozdrawiam
  • IGE-XAO
  • #8
    janbernat
    Level 38  
    Kocham tę animację.
    Ale zwróć uwagę ze prąd rzędu 10% nie jest uzyskiwany przez sterowanie analogowe- tak jak Ty chcesz uzyskać.
    To robi sterownik.
    Ten sterownik robi to sprzętowo- bardzo szybko.
    Na procesorze nigdy nie uzyskasz tej prędkości.
    Dlatego sugeruję abyś zastosował sterownik dedykowany do silników krokowych.
    Bo to jest tak:
    pracuje w takiej firmie przy produkcie(sterowniku) np.10 osób.
    Technolodzy, konstruktorzy, programiści, elektronicy itp.
    Przez rok np.
    Biorą za to pieniądze.
    Duże- bo dobra firma.
    A Ty chcesz ich przegonić?
    Nie zaprojektujesz x10 i nikt Ci nie płaci x10 tyle co im.
    Tak że znajdź sterownik i zrób korzystając z tego że robią tego 10 milionów.
  • #9
    danrok
    Level 13  
    Sorry, że tak późno odpisuję. Mógłbyś podać jakiś schemat tego o czym mówisz? Dzisiaj właściwie miałem wykłady o sterownikach krokowych, gdzie gość przytoczył D/A jako główny sposób sterowania, no ale nie kłócę się - nie mam doświadczenia. Tylko szukam jakiś materiałów, żeby przerobić trochę schemat.
  • #10
    User removed account
    User removed account  
  • #11
    janbernat
    Level 38  
    Poszukaj w googlu stepper motor driver
    albo stepper motor ic.
    Przejrzyj dokładnie noty katalogowe sterowników.
    Twój schemat to jest fragment wnętrza układu scalonego do sterowania silnikiem.
    Ale tylko fragment.
    Brakuje układów logiki sterującej, PWM i układu pomiaru prądu.
    To wszystko jest wewnątrz takiego układu.
    To działa tak:
    w zależności od wartości napięcia na wyjściu C/A układ włącza na określony czas tranzystor do którego kolektora/drenu jest podłączone uzwojenie silnika o jakiejś indukcyjności.
    Górny koniec uzwojenia jest włączony do zasilania np. 40V- mimo że silnik jest nominalnie na napięcie np. 2V.
    I nie trafia go szlag.
    Dlaczego?
    Bo uzwojenie ma indukcyjność czyli prąd narasta stopniowo.
    Gdy osiągnie pewien poziom sprawdzany przez sterownik to tranzystor zostaje wyłączony.
    Wartość prądu jest określana przez dwa parametry- jaki aproksymowany prąd jest odpowiedni dla sinusoidy i czy nie przekroczony został dopuszczalny prąd średni dla danego silnika.
    Układów jest sporo, schematów typowych aplikacji jeszcze więcej.
    A napopularniejszą metodą sterowania jest praca półkrokowa.
    PS.
    A w Twoim rozwiązaniu (które chyba by działało) nie wykorzystujesz właściwości silnika-indukcyjności- i optymalnej pracy tranzystorów jako kluczy włącz/wyłącz która daje TEORETYCZNIE pracę bez strat mocy na tranzystorze.
    Tranzystory mocy w zakresie częściowego wysterowania strasznie się grzeją.
  • #12
    danrok
    Level 13  
    Witam ponownie!
    Biorąc pod uwagę komentarze, zmieniłem trochę koncepcję układu i zastosowałem scalaka L298, podłączonego do PWM Atmegi.
    Cały układ zmontowany wygląda tak:

    Sterownik silnika krokowego

    Czy teraz ma to szansę zadziałać? Jeśli nie, to jakaś podpowiedź co jest nie tak?

    Dziękuję z góry i pozdrawiam!
  • #13
    135
    Level 11  
    Kolego możesz to zrobić na mosfet. bezpośrednio sterowany ze scalaka. każde uzwojenie na jedną nogę. jak ustawisz czas nasycenia uzwojenia na 10ms to nie bedzie się grzało.oczywiście jak silnik bedzie miał trzymać moment na osi to grzało się bedzie. trzebaby zastosować jakąś przekładnię która będzie trzymała układ w jednym położeniu a na silnik ustawić "0" żeby silnik odpoczął. Wiem że silniki krokowe odporne są na bardzo wysokie temperetury. Nie przejmuj się jak jest gorący. ;)
  • #14
    janbernat
    Level 38  
    Będzie działać.
    Na początek daj sterowanie półkrokowe- jak silnik zacznie się kręcić to motywuje do dalszej pracy.
    Potem PWM.
    Gdy już będzie PWM to przy postoju silnika (trzymanie momentu) zmniejsza się prąd do 0.5- 0.7 prądy nomimalnego.
    A i tak się grzeje.
    Czy 10ms?
    Trzeba by zmierzyć oscyloskopem, chyba że jest podana indukcyjność uzwojeń.
    Wtedy można obliczyć- ale często nie podają- tylko prąd i oporność.
  • #15
    danrok
    Level 13  
    Tak właśnie, indukcyjności nie mam podanej, będę musiał pomierzyć.

    Do układu chciałem dodać także pomiar prądu z wyjść SENS A i SENS B, nie wiem, czy
    ma to jednak sens? Chodziło mi o to, żeby wyłączać PWM, gdy prąd przy sterowaniu np. 1/8 krokowym, w momencie, gdy jego wartość będzie stanowiła 1/8 prądu znamionowego.
  • #16
    janbernat
    Level 38  
    W każdym kroku silnika należy kilkadziesiąt razy mierzyć prąd.
    Właśnie w tym SENS.
    I w zależności od wyniku i od żądanego przebiegu należy ustawiać wypełnienie PWM.
    1/8 kroku to nie jest 1/8 prądu znamionowego.
    Dlatego na forum jest trochę projektów sterowania silnika krokowego za pomocą procesora ale jeszcze nie spotkałem się z działającym układem z dokładnością większą niż pół kroku.
    Chyba że chodzi o naprawdę wolne obroty.
    Układy specjalizowane to jest sprzęt- szybkość w ns bo jest tylko do tego.
    A procesor to jest program- szybkość w us czyli 1000 razy wolniej- albo i gorzej.
    A wyłączyć PWM nie można- gdzie podtrzymanie momentu?
    PS.
    Można to zrobić tak:
    Włączyć w SENS-y oporniki np. 0.1 Ohm
    podłaczyć na te oporniki oscyloskop
    ustawić PWM na jakieś małe wypełnienie
    Do układu L298 dać jakieś 24V
    na oscyloskopie pojawi się piła.
    Zmierzyć napięcie na oporniku oscyloskopem
    przeliczyć to na prąd skuteczny i porównać z nominalnym.
    Potem opracować algorytm do procesora na dwa uzwojenia aby skuteczne prądy były sinusoidami przesuniętymi fazowo wykorzystując dwa PWM
  • #17
    danrok
    Level 13  
    Zmontowałem w końcu ten układ, lecz mam problem z jego zaprogramowaniem.
    Chodzi konkretnie o algorytm sterowania tym silnikiem. Wyznaczyłem bowiem
    wartość prądu, do której powinien narosnąć przy pełnym kroku i podzieliłem to na 8.
    Wejścia EnablaA i EnableB pozostają stale włączone, a na wejścia In1/In2/In3/In4
    zapodaje PWM programowy. Najpierw ustawiam "1" na wejście pierwsze oraz drugie,
    aż do osiągnięcia wartości prądu pełnego kroku/8,robię to w pętli ponieważ muszę
    przesunąć wał silnika o 90stopni. Tą samą czynność powtarzam na drugie/trzecie,
    trzecie/czwarte i czwarte/pierwsze. PWM-a wyłączam, gdy prąd na obu cewkach
    narośnie do odpowiedniej wartości. Czy się mylę?

    Z góry dziękuję za odpowiedź i pozdrawiam!
  • #18
    janbernat
    Level 38  
    Weż schemat wewnętrzny L289- str.1 i popatrz.
    Podajesz 1 na in1- to na wejście in2 musisz podać 0.
    Żeby prąd mógł przepłynąć przez mostek A.
    Tzn. lewy górny tranzystor, uzwojenie silnika i prawy dolny tranzystor.
    Zwróć uwagę że prawy dolny tranzystor jest sterowany przez wejście zanegowane bramki- aby był wysterowany na tym wejściu ma być stan niski.
    Prąd zaczyna stopniowo narastać.
    Stopniowo- bo przepływa przez indukcyjność uzwojenia silnika.
    Prąd mierzymy na oporniku sensA i napięcie z tego opornika podajemy na przetwornik A/C.
    Gdy prąd osiągnie zadaną przez nas wartość odcinamy sterowanie In1.
    Prąd zaczyna maleć stopniowo- bo indukcyjność uzwojeń...
    Dolny prawy tranzystor mostka musi w tym czasie być otwarty- jakąś drogą ten prąd musi się wydostać do masy.
    Ponownie włączamy sterowanie in1 itd.
    Po wykonaniu takich 5-10 sterowań wiemy że w ciągu tych 5-10 cykli ustalił się na uzwojeniu jakiś średni prąd sterujący.
    Potem ustalamy programowo nieco niższy średni prąd sterujący na uzwojeniu A i dajemy jakiś niewielki prąd na uzwojenie B.
    Oczywiście od tego momentu sterujemy mostkiem A i mostkiem B.
    I mierzymy prądy na sensA i sensB.
    I znowu cykl 5-10 sterowań i pomiarów.
    Na każdym z dwóch mostków.
    Wtedy wirnik silnika odchyli się od pozycji początkowej do pośredniej między A i B.
    O ile się odchyli- zależy od parametrów wpisanych w program.
    Najlepiej- jakieś przybliżenie sinusoidy.
    W następnych krokach zmniejszamy średni prąd w uzwojeniu A a zwiększamy w B.
    Aż w A będzie 0 a w B max.
    Potem zmniejszamy w B a w A zmieniamy polaryzację sterowania.
    Itd.
    Tak uzyskujemy sterowanie od 1/4 do aż 1/256 części kroku w sterownikach.
  • #19
    danrok
    Level 13  
    Czyli właściwie sterowanie w jednym kierunku sprowadza się do ustawiania jedynki
    i wyłączania jej w odpowiednim momencie, pozostawiając drugi tranzystor stale w stanie
    przewodzenia. Tu wszystko wydaje się być jasne i przyjemne, pozostaje jednak
    kwestia prędkości silnika. Jeśli wyłączę tranzystor szybciej, to prąd nie zdąży narosnąć,
    jeśli dłużej, to nie uzyskam odpowiedniego sterowania. Nie mogę też regulować napięcia
    na wejściu, bo to przecież TTL.. da się to jakoś rozwiązać?
  • #20
    janbernat
    Level 38  
    "Jeśli wyłączę tranzystor szybciej, to prąd nie zdąży narosnąć,
    jeśli dłużej, to nie uzyskam odpowiedniego sterowania."
    Jeśli szybciej wyłączysz tranzystor to prąd nie zdąży narosnąć- i masz średni prąd taki jaki chcesz.
    No jeśli dłużej- to prąd wzrośnie powyżej dopuszczalnego dla silnika
    ( i mostka) wartości i coś się może spalić.
    Zwróć uwagę że pomiary prądu muszą być wykonywane szybko i z małą dokładnością.
    Dlatego w układach do sterowania silników są przetworniki 3 bitowe- ale szybkie.
    Ten drugi tranzystor jednak w pewnym momencie musi być wyłączony.
    No i nie możesz regulować napięcia na wejsciu- tylko wypełnieniem.
    Zwykłe i dość nowoczesne układy sterowania tych silników mają szybkie przetworniki A/C 3 bit.
    3 bit wystarczy- a są szybkie.
    Poza tym są one zwykle projektowane do sterowania silników np. 2V nominalnie z zasilania np.40V- przez układ sterujący.
    A prędkość silnika ustawiasz- to jest kiedy włączysz uzwojenie B i zacznie w nim narastać prąd a maleć w uzwojeniu A.
  • #21
    danrok
    Level 13  
    Mógłbyś dokładniej rozwinąć, jak sterować prędkością przy mikrokrokach?
    Nie za bardzo zrozumiałem Twój wywód.
  • #22
    janbernat
    Level 38  
    Na przykładzie sterowania np. z dwóch zasilaczy regulowanych:
    Na uzwojenie A dajesz 12V.
    Potem na A dajesz 11V a na B 1V
    Potem na A 10V a na B 2V
    itd.
    Za każdym razem wirnik odchyla się coraz bardziej w kierunku uzwojenia B.
    Po wykonaniu 12 takich operacji na A jest 0V a na B 12V.
    Silnik wykonał jeden krok składający się z 12 mikrokroków.
    Silnik będzie kręcił się tak szybko jak szybko będą następowały te przełączenia.
  • #23
    danrok
    Level 13  
    No ok, wszystko jest jasne, ale przełączenia powinny nastąpić, kiedy prąd się zrówna,
    czy wtedy po prostu odciąć wejście In2 zapodając tam "jedynkę", dzięki czemu cewka
    nie będzie mogła się rozładować? Bo jak rozumiem największa prędkość silnika byłaby
    wtedy, kiedy na wyjściu uzyskamy sinusoide?
  • #24
    janbernat
    Level 38  
    Ja już przestaję rozumieć.
    To co podałem w ostatnim poście to tylko obrazowy opis pracy mikrokowej.
    W rzeczywistości te napięcia uzyskujesz przez impulsowe sterowanie mostka (przez PWM).
    W każdym z mikrokroków podajesz kilka- kilkadziesiąt impulsów sterujących mostek.
    To jak szybko będzie się zmieniała sekwencja zmian prądu określa szybkość obrotową a nie to czy jest sinusoidą.
  • #25
    danrok
    Level 13  
    Ok, napisałem pewien program, który ma za zadanie sterować
    silnikiem z pracą co 1/4 kroku. Czy to o to chodzi:
    KLIK
    Nie wiem jednej rzeczy. Jeżeli naładuję cewkę silnika do wartości prądu maksymalnego
    i chcę ten prąd na cewce zmniejszyć do wartości połowy tego prądu, to muszę
    otworzyć oba dolne tranzystory, tak?

    Da się może te sterowanie zapisać jakoś krócej, niż rozpisywać każdą sytuację?
  • Helpful post
    #26
    janbernat
    Level 38  
    i=(U/R)*(1-e^(-t/T)).
    Gdzie:
    U- napięcie zasilania (24V)
    R- oporność uzwojenia
    T=L/R- stała czasowa uzwojenia silnika- zwykle 10ms.
    L- indukcyjność uzwojenia silnika.
    L często nie podają dlatego można ją oszacować na podstawie podanego R i typowej wartości L/R 10ms.
    Po załączeniu napięcia na uzwojenie prąd zaczyna narastać od 0.
    Czyli włączyć przekątną mostka- jeden górny i jeden dolny tranzystor.
    W przypadku silnika na 12V i zasilania 24V i przy założeniu typowej konstrukcji po ok. 6ms osiąga napięcie i prąd na silniku osiągają nominalną wartość.
    Np. 1.1 nominalnej wartości.
    Teraz uzwojenie należy odciąć od zasilania- bo jak nie to prąd narośnie do niedopuszczalnej wartości.
    Czyli włączyć dolne tranzystory.
    Gdy prąd spadnie np. do 0.9 nominalnej wartości należy ponownie włączyć przekątną mostka.
    Mamy średnio prąd nominalny.
    Itd.-kilka razy.
    Oczywiście regulujemy to czasami włącz/wyłącz czyli przez PWM.
    Gdy już nam się to znudzi robimy tak:
    Na pierwsze uzwojenie dajemy czas taki aby uzyskać 0.9 prądu nominalnego (średnio)
    A na drugie np. 0.1 prądu.
    Też wypełnieniem PWM.
    Potem na pierwsze 0.8 prądu a na drugie 0.2.
    Potem to już idzie.
    Gdy już zrobimy jeden krok mikrokrokami to zmieniamy polaryzację jednego z uzwojeń i jedziemy dalej.
    Itd.
    P.S.
    Sinusoidę to chyba trzeba stablicować pierwszą ćwiartkę i potem z tej tablicy korzystać do obliczeń prądu.
    I lepiej to zrobić na liczbach całkowitych.
    Jakiś _uint8 wystarczy.
  • #27
    danrok
    Level 13  
    Wszystko stało się jasne! W ogóle inaczej kombinowałem, myślałem, że
    jeśli odetniemy cały mostek, to energia którą tam zostawiłem nie będzie miała się gdzie rozładować, ale to chyba faktycznie trochę głupie założenie..

    No nic, dzięki wielkie za pomoc, postaram się napisać ponownie program.

    Aha, jeszcze jedno pytanie - czy dołożenie do układu mostka L297 by coś
    poprawiło?
  • #28
    janbernat
    Level 38  
    A sprawdziłeś datasheeta od L297?
    To służy tylko do sterowania pełen krok/ półkrok.
    Uniemożliwiło by sterowanie mikrokowe całkowicie.
    W Twoim kombinowaniu jest część prawdy.
    Jak odetniesz cewkę w trakcie ładowania to powstają na niej duże przepięcia- energia w cewce dąży do rozładowania.
    Po to są diody zabezpieczające na wyjściu mostka- żeby zabezpieczyć tranzystory przed przebiciem.
    A czy zajrzałeś już tu?
    http://www.automatykaonline.pl/poradnik/artykuly.php?id=49
    P.S.
    Zajrzałem do Twojego pierwszego postu.
    Przetwornikiem DAC w tym wypadku będzie cały układ: wyjście PWM-mostek- silnik.
    Układem uśredniającym będzie indukcyjność uzwojeń silnika.
    Jeśli będziesz to chciał zobrazować na oscyloskopie to z PWM daj dodatkowe wyjścia przez kondensatory i filtry dolnoprzepustowe na wejścia oscyloskopu.
  • #29
    krzysiekj18
    Level 19  
    Witam

    Podepnę się pod temat. Również przymierzam się do budowy sterownika silnika z mikro-krokiem ( w zamyśle 1/16 ). Sterownik oczywiście zamierzam zbudować w oparciu o gotowy układ i mikroprocesor, z tą różnicą, że budowany przeze mnie sterownik będzie na prąd min 3A. I tu moje pytanie jaki zastosować gotowy układ do sterowania silnikiem? Znalazłem taki LMD18245, ale jest on niestety drogi ok 50zł a do wysterowania silnika są potrzebne dwa takie. Czy zna ktoś jakieś tańsze rozwiązania dające podobne możliwości do LMD18245 ?

    Pozdrawiam
  • #30
    janbernat
    Level 38  
    Poszukaj układów firmy Allegro w TME.