Skip to main content

Practice 15: System 3, using Motor

 #TSCLab #TCLab #ESP32 #Arduino #Control #MACI

By: Ulbio Alejandro


En el siguiente blog se presenta la vigésima sextapráctica del laboratorio de control de temperatura y velocidad de un motor.

Objetivo general:

  • Realizar la identificacion de sistemas, empleando datos anteriormente adquiridos de un Motor DC.

Materiales:

  • Matlab
  • TSC-Lab

Código de Matlab:


Introducción:

Es importante realizar una prueba en lazo abierto sobre la dinámica del sistema, el mismo que por medio de un Tren de pulsos podemos obtener los datos de la salida, los cuales resultaron la velocidad del motor DC en RPM. Para este ejercicio, se utiliza un archivo denominado OpenLoopMotorDC.csv el cual contiene tanto la entrada como la salida de la planta, cabe destacar que la entrada es un pulso unitario para experimentar la dinámica del sistema.
Ilustración 1 Variables de proceso del archivo tipo .csv

Mediante código de MATLAB, procedemos abrir el archivo para extraer los datos tanto la entrada como la salida. De esta forma obtenemos la respuesta del sistema para su posterior análisis.
Ilustración 2 Script de MATLAB.

Ilustración 3 Gráfica de los datos obtenidos en la prueba de lazo abierto.

En caso de que la planta lo amerite, es posible realizar un filtro para mejorar la respuesta del sistema, debido a que existen perturbaciones en la toma de datos donde es importante filtrar la señal para que la curva tenga un comportamiento más suave. Para ello, es importante tener el tiempo en estado estable de la curva que tenemos actualmente y luego encontrar los polos del filtro, el cual se especifica en el siguiente script.

Ilustración 4 Código para aplicar un filtro en la señal.

El polo que contempla la función de transferencia del filtro debe ser lo suficientemente alto para sin perder la dinámica del sistema y, lo suficientemente bajo para filtrar el ruido que presenta, teóricamente se indica que debe ser 5 veces el polo dominante encontrado, pero es posible ajustarlo mediante la simulación del filtro con el comando lsim().

Ilustración 5 Parte del código donde indica un filtro para la señal de control.

En este ejemplo, no se realizó dicho filtrado ya que se considera que el ruido presente cuando se adquiero los datos del lazo abierto es aceptable, sin embargo, se muestra el código en caso de que las circunstancias lo ameriten.
Es importante determinar el punto en el que la curva se estabiliza al momento de activar la señal de alto por medio del microcontrolador, como presente cierto ruido se realiza un promedio de todos los datos que se obtuvieron en el sistema, dando así un valor de 5742.4 [RPM].

Ilustración 6 Puntos de estado estable según la dinámica del sistema al aplicar un tren de pulso.

Luego, es posible encontrar el tiempo de estabilización de la curva, considerando que la respuesta es de primer orden, dando así Tss= 4[s] el cual se lo obtuvo por la banda del 2% alrededor del punto de estado estable. Cabe destacar, que en este caso el punto de operación de la salida es 0 [RPM] debido a que es el punto inicial donde parte la característica del lazo abierto, tal como se muestra en las figuras.

Ilustración 7 Obtención del tiempo en estado estable de la curva.

Es importante que al ingresar al Toolbox System Identification de MATLAB, tanto la entrada como la salida deben estar sin el punto de operación, es decir, se considera la variable incremental del proceso. En este caso, resulta que la variable completa es igual a la variable incremental y por ese motivo no se resta el punto de operación. Para abrir la aplicación se lo llama mediante el siguiente comando:

Ilustración 8 Comando para inicializar el Toolbox.

Luego, el aplicativo se muestra como en la siguiente imagen.
Ilustración 9 Primera vista del Toolbox System Identification.

El toolbox de MATLAB resulta ser intuitivo, donde por medio de flechas es posible guiarnos la secuencia de pasos a realizar para obtener una representación matemática de la planta de control (Motor DC). En primera instancia, se debe importar los datos, el mismo que debemos seleccionarlo con el nombre Time domain data tal como se muestra a continuación:

Ilustración 10 Opción para ingresar los datos al toolbox.

Tanto la entrada como la salida son los datos trabajados en el workspace sin el punto de operación previamente en el script, lo que se hace son llamarlos por el nombre de las variables correspondientes. Es posible dar un nombre a los datos en Data name, además de colocarle el tiempo inicial que es 0 y el tiempo de muestreo, que para este ejercicio se lo ha realizado como 1 segundo por muestra (este parámetro es importante, se debe establecer al momento de realizar la adquisición de datos de su planta de control). Una vez ajustado todos los parámetros, se da clic en Import.

Ilustración 11 Establecer los datos en el Toolbox.

Para observar que los datos fueron extraídos del Workspace del script, es posible dar clic en Time plot, el mismo que se encuentra en la parte inferior derecha del Toolbox. Además, se encuentra establecido por el nombre previamente escogido. Time plot permite graficar todos los datos que se encuentren en los cuadros del lateral izquierdo, en caso de tener más de una gráfica es posible segmentarla solo dando clic a los cuadros que necesitaremos visualizar.

Ilustración 12 Uso del Time plot para visualizar los datos en el Toolbox.

Es importante establecer los datos un rango de trabajo, ya que existen parte de la curva que no son considerados en el análisis. Para esto, se debe ir a una venta de interacción y seleccionar Select range, tal como se muestra en la siguiente imagen.

Ilustración 13 Selección de un rango de toda la curva en el Toolbox.

El criterio utilizado para seleccionar los rangos de la curva es destacar aquellas gráficas que no son similares al resto, además de segmentar las regiones de trabajo. Para esto, en esta ocasión se considera el criterio de: 70% de toda la señal servirá como entrenamiento de la identificación de sistemas, mientras que el 30% restante de la señal será como validación de los datos. En la gráfica, se puede observar 16 respuestas al activar un flanco alto en la adquisición de datos, obteniendo el 70% se consideró que alrededor de 11 primeros pulsos son para entramiento, mientras el restante es para validación.

Ilustración 14 Selección del 70 % de la curva, entrenamiento.

Ilustración 15 Selección del 30% de la señal, validación.

Cada vez que se seleccione la opción Insert, todas las curvas se irán generando en la vista de los datos, donde por medio del Time plot podemos observar la sección de las curvas seleccionadas. 

Ilustración 16 Se muestra los datos que serán para entrenamiento.

Ilustración 17 Se muestra los datos que serán para validación.

✅ Método 1

Luego, debemos arrastrar los datos respectivos tanto en el Working Data (70% de la señal) y Validation Data (30% de la señal), para comenzar a estimar el modelo matemático que simulará el sistema en cuestión, esto se realiza seleccionando Process Models.

Ilustración 18 Selección del Process Model.

Luego, aparecerá una ventana donde podemos estimar las distintas opciones o funciones de transferencias disponibles en el Toolbox, las mismas que serán en consideración del programador. Entre ella tenemos la función de transferencia con cierta cantidad de polos desde el 0 hasta 3, luego de que sean raíces reales o complejas conjugadas. Es posible realizar las variaciones que considere el usuario, una vez seleccionado cuales son las variantes que se desea, se debe dar clic en Estimate.

Ilustración 19 Selección de la función de transferencia a modelar el sistema.

Todos los modelos matemáticos obtenidos serán guardados en los recuerdos del lateral derecho, los mismos que tendrán distintos nombres y colores para que el usuario pueda identificarlos fácilmente.

Ilustración 20 Ajustando las características de un nuevo modelo matemático.

Ilustración 21 Obtención de todos los modelos matemáticos considerados para esta práctica.

Una vez obtenido todos los modelos que Matlab pudo simular a partir de los datos proporcionados, es posible compararlos y medirlos con la salida. Para esto, se debe dar clic en el recuadro inferior derecha denominado Model Output, el mismo que mostrará lo siguiente:

Ilustración 22 Clic en Model Output para acceder a la comparación de los modelos.

Luego, se obtiene una comparación entre los datos de la validación antes ajustados en el Toolbox, los mismos que serán modelados de acuerdo con el ajuste matemático escogido. En la parte derecha podemos visualizar el porcentaje de ajuste correspondiente a las señales de la izquierda y dependiendo de la estructura de la función de transferencia simulada. Para esto tomamos los siguientes criterios para destacar cada modelo:
  • Se debe tener un porcentaje de ajuste mayor al 70%, los que simbolicen menor al mismo serán descartados inmediatamente. 
  • Se debe tener en consideración el tipo de función de transferencia a escoger, esto indica que sea lo más simple posible para realizar el modelado de esta. 
En un caso hipotético que tengamos que escoger entre una función de primer orden con un ajuste del 89% y una función con polos conjugados complejos con un ajuste del 95%, muy probablemente se selecciones la primera función debido a la facilidad de análisis que conservar los de ese tipo de funciones de transferencia.

Ilustración 23 Porcentaje de ajuste de los distintos modelos encontrados.

✅ Método 2

Otra forma de realizar los pasos anteriores es dando la opción de Transfer Function Models, el mismo que ayudará ajustar los distintos modelos matemáticos para llegar al mejor porcentaje de ajuste posible.

Ilustración 24 Selección del segundo método para encontrar la representación matemática adecuada.

Luego, debemos indicarle cuales son las características que deseamos comparar entre los distintos modelos matemáticos que nos ofrece el Toolbox.

Ilustración 25 Ajuste de los parámetros.

Luego estimamos, para poder encontrar la mejor representación matemática posible. En este punto se da como recomendación tener varias opciones para estimar el mejor resultado según los criterios antes mencionados.

Ilustración 26 Primera Estimación del modelo matemático en el Toolbox.

Ilustración 27 Segunda estimación del modelo matemático en el Toolbox.

Ilustración 28 Tercera estimación del modelo matemático en el Toolbox.

Una vez que se haya seleccionado el mejor modelo matemático, es posible exportar la función de transferencia, arrastrándolo con el mouse y llevándolo en la opción To Workspace.

Ilustración 29 Enviando al Workspace la Función de transferencia resultante.

En este ejemplo se tienen las dos funciones de transferencia escogidas, pero solo nos servirá una y es la que se denomina como tf1, debido a que resulta mucho más simple que tf2, tal como se muestra en la siguiente imagen:

Ilustración 30 Funciones de transferencia resultantes.


✅ Método 3

Otra forma rápida de como obtener un modelo para la identificación de sistemas es usando el estimador Quick Start.

Dar click derecho sobre el modelo seleccionado en la venta System Identification y se despliega la ventana Data model info: 


Dar click en Export para exportar el modelo a Matlab.


En la parte final del código de matlab está la forma de presentar la función de transferencia de forma polinomial para facilitar su ingreso en el Simulink.

Test Identification Model

Finalmente, se propone emplear el siguiente simulink para comprobar la similitud entre la planata real de motor en el TSCLAB y el modelo identificado.

Simulink:


Código para el TSC-LAB:


Comments

Popular posts from this blog

Practice 35: NodeRed (MQTT) + Telegram

✅ Práctica 35 Github Repositories ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI En el siguiente blog se presenta la vigésima sextapráctica del laboratorio de control de temperatura y velocidad de un motor. Objetivo general: Recibir los valores sensados de temperatura del TSC-Lab a Telegram.  Materiales: Node-Red TSC-Lab Introducción: En la práctica anterior se aprendió a información del TSC-Lab a Node-Red mediante Wi-Fi con protocolo HTTP. Ahora a mas de enviar dicha información se pretende recibirla y monitoreada desde Telegram, la cual es una aplicación enfocada en la mensajería instantánea, el envío de varios archivos y la comunicación en masa. Se la puede descargar desde la tienda de Google Play o App Store. También se la puede utilizar desde su sitio web o versión de escritorio. En esta práctica se crearrá un bot en Telegram el cual al recibir un comando en específico, enviará de manera instantanea el valor de temperatura solicitado. Procedimiento: Nota: se asume que está in

Práctica 1: Initial setups and tests

✅ Práctica 1 Github Repositories ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI En el siguiente blog se presenta la primera práctica del laboratorio de control de temperatura. Objetivo general: Entender el funcionamiento básico de TSC-Lab para la realización de futuras prácticas. Objetivos específicos: Analizar el comportamiento de la curva cuando los heaters están activados y desactivados. Guardar las mediciones obtenidas con ayuda de Cool Term y exportarlas en un archivo  comma-separtaed-values  (csv). Materiales: Programa Cool Term PCB de Temperature Control Lab (TSC-Lab) Introducción: El laboratorio de control de temperatura es un sistema en lazo cerrado. Sin embargo, en esta y futuras prácticas a realizar se comportará como un sistema de control en lazo abierto ya que no existe retroalimentación, únicamente los heaters se activan y los sensores empiezan a medir el incremento de temperatura y al desactivarlos los sensores miden como la temperatura baja hasta llegar a la t

Practice 10: Data acquisition with square velocity input

✅ Práctica 10a Github Repositories ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI En el siguiente blog se presenta la décima práctica y corresponde a la quinta del laboratorio de control de velocidad. Github repository: https://github.com/vasanza/TSC-Lab Objetivo general: Recopilar y guardar las RPM para crear un dataset. Objetivos específicos: Comparar los resultados de movimiento con diferentes parámetros. Materiales: Aplicación de escritorio CoolTerm PCB de Temperature Control Lab (TSC-Lab) Introducción: Una vez entendido todo el funcionamiento y control de velocidad del motor, se pretende crear un dataset para mejorar el mismo, lo que se hará es tomar 10 muestras tanto en un PWM de 255 y 0 durante un periodo de 13 segundos, dichos datos pueden ser modificados en la parte inicial del código de arduino.  Procedimiento: Nota: revisar la práctica 1 donde se le recuerda a como utilizar la apliación CoolTerm. Se asume que la placa del ESP-32 ha sido previamente instalada en el IDE

Practice 27: NodeRed (USB)

✅ Práctica 27 Github Repositories ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI En el siguiente blog se presenta la vigési cuarta práctica del laboratorio de control de temperatura y velocidad de un motor. Objetivo general: Enviar los valores sensados del motor del TSC-Lab por comunicación serial a Node-Red y visualizarlo.  Materiales: Node-Red TSC-Lab Introducción: En la presente práctica se muestra otra de las alternativas para visualizar y controlar dispositivos, la cual es Node-Red, siendo esta una herramienta de desarrollo basada en flujo para programación visual desarrollada originalmente por IBM para conectar dispositivos de hardware, API y servicios en línea como parte de Internet of Things. Para ir familiarizándose con el entorno de Node-Red se hará una conexión por comunicación seríal con el TSC-Lab. Procedimiento: Se necesita instalar Node-Red, a continuación se mostrará como hacerlo en un sistema operativo de Windows.  Instalar Node.js, puede descargarlo aquí . Cualqui

Practice 23: ThingSpeak (Http)

✅ Práctica 23 Github Repositories ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI En el siguiente blog se presenta la vigésima tercera práctica del laboratorio de control de temperatura y velocidad de un motor. Objetivo general: Conectar el TSC-Lab a la plataforma ThingSpeak. Objetivos específicos: Enviar los valores sensados y estados de los transistores a ThingSpeak. Visualizar los valores sensados y estados de los transistores en ThingSpeak. Materiales: ThingSpeak TSC-Lab Introducción: En la práctica anterior se aprenció a realizar una conexión WiFi con el TSC-Lab. Ahora se le sacará provecho a dicha conexión para poder enviar información y posteriormente visualizarla en ThingSpeak, la cual es una plataforma abierta de aplicaciones, diseñada para permitir conectar personas con objetos, en este caso con la MACI y el TSC-Lab. Procedimiento: Nota:  Se asume que la placa del ESP-32 y las bibliotecas de las prácticas anteriores han sido previamente instaladas en el IDE de Arduino. Par

Practice 12: Speed Control Lab

  ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI Repositories En el siguiente blog se presenta la vigésima segunda práctica del laboratorio de control de temperatura y velocidad de un motor. Objetivo general: Realizar la adquisición de datos en Matlab emplenado comunicación serial Materiales: Matlab TSC-Lab TSC-Lab 3D view Simulink: https://drive.google.com/drive/folders/18ANTrb-_z_2zbsUbq2Rz6FC7749ECxUc?usp=sharing Código para el TSC-LAB:

Practice 9: Encoder Implementation (RPM)

✅ Práctica 9 Github Repositories ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI En el siguiente blog se presenta la novena práctica y corresponde a la cuarta del laboratorio de control de velocidad. Objetivo general: Visualizar las RPM del motor en base a la PWM asignada. Objetivos específicos: Comparar los resultados de movimiento con diferentes parámetros. Materiales: PCB de Temperature Control Lab (TSC-Lab) Introducción: En la práctica anterior se puso en marcha en motor asignándole un valor PWM, además brindaba la opción de escoger el sentido de gira. Ahora, en el presente laboartorio se implementa un encoder óptico, que mediante el código de programación en el IDE de Arduino, permite saber a cuantas revoluciones por minuto gira el motor. Es importante mencionar que en esta ocasión se hará uso de interrupciones, cualquier pin GPIO del ESP-32 puede ser utilizado con interrupción, en este caso se ha escogido el 27, pin en el cual está conectado el encoder óptico. Procedimiento: S

Práctica 6: Initial setups and tests (ON/OFF)

✅ Práctica 6 Github Repositories ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI En el siguiente blog se presenta la sexta práctica y corresponde a la primera del laboratorio de control de velocidad. Objetivo general: Entender el funcionamiento del motor DC para activarlo, desactivarlo y cambiarle el sentido de gira usando código de programación en el IDE de Arduino. Objetivos específicos: Comparar los resultados de movimiento cambiando los parámetros. Materiales: PCB de Temperature Control Lab (TSC-Lab) Introducción: Esta práctica de laboratorio consiste en familiarizarse con la parte del control de velocidad del motor DC, para ello en la programación de la placa se le envía señales High y Low para poder hacer girar al motor en sentido horario, antihorario o detenerlo.  Procedimiento: Se asume que la placa del ESP-32 ha sido previamente instalada en el IDE de Arduino. Copiar el código en el IDE de Arduino:           Repositories:  https://github.com/vasanza/TSC-Lab/tree/main/Prac

Practice 11: Temperature Control Lab

✅ Práctica 11 ▷  #TSCLab #TCLab #ESP32 #Arduino #Control #MACI When using this resource, please cite the original publication: Víctor Asanza, Kevin Chica-Orellana, Jonathan Cagua, Douglas Plaza, César Martín, Diego Hernan Peluffo-Ordóñez. (2021). Temperature and Speed Control Lab (TSC-Lab). IEEE Dataport. https://dx.doi.org/10.21227/8cty-6069 En el siguiente blog se presenta la onceava práctica del laboratorio de control de temperatura y velocidad de un motor. Github repository: https://github.com/vasanza/TSC-Lab Objetivo general: Realizar la adquisición de datos en Matlab emplenado comunicación serial Materiales: Matlab TSC-Lab Registro de datos en formato Byte: Esta versión se recomienda si se utiliza Matlab de versiones anteriores a las 2017. Repository: https://github.com/vasanza/TSC-Lab/tree/main/Practice11/Practice11_Byte2017 Registro de datos en formato String: Esta versión se recomienda si se utiliza Matlab de versiones actuales. Repository:  https://github.com/vasanza/TSC-La

▷ CHARLA #PUCESE Arduino Week: Hardware de Código Abierto TSC-LAB

  ⭐⭐⭐⭐⭐ CHARLA #PUCESE Arduino Week: Hardware de Código Abierto TSC-LAB ☑️ #TSCLab #TCLab #ESP32 #Arduino #Control #MACI ☑️ #ElectronicPrototypesDesign #PrototipadoElectronico #PCB #HardwareDesign #Hardware #AdeltaTechnologies #OpenHardware #OpenSourceHardware ➡️ Repository:  https://github.com/vasanza/TSC-Lab ➡️ When using this resource, please cite the original publication: Víctor Asanza, Kevin Chica-Orellana, Jonathan Cagua, Douglas Plaza, César Martín, Diego Hernan Peluffo-Ordóñez, April 25, 2021, "Temperature and Speed Control Lab (TSC-Lab)", IEEE Dataport, doi: https://dx.doi.org/10.21227/8cty-6069. ✅ #PUCESE, organizó el webinar: "ARDUINO WEEK 2022 PUCESE" ✅  Arduino Week PUCE Esmeraldas- Charla con Expertos ⭐⭐⭐⭐⭐ CHARLA #PUCESE Arduino Week: Hardware de Código Abierto TSC-LAB  from  Victor Asanza ✅ Video de la charla: ✅ Contenido: ➡️  1- Introducción ➡️  2- Hardware de Código Abierto ➡️  3- Temperature and Speed Control Lab (TSC-LAB) ➡️  4- Códigos de ejemp