slt a tous
finalement mon programme de timer capteur de vitesse est marché
maintenant j'ai besoin d'asservissement de moteur courant continu par un régulateur PID j'ai essayée par un code suivant
le problème en les paramètre de PID kp , ki et kd je connais pas !
et le programme est ce que juste ou non ??
ps : le consigne présenté par un potentiomètre ou bien par un nombre dans le programme
schema proteus et programme dans la pièce jointée
Code:void main() { unsigned long kp=2,ki=250,kd=0,sum_err=0,last_obs=0,observation,consigne,err=0; signed long out; //unsigned string[10]; adcon1=0x80; // activation du convertisseur TRISC=0; pwm1_init(500); // activation du MLI pwm2_init(500); // activation du MLI PWM1_Set_Duty(0); // changement du rapport cyclique PWM2_Set_Duty(0); // changement du rapport cyclique PWM1_Start(); PWM2_Start(); do { consigne =adc_read(0); observation= adc_read(1); err= consigne - observation; // integ_vitesse+=err; out = (signed long)(kp*(float)err + ki*(float)sum_err + kd*((float)last_obs-(float)observation)) ; // out = 255- (x / 2); PWM2_Stop(); PWM1_Start(); out=(out * 100)/255; PWM1_Set_Duty(abs(out)); sum_err=err; last_obs=observation; // PWM2_Stop(); // PWM1_Start(); // v =(x-512)/ 2; // PWM2_Set_Duty(out); // out=(out * 100)/ 255; } while(1); }
-----