Frecuencia de muestreo para el control PID para equilibrar un péndulo invertido usando 8051 - AT89c51rc2

2

Quiero controlar un motor dc (para equilibrar un endulum invertido) Quiero muestrear la entrada de los sensores (por ejemplo, ADXL345) y convertirla a digital usando un DAC. La velocidad máxima de datos de salida (ODR) para el sensor ADXL es 3200Hz. La frecuencia de muestreo de entrada y la velocidad de datos de control de salida al motor deben ser altas pero no demasiado altas, ya que el procesador también necesita tiempo para realizar los cálculos de control PID. Pero, ¿cómo calcular la frecuencia de muestreo y la frecuencia de datos de control de salida para que el motor los tenga en cuenta?

    
pregunta priti

3 respuestas

1

Esto depende de la dinámica de su sistema, del cual no nos ha dicho nada. Realmente se reduce a la altura de su péndulo invertido. Cuanto más corto (de pivote a centro de masa), más rápido responderá y más rápido necesita ser el bucle de control.

Suponiendo que esto es un péndulo a escala humana, tal vez de 1 pie a 1/2 metro más o menos, mi intuición dice que ejecuta el circuito de control cada 10 ms para empezar. Deben ocurrir cosas importantes en la escala de tiempo de unos 100 ms, por lo que el tiempo de bucle de 10 ms parece correcto. Por lo general, desea ejecutar el bucle 20-50 veces por constante de tiempo del primer pedido.

Las ventajas y desventajas son que el tiempo de bucle más rápido le proporciona más granularidad, pero demasiado rápido significa que el término D verá principalmente ruido, y las contribuciones I serán muy pequeñas en relación con el valor de salida. Digamos que para velocidad y simplicidad, se usa un punto flotante con una mantisa de 16 bits. Si las contribuciones de I son tan pequeñas que son 1000 veces más pequeñas que el valor acumulado, entonces se reducen a 6 bits de cada contribución. Eso podría estar bien, pero no me gustaría ir por debajo de eso. Puede lanzar más bits (y, por lo tanto, más ciclos) al problema de resolución I, pero no puede corregir el término D al ver principalmente ruido o pasos individuales del sensor (ruido de cuantificación).

Parece que estás asumiendo que la tasa de muestreo y la tasa de bucle son las mismas. No deberían ser. Intentaría muestrear los sensores mucho más rápido que el período de bucle, como tal vez cada 100 a 500 µs, dependiendo de lo que A / D y sensores puedan hacer. Luego aplique dos polos de filtrado de paso bajo a los valores del sensor, pero mantenga el tiempo de respuesta al escalón a al menos el 80% aproximadamente en un tiempo de bucle.

La ventaja del filtrado es que atenúa las altas frecuencias que no ayudarán a controlar la planta, pero causarán jitter y otros problemas. También reduce el ruido de cuantización, e incluso le da uno o dos bits adicionales tal vez debido a que cualquiera de las lecturas es el resultado de varias muestras de entrada.

Por ejemplo, supongamos que puede muestrear todas las entradas una vez cada 200 µs. Con dos polos de filtrado de paso bajo usando una fracción de filtro [FILT < - FILT + FF (NUEVO - FILT), donde FF es la fracción de filtro] de 1/16 (multiplicar por FF es desplazar a la derecha 4 bits), entonces Obtenga un 83% de ajuste en su período de bucle de 10 ms. Pero, ninguna muestra contribuye más de aproximadamente el 2,5% a la salida.

Sí, hay una gran cantidad de matemáticas para calcular todo esto desde el principio, como lo han demostrado algunas de las otras respuestas. Sin embargo, el problema con eso es generalmente tener que saber cosas sobre su sistema que no conoce y no puede medir fácilmente. Comenzar en un lugar razonable y luego ajustar según sea necesario suele ser más simple y rápido. Sin embargo, tienes que entender realmente lo que está pasando, de lo contrario, solo debes picotearlo en la oscuridad.

    
respondido por el Olin Lathrop
0

Si tiene la posibilidad de obtener el sensor a alta velocidad (3200sps), puede filtrar adicionalmente esos datos (FIR o IIR) para obtener datos sin problemas. Acerca de la velocidad de muestreo, Bobal: controladores de autoajuste digitales:

    
respondido por el Marko Buršič
0

La respuesta es, por supuesto, 'suficiente'.

¿Qué es suficiente?

Tienes un sistema de control de bucle cerrado. Si tiene un período de lectura de sensor de t segundos, tiene una latencia de control de un mínimo de t / 2 segundos debido solo a eso. Si tus matemáticas usan pipeline, eso agregará más ciclos. El control de motor DAC agregará otra latencia t / 2.

La latencia de control agregará un cambio de fase a tu ciclo de control, esto tenderá a desestabilizar tu ciclo, además de todos los otros cambios de fase con los que estás luchando.

Como regla general, no desea que la latencia de control contribuya más de 10 a 20 grados o más del margen de fase adicional a la frecuencia de cruce de ganancia unitaria. Hay pocos beneficios que se obtengan si se obtiene mucho menos de 10 grados, tendrá que trabajar duro en otros elementos de cambio de fase si es mucho más de 20 grados.

Por lo tanto, como límite superior, usted desea que la suma de su muestreo, cálculo y latencia del motor sea de < 1 / (20 * f0dB), donde f0dB es su frecuencia de cruce de ganancia unitaria.

¿Cuál es tu f0dB? Cuanto más largo sea el péndulo, más baja puede ser su f0dB, y más lento podrá muestrear antes de llegar a la inestabilidad.

Le recomiendo encarecidamente que modele el sistema que pretende construir. Matlab (si tienes acceso a él) o Octave son buenas opciones, me gusta usar Python con numpy, scipy y matplotlib, aunque podrías forzar un simulador de circuito o incluso una hoja de cálculo para hacerlo. Y descubra lo que debería suceder en un sistema ideal, antes de dejar que el mundo real se desate. Una vez en el simulador, puedes agregar latencia adicional y ver qué funciona.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas