He estado desarrollando una simulación del control orientado al campo del motor de inducción trifásico. La simulación se desarrolla en Scilab/Xcos (v5.5.2), que es un software gratuito similar a Matlab/Simulink. El diagrama de mi simulación en la caja de herramientas de Xcos se ve así
Como puede ver, la simulación consiste básicamente en los bloques principales mencionados a continuación:
modelo de mensajería instantánea
Modelo dinámico del motor de inducción trifásico
Algoritmo de control
Produce componentes del voltaje del estator de referencia en el marco de referencia estacionario en función del algoritmo de control elegido (control escalar de bucle abierto x control orientado al campo)
Observador
Calcula la estimación de los componentes del flujo del rotor no medible y, en base a eso, calcula la orientación del vector espacial del flujo del rotor para el algoritmo de control orientado al campo.
El bloque a) es un sistema de dominio de tiempo continuo y los bloques b) yc) son sistemas de dominio de tiempo discreto (modelan software). Debido a esa disposición, los bloques b) y c) se separan del mundo continuo (dominio de la planta) a través del convertidor ADC (modelado a través de bloques de muestreo y retención) en sus entradas y a través del convertidor DAC (algoritmo de retención de primer orden) en sus salidas. .
La simulación se ha desarrollado en dos pasos:
motor de inducción controlado mediante algoritmo de control escalar de bucle abierto
La simulación funciona correctamente porque no hay retroalimentación
motor de inducción controlado mediante algoritmo de control orientado al campo
Al principio me he encontrado con un problema con el error del bucle algebraico
Según mi experiencia con Matlab/Simulink, he insertado un retraso de tiempo en el bucle de control (consulte los bloques "Retraso" en la parte de ADC)
He establecido el retraso de estos bloques en una pequeña fracción del período de muestreo ( y el retraso se ha fijado en ). La inserción de ese retraso ha resuelto el problema con el ciclo algebraico pero también ha causado dos hechos no deseados. En primer lugar, el error de estimación de estado en el observador es alto a pesar del valor "pequeño" del retraso. En segundo lugar, la inserción del retardo provocó un enorme aumento del tiempo de simulación.
También he pensado en la reorganización del diagrama de simulación para evitar el bucle algebraico de forma inherente, pero no veo ninguna forma de hacerlo; en última instancia, simulo el bucle de retroalimentación.
¿Alguien tiene alguna idea de cómo dividir el ciclo algebraico de tal manera que no corrompa el proceso de estimación de estado en el observador y tampoco aumente demasiado el tiempo de simulación?
Los bucles algebraicos ocurren cuando los cálculos del estado actual dependen de la salida del estado actual. ¿Cómo puede proporcionar un cálculo si no tiene una condición inicial?
Cómo romper tales bucles puede ser tan simple como colocar un bloque que proporcione una salida inicial.
Ambos proporcionan una salida inicial de 0 y, por lo tanto, permiten que los cálculos posteriores se inicialicen para luego retroalimentarse.
Si su solucionador es de paso fijo, entonces un bloque de memoria (bloque de retardo) es la mejor solución, ya que retrasa la señal en 1 paso. Sin embargo, si el solucionador es variable, entonces una función de transferencia con una constante de tiempo adecuadamente alta es la mejor solución.
¿Dónde colocar dicho bloque? en todas las retroalimentaciones utilizadas por el lazo de control
AJN
u
como entrada, así como una copia de la salida de la plantay
como otra entrada. Si todos estos (usalpha
,isalpha
,wm
etc.) se retrasan por igual y se alimentan a un observador, ¿por qué tendría algún efecto sobre el error de estimación? ¿Se calcula el error de estimación comparándolo con el valor real que, para ser justos, también debería retrasarse si se usa para comparar con un observador que corre con un retraso?