Soy un ingeniero eléctrico que se introdujo en el mundo digital y aprendí sobre la marcha. Estoy programando un procesador TI para hacer un bucle PID (proporcional-integral-derivado) , ilustrado en este diagrama:
También lo describiré:
Op-amp de retroalimentación negativa, con terminal no inversor conectado a tierra. Entrada a través del terminal negativo. El circuito de retroalimentación es un circuito de la serie RE en paralelo con una resistencia y todo eso en paralelo con una tapa.
¿Alguien tiene alguna idea de cómo convertir este circuito a código C? Estoy un poco fuera de mi elemento en esto y podría usar la ayuda.
dt
en las constantes, en lugar de hacer divisiones y multiplicaciones adicionales en el bucle.Respuestas:
El circuito
Ok, acabo de crear una cuenta aquí cuando vi esta pregunta. No puedo editar tu pregunta para poder corregir el error tipográfico que hiciste. Creo que te referías al circuito de la serie RC en paralelo en lugar de RE (si es así, no tengo una sola pista de lo que significa)
Parece que el circuito analógico que desea simular usando C se parece a esto
(No pude resistir mi impulso de dibujar esto, ya que quería contarte cómo los ingenieros eléctricos / electrónicos solían comunicarse en foros y correos electrónicos sin imágenes ... y por qué nos encanta la mensajería, la fuente de ancho fijo)
Debo confesar que el circuito que está utilizando es simple de configurar pero matemáticamente muy complejo, cuando se trata de sintonizar las constantes Propotional, Integral y Derivada del sistema a un valor deseado individualmente, no es posible.
Le sugiero que use el circuito de esta fuente para estudiar.
Aunque es un poco tedioso de configurar, matemáticamente es mucho más simple de analizar, ya que puede relacionarlo directamente con la forma matemática estándar en lugar de la ideal.
Por último, el Vout va a controlar un motor o lo que sea necesario controlar. Y Vin es el proceso de voltaje variable.
Antes de mojarse los pies en C (¿mar?)
Supongo que está leyendo las señales de algún tipo de convertidor analógico a digital. Si no, entonces tendría que simular la señal como entrada.
Si utiliza el formulario estándar que tenemos,
Suponiendo que el tiempo de ejecución del bucle es lo suficientemente pequeño (un proceso lento), podemos usar la siguiente función para calcular la salida,
dónde
donde inicialmente 'der' e 'int' serían cero. Si usa una función de retardo en el código para sintonizar la frecuencia del bucle para decir 1 KHz, entonces su dt sería 0.001 segundos.
Dibujando en C
Encontré este excelente código para PID en C, aunque no cubre todos los aspectos, no obstante es bueno.
Si tomamos un proceso lento, entonces podemos usar una frecuencia más baja tal que dt >>> tiempo de ejecución del código para un solo ciclo (mucho mayor que). En tales casos, podemos eliminar el temporizador y utilizar una función de retraso en su lugar.
fuente