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

[C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

VolKhen 30 Gru 2012 15:48 60474 143
  • Witam wszystkich,

    Chciałbym przedstawić konstrukcję, którą wykonałem jako pracę inżynierską na Uniwersytecie Technologiczno-Przyrodniczym w Bydgoszczy.
    Tematem pracy był serwonapęd oparty o silnik prądu stałego z enkoderem.
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Myślę, że wiele osób ten temat powinien zainteresować, ponieważ brakuje tej tematyki na forum. Przynajmniej gdy ja robiłem tą pracę to dość nie wiele o tym było w porównaniu np. do silników krokowych.

    Zastrzegam, że był to mój pierwszy projekt oparty o mikroprocesor i właściwie przy nim nauczyłem się programować w C. O silnikach też niewiele wiedziałem, więc kosztowało mnie to sporo pracy. Kod na pewno można poprawić (jak wszystko), Miło by było gdyby ktoś kto poprawił kod pochwalił się tym tutaj.
    Trudności podczas budowy modelu nie wystąpiły, najwięcej walczyłem z zakłóceniami. Udało mi się je opanować przez dławik, ekranowanie i bramki z histerezą.

    Sam model serwonapędu nic nie robi i do niczego nie służy - jest to model edukacyjny. Niedługo rozpoczynam budowę własnej frezarki i na pewno przetestuję własny serwonapęd aby zobaczyć jak się sprawdzi w praktyce.

    Mile widziane merytoryczne komentarze co można poprawić itd., ponieważ moja praca magisterska jest rozwinięciem tematu i praktycznym wykorzystaniem tego sterownika.

    Zdjęcia z budowy:
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Jeszcze film. Jako sterowanie wykorzystałem drugi silnik, który generuje impulsy tak jak oprogramowanie np. Mach.

    Link


    Całość tematu opisana jest w pliku pdf, który zawiera pracę inżynierską. Jest to małe kompedium wiedzy dla osób, które mają małe doświadczenie w tej tematyce a chcą zbudować np. robota.

    W załączniku również projekt AVR Studio 4 z kompletem źródełek.

    Edit: W PDFie z pracą w bibliografii nieumyślnie zostały pominięte źródła niektórych schematów. Schematy te zostały zaczerpnięte z instrukcji obsługi zestawu ewaluacyjnego firmy And-Tech. Przy okazji naprawdę polecam wszystkim tą firmę z uwagi na jakość produktów i dbałość o klienta. Idealny zestaw ewaluacyjny na początek przygody z AVR.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Computer Controls
  • #2 30 Gru 2012 18:19
    Hoptymista
    Poziom 14  

    Szkoda, że zrobiłeś to na płytce ewaluacyjnej a nie na zaprojektowanej płytce.
    Drugie spostrzeżenie to dlaczego użyłeś przekładni ciernej? Nie lepiej użyć małej pasowej alb zębatej? Z czego jest ta ładna obudowa, czarna na samym dole.

  • #3 30 Gru 2012 18:47
    avatar80
    Poziom 11  

    Dodano po 12 [sekundy]:

    Hoptymista napisał:

    Drugie spostrzeżenie to dlaczego użyłeś przekładni ciernej? Nie lepiej użyć małej pasowej alb zębatej?


    Zdjęcia może nie są zbyt dobrej jakości, ale można na nich dostrzec:
    - pasek zębaty
    - przekładnia silnik <-> koło napędowe, zbudowane jest z dwóch zębatek, w dodatku na skośnych zębach, dla zminimalizowania luzów na tych kołach.

    Ładny projekt.

  • #4 30 Gru 2012 18:49
    VolKhen
    Poziom 13  

    Hoptymista napisał:
    Drugie spostrzeżenie to dlaczego użyłeś przekładni ciernej? Nie lepiej użyć małej pasowej alb zębatej?

    Nie użyłem paska bo budowałem ten model ze "złomu" części, które były zużyte w maszynach i wymienione na nowe jednak do budowy tego modelu nadawały się jeszcze. Akurat miałem takie części i tyle.
    To jest przekładnia zębata natomiast karetka porusza się napędzana paskiem Bando S2M.
    Hoptymista napisał:
    Z czego jest ta ładna obudowa, czarna na samym dole.

    Jest to profil aluminiowy malowany proszkowo, kawałek podstawy od plotera tnącego - leżał kilka lat aż znalazł swoje nowe miejsce ;)

  • #6 30 Gru 2012 22:10
    Gizmoń
    Poziom 28  

    Praca inżynierska może tak wyglądać? Hmmmm, pod względem stylu konstrukcji to myśmy w Technikum podobne robili albo nawet lepsze... Niech praca magisterska będzie elegancka :)

    Na filmiku słychać, że silnik chyba czasem zaczyna oscylować i wyraźnie słychać jego "kroki" - warto trochę zmniejszyć parametry regulatora, prawdopodobnie przede wszystkim D i I. Mechanizm będzie wtedy pracował gładko i cicho.

    Co do zakłóceń, to jeśli indukowały się na połączeniu enkoder - sterownik, warto było zrobić zaraz przy enkoderze takie "nadajniki linii" z kilku tranzystorów na kanał i zastosować przewód ekranowany. To wystarczy, nawet przy przewodach o długości 2m (pewnie i więcej, ale akurat tyle sprawdziłem).

    Serwonapędy we frezarce to jest to :) A może w modelu edukacyjnym warto zastosować enkoder np. liniowy, kontrolujący pozycję karetki? To by pozwoliło objąć pętlą sprzężenia zwrotnego wszystkie przekładnie, można by regulatorem zniwelować luzy, byłoby jeszcze ciekawiej :)

  • #7 30 Gru 2012 22:11
    noel200
    Poziom 25  

    Witam
    Przyznam, że bardzo interesujące, zważywszy na frezarkę, która stoi u mnie w garażu :P
    Przekładnię, silnik, paski to się da kupić, a powiedz mi o enkoderze, skąd go masz? Sam zrobiłeś?
    Kolejna sprawa to rozdzielczość. Wiem, że można ją sobie dowolnie zmieniać, przekładnią, wielkością koła pasowego i rozdzielczością enkodera, ale jaką akurat ma twoje urządzenie?
    Kolejna sprawa to dokładność. Przewaga tego rozwiązania jest taka, że nie zgubi kroków ten napęd w stosunku do silnika krokowego, ale czy osiągnięcie zadanego położenia przez silnik odbywa się tak, że silnik delikatnie przejedzie zadaną pozycję i wróci (milimetr, bądź mniej)? Czyli typowy wykres działania regulatora PID?
    I tak na marginesie, jaki maksymalny chwilowy prąd podajesz na silnik?

  • Computer Controls
  • #8 30 Gru 2012 22:20
    VolKhen
    Poziom 13  

    leonow32 napisał:
    Czy ten serwonapęd umożliwia "trzymanie pozycji"? Tzn jak pociągniesz pasek to czy on będzie ciągnął w drugą stronę z taką samą siłą, by pasek pozostał nieruchomy?

    Tak, jak każdy serwonapęd. Dzięki sprzężeniu zwrotnemu sterownik stara się kompensować. Polecam przeczytać pdfa tam wszystko jest.

    Dodano po 5 [minuty]:

    Gizmoń napisał:
    Praca inżynierska może tak wyglądać? Hmmmm, pod względem stylu konstrukcji to myśmy w Technikum podobne robili albo nawet lepsze... Niech praca magisterska będzie elegancka :)


    Widocznie może. Co konkretnie jest nie tak? Pedantyczne podejście wg mnie to przesada.
    Gizmoń napisał:

    Na filmiku słychać, że silnik chyba czasem zaczyna oscylować i wyraźnie słychać jego "kroki" - warto trochę zmniejszyć parametry regulatora, prawdopodobnie przede wszystkim D i I. Mechanizm będzie wtedy pracował gładko i cicho.

    Tuning robiłem już dwa lata temu i pamiętam, że oscylacje nie przekraczały 1 kroku, więc nie przekraczały jakichś tam założeń projektu. Serwonapędy w ploterach też czasem wpadają w wibracje, szczególnie gdy stoją w miejscu.
    Gizmoń napisał:

    Serwonapędy we frezarce to jest to :) A może w modelu edukacyjnym warto zastosować enkoder np. liniowy, kontrolujący pozycję karetki? To by pozwoliło objąć pętlą sprzężenia zwrotnego wszystkie przekładnie, można by regulatorem zniwelować luzy, byłoby jeszcze ciekawiej :)

    Enkoder liniowy był w planach - nawet miałem czujnik i tasiemkę jednak zabrakło czasu na wykonanie wszystkiego i praca została złożona i tak sporo po terminie - praca zawodowa zabiera za dużo czasu.

  • #9 30 Gru 2012 22:22
    Gizmoń
    Poziom 28  

    noel200 napisał:
    czy osiągnięcie zadanego położenia przez silnik odbywa się tak, że silnik delikatnie przejedzie zadaną pozycję i wróci (milimetr, bądź mniej)? Czyli typowy wykres działania regulatora PID?


    To zależy od ustawienia parametrów i rozdzielczości enkodera. Można poruszać się bardzo szybko i nawet kilkakrotnie minąć cel, albo dojeżdżać wolniej, ale dokładniej.

    Cytat:
    Tuning robiłem już dwa lata temu i pamiętam, że oscylacje nie przekraczały 1 kroku, więc nie przekraczały jakichś tam założeń projektu. Serwonapędy w ploterach też czasem wpadają w wibracje, szczególnie gdy stoją w miejscu.


    Mi chodzi o ciągłe wibracje, właśnie w czasie postoju. Nie powinno ich być. Kwestia porządnego nastrojenia regulatora (i dobrego enkodera - sygnały nie mogą być przesunięte w fazie o np. 10°, bo nigdy się tego dobrze nie zestroi).

  • #10 30 Gru 2012 22:25
    VolKhen
    Poziom 13  

    noel200 napisał:
    a powiedz mi o enkoderze, skąd go masz? Sam zrobiłeś?
    Kolejna sprawa to rozdzielczość. Wiem, że można ją sobie dowolnie zmieniać, przekładnią, wielkością koła pasowego i rozdzielczością enkodera, ale jaką akurat ma twoje urządzenie?


    Enkoder był oryginalnie zamontowany na silniku. Miał 400 imp. na obrót to przy dekodowaniu x2 daje 800imp. na obrót.
    noel200 napisał:

    Kolejna sprawa to dokładność. Przewaga tego rozwiązania jest taka, że nie zgubi kroków ten napęd w stosunku do silnika krokowego, ale czy osiągnięcie zadanego położenia przez silnik odbywa się tak, że silnik delikatnie przejedzie zadaną pozycję i wróci (milimetr, bądź mniej)? Czyli typowy wykres działania regulatora PID?

    Jeśli zrobisz duży skok (nagły) to będzie tak jak piszesz. Natomiast sterowanie powinno odbywać się płynnie tak aby nie przekroczyć maksymalnego przyspieszenia jakie może uzyskać silnik. Inaczej serwonapęd nie nadąży za rozkazem.
    noel200 napisał:

    I tak na marginesie, jaki maksymalny chwilowy prąd podajesz na silnik?

    L298 może dać maks 4A po zmoskowaniu dwóch kanałów, nie pamiętam już czy je mostkowałem czy nie...

  • #11 30 Gru 2012 22:26
    noel200
    Poziom 25  

    Gizmoń napisał:
    To zależy od ustawienia parametrów i rozdzielczości enkodera. Można poruszać się bardzo szybko i nawet kilkakrotnie minąć cel, albo dojeżdżać wolniej, ale dokładniej.

    O to mi właśnie chodziło. Podejrzewam, że zadaną pozycję karetka przejeżdża co dyskwalifikuje układ w zastosowaniu we frezarce.
    A kolejne pytanie: jaki tam silnik siedzi? Zgaduję, że komutatorowy. Jeżeli tak to ile ma blaszek komutator i ile działek ma enkoder?

  • #12 30 Gru 2012 22:28
    VolKhen
    Poziom 13  

    Gizmoń napisał:


    Mi chodzi o ciągłe wibracje, właśnie w czasie postoju. Nie powinno ich być.


    Ten filmik nagrywałem przed ostatecznym tuningiem, ogólnie wszystko było robione na wariata i nie miałem czasu na dokumentowanie, ostatecznie silnik pracował płynnie.

  • #13 30 Gru 2012 22:29
    noel200
    Poziom 25  

    Gdyby takie coś sobie samemu robić na zwykłym silniku i jakimś enkoderze to regulować możemy z dokładnością do jednej blaszki na komutatorze, a nie działki enkodera, czy mam rację?

  • #14 30 Gru 2012 22:32
    VolKhen
    Poziom 13  

    noel200 napisał:
    Gdyby takie coś sobie samemu robić na zwykłym silniku i jakimś enkoderze to regulować możemy z dokładnością do jednej blaszki na komutatorze, a nie działki enkodera, czy mam rację?

    Nie masz racji, silnik działa powiedzmy "analogowo" - może się przesunąć o dowolny kąt a ograniczeniem jest tylko dokładność enkodera.

  • #16 30 Gru 2012 22:34
    VolKhen
    Poziom 13  

    Proponuje przed zadaniem pytania przeczytać PDFa z pracą :) - jest tam praktycznie wszystko...

    Nie żebym chciał napijać sobie punkty ;) i tak nie wiem co z nimi zrobię...

  • #17 30 Gru 2012 22:34
    noel200
    Poziom 25  

    VolKhen napisał:
    Nie masz racji, silnik działa powiedzmy analogowo - może się przesunąć o dowolny kąt a ograniczeniem jest tylko dokładność enkodera.

    Więc jak rozumiem po osiągnięciu pozycji przez enkoder (czyli też silnik) prąd z silnika zostaje odcinany i silnik pozbawiony jest napięcia, inaczej niż krokowiec?

  • #18 30 Gru 2012 22:36
    VolKhen
    Poziom 13  

    Tak, z tego co pamiętam mój serwo wyłączał napięcie na silniku to znaczy PWM schodził do zera. Co nie oznacza, że enkoder przestawał czuwać. Silnik reaguje natychmiast na zewnętrzną siłę.

  • #19 30 Gru 2012 22:37
    Gizmoń
    Poziom 28  

    Tu nie ma właściwie czego porównywać do silnika krokowego, to jest zupełnie inna sprawa. Po osiągnięciu pozycji napięcie na silniku spada do wartości, przy jakiej ta pozycja jest utrzymana (czyli bez obciążenia do zera).

  • #20 30 Gru 2012 22:40
    noel200
    Poziom 25  

    Enkoder to oczywiście swoją drogą. On musi cały czas czuwać, żeby przywrócić silnik na ustaloną pozycję po wystąpieniu zakłócenia.
    Gdyby zastosować śruby z samohamownym gwintem we frezarce to ciekawe rozwiązanie. Zmniejszony pobór prądu, nie grzeją się tak mocno silniki...
    Jednak w pierwszej chwili ciągłe "trzymanie" pozycji przez krokowca wydaje się być pożądanym zjawiskiem.
    Trzeba by popracować na frezarce takiej i takiej, żeby poznać wady i zalety każdego z rozwiązań.

  • #21 30 Gru 2012 22:41
    VolKhen
    Poziom 13  

    Jakie polecacie metody strojenia PID w takich układach? Ja robiłem wymuszenie 1 i 100 kroków i badałem odpowiedź. Szczegóły w PDFie z pracą.
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Oś Y [kroki] Oś X [ms]

  • #22 30 Gru 2012 22:43
    Gizmoń
    Poziom 28  

    Serwo też ciągle trzyma pozycję, od ustawienia regulatora zależy jak sztywno. Ale niestety może wpadać w rezonans i zaczynać oscylować, co czasem jest powodem problemów w maszynach ze śrubami o dużym skoku które nie są samohamowne. Przy samohamownych nie ma się czym przejmować.

    Szczerze mówiąc to próbowałem różnych metod i najlepsza była ta "na czuja", ale nie całkiem przypadkowa. Najpierw wyłączałem całkiem DI i ustawiałem P tak, że zaczynał oscylować, po czym zmniejszałem nastawę nawet do ok. ½ tej wartości. Później właściwie jednocześnie zwiększałem I oraz D tak, żeby uzyskać najmniejszy uchyb i brak drgań, ale żeby regulator nie działał "zbyt sztywno".
    Wyprowadzanie układu z równowagi poprzez skok o kilkanaście kroków albo ręczne kręcenie wałkiem. To drugie zwłaszcza przy ustawianiu członu całkującego.

    Strojenie ostateczne przeprowadzam już w pełni działającym układzie przy regularnych sygnałach kroków (tzn. o stałej częstotliwości). Prawie zawsze okazywało się, że PID zestrojony doskonale na podstawie obserwacji reakcji na duże skoki, zaczynał szarpać przy pewnej stałej częstotliwości kroków. Wpadał w rezonans. Ale wystarczyło nieznacznie zmienić (zmniejszyć) wartości parametrów.

  • #23 30 Gru 2012 22:46
    noel200
    Poziom 25  

    VolKhen napisał:
    Jakie polecacie metody strojenia PID w takich układach? Ja robiłem wymuszenie 100 kroków i badałem odpowiedź. Szczegóły w PDFie z pracą.

    W sumie dobre i sensowne. Ja kończyłem automatykę i kiedyś w pracy musiałem napisać PID w sterowniku. Obiekt regulacji nie istotny. Istotne jest jednak to, że żeby policzyć jakąkolwiek metodą parametry regulatora musiałem znać kilka danych o obiekcie. A większość z odzysku i nie przeznaczona do pracy w takiej konfiguracji i okazało się, że szkoła i cała wiedza nie przydała się zupełnie na nic. Zważywszy jeszcze na ilość czasu w dużej mierze dobrałem "na pałę", później korekcje i tyle.

  • #24 30 Gru 2012 22:57
    1079413
    Użytkownik usunął konto  
  • #25 30 Gru 2012 23:00
    VolKhen
    Poziom 13  

    lordpakernik napisał:
    Czy to silnik o magnesach trwałych? Enkoder absolutny czy inkrementalny?


    Zwykły silnik DC komutatorowy z magnesami trwałymi.
    Enkoder inkrementalny

  • #26 30 Gru 2012 23:09
    noel200
    Poziom 25  

    A opowiedz mi jeszcze trochę o tym sterowaniu.
    Sterownik otrzymuje jakąś tam ilość impulsów. Od razu od pojawienia się pierwszego rusza silnik i tak nim kręci, żeby tyla samo impulsów przyszło z enkodera (nie wiem jak u ciebie, ale to technikalia, a ja mam na myśli koncepcję).
    Oczywiście (przynajmniej wg mnie) silnik nie jest w stanie nadążać za ilością przychodzących impulsów, gdyż w jakimś tam bezpiecznym zakresie jest ustawiony prąd, a impulsy przychodzą za szybko. I co wtedy się dzieje? Odkładane są gdzieś na stos i w miarę jak się silnik kręci są z tego stosu odejmowane?

  • #27 30 Gru 2012 23:12
    1079413
    Użytkownik usunął konto  
  • #28 30 Gru 2012 23:21
    VolKhen
    Poziom 13  

    Gdy silnik nie nadążą i wielkość błędu przekracza jakąś ustaloną wartość to powinien wyskoczyć alarm przeciążenia i wyłączyć maszynę - taki stan powinien być zabroniony.

    Jeśli chodzi o drobne błędy typu 1 krok to akumulowane są w członie całkującym regulatora PID. Odsyłam do algorytmu regulatora PID, który jest w PDFie.

    Dodano po 2 [minuty]:

    lordpakernik napisał:
    Czyli tańszy enkoder. Jeśli ma magnesy to nie ma szczotek. A jeśli to jest zwykły silnik DC to trochę nieaktualne bo teraz wchodzą siniki o magnesach trwałych bezszczotkowych. Na czym oparte jest sterowanie? Wektorowe?

    Wszystkie plotery drukujące i tnące rolkowe pracują na silnikach DC komutatorowych. Nie wiem co to wnosi do tematu, ten sterownik jest na takich silnikach i niech dyskusja będzie na temat. Serwonapęd może być oparty na dowolnym silniku, DC, krokowym czy BLDC.

  • #29 30 Gru 2012 23:23
    1079413
    Użytkownik usunął konto  
  • #30 30 Gru 2012 23:26
    VolKhen
    Poziom 13  

    lordpakernik napisał:
    Chodziło mi, żeby wyjść na przód a nie trzymać się starych metod. Właśnie chodzi mi o silnik BLDC. Na jakiej zasadzie działa sterowanie silnika?

    Wszystko jest w pełnym opisie, Jak działa sterowanie?
    Pytania o wektory nie rozumiem ;)

    Mikroprocesor odczytuje enkoder > Oblicza błąd w stosunku do pozycji zadanej > na podstawie błędu PID oblicza odpowiedź > Wyjście PID to wypełnienie PWM silnika - tak w skrócie.