Bienvenidos a este nuevo tutorial al cual lo he llamado Función de Transferencia: Cosas de niños :B, cuando estas en la carrera viendo modelado de sistemas o técnicas de control siempre oyes la función de transferencia por aquí y por acá pero no te enseñan como encontrarla, no teman, sus gritos de dolor y desesperación han sido escuchados y aquí les traigo su mejoral.
Ya sea que estés estudiando una carrera o simplemente por hobby este tema te va a resultar útil y hasta aquí llega la introducción, por lo general siempre pongo cosas al estilo de los "años maravillosos" pero con esta intro basta y sobra.

IMPORTANTE:

Este tutorial utiliza un microcontrolador y matlab, por lo tanto es necesario contar con el hardware necesario para programar el micro y el software matematico.

Teoría:

Como en todo texto voy a empezar con la definición de lo que es una función de transferencia, tampoco es que vaya a poner cosas que no puedas encontrar en un libro, y tampoco es mi intención extenderme mucho en definiciones, así que si ya tienes idea de que se trata esto puedes saltarte esta sección y pasar directo a Hardware.

La función de transferencia o transfer function, es la relación entrada-salida del sistema o la planta, cabe aclarar que no se trata de la planta de los pies, ni las plantas del jardín (lo siento la tentación fue más fuerte que mi voluntad así que lo tenia que poner).
Dicho de otra forma, la función de transferencia modela el comportamiento del sistema o la planta la cual debido a una entrada se obtiene una salida, y hasta ahí queda la definición formal de lo que es una función de transferencia o TF para los cuates.

Una vez cumplido el tramite de la definición ahora vamos a lo interesante,¿Y esto para que sirve?
La respuesta es "de todo y de nada a la vez", por parte del "todo", la TF es una ecuación que modela el comportamiento de la planta o sistema, por lo tanto, puedes conocer la respuesta a cualquier entrada, ahora por parte del "nada", no sirve de mucho sin control, igual y para unas cuantas aplicaciones muy definidas puedes utilizar la TF.

Por ahora solo me voy a centrar en obtener el modelo ya después (en unos 10000 años) voy a subir un tutorial sobre control digital, pues bueno, esto seria todo por parte de la sección teoría, el objetivo real del proyecto es como encontrar la TF y no dar definiciones o encontrar el sentido de la vida, así ya podemos avanzar a la siguiente sección Hardware donde empezamos de lleno con el proyecto.

Hardware:

Para este proyecto voy a útilizar como planta un motor de CD que encontré en las siempre confiables chacharas, si por algún motivo te estas preguntando por el modelo del motor para salir a comprar uno, entonces ya empezamos mal, el modelo del motor es irrelevante, de echo esa es una de las ventajas de la TF, pero bueno en mi caso el motor tiene todavia su calcomania con las especificaciones:

  • Modelo: DGM-20--------
  • Fabricante: Toshiba
  • Voltaje: 23Vcd o tal vez 28Vcd
  • Corriente: 1.1Amp o tal vez 1.4Amp

Aquí una foto de lo que se alcanza a ver:

¿No es una belleza?, en caso de que tu motor no tenga siquiera el remanente de la calcomania de especificaciones para encontrar el voltaje de operación empieza con 5V y ve subiendo gradualmente el voltaje hasta que sientas que se sobrecalienta, llegado a este punto disminuye unos cuantos volts y habrás encontrado el punto de operación y por consiguiente la corriente que consume, solo recuerda que a menor voltaje mayor corriente, por lo tanto procura tener una fuente que proporcione al menos 2A, algo basado en un LM317 o un LM2596 viene bien.

Ahora el siguiente paso es montar nuestro motor a.k.a planta en una estructura de tal forma que pueda mover un potenciometro de 10KΩ, como este proyecto es de bajo presupuesto voy a utilizar un potenciometro de carbón logarítmico, hay lineales, multivuelta o de vuelta infinita, pero esos ya salen del presupuesto, por cierto si tienes un estéreo que ya no funcione en el dial puedes encontrar potenciometros de muy buena calidad, ahora ya lo sabes, para la próxima vez que salgas a pepenar si ves un estéreo pregunta en cuanto lo venden y con surte te va a salir en unos cuantos pesitos, yo hasta el momento los que he encontrado me los venden como si todavía funcionara el aparato, en fin, aquí una foto de como me quedo:

Para la base utilice la tapa de un floppy de 3.5, para acoplar el eje del motor al potenciometro utilice unos engranes de plástico que encontré de unos juguetes lego y con unos cinturones de plástico fije el motor para que no se estuviera moviendo, el tornillo que se aprecia es mi indicador de posición pero como todavía no hago el tutorial de control por ahora es un simple adorno muy chulo.

Una vez que ya tenemos montado el motor con el potenciometro el siguiente paso es construir nuestro DAQ el cual se va a encargar de mandar los datos a matlab, en mi caso voy a utilizar un PIC16F1827 y un puente H L298N pero tu puedes utilizar cualquier micro y cualquier puente H, de echo si tienes un arduino estoy seguro que por Internet debe de haber los diagramas y el firmware para que construyas tu DAQ.

Aquí les muestro como quedo el mio:

Como no hay presupuesto para el PCB quedo en una placa pre-perforada modelo: Steren 405

Básicamente lo que tiene que hacer su tarjeta es mover en un solo sentido el eje del motor durante una cierta cantidad de tiempo para que por medio del ADC del microcontrolador vaya leyendo los datos del potenciometro y luego enviarlos a la pc mediante la EUSART o cualquier otro modulo de comunicación serie o paralelo, ¿fácil no?, para controlar la cantidad de tiempo puedes utilizar contadores, do while, ciclos for o cualquier cosa que se te ocurra.

Esto sería todo en cuanto al hardware ahora vamos a la sección Matlab donde vamos a ver como utilizar todo para encontrar la función de transferencia.

Por si les interesa aquí les dejo el esquemático de mi DAQ, solo presionen sobre la imagen para descargarlo, este diagrama fue creado utilizando diptrace versión 3.0.0.2, el cual lo pueden descargar de la siguiente pagina: http://www.diptrace.com/

Esquematico:

Lista de materiales:

• Microcontrolador (PIC16F1827)
• Puente H L298N
• Motor*
• Regulador de voltaje (LM7805)
• 4 Diodos de recuperación rápida (1N5819)
• 1 resistencia de 10 kΩ @ 1/4 watt
• 1 Push button
• 1 capacitor de tantalio 0.1µF
• 1 capacitor electrolítico de 47µF @ 50 Volts
• Disipador para el puente H y el regulador
• 9 terminales para circuito impreso
• Cables calibre 18-20AWG

 

Configuración de pines para el PIC16F1827:

• Pin2(RA3) ⇒ Entrada ADC
• Pin9(RB3) ⇒ EnableA puente H
• Pin10(RB4) ⇒ Input1 puente H
• Pin11(RB5) ⇒ Input2 puente H
• Pin7(RB1) ⇒ Rx
• Pin8(RB2) ⇒ Tx
• Pin4(RA5) ⇒ MCLR

*Motor:
• Motor de CD sin escobillas.

Matlab:

Una vez construido nuestro DAQ ahora vamos a utilizar matlab y simulink para que nos de la TF de la planta, para este proyecto voy a utilizar la versión R2013b de matlab.

Importante: Debes de tener los toolboxes de system identification e Instrument control

De lo contrario no vas a poder continuar, pero no hay nada de que preocuparse, bien puedes pagar una licencia de matlab o bien .... guiño guiño si sabes a lo que me refiero.

Disclamer: edx-twin3.org ni ninguno de sus miembros apoyan al comercio informal ni ningún tipo de piratería que no sea debidamente aprobada por la aduana fayuquera del país en cuestión.

Listo con eso ya estoy blindado legalmente, en fin, continuando con el tema el primer paso es construir en simulink nuestro modelo de comunicación para obviamente comunicarnos con el DAQ.

Importante: Si utilizas un convertidor USB-UART primero conecta el modulo de lo contrario matlab no lo va a detectar.

No sé por que muchos programas tienen problemas con estos módulos, de echo también los bloques de simulink tienen problemas pero bueno, hagan lo mismos pasos y van a estar bien, si por el contrario estas utilizando un DB9 nativo de la PC no vas a tener ningún problema y puedes utilizar los bloques que mejor combinen con tu wallpaper.
Todos los bloques que voy a utilizar los puedes encontrar en el Instrument control toolbox y Sinks

Cogemos los siguientes bloques: Serial Configuraion, Serial Receiver, Scope, Out1 y un demux, una vez que los tengan los conectan de la siguiente manera.

Creo que cada bloque se explica por si solo, el serial configuration sirve para establecer los parámetros de comunicación en este caso 9600:8:N:1 lo que es lo mismo velocidad: 9600bps, datos: 8 bits, paridad: ninguna, bit de parada: 1, el bloque receiver se encarga de recibir los datos del DAQ, el bloque scope gráfica la entrada y Out1 guarda los datos en una matriz.
Si hicieron todo bien deberían ver la siguiente gráfica, la cual corresponde al comportamiento del motor.

Ahora en un nuevo archivo de simulink crean el siguiente modelo, el cual va a servir como la entrada al sistema, aquí tienen de dos sopas, pueden simular la entrada o pueden mandarla directamente al DAQ, en ambos casos estamos hablando de un escalón, yo por comodidad prefiero la entrada simulada así que ya queda a gusto de cada quien.

La amplitud de la señal puede ser unitaria, Vcc o bien Vss, lo importante aquí es que debe de durar exactamente el tiempo que hayan tomado la muestras, en mi caso fue 1.5 segundos, por lo tanto la señal de entrada me queda de la siguiente manera.

Una vez echo esto ya solo falta un último paso para conocer la TF del motor, ya pueden cerrar simulink ahora en matlab deben de tener cuatro archivos, a saber dos son yout.m e yout1.m y otro dos llamados tout.m y tout1.m, si tienen diferentes nombres esta bien grafiquenlos y deberían obtener las gráficas anteriores, en dado caso de que no los tengan los mas seguro es que no conectaron bien el bloque OUT1 revisen bien sus modelos en dado caso de que todo este bien y sigan sin obtener estos archivos dejen un comentario en la sección de blog y ya veremos cual pudiera ser el problema, ahora en matlab tecleamos ident
Les debe aparecer la siguiente ventana

Presionen sobre la pestaña Import data y seleccionen Time domain data

Les aparece la siguiente ventana:

La entrada (input) corresponde a la señal que obtuve del escalón unitario, en este caso renombre yout1.m a yin para no confundirlo, ahora la salida (output) corresponde a la señal obtenida mediante el DAQ Data name puede ser cualquier nombre, Starting time debe empezar en 0 o en el tiempo en el cual empezaste a graficar la señal, Sampling interval es el tiempo de muestreo, en mi caso es de 10ms.
Una vez que ya están los datos presionan sobre Import, les debe aparecer su datos identificados con el nombre que le pusieron en la ventana anterior, por default se llama mydata

Ahora presionen sobre la pestaña Estimate y seleccionen Transfer Function Models

Les va aparecer la siguiente ventanita:

Para estimar la TF es necesario indicarle la cantidad de polos y zeros, aquí es cosa de prueba y error, empiezen con un numero elevado algo asi como 2,000,000 y empiecen a disminuir en múltiplos primos o sea 0,1,3,5,7,13,17.... hasta que den con el valor exacto, en mi caso después de 7 hrs los encontré y resultaron ser de los primeros números primos, así que dependiendo de su motor puede ser que no sean los mismo por lo tanto recomiendo que empiecen a buscarlos lo antes posible que esto urge.
Nah no se crean para cualquier motor es lo mismo, si quieren saber de donde salen estos valores entonces pónganse a estudiar, tampoco esperen que les de todo, pero como soy buena persona les voy a dar un norte, la siguiente ecuación corresponde a la TF de lazo abierto:

Y es por eso que son ceros zeros y tres polos, si les interesa en la universidad de michigan tienen buenos artículos sobre control y demás temas de interés social, cuenta con instalaciones de primer nivel y un ambiente universitario fuera de serie.
Este anuncio fue patrocinado por la universidad de michigan, despues del comercial regresamos a matlab que ya estamos a nada, entonces ya que saben que son 3 y 0 ahora le dan en Estimate

Una vez que termine de estimar la función de transferencia les va a mostrar un informe, en mi caso tengo una similitud del 98.22%, si les sale mayor a esto quiere decir que lo hicieron todo mal y tienen que repetirlo todo desde el principio, les tiene que dar exactamente lo mismo que a mi, pero bueno, si les sale mayor pues que bueno pero si es menor del 90% yo les recomiendo que mejor vuelvan a tomar las mediciones hasta que obtengan cuanto menos un 95% de concordancia.
En la ventana principal deben ver ahora la TF que estimo llamada tf1 (circulo rojo):

Por último arrastren la TF (tf1To Workspace

¡Listo! ya tenemos la función de transferencia de nuestro motor, para conocerla en matlab simplemente tecleen tf1

Esta ecuación 3134/s^3+41.79s^2+962.7s+8722 es el modelo matemático de nuestro motor.
¿Alguna duda?, pues que bueno, de todas maneras en la siguiente sección pongo un vídeo demostrando todo los pasos, por cierto antes de terminar con esta sección si creen que esta TF va a funcionar con un motor igual al que tengo (si es que acaso alguien sabe cual es) la verdad lo dudo, cada motor es diferente así que mejor encuentra la TF de tu motor.

Resultado y palabras finales:

Aquí les dejo el vídeo para que vean cual es la función del DAQ.
Funcionamiento del DAQ

Aquí les dejo el vídeo donde se ven todos los pasos que deben seguir para encontrar la función de transferencia en matlab y simulink.

Como encontrar la función de transferencia de un motor de CD

Por último, este método puede ser utilizado con cualquier tipo de motor, al principio puede parecer que son muchos pasos a seguir pero realmente no, una vez que les salga bien, las demás veces va a ser pan comido.

Esto sería todo en cuanto este tutorial de Como encontrar la función de transferencia, espero les sea de utilidad, ahora salgan a comprar muchos motores, de todos tamaños, colores, con o sin caja de reducción, de metal o de plástico, voltajes, y RPM, y lo más importante, YA DEJEN ESE #@!.. celular en paz.
No se olviden de recomendar esta pagina en facebook, twitter, google plus o cualquier otra red social, foro, pagina web, o medio de comunicación, también pueden seguirme en twitter @edx_twin3 donde pongo las ultimas noticias sobre la página.
Como siempre cualquier duda, sugerencia, comentario, etc ...., la pueden enviar ya sea mediante la pagina de contacto, mediante correo electrónico edx@edx-twin3.org o utilizando el blog.
Por último pero no menos importante cualquier donativo es de gran ayuda para seguir haciendo tutoriales como este, gracias :1.