Implementación de control PI para Buck Converter usando Arduino

1

Estoy implementando el control actual en mi convertidor buck síncrono usando ARDUINO UNO. Diseñé mi control a través del método "Simétrico Óptimo" y calculé los valores para Kp y Ki (no Kd ya que estoy implementando el control PI). Estoy implementando el control utilizando la Biblioteca de PID de Arduino . Tengo las siguientes dos preguntas con respecto a esto:

(P.S: es la primera vez que implemento el control, así que podría estar preguntando algunas cosas realmente básicas)

1) Al usar esta biblioteca PID, si solo quiero usar el PI, pasaré el valor "0" al parámetro Kd, y esto hará el trabajo, ¿no?

2) La frecuencia de conmutación de mi convertidor Buck es de 62.5kHz, así que calculé que el tiempo de muestreo sería 16us. Y he usado este valor de tiempo de muestreo, es decir, 16us en mi método de diseño PI para calcular el valor de Kp y Ki. Y también se supone que debemos multiplicar este valor (16us) con Ki al implementar el control en el microcontrolador (esto también se hace en la función SetSampleTime ()).  Ahora se supone que debo pasar este valor de tiempo de muestreo a la función SetSampleTime (). Pero estoy confundido aquí, y la confusión es que no quiero que mi controlador sea muy rápido (es decir, que trabaje en 16 us) ya que estaré cargando una batería usando este controlador, por lo que obtener valores (actualizar el controlador) en un intervalo de 1 segundo Sé también lo suficientemente bueno. Entonces, ¿está bien para mí pasar algún otro valor de tiempo de muestreo, como puede ser 100ms a SetSampleTime en lugar de 16us? Quiero decir, ¿puedo pasar este valor en mi escenario actual? o ¿volveré a calcular los valores de Kp y Ki utilizando los 100 ms como frecuencia de muestreo, y entonces solo puedo pasar este valor del tiempo de muestreo (100 ms) a mi función SetSampleTime ()?

Para explicar mi confusión un poco más, el valor de "Tiempo de muestra" se usa en dos lugares de la biblioteca PID: uno, se usa para decirle al controlador cuándo debe actualizarse, y dos, es siendo multiplicado por el parámetro Ki. Así que estoy confundido de que quiero muestrear lentamente que 16us, pero he calculado el Kp, y Ki usando 16us como el tiempo de muestreo. Entonces, ¿cuál sería el camino correcto si quiero muestrear lentamente que en 16 us? Espero poder aclarar el segundo punto.

Se agradecerán sus útiles sugerencias y comentarios.

Gracias

    
pregunta yiipmann

1 respuesta

1

Prueba esto:

// parameters are T0..sample time[s], Kp..gain, Ti..integrating time[s]
//At init ek1, uk1 = 0

// compute coeficients at init and at each parameter change 
q0 = Kp*(1 + T0/(2*Ti));
q1 = -Kp*(1 - T0/(2*Ti));

//execute this in ISR at every sample time - timer interrupt 
// u..output
ek1 = ek;
ek = setpoint - actual;

u = q0*ek + q1*ek1 + uk1;

if u > u_max then
   u = u_max;
elsif u < u_min then
   u = u_min;
end_if;

uk1 = u;
    
respondido por el Marko Buršič

Lea otras preguntas en las etiquetas