Tasa de muestreo para control PID para balancear un péndulo invertido usando 8051 - AT89c51rc2

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

Respuestas (3)

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 (desde el pivote hasta el centro de masa), más rápido responderá y más rápido debe ser el bucle de control.

Suponiendo que se trata de un péndulo a escala humana, tal vez de 1 pie a 1/2 metro más o menos, mi intuición dice que ejecute el bucle de control cada 10 ms para empezar. Deberían estar sucediendo cosas significativas en la escala de tiempo de unos pocos 100 ms, por lo que el tiempo de bucle de 10 ms parece correcto. Por lo general, desea ejecutar el bucle de 20 a 50 veces por constante de tiempo de primer orden.

Las compensaciones son que un tiempo de ciclo más rápido le brinda más granularidad, pero demasiado rápido significa que el término D verá principalmente ruido, y las contribuciones de I serán muy pequeñas en relación con el valor de salida. Digamos que por velocidad y simplicidad, usa punto flotante con 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 I en cada contribución. Eso todavía podría estar bien, pero no me gustaría ir por debajo de eso. Puede arrojar más bits (y, por lo tanto, más ciclos) al problema de resolución I, pero no puede corregir el término D viendo principalmente ruido o pasos de sensores individuales (ruido de cuantificación).

Parece estar asumiendo que la frecuencia de muestreo y la frecuencia de bucle son las mismas. No deberían serlo. Intentaría muestrear los sensores mucho más rápido que el período de bucle, como quizás cada 100 a 500 µs, dependiendo de lo que puedan hacer los A/D y los sensores. Luego, aplique dos polos de filtrado de paso bajo a los valores del sensor, pero mantenga el tiempo de respuesta de paso en al menos un 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 que causarán fluctuaciones y otros problemas. También reduce el ruido de cuantización, e incluso obtiene uno o dos bits adicionales, tal vez debido a que cualquier lectura 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 (NEW - FILT), donde FF es la fracción de filtro] de 1/16 (multiplicar por FF es desplazar 4 bits a la derecha), entonces obtienes 83% asentándose en su período de bucle de 10 ms. Sin embargo, ninguna muestra contribuye con más de un 2,5 % a la producción.

Sí, hay matemáticas de alto nivel para calcular todo esto por adelantado, como han demostrado algunas de las otras respuestas. Sin embargo, el problema con eso generalmente es tener que saber cosas sobre su sistema que no sabe y que 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 estás picoteando en la oscuridad.

Esta es una respuesta encantadora. El tipo de cosas que deberían enseñarse en la escuela.

ingrese la descripción de la imagen aquíSi tiene la posibilidad de obtener el sensor a alta velocidad (3200sps), puede filtrar adicionalmente esos datos (FIR o IIR) para obtener datos fluidos. Acerca de la velocidad de muestreo, Bobal: Controladores digitales de autoajuste:

La respuesta es, por supuesto, "suficiente".

¿Qué es suficiente?

Tiene un sistema de control de bucle cerrado. Si tiene un período de lectura del sensor de t segundos, tiene una latencia de control de un mínimo de t/2 segundos solo por eso. Si sus matemáticas usan canalización, eso agregará más ciclos. Su DAC de control de motor agregará otra latencia t/2.

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

Como regla general, no desea que la latencia de control contribuya con más de 10 a 20 grados más o menos de margen de fase adicional en la frecuencia de cruce de ganancia unitaria. Hay poco beneficio que se puede obtener para obtenerlo por debajo de los 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, desea que la suma de su latencia de muestreo, cálculo y accionamiento del motor sea <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, menor puede ser su f0dB y más lento podrá muestrear antes de alcanzar la inestabilidad.

Le recomiendo encarecidamente que modele el sistema que pretende construir. Matlab (si tiene acceso a él) u Octave son buenas opciones, me gusta usar Python con numpy, scipy y matplotlib, aunque podría 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 sumerja en él. Una vez en el simulador, puede agregar latencia adicional y ver qué funciona.