PID kerdesek
Moczik Gabor
pm at progzmaster.hu
Tue Jan 16 18:37:44 CET 2007
Hali!
Most kuzdok eletem elso digitalis PID motorszabalyzojaval. Olvasok a neten
egy par anyagot, de nem minden vilagos.
Annyi a kiserlet lenyege, hogy PWM-mel hajtok egy motort, es az inaktiv
felperiodusok alatt merem a Back-EMF feszt (ezek mukodnek).
A szabalyzokornek a fordulatszamot kellene stabilan tartani.
Eddig ennyi:
// RPM: a mert fordulatszam
// PWM: a motormeghajto jel kitoltesi tenyezoje
#define I_LEN 16
signed short integrator[I_LEN];
signed short integr;
unsigned char idx_new;
unsigned char idx_old;
signed short error_prev;
unsigned char Kp;
unsigned char Ki;
unsigned char Kd;
void PID()
{
error = setpoint - RPM;
// add the new value to the FIFO
integrator[idx_new] = error;
// calculate the sum of the FIFO
integr = integr + error - integrator[idx_old];
// step
idx_new++;
if (idx_new==I_LEN) idx_new=0;
idx_old++;
if (idx_old==I_LEN) idx_old=0;
pwm = pwm + (Kp*error + Ki*integr/16 + Kd*(error-error_prev))/100;
error_prev = error;
}
-----------
A P tag hibatlanul mukodik :-)
A kerdes:
Van ugye a 3 fele komponens, es annak a szorzo faktorjai, Kp, Ki, Kd.
Emellett meg feletetelezem, hogy kellene tudni allitani az integralashoz
hasznalt FIFO meretet is (I_LEN), mert nyilvan nem mindegy, hogy mekkora
idore integralok. Tovabba szerintem a derivalo tagnal is allithatonak
kellene lennie, hogy ne az elozo hanem korabbi mintat vonjon ki.
Egyebkent lehetne valahogy integralni nagymeretu FIFO nelkul?
(keves a RAM...)
--
((( Móczik Gábor )))--((( pm -> @ -> progzmaster -> . -> hu )))
((( Skype: moczik )))--((( Website: http://www.progzmaster.hu )))
More information about the Elektro
mailing list