JS
Guest
Sun May 16, 2004 8:16 am
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
--
_N_O_S_P_A_M_bsj@poczta.onet.pl
(usuń _N_O_S_P_A_M_ z adresu)
jerry1111
Guest
Mon May 17, 2004 6:16 am
On Sun, 16 May 2004 11:16:28 +0200, "JS"
<_N_O_S_P_A_M_bsj@poczta.onet.pl> wrote:
Quote:
chciałem zaimplementować programowo regulator PID, ale coś mi się wykrzacza.
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.
--
Jerry
JS
Guest
Mon May 17, 2004 7:14 pm
Quote:
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.
--
Jerry
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
--
_N_O_S_P_A_M_bsj@poczta.onet.pl
(usuń _N_O_S_P_A_M_ z adresu)
Jacek R. Radzikowski
Guest
Tue May 18, 2004 2:35 am
jerry1111 <stop_this_spam_jerry1111_remove@remove.wp.pl> wrote:
Quote:
On Sun, 16 May 2004 11:16:28 +0200, "JS"
_N_O_S_P_A_M_bsj@poczta.onet.pl> wrote:
chciałem zaimplementować programowo regulator PID, ale coś mi się wykrzacza.
E=Vzadana-Vmierzona
Ei+=E*(okres_dzialania_PID)
I to ma niby calkowac? Cienko to widze. Przydala by sie jakas historia,
chociazby tak circa-about dlugosci stalej czasowej obiektu
Quote:
wyjscie=Kp*E+Ti*Ei+Td*(Vmierzona-Vostatnia)*(okres_dzialania_PID)
Vostatnia=Vmierzona
pzdr.
j.
jerry1111
Guest
Tue May 18, 2004 6:53 am
On Mon, 17 May 2004 22:14:07 +0200, "JS"
<_N_O_S_P_A_M_bsj@poczta.onet.pl> wrote:
Quote:
E=Vzadana-Vmierzona
Ei+=E*(okres_dzialania_PID)
wyjscie=Kp*E+Ti*Ei+Td*(Vmierzona-Vostatnia)*(okres_dzialania_PID)
Vostatnia=Vmierzona
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.
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?
--
Jerry
jerry1111
Guest
Tue May 18, 2004 8:13 am
On Tue, 18 May 2004 01:35:08 +0000 (UTC), "Jacek R. Radzikowski"
<jacek@spamer.die.die.die.piranet.org> wrote:
Quote:
jerry1111 <stop_this_spam_jerry1111_remove@remove.wp.pl> wrote:
On Sun, 16 May 2004 11:16:28 +0200, "JS"
_N_O_S_P_A_M_bsj@poczta.onet.pl> wrote:
chciałem zaimplementować programowo regulator PID, ale coś mi się wykrzacza.
E=Vzadana-Vmierzona
Ei+=E*(okres_dzialania_PID)
I to ma niby calkowac? Cienko to widze. Przydala by sie jakas historia,
chociazby tak circa-about dlugosci stalej czasowej obiektu
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.
--
Jerry
J.F.
Guest
Tue May 18, 2004 12:04 pm
On Tue, 18 May 2004 11:13:02 +0200, jerry1111 wrote:
Quote:
On Tue, 18 May 2004 01:35:08 +0000 (UTC), "Jacek R. Radzikowski"
E=Vzadana-Vmierzona
Ei+=E*(okres_dzialania_PID)
I to ma niby calkowac? Cienko to widze. Przydala by sie jakas historia,
chociazby tak circa-about dlugosci stalej czasowej obiektu
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.
Jacek R. Radzikowski
Guest
Tue May 18, 2004 2:42 pm
J.F. <jfox_nospam@poczta.onet.pl> wrote:
Quote:
On Tue, 18 May 2004 11:13:02 +0200, jerry1111 wrote:
On Tue, 18 May 2004 01:35:08 +0000 (UTC), "Jacek R. Radzikowski"
E=Vzadana-Vmierzona
Ei+=E*(okres_dzialania_PID)
I to ma niby calkowac? Cienko to widze. Przydala by sie jakas historia,
chociazby tak circa-about dlugosci stalej czasowej obiektu
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 +=
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:)
Quote:
Operowanie setka ostatnich sie chyba mija z celem - ma calkowac blad,
a nie tylko patrzec po ostatkach.
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
Quote:
Natomiast ograniczenie wartosci, wylaczenie calki przy zbyt duzym
bledzie - to mozna przetrenowac.
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.
jerry1111
Guest
Tue May 18, 2004 7:39 pm
On Tue, 18 May 2004 13:42:48 +0000 (UTC), "Jacek R. Radzikowski"
<jacek@spamer.die.die.die.piranet.org> wrote:
Quote:
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:)
Operowanie setka ostatnich sie chyba mija z celem - ma calkowac blad,
a nie tylko patrzec po ostatkach.
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.
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.
Quote:
Natomiast ograniczenie wartosci, wylaczenie calki przy zbyt duzym
bledzie - to mozna przetrenowac.
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
Bo ja wiem - w przypadku za duzego Ei to raczej jakis blad trzeba
zglaszac, a nie probowac kombinowac :-)
--
Jerry
Jacek R. Radzikowski
Guest
Tue May 18, 2004 11:10 pm
JS <_N_O_S_P_A_M_bsj@poczta.onet.pl> wrote:
[...]
Quote:
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ł.
Zerknij sobie na
http://www.embedded.com/2000/0010/0010feat3.htm.
Troche teorii i gotowa procedurka. Moze cos CI pomoze
j.
JS
Guest
Wed May 19, 2004 3:00 pm
Quote:
Dzięki wszystkim za sugestie. Teraz myślę, że już sobie poradzę.
Pozdrawiam
JS
--
_N_O_S_P_A_M_bsj@poczta.onet.pl
(usuń _N_O_S_P_A_M_ z adresu)