Está en la página 1de 2

float entrada, referencia,Kp,Kd,Ki,previous_error=0, integral=0, der int actual_position=0, setpoint, salida=0; float dt=.

001; void setup() { pinMode(13,OUTPUT); Kp=1; Kd=10; Ki=1; } void loop() { entrada=analogRead(0); referencia=analogRead(1); actual_position =map(entrada, 0, 1023, 0, 255); setpoint =map(referencia, 0, 1023, 0, 255); error =float(setpoint) - float(actual_position); if (error<0) { digitalWrite(13,HIGH); } else { digitalWrite(13,LOW); } if (error!=0) { integral = integral + (error*dt); derivative = (error - previous_error)/dt;

error_abs=abs(error); if (error_abs<10) { salida=int((Kp*error) + (Ki*integral) + (Kd*derivative)); } else { salida=int((Kp*error) + (Kd*derivative)); integral=0; } salida=abs(salida); if (abs(salida>255)) { salida=255; } analogWrite(3,abs(salida)); previous_error = error; }

delay (int(dt*1000)); }

También podría gustarte