Convierta los parámetros PID al formato Q15

He calculado la función de transferencia de mi sistema para aplicarle un PID. KpCon MATLAB y la herramienta PID Tuner obtuve los Kiparámetros Kdde mi controlador PID. Por ejemplo en mi caso son 0.175, 371.22 y 0 respectivamente.

Ahora, necesito usar estos valores en mi DSP pero el algoritmo PID usa el formato fraccional Q15 para todo. Sé cómo debo escalar los valores de entrada y salida de mi PID:

  • Si el valor de entrada máximo es x, divídalo entre xsi va de -xa x, o (x/2)-1si va de 0a xy luego conviértalo a Q15 fraccional

  • Para el valor de salida, escálelo según sus necesidades

Pero , ¿cómo convierto mis parámetros PID Kpy Q15 correctamente? Si les aplico algún factor como lo hago para los valores de entrada y salida, en realidad estoy cambiando la respuesta del bucle, entonces, ¿cómo se hace esto? Creo que esto debería ser algo bastante común al diseñar PID digitales.KiKd

Respuestas (2)

En primer lugar, los valores máximos representables del formato Q15 son -1 y 0,9999. Entonces podrías tener un problema con tu Ki.

La solución más común para convertir un doble en Q15 es multiplicarlo por 2^15.

Usualmente estoy usando esta macro:

#define Q15(x)(s16) ((x<0.0) ? (s16)(32768*(x) - 0.5):(s16)(32768*(x) + 0.5))

Pero debido a que su Ki no funciona con el formato Q15, debe usar otro formato Q. por ejemplo: Q6 o Q7.

Para más información puedes consultar wikipedia .

Entonces, simplemente no hay forma de hacerlo, ¿tengo que mantener mis parámetros por debajo de 1?
O podría cambiar sus parámetros solo 6 veces. (=P6)
¿El código seguirá funcionando si fue diseñado para usarse con Q15 y yo uso Q6?
Simplemente cambie la longitud de la fracción de 15 (32768) a 6 (64).

Puede usar la función matlab interna: fi(v) para construir un objeto numérico de punto fijo: https://de.mathworks.com/help/fixedpoint/ref/fi.html