Академический Документы
Профессиональный Документы
Культура Документы
UNIVERSIDAD SURCOLOMBIANA -WILLIAM FERNANDO VSQUEZ -ANTONY JOHAN GONZLEZ -ANBAL LEONARDO ROJAS
Donde:
Se definen como variables de estado la velocidad angular y la corriente de armadura , lo cual nos permite describir el sistema en forma de ecuacin de estado:
La salida del sistema depende de las variables de estado que se lean por medio de los sensores. Si se lee solamente la velocidad, la salida del sistema es ; escribiendo en forma matricial:
Datos Tcnicos del Motor: Fabricado por la compaa Maxon Motor. Motor A-max 32 Voltaje Nominal = 12V Potencia Nominal = 15W Velocidad Nominal = 4590 rpm Torque mximo continuo = 38.2 mNm Mxima corriente continua = 1.58A Corriente de Arranque = 4.01A Ra = 2.99 (Resistencia de armadura) J = 41.4gr.cm2 = 4.14*10-6 Kg.m2 (Inercia del rotor) La = 420H (inductancia de armadura) f = 1*10-8 (friccin viscosa) Kb = 24.1 mNm/A = 41.47 rad/s/V = 24.96*10-3 V/rd/s (constante de velocidad) Kt = 24.1*10-3 Nm/A (constante de torque)
Se escribe el siguiente cdigo en matlab, para ver la respuesta transitoria del motor ante entrada escaln de 12 voltios, puesto que es el voltaje nominal, y determinar cul es la velocidad ante voltaje nominal.
%% MOTOR DC Ra=2.99; %resistencia de armadura(ohms) La=420e-6; %inductancia de armadura(H) F=1e-8; % J=4.14e-6; % inercia del rotor(Kg*m^2) Kb=24.96e-3; % constante de velocidad (V/(rad/seg)) Kt=24.1e-3; %constante de torque (N*m/amp) % variables de estado: % X1=Ia % X2=W
% Entradas % U1=Va voltaje de armadura % U2=Tl Torque de carga Am=[-Ra/La Kt/J -Kb/La -F/J ];
Bm=[1/La 0
0; -1/J ];
Cm=[0
1];
Dm=[0 0];
Gss=ss(Am,Bm,Cm,Dm)% ecuacion de estado eig(Am)% Valores propios(polos) Gtf=tf(Gss)%funcion de transferencia %% G11=Gtf(1,1); %W/Ea G12=Gtf(1,2); %W/Tl G11=zpk(G11)% ver en forma ceros, polos , ganancia
Se puede ver que el polo es -7070 es despreciable puesto que est muy lejos en comparacin con el polo en -48.93, entonces se puede hacer la aproximacin a un sistema de primer orden, entonces se quita el polo y se divide la ganancia entre el valor del polo:
Para sensar la velocidad del motor se usa un convertidor frecuencia a voltaje, el cual recibe la seal del encoder incremental incorporado al motor.
Digital Encoder. Se utiliz un encoder digital fabricado por la compaa Maxon Motor cuya referencia es HEDL 5540 con manejador de lnea.
Figura 29. Encoger digital Datos tcnicos: Vcc = 5V Seal de salida: EIA estndar RS422 Nmero de canales: 2 + pulso ndice. Corriente de fase: 90 Pulsos por revolucin: 500 Corriente de salida/canal: -1 a 20mA Mxima frecuencia de operacin : 100KHz.
De acuerdo operacin:
Wn rps
76 .5
38250P / seg
entonces
fmx = 38.25KHz
I2 = 180uA para Vcc = 12 Vol (Se obtiene de las curvas de operacin del PDF) Si fmax = 40KHz entonces C1 =
180 uA 40 KHz *12V 375 pF 330 pF 33 pF
R1 =
Vout Vcc * f IN * C1
33K
; R1*C2 2ms C2 =
2ms 33 K
motor
60 nF
68 nF
Circuito para detectar el sentido de giro del motor: Se dise con el flip-flop D 74LS74.
Velocidad positiva:
Velocidad negativa:
Los filtros de entrada son para filtrar el ruido, slo dejan pasar la onda cuadrada pura que genera el encoder. Como se observa en los diagramas de tiempo, Q = 0 para velocidad negativa; velocidad positiva. Q = 1 para
Actuador (Puente H)
Se emplea el CI LMD18200 fabricado por National Semiconductor. Este integrado contiene un puente H interno a base de Power Mosfet, lo cual permite que el motor gire en dos direcciones. Tiene una entrada de seal PWM, una entrada de direccin y una entrada de Brake.
La seal de entrada PWM es suministrada por el microcontrolador y con ella logramos variar el ciclo til de la seal de salida desde 0% a 100% lo que equivale a variar el voltaje promedio aplicado al motor en un rango entre 0 Voltios y 12 Voltios.
BRAKE: Es una entrada del LM18200 utilizada para impedir que sea aplicado un voltaje al motor cuando es de nivel lgico alto. Direccin: Es una entrada que controla la direccin del flujo de corriente entre out1 y out2 y por lo tanto la direccin de rotacin del motor.
5 480 .663
Conjunto Actuador-Motor-Sensor:
Es decir que el modelo de nuestra planta para hacer el sistema de control es:
Nota: hay que tener en cuenta que la mxima seal de control es evitar la saturacin del actuador, y que cuando la seal de salida voltios se tiene la mxima velocidad del motor (480.66 rad/seg).
para es igual a 5
CONTROL DIGITAL Se va a implementar un controlador digital, entonces a la planta se le agrega un retenedor de orden cero. Para la eleccin del periodo de muestreo se tiene en cuenta que el tiempo de establecimiento es alrededor de 100 milisegundos, entonces se toma ; luego la transformada Z de la planta es:
es el error.
Kp=0.6*K; Tcr=0.02; Td=0.125*Tcr; Ti=0.5*Tcr; Ki=Kp/Ti; Kd=Td*Kp; T=0.01; Kp=Kp-(Kp*T/(2*Ti)); Ki=Ki*T; Kd=Kd/T; z=tf('z') Gcz=(Kp+(Ki/(1-z^-1))+Kd*(1-z^-1))%controlador zpk(Gcz) figure(2) step(feedback(Gcz*Gz,1)) %hasta aca se obtuvieron los patrones de arranque Kd=0.2100; Ki=1.1000; Kp=0.7000; Gcz=(Kp+(Ki/(1-z^-1))+Kd*(1-z^-1)) zpk(Gcz) figure(3) step(feedback(Gcz*Gz,1)) num=[2.01 -1.12 0.21]; den=[1 -1 0]; Gcz=tf(num,den,0.01) [Ac,Bc,Cc,Dc]=tf2ss(num,den) Gczss=ss(Gcz) Gczss=balreal(Gczss) %realizacin balanceada
A continuacin se muestra el diagrama de simulink del sistema de control, en el cual se compara la respuesta del sistema con el motor en continuo y el retenedor de orden cero (sistema real) y el sistema con el motor discretizado; al simular se comprueba que las dos respuestas son exactamente iguales.
La respuesta anterior es ante escaln unitario; para saber la velocidad que tomara el sistema, basta hacer regla de tres:
Entonces escaln unitario equivale a 96.13 rad/seg. La grfica de seal de control es:
Se observa que no se satura el actuador, puesto que el mximo valor es 5 voltios; lo anterior nos muestra que el sistema puede funcionar con referencias hasta de 2.5 voltios sin saturar la seal de control.
T = 10ms,
Y (20 )
periodo de muestreo.
48.93( 20ms)
h(1 e
) 1
h(0.6242) = 1
entonces h = 1.6021
Y (10 )
h(1 e
48.93(10ms)
0.6199
entonces:
Y(0) = 0;
Y(10) = 0.6199;
Y(20) = 1
Y ( z) Y ( z) Y ( z)
0.6199z 0.6199z
z z
z 3 ... 1 1 z
2
0.6199z
1
0.6199z 1 z1
0.6199z 1 0.3801z 1 z 1
G( z)
z*
1 e s
TS
(1 e (1 e
48.93T
)z 48.93T )z
1 1
; T = 10ms
escaln unitario
Y ( z) R( z )
0.6199z
0.3801z
La salida Y(Z) :
PROGRAMA DE MICROCONTROLADOR PIC 16F877A PID Implementado con PIC-C #include <16F877A.h> #device adc=8 #FUSES NOWDT, HS, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) //#DEFINE PIN_B0 SENTIDO_GIRO // BIT QUE SE LEE DEL FLIP FLOP PARA VERIFICAR EL SENTIDO DE GIRO //#DEFINE PIN_B1 DIRECCION // BIT QUE INDICA EL SENTIDO DE GIRO QUE TOMARA EL MOTOR unsigned int16 REFERENCIA=0, VELOCIDAD = 0; signed int16 ERROR = 0, VELOCIDADi = 0 ; signed int16 Xk1=0;//Condiciones iniciales signed int16 Xk2=0; signed int16 X1=0; signed int16 X2=0; float U= 0; signed INT16 SALIDA; unsigned int salida8; #int_TIMER1 void TIMER1_isr(void) { // LECTURA DE LAS VARIABLES %%%%%%%%%%%%%%%%%%%%%%%%% set_adc_channel(0); DELAY_us(20); REFERENCIA = READ_ADC();
ANALOGAS
DEL
SISTEMA
set_adc_channel(1); DELAY_us(20); VELOCIDAD = READ_ADC(); VELOCIDADi = VELOCIDAD; IF (referencia<0) VELOCIDADi = -VELOCIDADi; //determinar el sentido de giro del motor //ELSE VELOCIDADi=VELOCIDADi;
ERROR = REFERENCIA - VELOCIDADi; // SE RESTA EL NIVEL DC a la referencia y se halla el error; //la referencia se multiplica por 2 para que sea del mismo rango //que la velocidad (0-255) /* Xk1=X1-2.004*ERROR; //control PID Xk2=0.4583*ERROR; U =-0.5489*X1-0.4583*X2+2.01*ERROR; */
Xk1=X1+0.8101*ERROR; //Control de Kalman Xk2=-0.3801*X2-0.5183*ERROR; U =0.8942*X1-0.5183*X2+1.602*ERROR; /* Xk1=0.8706*X1+0.4087*X2-0.5392*ERROR; //sistema subamortiguado (oscilaciones) Xk2=-0.4087*X1+0.8624*X2-0.3439*ERROR; U =-0.5392*X1+0.3439*X2+0.04621*ERROR; */ /* Xk1=0.6306*X1-0.1801*X2-1.137*ERROR; //sistema sin sobrepico con ganancia=4 Xk2=0.1801*X1-0.4592*X2+0.2264*ERROR; U =-1.137*X1-0.2264*X2+0.5714*ERROR; */ X1=Xk1; X2=Xk2; SALIDA = abs(U); //la variable se vuelve positiva porque el ciclo til slo puede ser positivo IF (U<0) output_bit( PIN_B1,0 ); //cambiar el bit de sentido de giro del motor ELSE output_bit( PIN_B1,1 );
IF (SALIDA > 255) salida8 = 255; //Nivel de saturacin ELSE salida8 = make8(SALIDA,0); //se le asigna a la variablesalida8 los 8 bits //menos significativos de la variable SALIDA
set_pwm1_duty(SALIDA8); //cargar el valor de salida8 al registro del ciclo til del PWM SET_TIMER1(60285); //el timer se carga con 59285, para que cuente de 59285 a 65535; cada //periodo de conteo es de 1.6 useg } void config() { setup_adc_ports(AN0_AN1_AN3); setup_adc(ADC_CLOCK_DIV_2); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); setup_timer_2(T2_DIV_BY_16,255,1); //el periodo de la seal PWM es ((20MHz/4)/16)/255=1.225KHz setup_ccp1(CCP_PWM); set_pwm1_duty(0); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); } void main() { config(); while (true) { } }