Implementación de D (diferenciación) en PID

8

Estoy implementando un controlador PID para el control de velocidad del motor. Ya terminé de implementar el control PI y funciona perfectamente bien para mí. En la especificación me han dicho que implemente una técnica de filtrado utilizando la siguiente ecuación para la parte D:

ingrese la descripción de la imagen aquí

Ahora, lo que entiendo hasta ahora, es que generalmente srepresenta "dx/dt"lo que corresponde a la tasa de cambio de error, pero aquí puedo relacionarlo con la tasa de cambio de retroalimentación. Td/Nes para limitar la salida de ganancia general (espero haberlo hecho bien). Ahora para representar esto en términos de código C, probé de la siguiente manera:

        s = (CurrentFeedback()-Old_Feedback)*100/(MaxFeedback()); //to calculate the % change in feedback
        s = s*1000/sampleTime;      //1000 is multiplied because sampleTime is in milliseconds
        D = (Td*s)/(1+(s*Td/N));
        D = D*KP;   //Kp is multiplied as per the standard pid equation.

        Old_Feedback = CurrentFeedback();
        PID = P+I-D;

Bueno, los resultados al agregar D no son lo que he predicho. Solo quiero saber si implementé la ecuación de la porción D correctamente. ¿Estoy cometiendo algún error en mi comprensión de las matemáticas básicas de diferenciación?

NOTA: No estoy en libertad de cambiar el recalculado de kp, ti, td ya que proviene directamente del VFD.

spp
fuente
Pruebe embedded.com/design/prototyping-and-development/4211211/… , "PID sin un doctorado". Hay una sección clara sobre la implementación derivada.
Scott Seidman
2
Cuando declaras Old_Feedback = CurrentFeedback () está mal. Debe leer el valor con CurrentFeedback () y almacenarlo en temp. variable CurrentFeedback_tmp, luego use ese valor cada vez en ese ISR, porque cada vez que llame a fct CurrentFeedback () recupera el valor real, que será diferente cada vez que lo recupere.
Marko Buršič
"Los resultados al agregar D no es lo que he predicho", ¿qué has predicho? ¿Por qué son diferentes?
Greg d'Eon
Aquí hay un gran potencial para desbordamientos de enteros. ¿Cuáles son los tipos de las variables involucradas y ha considerado los valores máximos de ellas?
Lundin
s, D es S32, KP, Td y N U16. el tiempo de muestra es U32. Considere los valores máximos de variable según el valor máximo posible de tipos de datos particulares.
spp

Respuestas:

1

Tengo 3 puntos para compartir:

1-Te diré por qué las personas se meten con términos de signo D, PID = P + I + D pero, D = kd * (error-error), y en control de posición si te estás acercando al punto establecido, siempre es mayor <error, entonces el término D será negativo y, por lo tanto, disminuye la salida y evita el sobreimpulso.

2-Con respecto al tiempo, no dividas ni uses el tiempo. dado que está utilizando un microcontrolador incorporado, simplemente haga una constante de tiempo y cancélela de todas las ecuaciones: por ejemplo, use una interrupción de temporizador para generar una constante de tiempo de 1 ms y llame a su función dentro.

3-Por qué está utilizando PID para el control de velocidad, el 90% del tiempo PI es suficiente en el control de velocidad, ya que D aquí se parece más al control de aceleración.

Espero que ayude

Electrones
fuente