El proceso de implementar un modelo discreto en C ++ / Arduino

0

He desarrollado un sistema electrónico integrado centrado alrededor de Arduino Due. En mi aplicación, estoy controlando la fuerza del efector final de un objeto rígido utilizando un motor de CC. El sensor de fuerza de retroalimentación tiene mucho tiempo muerto y no puedo obtener el rendimiento que espero con un PID estándar. Ahora estoy buscando un modelo de control predictivo, pero al principio intentaré usar un predictor de Smith. Para hacer esto, necesitamos desarrollar un modelo interno que describa el sistema que tenemos. Nunca he hecho esto y necesito orientación sobre la formulación de un modelo discreto y su implementación en C ++ / Arduino.

Hasta ahora, he desarrollado un modelo de tiempo continuo basado en datos de entrada-salida usando la Caja de herramientas de identificación del sistema en MATLAB. Luego realicé la discretización apropiada (retención de orden cero) para obtener un modelo discreto, \ $ H (z) \ $, en el dominio z. Para implementar esto en C ++ / Arduino, creo que debo realizar la transformación z inversa para obtener \ $ h [n] \ $. \ $ h [n] \ $ luego se escribe en una rutina de servicio de interrupción (ISR) para obtener la salida del modelo.

Por ejemplo, mi modelo continuo es:

$$ H = \ frac {1} {5s + 10} $$

Al utilizar la retención de orden cero a 100 Hz, el modelo discreto es:

$$ H_ {zoh} = \ frac {0.00198} {z-0.9802} $$

Tiempo de muestra: 0.01 segundos

Usando la tabla de la transformación z, la inversa \ $ h [n] \ $ es:

$$ h [n] = 0.00198 \ cdot \ mathcal {H} (n-1) \ cdot 0.9802 ^ {(n-1)} $$

Hasta ahora, ¿es lo que he estado haciendo en el camino correcto? Si es así, ¿cómo implementaría esto en un ISR?

    
pregunta Danny Gelman

1 respuesta

1

Puedes escribir tu sistema como \ $ H (z) = \ dfrac {B (z)} {A (z)} \ $ el uso de una fórmula recursiva para el filtro IIR donde tienes los coeficientes A y B. Antes de tener que cambiar el formulario para tener un denominador como \ $ A (z) = 1 + a1 \ cdot z ^ {- 1} + a2 \ cdot z ^ {- 2} + .. \ $ multiplicando su formulario

    
respondido por el Marko Buršič

Lea otras preguntas en las etiquetas