Apreciaré su orientación en esto. Tengo algunas publicaciones anteriores sobre esto, pero ahora estoy mostrando el código. Estoy diseñando un controlador PI integrado usando una placa Nucleo STM32. En la configuración PWM, un 0 significa 0% de servicio y 800 significa 100% de servicio. El objetivo es regular la velocidad de un motor PMDC. Estoy confundido acerca de la salida PI y la relación del ciclo de trabajo. Esto es lo que tengo:
int error=0;
int target_RPM=0;
int duty_cycle=0;
int Kp = 0;
int integral = 0;
int current_RPM = 0;
int Ki = 0;
Planeo ejecutar el siguiente bucle PID cada 5 ms (aún no estoy seguro) con una interrupción.
//Get current RPM
current_RPM = read_RPM();
//Get the error
error = target_RPM - current_RPM;
//Calculate the integral
integral = integral+error;
//Calculate the Control Variable
duty_cycle = (Kp*error) + (Ki*integral);
//Limit the Control Variable to within 0-800
if(duty_cycle>800){
duty_cycle = 800;
}
else if (duty_cycle<0){
duty_cycle = 0;
}
htim1.Instance->CCR1 = duty_cycle;
Todavía no tengo las constantes PI. Primero, quiero asegurarme de que el algoritmo sea correcto . Además, sé que necesito anti-viento para la variable integral, pero aún no estoy seguro de cómo implementarla.