Pregunta:
De la función de transferencia a arduino
MechAvia
2014-09-23 18:16:00 UTC
view on stackexchange narkive permalink

Esta pregunta puede parecer estúpida, pero he sentido curiosidad por ella durante mucho tiempo.

Soy un nuevo estudiante de ingeniería y aprendimos mucho sobre "diseñar un controlador". Por ejemplo, controlador de diseño para el sistema de dirección de un automóvil, etc. Todos los "controladores" que diseñamos están en el dominio de Laplace, también conocido como dominio s. Y la mayoría de las veces será solo una función de transferencia. Entonces, ¿cómo utilizan los ingenieros de sistemas de control reales estas funciones de transferencia en arduino y otros microcontroladores? Quiero decir que no puede simplemente poner la función allí, ¿verdad?

¿Tiene que convertir la función de transferencia a alguna otra forma y escribir el código para el microcontrolador o hay una forma más sencilla de hacerlo?

¡Gracias por tu tiempo!

One responder:
akellyirl
2014-09-24 14:02:49 UTC
view on stackexchange narkive permalink

Supongamos que tiene un Arduino que ha preparado para muestrear una señal con una frecuencia de muestreo de 1 / T que luego es procesada por su controlador. Supongamos también que el tiempo de procesamiento de su controlador es pequeño en comparación con T, p. Ej. 0.1 / T

En primer lugar, debe convertir la función de transferencia del controlador a tiempo discreto. Hay muchas formas de hacer esto. Matlab tiene una función c2d () conveniente. Una forma de hacerlo en papel (no la mejor) es usar el método de Euler.

s = (z-1) / T donde T es el período de muestreo .

Convertir una función de transferencia entonces: (s + a) / (s + b) => (z- (1-aT)) / (z- (1-bT))

Entonces ahora tiene un TF en z como: Y (z) / X (z) = (zc) / (zd) donde Y es la salida y X es la entrada.

Para implementar esto en un controlador, necesita esto como una ecuación de diferencia en términos de retrasos. Así que convierta la ecuación a una función de (z ^ -1) que es un retraso:

Y (z) / X (z) = (1-cz ^ -1) / (1 -dz ^ -1)

y vuelva a escribir como: Y (Z) (1-dz ^ -1) = X (z) (1-cz ^ -1 )

Y (Z) -dY (z) .z ^ -1 = X (z) -cX (z) .z ^ -1

y cambie al tiempo de muestra tratando z ^ -1 como un retraso: y (n) - dy (n-1) = x (n) - cx (n-1)

reorganizando: y (n) = dy (n-1) + x (n) - cx (n-1)

Puede implementar esto fácilmente en el Arduino al darse cuenta de que y (n-1) es el valor anterior de y (n) y de manera similar para x (n), y x (n) es el valor de entrada al controlador; es decir, la referencia menos la salida del ADC.

¿Le importaría darnos algún ejemplo de código para implementar este tipo de ejercicios? Te estaría muy agradecido. En mi caso, tengo una función de transferencia a / s + a, "a" es un valor que debo ingresar a través de un teclado conectado al mega arduino, he calculado las operaciones así, usando el método tustin: a1Z + a2 / b1Z + b2 donde cada valor es: a1 = a2 = (aT / aT + 2); b1: siempre es 1; y b2: aT-2 / aT + 2. T es el tiempo de muestra Como pueden ver he calculado todo pero tengo dificultades en el código de programación en arduino mega, si me pueden ayudar estaría muy agradecido.


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...