Vous êtes sur la page 1sur 12

UNIVERSIDAD TECNOLGICA DEL PER

FACULTAD DE INGENIERA ELECTRNICA Y MECATRNICA ESCUELA DE INGENIERA ELECTRNICA

Modelamiento de un motor DC usando el ToolBox IDENT

Miguel AngelCotera Abad

PROFESOR: MSc. David AchanccarayDiaz

Lima Per

2012

IDENTIFICACIN DE UN MOTOR DC Para el control de un motor DC, ya sea en la posicin o velocidad necesitamos tener el modelo del motor, en otras palabras hallar su funcin de transferencia; esto para poder disear el controlador ms ptimo. Modelo matemtico del motor DC Para modelar un motor DCse usaran las ecuaciones elctricas y mecnicas a las que se rige al motor, relacionando estas ecuaciones podremos obtener el modelo del motor en el cual la entradaes el voltaje aplicado y la salida es la velocidad angular del eje del motor, para esto consideraremos los siguientes parmetros de nuestro sistema:

V: Fuente de alimentacin R: Resistencia elctrica del motor L: Inductancia elctrica del motor Ke: Constante de fuerza electromotriz J: Inercia del rotor b: Coeficiente de amortiguamiento w: velocidad angular del eje Ecuacin Elctrica: (1) Ecuacin mecnica: (2) Otras: (3) (4) Relacionando las ecuaciones y aplicando la transformada Laplace (5) (6) Obtendremos la funcin de transferencia de la velocidad angular del rotor respecto al voltaje de la fuente: (7)

Miguel A. Cotera 2

Si bien tenemos el modelo matemtico del motor, ya podremos disear el controlador ms adecuado, pero primero tenemos que conocer los parmetros de la funcin de transferencia. Hay muchas formar hallar los parmetros de la funcin de transferencia, en este caso haremos uso del ToolBoxIDENT del software MATLAB, esta herramienta nos permite estimar la funcin de transferencia de un sistema, relacionando una seal de entrada y una de salida, tener en cuenta que este ToolBox se puede usar con el MATLAB 2010 o posteriores. Para poder obtener datos de estas seales necesitamos una tarjeta de adquisicin que capture las seales en un periodo de tiempo y envi estos datos a un computador, para esto haremos uso de un microcontrolador (AVR, PIC, Motorola, 8051, Basic Stamp), en lo particular use PIC de la serie PIC16F877a, un microcontrolador de 8 bits el cual basta y sobra para realizar esta tarea. Circuito de adquisicin Para implementar este circuito se usara lo siguiente: Cable Serial DB9 PIC16F877a MAX232 DB9 hembra Molex 3 pines (o borneras) Molex 4 pines (o borneras) Xtal 4Mhz 22pf x 2 0.1uf cermico 1uf electroltico x 4 10Kohm 1/4W x 2 220ohm 1/4Wx 3 Pulsador x 2 Led x 3 Transistor 2n2222 Micro relay 5V Zener 1N4148

Miguel A. Cotera 3

Programacin del microcontrolador La programacin del PIC ser en C, usando el compilador CCS C Compiler;explicar lnea a line que realiza el cdigo ser algo tedioso, por lo que se resaltara que registros se us del PIC. TMR0: Contador/temporizador de 8bits, usaremos este timer en modo contador externo el cual incrementara en uno el valor de su registro al detectar por el pin T0CKI (RA4) un flanco ascendente (esto depende de su configuracin); este se encargara de detectar y contar los pulsos del encoder. CCP1: Mdulo del PIC que hace uso de ms de 1 registro para poder realizar tareas especiales, este mdulo tiene muchas configuraciones (Captura, comparador, PWM).Usaremos el modo comparador para generar periodos de tiempo constante, que sern el periodo de muestro para la toma de datos. En resumen,al presionar un pulsador se arranca al motor, a partir de ese instante se toman 1000 muestras con un periodo de muestreo de 2.5ms, terminando la toma de datos se apagara el motor. Los datos son enviados por RS232 a un computador. Datos obtenidos para el modelamiento Las siguientes imgenes muestran los datos obtenidospor el circuito de adquisicin, como se mencion anteriormente son en total 1000 muestras, se recomienda realizar diferentes pruebas considerando diferentes valores de voltajes.

Respuesta para una entrada de 16V

Respuesta para una entrada de 28V

Los datos son pasados al MATLAB y guardados en vectores con nombres que faciliten su identificacin, estos datos son pulsos entre segundos, por lo que tenemos que convertirlo a radianes entre segundos, para eso usaremos la siguiente conversin.

Miguel A. Cotera 4

El valor de 400 es referente al nmero de pulsos total por revolucin, el 0.0025 es el periodo de muestreo que se consider para el modelo. Con respecto a las entradas de voltaje (escaln) de cada toma realizada, estas sern definidas como vectores en MATLAB, los comandos que usara en MATLAB sern muy similares a estos:

Comandos usados en MATLAB

Con los datos guardados en Workspace podemos trabajar en el ToolBox IDENT, para esto solo tenemos que escribir en CommandWindow >>ident, como se pude apreciar en la siguiente figura.

Al presionar Enter:

Luego de unos segundos se abrir una ventana que viene a ser el ToolBox IDENT, en la siguiente imagen se puede observar dicha ventana:

ToolBox IDENT

Miguel A. Cotera 5

Con el ToolBox abierto podemos importar los datos que se encuentran en el Workspace, para eso hacemos un clip en la pestaa Import data y seleccionamos Time domain data

Se abrir una ventana que nos permitir importar datos desde el Workspace, lo nico que tenemos que hacer es completar los datos que nos soliciten:

Una vez completado todos los datos en los cuadros, se observara como la imagen inferior, luego de esto podemos dar un clip en Import Miguel A. Cotera 6

Nos saldrn un par de ventana de advertencia, solo responda Yes.

Listo!!! Ya tenemos nuestro primer dato importado

Miguel A. Cotera 7

Ahora con el dato importado podemos estimar los parmetros del modelo correspondiente, para esto hacemos un clip en la pestaa Estimate y seleccionamos Processmodels

Se abrir una ventana en la cual tenemos que especificar el modelo del sistema del que queremos saber sus parmetros.

Como bien lo hicimos en un comienzo se sabe que el modelo de un motor para un control de velocidad es de segundo grado y no cuenta con algn zero.

Miguel A. Cotera 8

Entonces se completa la ventana de ProcessModels de la siguiente forma:

Luego de esto se da un clip en Estimate lo que realizara unos cambios en la ventana principal del ToolBox IDENT.

La estimacin de los parmetros del modelo ya est hecho solo la tenemos que visualizar, para ello hacemos un clip derecho en el grafico M28, realizado esto se abrir una ventana con la informacin del modelo seleccionado. Ya con estos datos podemos pasarlos al MATLAB, tenemos que hacer clip en Present y en CommandWindow se presentara los datos del moledo. Miguel A. Cotera 9

Es preferible realizar este paso para varias tomas de datos y escoger cul de ellas es la que tiene mejor estimacin, para poder observar que tan bueno es el modelo se puede seleccionar Model output en la ventana principal del ToolBox IDENT

Miguel A. Cotera 10

Cuanto ms se aproxime BestFits a 100, el modelo ser ms parecido al sistema real. Nota: Se tiene que tener en cuenta que las herramientas de las que dispone este ToolBox hace posible realizar tareas mucho ms complejas, si bien solo se mencionaron o usaron solo unas cuantas, este ToolBox es una poderosa herramienta al momento de estimar sistemas.

Miguel A. Cotera 11

Programa en el Microcontrolador
#INCLUDE "C:\Archivos de programa\PICC\Devices\16F877a.H" #FUSES NOLVP,NOWDT,HS,NOPROTEC #USE DELAY(CLOCK=4M) #USE RS232(baud=14400,parity=N,xmit=PIN_C6,bits=8) int1 flag=0; intcont=0,pulsos=0; longcdatos=0; void main(){ output_high(PIN_D0); setup_timer_0(RTCC_EXT_L_TO_H | RTCC_DIV_1); setup_timer_1(T1_INTERNAL | T1_DIV_BY_2); setup_ccp1(CCP_COMPARE_RESET_TIMER); CCP_1=1250; while(INPUT(PIN_A3)==0){ } DATA: set_timer0(0); output_low(PIN_D1); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER0); enable_interrupts(INT_CCP1); puts("\nPulsos:\n"); output_high(PIN_B6); set_timer1(0); cdatos=0; flag=0; while(TRUE){ if(flag==1){ printf("%u ",pulsos); flag=0; if(cdatos>=1000){ goto END; } } } END: output_low(PIN_B6); output_high(PIN_D1); cdatos=0; disable_interrupts(GLOBAL); disable_interrupts(INT_TIMER0); disable_interrupts(INT_CCP1); while(INPUT(PIN_A3)==0){ } goto DATA; } ////////////////////////////////////////////////////////////////////////////////////////// #INT_RTCC void contador(void){ cont++; } #INT_CCP1 void periodo(void){ pulsos=(255*cont)+get_timer0(); set_timer0(0); cont=0; cdatos=cdatos+1; flag=1; }

Miguel A. Cotera 12

Vous aimerez peut-être aussi