Sterowanie silnikiem DC

May 16, 2004 10 Replies

Nie macie jakiego¶ napisanego w C przyk³adu sterowania silnika DC za pomoc± PWM ->mostek H? Na wale silnika mam magnes, który prze³±cza dwa hallotrony, tak, ¿e mogê okre¶liæ kierunek obrotów i zliczyæ ich ilo¶æ. Kiedy nie ma sprzê¿enia zwrotnego miêdzy takim impulsatorem a procedur± sterowania PWM-em, to obroty silnika bardzo zale¿± od obci±¿enia. Aby utrzymaæ obroty na sta³ym poziomie chcia³em zaimplementowaæ programowo regulator PID, ale co¶ mi siê wykrzacza. Je¶li mogliby¶cie udostêpniæ jakie¶ przyk³ady lub linki do literatury, chêtnie bym je poogl±da³.



Pozdrawiam JS


E=Vzadana-Vmierzona Ei+=E*(okres_dzialania_PID) wyjscie=Kp*E+Ti*Ei+Td*(Vmierzona-Vostatnia)*(okres_dzialania_PID) Vostatnia=Vmierzona

Ubrac to w C, zrobic na stalym przecinku i bedzie dzialac. Jesli PID dziala np. co 1ms, to zmienna okres_dzialania_PID ma byc

0.001 - czyli po naszemu to jest dT.

No w³a¶nie ubra³em w C prawie dok³adnie to co napisa³e¶ (przynajmniej tak mi siê wydaje), a dzia³aæ nie chce. Dlatego zale¿a³o mi na jakich¶ przyk³adach, choæby po to, aby sprawdziæ, czy nie okre¶li³em parametrów np. o trzy rzêdy za du¿ych, albo, ¿e mi arytmetyka szwankuje. Siedzê nad tym ju¿ kilka dni i chyba siê przegrza³em. W ka¿dym razie dziêki za zaintersowanie.

Pozdrawiam JS

I to ma niby calkowac? Cienko to widze. Przydala by sie jakas historia, chociazby tak circa-about dlugosci stalej czasowej obiektu

pzdr. j.

Jak masz zrobiona arytmetyke? Oczywiscie wiesz o tym, ze jak mnozysz

2 liczby staloprzecinkowe to potem wynik trzeba w prawo przesunac? Musiales gdzies cos pozajaczkowac - bo to po prostu dziala. Moze rzuc na grupe ten kod?

To jest tak ogolnie - w zaleznosci od charakteru obiektu albo trzeba dodac ograniczenia na wartosci max i min, albo miec tablice np: 100 ostatnich wartosci i operowac ich suma.

Jacek chyba nie dostrzega += :-) Operowanie setka ostatnich sie chyba mija z celem - ma calkowac blad, a nie tylko patrzec po ostatkach. Natomiast ograniczenie wartosci, wylaczenie calki przy zbyt duzym bledzie - to mozna przetrenowac.

J.

Fakt, umknal mi ten '+' :) To w takim ukladzie mamy sliczna, niemal teoretyczna calke, i problem z nasyceniem albo, przy odrobinie nieuwagi, przewinieciem wyniku. Ale jesli to ma byc tylko idea to juz sie nie czepiam:)

Racja, ale z praktycznego punktu widzenia malo nas iteresuje wartosc bledu wiele stalych czasowych temu. W najgorszym przypadku osiagniemy stan ustalony, ale taka sytuacja oznacza ze ktos nie odrobil swojej pracy domowej jak potrzeba i nastawy regulatora mozna uzyc jako zakladke do ksiazki. W zamian uzyskujemy zabezpieczenie przed przepelnieniem i (ewentualnie) dzialania na krotszych zmiennych

Z teoretycznego punktu widzenia rzecz nie warta uwagi. Ale w praktyce moze byc ciekawie, jak ktos bedzie chcial wykorzystac pelen zakres wartosci zmiennej i jako zabezpieczenie wstawi porownanie z wartoscia maksymalna (ktore nigdy nie bedzie spelnione, bo wczesniej przepelni sie 'akumulator'. Nagle sie okaze ze mamy ogromny blad o przeciwnym znaku i wtedy zacznie sie zabawa:)

pzdr. j.

Przy regulowaniu predkosci silnika dosc dobrze mi sie sprawdzila ta suma X ostatnich bledow. Zreszta jest to rozwiazanie lepsze od ograniczania Ei od dolu i od gory, bo pozwala na zmniejszanie czlonu calkujacego po dojsciu do wartosci zadanej - przy ograniczeniu wartosci jest problem, ze zmiejszyc Ei mozna _tylko_ poprzez wymuszenie bledu w druga strone => latwo mi sie wtedy wszystko wzbudzalo.

Bo ja wiem - w przypadku za duzego Ei to raczej jakis blad trzeba zglaszac, a nie probowac kombinowac :-)

JS <_N_O_S_P_A_M snipped-for-privacy@poczta.onet.pl> wrote: [...]

Zerknij sobie na

formatting link
teorii i gotowa procedurka. Moze cos CI pomoze

j.

Dziêki wszystkim za sugestie. Teraz my¶lê, ¿e ju¿ sobie poradzê.

Pozdrawiam JS

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required