7/25/2019 Imprementacin de Motor en DC
1/26
OBJETIVO GENERAL
Disear e implementar un sistema de control digital de
posicin para un motor DC, utilizando el microcontrolador
PIC16F877A.
7/25/2019 Imprementacin de Motor en DC
2/26
OBJETIVOS ESPECFICOS
Reconocimiento y Anlisis del sistema.
Establecer el modelo matemtico del sistema.
Simular el sistema modelado diseando el controlador
digital para una respuesta especfica (escoger
overshoot y tiempo de asentamiento).
Implementacin del sistema.
7/25/2019 Imprementacin de Motor en DC
3/26
7/25/2019 Imprementacin de Motor en DC
4/26
deseado, enviando pulsos digitales a un integrado (L293B)
para hacer girar el motor en el sentido indicado.
MODELO MATEMATICO DE LA PLANTA
Considerando que nuestro motor tiene un eje rgido, por
medio de sus ecuaciones elctricas y mecnicas, al
relacionarlas, podemos obtener el modelo del motor en elcul la entrada es el voltaje aplicado y la salida es la
velocidad rotacional del eje, para esto es necesario
conocer los diferentes parmetros de los que se encuentra
compuesto:
momento de inercia del rotor J.
coeficiente de amortiguamiento del sistema mecnico
(b).
constante de fuerza electromotriz K=Ke=Kt.
resistencia elctrica (R).
inductancia elctrica (L).
entrada (V): Fuente de Tensin.
salida (W): velocidad rotacional del eje.
7/25/2019 Imprementacin de Motor en DC
5/26
Las ecuaciones elctricas:
-V+RI+LdI+e=0
Dt
Ecuaciones mecnicas:
Jdw + bw=KI
dt
Relacionando ambas ecuaciones y expresndolas en el dominio
s:
Como e=Kw
-V+RI(s)+SLI(s)+Kw(s)=0
JSw(s)+bw(s)=KI(s)
Obtenemos la funcin de transferencia de la velocidad del
rotor respecto al voltaje aplicado:
W = ___________K____________
V (JS+b)(LS+R) + K^2
Como nos interesa es la relacin del ngulo que se desplaza
el rotor con respecto al voltaje aplicado integramos aambos lados de la ecuacin multiplicando por 1/s:
)))(*)*((*/(/ 2KRLSbSJSKV +++=
Obtenido el modelo matemtico del motor podemos disear
nuestro controlador PID, pero para esto es necesario
conocer el valor de los parmetros J, K, b, R, L del
sistema los cuales desconocemos.
7/25/2019 Imprementacin de Motor en DC
6/26
Seal de salida con ruido Seal de salida filtrada
A continuacin se puede observar el algoritmo empleado parala adquisicin de datos por Matlab:
clcclearclose allai=analoginput('nidaq',1);% Canal 1 voltaje de excitacin% Canal 2 voltaje generadochans=addchannel(ai,1:2);% Frecuencia de muestreofs=2000;set(ai,'SampleRate',fs);% Tiempo que dura la adquisicinduration=10;set(ai,'SamplesPerTrigger',fs*duration);% Rango de entrada adquisicin 0-10Vset(chans,'InputRange',[0 10]);disp('Pulse ENTER para dar inicio de adquisicin')pause% Inicio adquisicinstart(ai)[d1,t1]=getdata(ai);u=d1(:,1);y=d1(:,2);% Grfica de accin de controlfigure(1)plot(t1,u)xlabel('Tiempo(seg)');title('voltaje de excitacin');grid%Grfica del voltaje generadofigure(2)plot(t1,y)xlabel('Tiempo(seg)');title('voltaje generado');grid
7/25/2019 Imprementacin de Motor en DC
7/26
%filtro pasabajos[B,A]=butter(10,0.03,'low');%filtramos seal de entadaH1=filter(B,A,u);figure(3)plot(H1)grid%filtramos seal de salidaH2=filter(B,A,y);figure(4 )plot(H2)grid
Durante el proceso de adquisicin, se tomaron cincomuestras de entrada y salida del sistema con el fin de
implementarlas en la IDENT, obtener diferentes modelos yas validarlos para obtener un modelo aproximado al real.
Entrada 1 Salida 1
Entrada 2 Salida 2
7/25/2019 Imprementacin de Motor en DC
8/26
Salida 3Entrada 3
Salida 4Entrada 4
Entrada 5 Salida 5
7/25/2019 Imprementacin de Motor en DC
9/26
7/25/2019 Imprementacin de Motor en DC
10/26
Despus se obtiene el valor de la ganancia y de los polos
ra poder validar el sistema, se obtuvieron los cinco
de forma que el sistema sea similar al real.
Pamodelos de las diferentes seales adquiridas y secompararon las salidas de los modelos con cada una de lassalidas reales adquiridas para observar el porcentaje deexactitud de cada salida de los diferentes modelos con lasalida real.
Validacin con la primera seal de salida adquirida
Validacin con la segunda seal de salida adquirida
7/25/2019 Imprementacin de Motor en DC
11/26
Validacin con la Quinta seal de salida adquirida
En la siguiente tabla se puede observar el porcentaje deexactitud de la salida de cada modelo respecto a cadasalida real, adems resaltamos los porcentajes mssatisfactorios.
SALIDAMODELO 1
SALIDAMODELO 2
SALIDAMODELO 3
SALIDAMODELO 4
SALIDAMODELO 5
SALIDAREAL 1
94.68% 92.37% 91.93% 90.16% 91.66%
SALIDAREAL 2
88.45% 91.78% 91.66% 90.55% 91.44%
SALIDAREAL 3
85.55% 90.72% 90.78% 90.18% 90.65%
SALIDAREAL 4
78.49% 87.62% 88.05% 88.24% 88.17%
SALIDAREAL 5
82.54% 90.99% 91.16% 90.34% 91.44%
Tabla comparativa de los diferentes modelos
En las grficas anteriores as como en la tablacomparativa, observamos que el modelo ms aproximado alreal, es el segundo modelo, por lo tanto, este va a ser elmodelo de nuestro motor.
7/25/2019 Imprementacin de Motor en DC
12/26
Funcin de transferencia:
El modelo aproximado obtenido en Matlab fue el siguiente:
Pero este no es completamente el modelo a analizar debido aque este representa K*W(s))/ V(s) y nuestro sistema deberepresentar (s) / V(s). Para solucionar este problema,debemos agregarle un integrador al sistema ya que esteintegra W(s) y la convierte en (s)y comparar el modeloobtenido en la Ident con el modelado con el fin de obtenerlos parmetros de la planta y as identificar el modeloreal.
Primero que todo multiplicamos el modelo matemtico por elfacto K(constante electromotriz) para que quede de laforma:
Ahora procedemos a comparar ambos sistemas:
7/25/2019 Imprementacin de Motor en DC
13/26
Al comparar ambos sistemas se puede observar que:
Donde el parmetro K(constante electromotriz) es igual a laraz de 0.73482.
Ya conocido el parmetro, K podemos expresar el sistema ofuncin de transferencia de nuestro motor:
Otro inconveniente es que la variable teta, esta expresadaen revoluciones debido a que W en el anlisis del circuitose da en revoluciones/segundo. Para esto es necesarioconvertir teta en radianes, para mayor comodidadmultiplicando al sistema por el factor 2.
Funcin de transferencia del motor
Debido a que el sistema se encuentra en tiempo continuo esnecesario discretizarlo. Para el microcontrolador se empleoun oscilador XT de 4MHZ. De acuerdo con esta frecuencia ylos ciclos de mquina que efecta el microcontrolador
durante la retroalimentacin con el encoder (300 aprox.),se obtiene el periodo de muestreo necesario para obtener laplanta en formato de Zs.
T = 4*300------- = 0.3 milisegundos Tiempo de muestreo4000000
Muestreamos el sistema:
num = 5.3859;
den =[0.0014 0.0749 1.0000 0]
7/25/2019 Imprementacin de Motor en DC
14/26
G=Tf(num,den)Gz=c2d(G,3e-4)
Nuestro sistema discretizado sera el siguiente:
El las grficas siguientes se puede observar la respuestaal escaln y el lugar de las races respectivamente:
Se puede observar que el sistema alcanza su valor mximo enaproximadamente 0.7 segundos, por lo que el tiempo deestablecimiento se debe disminuir.
Respuesta al escaln
En el lugar de las races se puede observar que el sistema
tiene 3 polos; (z-1) (z-0.9923) (z-0.9917) y dos ceros(z+3.717) (z+0.2669).
7/25/2019 Imprementacin de Motor en DC
15/26
Para el diseo del controlador PD debido a que nuestrosistema es tipo uno, se escogi un Overshoot del 16% y un
tiempo de establecimiento de 1 segundo.
Controlador PD
Controlador obtenido mediante la SISOTOOL
Sistema con controlador
7/25/2019 Imprementacin de Motor en DC
16/26
Salida del sistema controladoDESARROLLO CON EL MICROCONTROLADOR
El proyecto se fundamenta en el diseo de un controlador deposicin de un motor D.C basado en un PIC 16F877A. En unapantalla LCD se visualizar el set point o valor deposicin deseado, el error actual, el ciclo til,realimentacin y la constante del PID, junto con lasconstantes del controlador PID (Kp, Ki, Kd), que soningresadas por el usuario por medio de un tecladomatricial.
Ingreso de datos:
Al iniciar, el microcontrolador se visualiza el valordeseado de posicin y las constantes del controlador (Kp,Ki, Kd), despus de ingresar el ltimo valor de lasconstantes, el microcontrolador empieza a posicionar elmotor comparando, si el valor actual es igual al ingresado.Esto se logra por medio de un encoder que est acoplado auno de los engranes del motor (que en este caso es el demenor dimetro), este tiene la funcin de producir una
seal cada vez que el engrane realiza dos vueltas.De estaforma se va corrigiendo la posicin actual con la deseada.
Elementos utilizados
- PIC16F877A- LCD- Teclado matricial- CD40106B
-
L293B- Encoder- Motor de corriente continua- Visualizador angular.- Fuente de alimentacin de 5V.- Oscilador de 4MHz.- Panel de visualizacin para el desplazamiento del
motor.
7/25/2019 Imprementacin de Motor en DC
17/26
Programa del Microcontrolador
Para la programacin del PIC, fue necesario crear el cdigoa partir de lenguaje C, debido a que este cuenta conlibreras para el control del LCD, teclado, interrupciones,etc., que facilitan el control de estos y adems reduce laslneas de cdigo.
Una vez que se ha realizado el programa en C, procedemos alcrear el archivo .hex, el cual es el que se guarda en lamemoria del microcontrolador, esto se realiza por medio deun compilador llamadoPCW C Compiler.
CODIGO C
7/25/2019 Imprementacin de Motor en DC
18/26
#include
#fuses XT,NOWDT,PUT,BROWNOUT,NOLVP,PROTECT //Tipo //de//oscilador y frecuencia#use delay (clock = 4000000, RESTART_WDT)
#use fast_io (A) //Configuracin de puertos digitales#use fast_io (B)#use fast_io (C)#use fast_io (D)#use fast_io (E)
#byte porta=5#byte portb=6#byte portc=7#byte portd=8
#byte porte=9
#include //Librerias#include #include #include
float kp; //Se definen las constantes del//controlador PIDfloat kd;float ki;
float I= 0.5;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%float err_ant,err_ant1,err_ant2,err_ant3,A;//Definicin de variablesfloat sum_int=0;//Condicion inicialfloat integral,proporcional,derivativo,out_PID,out_PID2;signed long err_act,set_point,realimentacion;
int32 Duty; //Se define como entero con32 caracteres de longitudint util; //Enterobyte inc,bit_ini,j;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#INT_EXT //Interrupcion externasigned int pulso() //Funcion pulso valor entero
{if(inc == 0x00){realimentacion--;}else{realimentacion++;}return(realimentacion);
}//====================================================================//====================================================================
void demor_1() //Retardos
{
7/25/2019 Imprementacin de Motor en DC
19/26
char i;for(i=0;i
7/25/2019 Imprementacin de Motor en DC
20/26
uno=kbd_getc();} while ((uno'9'));lcd_putc(uno);
uno-='0';ctte += uno;
demor_1();demor_1();demor_1();
return(ctte); //Regresa el valor de (ctte).}
//====================================================================
int32 aprox(float rta_controlador) //Funcion aprox{//Esta funcin aproxima el valor de la salida del controlador al entero msproximo
float parte_entera,parte_decimal;int32 ciclo_pwm;
parte_decimal=modf(rta_controlador,&parte_entera);if(parte_decimal>=0.5)
{ciclo_pwm=ceil(rta_controlador);
//aprox al entero mayor ms cercano}
else{ciclo_pwm=floor(rta_controlador);
//aprox al entero menor ms cercano}return (ciclo_pwm);
//Regresa el valor de ciclo_pwm,que es} //un entero de 32 caracteres.//====================================================================//====================================================================
void main(void){
portb=portc=0; //Reset para los puertos
set_tris_a(0xFF); //Configuracion de puertos(E/S)
set_tris_b(0xFF);set_tris_c(0x08);set_tris_d(0x00);set_tris_e(0x00);
setup_timer_2(T2_DIV_BY_16, 255, 1); //Pre=1Periodo=255 Pos=1
setup_ccp1(CCP_PWM);//Configuracion contador PWM
enable_interrupts(INT_EXT);//Int. sensor encoder
ext_int_edge( L_TO_H );//Interrupcion flanco Bajo a alto
enable_interrupts(GLOBAL);//Activar interrupciones globales
lcd_init();
//Inicializacion del LCD
7/25/2019 Imprementacin de Motor en DC
21/26
lcd_putc("\f SANTO TOMAS\n");//Mensajes de inicio
lcd_putc("CONTROL II");demor();
lcd_putc("\f MORGAN\n");lcd_putc(" EDWING ");demor();lcd_putc("\fING\n");lcd_putc(" MECATRONICA ");
demor();//Retardo
lcd_putc("\f INICIANDO\n");lcd_putc(" SISTEMA");
demor();
lcd_putc("\f VALOR : ");set_point = get_bcd();
//Obtiene el valor ingresadoprintf(lcd_putc,"\f set Point :%ld
",set_point);demor(); //Visualiza
lcd_putc("\f 1-Kp : ");//Imprime mensaje 1-Kp en el LCD
A=get_bcd();//Obtiene valor de Kp
kp = 0.001*A;//Multiplica valor ingresado por 0.001
printf(lcd_putc,"\f 1-Kp :%2.4f",kp);demor();
lcd_putc("\f 2-Ki : ");
A=get_bcd();ki = 0.001*A;printf(lcd_putc,"\f 2-Ki:%2.4f
",Ki);demor();//%demor();
lcd_putc("\f 3-Kd : ");A=get_bcd();kd = 0.001*A;printf(lcd_putc,"\f 3-Kd :%2.4f
",kd);demor();//%demor();/*set_point=20;kp=1;ki=0;kd=0;*/
err_ant= err_act= err_ant1= err_ant2= err_ant3=out_PID= integral= proporcional= derivativo= 0x00; //Condicion inicial
realimentacion= bit_ini=0;//Bandera de inicio
set_tris_b(0x01); //Configuraciondel puerto B
for(;;){
delay_ms(5);err_act = set_point - realimentacion;
//Ecuacion para el error actual
//------------------PROPORCIONAL--------------------------------------
7/25/2019 Imprementacin de Motor en DC
22/26
proporcional = kp*err_act;
//Ecuacion de parte Proporcional
//------------------INTEGRAL------------------------------------------
if(bit_ini==0) //Si est encondicion inicial 0
{integral = ki*err_act; //Ecuacion
integral
// sum_err=err_act;sum_int=integral;bit_ini=0xFF;
}else{
integral = I*(err_ant+err_act);// integral += sum_err;
integral *= ki;sum_int+=integral;
//sum_err += err_act;err_ant =err_act;
}
//----------------DERIVATIVO------------------------------------------
derivativo = 3*(err_ant1-err_ant2);derivativo += err_act;
derivativo -= err_ant3;
derivativo *= kd;
err_ant3=err_ant2;//Memorizacin para la parte derivativa
err_ant2=err_ant1;err_ant1=err_act;
//--------------------------------------------------------------------
out_PID = proporcional + sum_int + derivativo;
if(out_PID < 0x00){inc=atras();} //si lasalida del PID=170;j++) //Retardo
delay_ms(1);
out_PID*=60;
Duty = aprox(out_PID);
7/25/2019 Imprementacin de Motor en DC
23/26
if(Duty>254){Duty=255;}util=Duty;set_pwm1_duty(util);
}
}
7/25/2019 Imprementacin de Motor en DC
24/26
CONCLUSIONES
Para la obtencin de modelos matemticos por medio dedatos adquiridos, es necesario la obtencin dediferentes modelos a partir de varios datos, con elfin de validarlos y as obtener un sistema quesatisfaga las caractersticas de comportamiento delsistema real.
Los datos que se adquirieron fueron filtrados con elfin de eliminar el ruido que alteraba la seal desalida del generador.
Para el proceso de discretizacin del modelo, lafrecuencia de funcionamiento del microcontrolador esla frecuencia de muestreo.
El controlador que se diseo fue un PD debido a queel PID no es aconsejable implementarlo debido a que elsistema ya posee un integrador.
7/25/2019 Imprementacin de Motor en DC
25/26
ANEXOS
7/25/2019 Imprementacin de Motor en DC
26/26
Circuito diseado en Proteus
Top Related