Detección de cruce por cero y bucle algebraico en MATLAB Simulink

Este tutorial se basa en MATLAB R2020a

1 Definición general

La detección de cruce por cero se refiere a la detección realizada por el sistema cuando la forma de onda cambia de un semiciclo positivo a un semiciclo negativo en el sistema de CA, cuando se pasa la posición cero. Puede utilizarse para conmutación de circuitos o detección de frecuencia.

2 Detección de cruce por cero en MATLAB

Cuando SIMULINK simula un sistema dinámico, utiliza tecnología de detección de cruce por cero en cada paso de tiempo para detectar puntos discontinuos en las variables de estado del sistema. Si se detecta un punto discontinuo (el valor de los dos puntos de muestreo antes y después del cambio es grande), encuentre el punto de tiempo preciso en el que ocurre la discontinuidad y agregue pasos de tiempo adicionales antes y después del punto de tiempo (reduzca el paso de muestreo )

Es decir: el solucionador de pasos variables puede ajustar dinámicamente el tamaño del paso de tiempo para que aumente cuando una variable cambia lentamente y disminuya cuando la variable cambia rápidamente. Este comportamiento hace que el solucionador realice muchos pequeños pasos de tiempo cerca del punto de discontinuidad porque la variable cambia rápidamente en esta área. Esto puede mejorar la precisión, pero puede resultar en un tiempo de simulación excesivo.

Función: Simulink utiliza tecnología de detección de cruce por cero para localizar con precisión puntos discontinuos, a fin de evitar un tiempo de simulación demasiado largo debido a un tamaño de paso demasiado pequeño durante la simulación. Normalmente, puede aumentar la velocidad de simulación, pero puede detener la simulación antes de alcanzar el período de tiempo especificado. Al usar el método de cálculo de tamaño de paso variable para simular, si el tamaño de paso se vuelve muy pequeño automáticamente y el tiempo de simulación es muy largo o básicamente no hay progreso, puede considerar verificar para habilitar la función de detección de cruce por cero.

En una frase: Simulink® utiliza una técnica llamada detección de cruce por cero para localizar con precisión las discontinuidades sin recurrir a pasos de tiempo demasiado pequeños. Por lo general, este método puede acortar el tiempo de ejecución de la simulación, pero puede hacer que algunas simulaciones se detengan antes del tiempo de finalización esperado.

——Mathworks China

Para obtener más información, consulte: https://ww2.mathworks.cn/help/simulink/ug/zero-crossing-detection.html

2.1 El principio de funcionamiento de la detección de cruce por cero en Simulink

Un módulo puede registrar una serie de variables de cruce por cero a través de Simulink, y cada variable es una función de una variable de estado (que contiene discontinuidades). Después de que ocurre la discontinuidad correspondiente, la función de cruce por cero transfiere un valor cero de un valor positivo o negativo. Al final de cada paso de simulación, Simulink actualiza las variables llamando a cada módulo que ha registrado variables de cruce por cero. Entonces Simulink detecta si el signo de la variable ha cambiado (relativo al resultado del punto de tiempo de la simulación anterior) Si hay un cambio, significa que el paso de tiempo actual es discontinuo. Si se detecta un punto cero, Simulink insertará un nuevo valor entre el valor anterior y el valor actual de cada variable cuyo signo ha cambiado para evaluar el número de puntos de cruce por cero, y luego aumentará gradualmente el número de puntos de interpolación y hará su los valores pasan Cada cruce por cero

2.2 Anillo algebraico

Para obtener más información, consulte: https://ww2.mathworks.cn/help/simulink/ug/algebraic-loops.html

En los cálculos digitales, la señal de entrada determina la señal de salida, mientras que la señal de salida también determina la señal de entrada. Debido a la sincronización de los cálculos digitales, la señal de entrada no se puede calcular sin la señal de salida y la señal de salida no se puede calcular sin la señal de entrada, formando un punto muerto. (Punto muerto) o bucle infinito, este es el bucle algebraico.

En el modelo Simulink®, cuando hay un bucle de señal y solo hay módulos de paso directo en el bucle de señal, aparecerá un bucle numérico moderno . La alimentación directa significa que Simulink necesita el valor de la señal de entrada del módulo para calcular la salida del paso de tiempo actual. Este tipo de ciclo de señal producirá una dependencia de ciclo entre la salida y la entrada del módulo en el mismo paso de tiempo. Esto conduce a una ecuación algebraica que debe resolverse en cada paso de tiempo, lo que aumenta el costo computacional de la simulación.

—— Mathworks China

En pocas palabras, el bucle algebraico es en realidad un bucle de retroalimentación especial en el que la señal de entrada contiene la señal de salida y la señal de salida también contiene la señal de entrada. En Simulink, esto es causado por el módulo de paso a través (módulo sin demora) La mayoría de los módulos en Simulink son módulos de paso, por lo que es fácil formar un bucle algebraico. En todo el ciclo, solo incluir el módulo de paso a través formará un ciclo algebraico, y el ciclo de retroalimentación con un módulo de retardo eliminará el ciclo algebraico.

Ejemplo:

Inserte la descripción de la imagen aquí

La figura de arriba es un ejemplo de un ciclo algebraico. El módulo Sum es una variable algebraica xa xax a , esta variable debe ser igual a la primera entradauuu declinandoxa xax a(例如 xa= u -xa xa= u - xax a=u - x a)。

La solución de este ciclo simple es xa = u / 2 xa = u / 2x a=u / 2

2.3 Muestre el ejemplo de detección de cruce por cero 1-sistema de pinball simple de integrador doble

Escriba en la línea de comando de MATLAB:

>> example_bounce_two_integrators

Aparece como sigue:

Inserte la descripción de la imagen aquí

Haga clic en el contenido en el subrayado, el sistema abre el archivo de la siguiente manera, esta es una simulación de una pelota rebotando en un avión:

Inserte la descripción de la imagen aquí

Podemos ver que usa dos integradores simples para calcular la velocidad vertical y la posición de la pelota durante la simulación.

Sobre el integrador:

Hacemos doble clic en el integrador y aparece la siguiente figura

  1. Reiniciar

    Aquí puede configurar el reinicio externo en ninguno, subiendo, bajando, ya sea o nivelado. Restablecer es borrar el integrador. Si no selecciona ninguno, el integrador nunca se borrará. Ascendente significa que el integrador se borrará cuando se active el flanco ascendente.

    Inserte la descripción de la imagen aquí

  2. Valor inicial del integrador

    El integrador parte de un valor inicial al integrar. Puede seleccionar la configuración interna (interna) o la configuración externa. En términos generales, el método de configuración externa es más conveniente.

    Inserte la descripción de la imagen aquí

  3. Límite de integradores

    Aquí puede establecer los límites superior e inferior de la salida de su integrador para que la salida de su integrador no supere este valor.

    Inserte la descripción de la imagen aquí

  4. Estado de saturación

    Este puerto se utiliza para proporcionar información de saturación de salida, 0 significa que la salida no ha alcanzado el valor de saturación, 1 significa que la salida ha alcanzado el valor de saturación y la transición de 0 a 1 del puerto de salida se puede utilizar como señal de reinicio de el integrador.

    Inserte la descripción de la imagen aquí

  5. Habilite la detección de cruce por cero (habilite la detección de cruce por cero)

  6. Puerto de estado

    La salida del puerto de estado es la misma que la salida del puerto de salida, pero cuando se reinicia, la salida del puerto de estado es anterior a la salida del puerto de salida. Por lo tanto, cuando la salida del integrador se usa para reiniciar, la salida del puerto de estado se puede utilizar como señal de reinicio para evitar bucles algebraicos.

    Inserte la descripción de la imagen aquí

Luego volvemos a la imagen original:

Inserte la descripción de la imagen aquí

  • Observe la construcción del módulo del sistema:

    1. La velocidad inicial del módulo integral Velocity es 15 ( x 0 x_0X0

    2. Coeficiente de restitución:

      El coeficiente de restitución (e) es la relación entre la velocidad de separación y la velocidad de aproximación de los dos objetos en la dirección normal del contacto antes y después de la colisión, y solo está relacionado con el material del objeto de colisión. En el caso de colisión elástica, e = 1; en el caso de colisión completamente inelástica, e = 0.

    3. Con respecto al valor inicial, consulte la descripción oficial a continuación para obtener más detalles.

      https://ww2.mathworks.cn/help/simulink/slref/ic.html

    4. Entonces podemos deducir que el valor inicial del primer integrador es 15, lo que significa que la pelota se lanza hacia arriba a una velocidad de 15 m / s, y luego cae al suelo cada vez que la distancia al suelo es 0, la La dirección de la velocidad es opuesta, es decir, -0,8 El coeficiente de restitución rebota hacia arriba, la posición inicial está a diez metros del suelo, el valor de la aceleración gravitacional es 9,81 y la dirección es hacia abajo

  • Observe los resultados de la simulación:

    Haga clic en la simulación, vemos el siguiente cuadro

    Inserte la descripción de la imagen aquí

    Revisa cuidadosamente la última parte de la simulación y verás que la velocidad es ligeramente superior a cero.

    Cambie el tiempo de parada de la simulación a 25 segundos y luego simule el modelo. Debido a la ocurrencia continua de demasiados eventos de cruce por cero en los módulos Comparar con cero y Posición, la simulación se detendrá y mostrará un error.

    Inserte la descripción de la imagen aquí

    Aunque este límite se puede aumentar ajustando el parámetro Parámetros de configuración del modelo> Solver> Número de cruces por cero consecutivos , este cambio aún no puede hacer que la simulación dure 25 segundos.

    Cambie el parámetro Solver details> Zero-crossing options> Algorithm en el panel Solver de los parámetros de configuración del modelo y simule el modelo nuevamente durante 25 segundos.Adaptive

Inserte la descripción de la imagen aquí

Amplíe los últimos 5 segundos de la simulación y podrá ver que el resultado es más completo y más cercano a la solución analítica esperada de la dinámica del pinball. La cantidad de temblor que ve es el efecto cuando el estado del sistema es cercano a cero, lo cual está dentro de las expectativas de la simulación numérica.

Inserte la descripción de la imagen aquí

¿Por qué ocurre el error anterior? ¿Cómo se pierde el emulador de los eventos de cruce por cero?

Cuando la pelota choca con el suelo, su posición cambia drásticamente. Las discontinuidades a menudo conducen a cambios significativos en los sistemas dinámicos, por lo que la simulación precisa de discontinuidades es muy importante; de ​​lo contrario, la simulación dará como resultado un comportamiento incorrecto del sistema.

Posteriormente, la bola temblará con el suelo, si no se puede seleccionar razonablemente el tiempo de cruce por cero, no se detectará el punto cero y el resultado de la simulación será incorrecto.

  • La simulación del pinball muestra que las fluctuaciones de alta frecuencia (temblores) relacionadas con las discontinuidades pueden hacer que la simulación se detenga prematuramente.

  • Si la tolerancia de error del solucionador es demasiado grande, el solucionador también puede perder el cruce por cero por completo. Esto puede deberse a que el método de detección de cruce por cero comprueba si el valor de la señal cambia después del paso de tiempo principal. El cambio de signo indica que hay un cruce por cero, y luego el algoritmo de cruce por cero buscará el tiempo exacto de cruce por cero. Sin embargo, si ocurre un cruce por cero en un cierto intervalo de tiempo, pero los valores al principio y al final del intervalo de tiempo no indican cambios de signo, el solucionador cruzará el cruce por cero sin detectarlo.

  • La siguiente figura muestra la señal de cruce por cero. En la primera instancia, el integrador cruzó el evento porque el signo no cambió entre los pasos de tiempo. En el segundo ejemplo, el solucionador detecta un cambio de signo y, por lo tanto, detecta un evento de cruce por cero.

    Inserte la descripción de la imagen aquí

¿Cómo evitar demasiados errores de cruce por cero?

  1. Aumentar el número de pasos por cero permitidos.

    Aumente el valor de la opción Número de pasos por cero consecutivos en el panel Solver del cuadro de diálogo Parámetros de configuración . Esto puede darle a su modelo el tiempo suficiente para resolver la situación de cruce por cero.

  2. Relajar el umbral de la señal

    En el panel Solver del cuadro de diálogo Parámetros de configuración , seleccione Adaptable en la lista desplegable Algoritmo y aumente el valor de la opción Umbral de señal . El solucionador requiere menos tiempo para localizar con precisión el punto de cruce por cero. Esto puede acortar el tiempo de simulación y eliminar el número excesivo de errores consecutivos de cruce por cero. Sin embargo, relajar el umbral de la señal puede reducir la precisión.

  3. Usar algoritmo adaptativo

    En el panel Solver del cuadro de diálogo Parámetros de configuración , seleccione Adaptable en la lista desplegable Algoritmo . Este algoritmo ajusta dinámicamente el umbral de cruce por cero, lo que mejora la precisión y reduce el número de puntos de cruce por cero consecutivos detectados. Con este algoritmo, puede especificar tanto la tolerancia de tiempo como el umbral de señal al mismo tiempo .

  4. Deshabilitar la detección de cruce por cero para módulos específicos

    Desmarque la casilla de verificación Habilitar detección de cruce por cero en el cuadro de diálogo de parámetros del módulo . En el panel Solver del cuadro de diálogo Parámetros de configuración , seleccione de la lista desplegable Control de cruce por ceroUse local settings .

    La desactivación de la detección de cruce por cero localmente puede evitar que ciertos módulos detengan la simulación debido a demasiados puntos de cruce por cero consecutivos. Todos los demás módulos seguirán beneficiándose de la mayor precisión proporcionada por la detección de cruce por cero.

  5. Deshabilite la detección de cruce por cero para todo el modelo

    En el panel Solver del cuadro de diálogo Parámetros de configuración , seleccione de la lista desplegable Control de cruce por ceroDisable all . Esto evita que se detecten cruces por cero en cualquier parte de su modelo. El resultado es que su modelo ya no se beneficiará de la mayor precisión proporcionada por la detección de cruce por cero.

  6. Si usa el ode15ssolucionador, considere ajustar el orden de la ecuación diferencial numérica

    En el panel Solver del cuadro de diálogo Parámetros de configuración , Maximum orderseleccione un valor de la lista desplegable. Para obtener más información, consulte Pedido máximo .

  7. Disminuir el tamaño máximo de paso

    En el cuadro de diálogo Parámetros de configuración, panel Solver , para la Max step sizeopción de ingresar un valor. El solucionador puede usar un tamaño de paso lo suficientemente pequeño como para resolver la situación de cruce por cero. Sin embargo, la reducción del tamaño del paso puede aumentar el tiempo de simulación, lo que rara vez es necesario cuando se utilizan algoritmos adaptativos.

2.4 Muestre un ejemplo de sistema de pinball doble de detección de cruce por cero 2

Por el mismo motivo, consulte: https://ww2.mathworks.cn/help/simulink/slref/double-bouncing-ball-use-of-adaptive-zero-crossing-location.html

Supongo que te gusta

Origin blog.csdn.net/weixin_43229030/article/details/110499075
Recomendado
Clasificación