¿Cómo evitar el bucle algebraico en la simulación del bucle de control?

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í

ingrese la descripción de la imagen aquí

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)

    ingrese la descripción de la imagen aquí

  • 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.

    ingrese la descripción de la imagen aquí

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

    ingrese la descripción de la imagen aquí

    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)

    ingrese la descripción de la imagen aquí

    He establecido el retraso de estos bloques en una pequeña fracción del período de muestreo ( T s = 0.0001 s y el retraso se ha fijado en 0.1 T s ). 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?

" En primer lugar, el error de estimación de estado en el observador es alto a pesar del valor "pequeño" del retraso ". ¿Puede agregar más detalles a esta declaración? El observador toma una copia de la entrada de la planta ucomo entrada, así como una copia de la salida de la planta ycomo otra entrada. Si todos estos ( usalpha, isalpha, wmetc.) 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?

Respuestas (1)

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.

  1. Bloque de memoria (bloque de retardo en XCos)
  2. Función de transferencia 1 1 m s + 1

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

Gracias por tu reacción. Hasta donde he entendido correctamente su respuesta, sugiere en el primer punto directamente lo que ya he hecho. En cuanto a su segundo punto, sugiere eliminar todos los bloques de retraso en mi diagrama y, en lugar de ellos, usar el filtro de paso bajo de primer orden con una constante de tiempo pequeña (con respecto a las constantes de tiempo de la planta) colocado antes de los bloques S&H. ¿Es eso correcto?
Hice lo que describí anteriormente como en el segundo punto y resolvió mis problemas. Muchas gracias por tu ayuda JonRB.