Serwonapęd DC na AVR

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
kszumek
-
Posty: 7
Rejestracja: 16 sty 2007, 0:08
Lokalizacja: Białystok

Serwonapęd DC na AVR

Post autor: kszumek » 16 sty 2007, 19:04

Witam
poszukuje wszelkich materiałów na temat servosterowników DC
chce zaprogramować avr At90s2313
mam już gotowy sterownik bez procka servosilnik, enkoder
jak wsadzić tam PID regulator ? :-)
pozdr

zajcew
-
Posty: 12
Rejestracja: 15 lut 2007, 14:42
Lokalizacja: Szczecin

Post autor: zajcew » 16 lut 2007, 1:06

jeśli mnie pamięć nie myli to serwomechanizmy modelarskie(rozumniem że o takim mowa) sterowane są impulsem o zmiennej szerokości 10ms- max w lewo 20ms-max w prawo
wykorzystaj któryś z timerów w trybie autoprzeładowania albo CTC(jeśli jest AT90xxx)
więcej szczegółow widziałem na elektrodzie (www.elektroda.pl) pod chasłem serowanie servo.

Pozdrawiam

ZbeeGin

Post autor: ZbeeGin » 16 lut 2007, 6:49

zajcew pisze:wykorzystaj któryś z timerów w trybie autoprzeładowania albo CTC(jeśli jest AT90xxx)
Albo jeszcze prościej jeden z trybów PWM licznika Timer1.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 17 lut 2008, 16:25

Witam!
Właśnie chciałem założyć temat pt. "Jak zaimplementować algorytm PID lub ulepszony PID w procesorze AVR?", ale wpisując w wyszukiwarkę frazę "PID" wyskoczył mi m.in. ten temat wiec nie zakładałem nowego. Teraz do rzeczy.
Wg. mnie Koledze kszumek chodziło- tak jak i mnie w tym momencie- o serwosilnik (serwomotor , napęd servo) nie zaś o serwomechanizm modelarski.
Powolutku małymi krokami przymierzam się do napisania prostego programu do obslugi serwa, a do tego niezbędny mi będzie algorytm PID który muszę jakoś "wsadzić" w AVR. Przeczytałem kilka artykułów na elektrodzie ale chciałby poznać wasze opinie na ten temat , może macie jakieś doświadczenia w tej dziedzinie. W dowód tego, że się da, poczytajcie: http://www.mcselec.com/index.php?option ... &Itemid=57
Na razie to tylko przymiarki, ale chce sie dobrze przygotować do tego projektu i dlatego proszę was o pomoc. Dziekuję i pozdrawiam.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 18 lut 2008, 7:11

Odnośnie PID'a proponuję przejrzeć noty aplikacyjne Atmela i Microchipa (szczególnie microchipa tam jest dość dobrze wyjaśniony algorytm PID). Robiłem pracę dyplomową której częścią był algorytm PID i przy implementowaniu wzorowałem się na notach Microchipa bo były dość jasno napisane. Cały algorytm zmieścił się w 10 linijkach kodu w C :) Nota aplikacyjna dotyczyła zdaje się jakiegoś samochodzika. Jak sprawdzałem później działanie algorytmu to proces przebiegał "tak jak w książkach piszą" ;)

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 18 lut 2008, 10:36

Dziękuję za informację. Poszukam w zasobach tych firm. Ja co prawda bede pisał w BASCOM ale skoro przedstawiony jest tam algorytm to nie (może) nie będzie większych problemów.

dzikibonk
-
Posty: 3
Rejestracja: 18 lut 2008, 18:58
Lokalizacja: pruszków
Kontakt:

Re: Serwonapęd DC na AVR

Post autor: dzikibonk » 18 lut 2008, 19:29

kszumek pisze: jak wsadzić tam PID regulator ? :-)
pozdr
Proponuje zapoznac sie najpierw z samym algorytmem regulacji PID - by wiedziec z czym to sie je - a dopiero pozniej myslec o implementacji algorytmu w mikrokontrolerze. W tym przypadku w praktyce wszystko sprowadza sie do wyliczania "odpowiedzi regulatora", na ktora skladaja sie m.in. takie operacje matematyczne jak : oddawanie, mnozenie, calkowanie i rozniczkowanie. Wlasciwy dobor uzytych metod numerycznych w kodzie programu pomoze uzyskac godziwa predkosc przetwarzania.

Materialy Microchipa faktycznie sa dobre, ale bez podstawowej wiedzy o algorytmie PID niewiele zdzialasz.
Na poczatek zbuduj sobie zwykly P, czyli zrealizuj takie dzialanie : u(i)=e(i)*Kp,
gdzie :
u(i) - wyjscie - odpowiedz regulatora,
e(i) - wejscie regulatora - uchyb,
Kp - stala proporcjonalna regulatora,
i - iteracja petli programu (przypominam, ze tutaj traktujesz ten regulator jako dyskretny).
Podstawowa wiedza z automatyki by sie przydala ;)P Jak przetrawisz powyzsze, to naucz jeszcze procka calkowac i rozniczkowac, zsumuj wynik i bedziesz mial PIDa. Jak jeszcze prawidlowo bedzie reagowal na metody strojenia wg. zeiglera-nicholsa, to jestes kurde gosc! Mi to sie udalo zrobic w okolo 500 linijkach asemblerowego kodu - calosc lacznie z matematyka na 8bitowcu bez sprzetowego mnozenia - 16f648A. Regulator ten sterowal silnikiem DC w petli sprzezenia polozeniowego - typowy obrabiarkowy serwonaped.

pozdrawiam

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 19 lut 2008, 0:22

:arrow: dzikibonk
Serwonapęd jest elementem inercyjnym (tzn. należy go rozpatrywać jako element inercyjny). generalnie to jest kilka metod sterowania a jedna z nich mówi ze prędkość obrotową serwa reguluje sie ma podstawie drogi którą przybył. Tak z grubsza rzecz biorąc napęd ma zwalniać w miarę jak zbliża się do punktu przeznaczenia. Zrobiłeś tak samo??
Ponoć takiej metody juz się nie stosuje, ale nie wiem- dopiero zaczynam gromadzić informacje.
Zajrzyj proszę na tą stronę której link podałem w powyższym poście i powiedz co o tym myślisz.

dzikibonk
-
Posty: 3
Rejestracja: 18 lut 2008, 18:58
Lokalizacja: pruszków
Kontakt:

Post autor: dzikibonk » 20 lut 2008, 20:53

:arrow: gwozdex
"Serwonapęd jest elementem inercyjnym (tzn. należy go rozpatrywać jako element inercyjny)."

Jest to stwierdzenie zdecydowanie nieprecyzyjne i prawdopodobnie bledne. Charakter obiektu mozesz okreslic na podstawie obserwacji jakiejs (jednej z wielu) wielkosci charakterystycznych/wyjsciowych. Domyslam sie, ze miales tu na mysli polozenie. To, czy serwonaped zachowa sie jak element inercyjny czy oscylacyjny, calkujacy, etc. zalezy od zastosowanego algorytmu regulacji, w tym od wlasciwego dobrania nastaw regulatora do obiektu wg przyjetych kryteriow. Mozesz sobie zwyklego PIDa nastroic tak, ze obiekt (silnik) bedzie zachowywal sie podobnie jak element inercyjny w ujeciu polozeniowym. Rownie dobrze moze wykazywac gasnace oscylacje. Mozesz tez nastroic tak, ze bedzie niestabilny. Automatyka, to temat rzeka, ktorego nie da sie omowic w kilku mejlach. Jezeli juz zbudujesz wymagany regulator i bedziesz go w stanie matematycznie opisac (bedziesz mial jego model, ktory np. pozniej bedzie mozna symulowac), to przyznasz, ze wiedza o programowaniu samego MCU to kropla w morzu w stosunku do ilosci wiedzy/materialu, dzieki ktoremu (swiadomie!) zdecydowales sie na wybrany algorytm, lub (swiadomie!) opracowales swoj wlasny. Uff... ale dlugie zdanie mi wyszlo...

Moj regulator, wlasciwie: algorytm, pracowal tylko w petli sprzezenia polozeniowego. Nie byl zatem w stanie bezposrednio kontrolowac predkosci. Co prawda mozna bylo na nia wplywac na drodze wlasciwego dostrojenia czlonu D, ale to nie jest to o co pytasz - to byl jakby efekt uboczny, jednakze osiagalny. W przypadku, o ktorym mowisz nalezalo by dodac ponadto sprzezenie predkosciowe lub wprowadzic regulator paramatryczny - to najprostsze rzeczy, jakie przychodza mi do glowy w chwili gdy to pisze. O linku, ktory podales mysle, ze nie chce mi sie analizowac kodu :lol: . Sposobow na uzyskanie trapezoidalnego przebiegu predkosci, w trakcie osiagania zadanej pozycji, o ktory pytasz, jest wiele wiecej, niz powyzej wymienilem.

To, jakie metody regulacji sie stosuje (albo "juz" nie stosuje - jak piszesz) nie jest zalezne od jakiegokolwiek "trendu" w technice. Na ten przyklad PID od prawie 60ciu lat pozostaje sila napedowa automatyki przemyslowej. O wyborze metody/algorytmu regulacji/rodzaju sprzezenia decyduje glownie efekt jaki chcesz uzyskac, no i poniekad koszt jaki musisz (lub jestes w stanie) poniesc, np. potrzebna moc obliczeniowa, etc. W wiekszosci przypadkow miedzy wymagana jakoscia regulacji, a poniesionymi kosztami zachodzi kompromis.

W przypadku mojego ukladu celem bylo mozliwie szybkie uzyskanie żądanego położenia kątowego wału silnika, przy zerowym uchybie (warunek konieczny), z mozliwie małym przeregulowaniem i możliwie małą liczbą oscylacji. W zasadzie udalo sie to wykonac przy sprzezeniu polozeniowym i przy stalych nastawach regulatora, tzn. bez zadnej parametryzacji.

Do czego chcesz zastosowac swoj naped? Pytam, bo moze okazac sie, ze wystarczy Ci upchnac zwyczajnie regulator proporcjonalny i uzyskasz zamierzony efekt. Wogole wiesz jak sie zachowuje dyskretny (skoro mowa o MCU) regulator PID - jaki efekt daje kazdy z czlonow i jak ma sie do tego czas probkowania?

ps. na szybciora znalazlem w necie cos takiego:
http://www.kaniup.agh.edu.pl/~ozadow/serwo/teoria.pdf
to tak bardzo ogolnie o serwonapedach.

pzdr

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 21 lut 2008, 0:03

Witam i dziękuję za odpowiedz.
Wogole wiesz jak sie zachowuje dyskretny (skoro mowa o MCU) regulator PID - jaki efekt daje kazdy z czlonow i jak ma sie do tego czas probkowania?
Tak wiem o czym mowa. Może z pamięci nie wyrecytuję wszystkich regułek i wzorów, ale wiem o co w tym chodzi. Wiem za co są odpowiedzialne poszczególne człony.
przyznasz, ze wiedza o programowaniu samego MCU to kropla w morzu w stosunku do ilosci wiedzy/materialu, dzieki ktoremu (swiadomie!) zdecydowales sie na wybrany algorytm, lub (swiadomie!) opracowales swoj wlasny
Z tym też się zgadzam i dlatego napisałem w powyzszym poście ze chce zgromadzić wiedzę teoretyczna i posłuchać kogoś kto to robił. Samo napisanie programu ( przy opracowanym algorytnie) to bedzie juz formalność.

Chcę wykorzystać serwo do sterowania maszyny CNC. Z tego co zauważyłem w mom miejscu pracy to jest to zrealizowane w sposób jaki opisałem w poprzednim poście (zwalnia w miarę osiągania pozycji.) I do takiego efektu bedę dążył... Za 3miesiące jak wróce z podrózy służbowej :wink:
Jeszcze raz dziękuję za pomoc. Janusz.
Ps. Może jakiś schemacik Kolega podrzuci??

dzikibonk
-
Posty: 3
Rejestracja: 18 lut 2008, 18:58
Lokalizacja: pruszków
Kontakt:

Post autor: dzikibonk » 21 lut 2008, 8:35

gwozdex pisze: Z tym też się zgadzam i dlatego napisałem w powyzszym poście ze chce zgromadzić wiedzę teoretyczna i posłuchać kogoś kto to robił. Samo napisanie programu ( przy opracowanym algorytnie) to bedzie juz formalność.
Nie wiem na jakim poziomie jest Twoja obecna wiedza, ale zycze powodzenia :wink: Nie zapomnij tylko pochwalic sie efektem.
gwozdex pisze: Chcę wykorzystać serwo do sterowania maszyny CNC.
Hehe :) skad ja to znam... Jezeli ma to byc maszyna do zabawy a projekt ma na celu doedukowanie sie, to w porzadku - chyle czola i podziwiam zapal. Bo jezeli ta maszna ma na siebie zarabiac, to predzej czy pozniej dojdziesz do wniosku, ze lepszym rozwiazaniem bedzie gotowy naped (tu wymienil bym kilka firm, ale nie placa mi za reklame :wink: hehe).
gwozdex pisze: Z tego co zauważyłem w mom miejscu pracy to jest to zrealizowane w sposób jaki opisałem w poprzednim poście (zwalnia w miarę osiągania pozycji.) I do takiego efektu bedę dążył...
Obawiam sie, ze mowisz tutaj o komercyjnych rozwiazaniach. Moze byc ciezko im dorownac, biorac pod uwage chociaz to, ze takie napedy/algorytmy sa efektem lat pracy calkiem niemalych zespolow ludzi. Zapewniam Cie, ze nie sa to zwykle PIDy.
gwozdex pisze: Jeszcze raz dziękuję za pomoc. Janusz.
Ps. Może jakiś schemacik Kolega podrzuci??
Niezamaco. Uklad mial byc modelowy - dla studentow na laborke - wiec schemacik jest prosty jak budowa cepa: silnik (12V DC szczotkowy z magnesami trwalymi) zasilany przez mostek H (L298), mostek H sterowany z wyjscia PWM z MCU poprzez optoizolacje. Uklad byl podzielony na dwa obwody: czesc niskoprodowa - tj. enkoder, port RS2323C i MCU, oraz wysokoprodowa - mostek H i silnik. Obwody te byly separowane za pomoca transoptorow. Enkoder odczytywany programowo z przerwania MCU, ale tu juz wchodze w opis kodu, ktorego szcegolow nie zdradze :mrgreen: Powiem tylko tyle, ze najwiekszym problemem w tym calym projekcie byl szybki odczyt enkodera. Z ukladem gadalo sie po RSie. Jezeli ciezko Ci wyobrazic czesc elektryczna, to moge poszukac schematu. Albo jak sie zmobilizuje, to zrobie jakas stronke www o tym, bo temat cieszy sie zainteresowaniem nie tylko tu.

pzdr

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 21 lut 2008, 9:20

Zbudowałem już maszynę CNC napędzaną silnikami krokowymi (niewielkie 2Nm, pobór 2A/fazę), a teraz chce spróbować jak to się będzie sprawowało z serwem.
Kopalnia wiedzy na tematy maszyn CNC jest na portalu www.cnc.info.pl.
Oczywiście poinformuję o efektach pracy, ale obawiam się ze to nie tak prędko bedzie...
Pozdrawiam.

ODPOWIEDZ