Vous êtes sur la page 1sur 10

Control Motor 1. introduccin Esta prctica de laboratorio se dar a conocer los conceptos bsicos de control de motores utilizando el PIC16F877.

2. Un controlador de motor de lazo cerrado Un controlador de motor de bucle cerrado es un medio comn de mantener una velocidad del motor deseada bajo diferentes condiciones de carga. En el controlador del motor de ciclo cerrado (Figura 1) una seal proporcional a la velocidad del motor se alimenta a la entrada, donde la retroalimentacin (feedback) se resta a producir una seal de error. Esta seal de error es entonces una entrada al controlador donde una seal es generada y enviado al modulador de pulso ancho (PWM). La seal PWM es enviada a continuacin, directamente al motor.

Figura 1: Un controlador de motor de ciclo cerrado Por qu una seal PWM? La velocidad de un motor de corriente continua puede variar mediante el cambio de la tensin aplicada a la de entrada. Una seal modulada en anchura de impulso se crea por conmutacin de la salida de encendido y apagado en algn ciclo de trabajo. Por ejemplo, en la Figura 2 (a), la salida se activa durante un corto perodo de tiempo (ciclo de trabajo inferior) durante cada ciclo. El resultado es una tensin media baja vista por el motor que resulta en una velocidad ms lenta. En la Figura 2 (b), la salida se activa durante un mayor duracin (ciclo superior) durante cada ciclo resulta en una tensin media alta y la velocidad del motor ms alta.

Figura 2: Las seales PWM En las siguientes secciones nos fijamos en el controlador y la retroalimentacin de manera independiente y desarrollar programas para: a. Controlar el motor en modo de lazo abierto. b. Decodificar los encoders de motor en el circuito de retroalimentacin. c. Disear e implementar un controlador de motor de ciclo cerrado. 3. Motor abierto controlador de lazo Uso de la tarjeta de MAD y LMD18200 Puente-H. Conectar el circuito como se muestra en Figura 3. El diagrama de conexin del motor se muestra en el Apndice A.

NOTA: 1. Vs es la entrada de alta tensin para el motor (24V) 2. PWM est conectada a la salida de PWM en la tarjeta de MAD. 3. La direccin puede ser conectado a cualquier salida digital en la tarjeta de MAD

Figura 3: Esquema para conectar el LM18200 a la tarjeta de MAD

Escriba un programa que acepte la entrada desde el teclado para variar el ciclo de trabajo del motor. Ver cdigo de ejemplo en el apndice B de PWM y ejemplos de puerto serie. Cmo funciona un Puente-H? El control de la velocidad de los motores ser muy importante para este proyecto. El PIC microcontrolador tiene construido en dos moduladores de ancho de pulso que se pueden utilizar para accionar un Puente H que le permite variar la velocidad del motor. Al variar el ciclo de trabajo de pulso de la seal modulada en anchura de la tensin media visto por la cabina del motor puede variar por lo tanto la velocidad.

Figura 4: Circuito de H-Bridge El Puente-H toma una tensin de alimentacin de DC y proporciona un control de 4 cuadrantes a una carga conectado entre dos pares de transistores de conmutacin de potencia. Debido a que los conmutadores permiten que la corriente fluya bidireccionalmente, las tensiones a travs de la carga (AB) pueden ser de cualquiera polaridad. Por ejemplo, consideremos el circuito de la Figura 4. Cuando cambia A1 y B2 son corriente de reposo fluir a travs de la salida de A a B. Del mismo modo, cuando cambia B1 y A2 estn cerrados corriente fluir desde B hasta A.

Figura 5: El control de los interruptores de la h-puente puede revertir Motor

Afortunadamente, los Puentes-H son muy populares y varios chips envasados estn disponibles que simplifican el control del motor. El Puente-H utilizado en este proyecto es la LMD18200. Simplemente requiere dos entradas, una entrada digital para establecer la direccin y un ancho de pulso modulado de entrada para controlar la velocidad tal como se muestra en la Figura 9.

Figura 6: entradas de LMD18200 4. Descifrando el encoder para Comentarios En esta seccin usted tendr que escribir un programa para decodificar el codificador e imprimir el nmero de revoluciones del motor de vuelta a la pantalla de hiperterminal. Para simplificar esta tarea la tensin fija se puede aplicar a la entrada del motor a partir de una fuente de alimentacin de laboratorio. El codificador de lneas se debe conectar a cualquier entrada digital de la tarjeta de MAD como se muestra en la figura 5.

Figura 7: Conexin del encoder en cuadratura a la tarjeta de MAD.

Decodificacin de un codificador de cuadratura La salida de un codificador de cuadratura se compone de dos ondas cuadradas separadas por 90 grados. Esto se traduce en cuatro estados nicos proporcionar suficiente informacin para determinar tanto el nmero de revoluciones del eje del motor as como el sentido de la marcha. El bsico algoritmo de decodificacin para un codificador de cuadratura es la siguiente: 1. Inicializar por muestreo CHA y CHB y set old_state. 2. Muestra CHA y CHB y set new_state. 3. Comparar new_state a old_state y actualizar la cuenta (vea la Figura 4) A fin de garantizar una adecuada tasa de muestreo se debe determinar el mnimo requerido de velocidad de muestreo y usar el temporizador de rtcc para crear una interrupcin a una velocidad igual o mayor que la tasa de muestreo. Cuando los codificadores de decodificacin debe tenerse en cuenta que los codificadores son en el eje de entrada del motor. La velocidad mxima del eje de salida es de 800 rpm a 30VDC. Puesto que existe una relacin de engranaje 5,9:1 esto significa que el eje de entrada tiene una velocidad mxima de 4720 rpm. Tambin tenga en cuenta que los codificadores tienen 512 incrementos, sin embargo debido a que el anterior es el mtodo de los resultados de descodificacin en 4 conteos por codificador incrementar el nmero total de conteos por revolucin es 4 512 = 2048 cuentas/rev. Asimismo, puesto que va a utilizar 24v proporcionar la mxima velocidad del motor se reduce a aproximadamente 4.720 24/30= 3775.

Figura 8: salida del codificador de cuadratura 5. Lazo cerrado de control de motores En esta seccin podrs combinar el algoritmo de retroalimentacin con el controlador de lazo abierto a producir un control de velocidad en lazo cerrado. Un diagrama de bloques del sistema es el disee se muestra en la Figura 6.

Figura 9: Diagrama de bloque del motor controlador de lazo cerrado Uno de los principales resultados de esta prctica de laboratorio debe haber una comprensin de los requisitos para la realizacin de procedimientos en tiempo real en un micro-controlador. Dependiendo de la eficiencia de los su puesta en prctica puede que no sea posible decodificar los codificadores y realizar diversas otras funcionalidades en un solo micro controlador PIC. Uno de los retos de este proyecto ser la de disear un mtodo de decodificacin de los encoders externos a la junta MAD. Apndice A Diagrama de conexin del motor

Apendice B ejemplos de cogido Este programa muestra cmo utilizar el construido en el PIC PWM. El programa tiene una entrada analgica y utiliza el valor digital para ajustar el ciclo de trabajo. La frecuencia se establece por el usuario a travs de la interfaz RS-232. a. Configure la tarjeta prototipo CCS de la siguiente manera: b. Conecte un alcance al pin 3 (C2) c. Conecte 9 a 15 (pot) Ver conexiones adicionales a continuacin.
#if defined(__PCM__) #include <16C74.H> #fuses HS,NOWDT,NOPROTECT #use delay(clock=10000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, BRGH1OK) // Jumpers: 8 to 11, 7 to 12 #elif defined(__PCH__) #include <18C452.H> #fuses HS,NOPROTECT #use delay(clock=10000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, BRGH1OK) // Jumpers: 8 to 11, 7 to 12 #endif main() { char selection; byte value; printf("\r\nFrequency:\r\n"); printf(" 1) 19.5 khz\r\n"); printf(" 2) 4.9 khz\r\n"); printf(" 3) 1.2 khz\r\n"); do { selection=getc(); } while((selection<'1')||(selection>'3')); setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM // The cycle time will be (1/clock)*4*t2div*(period+1) // In this program clock=10000000 and period=127 (below) // For the three possible selections the cycle time is: // (1/10000000)*4*1*128 = 51.2 us or 19.5 khz // (1/10000000)*4*4*128 = 204.8 us or 4.9 khz // (1/10000000)*4*16*128= 819.2 us or 1.2 khz switch(selection) { case '1' : setup_timer_2(T2_DIV_BY_1, 127, 1); break; case '2' : setup_timer_2(T2_DIV_BY_4, 127, 1); break; case '3' : setup_timer_2(T2_DIV_BY_16, 127, 1); break; }

setup_port_a(ALL_ANALOG); setup_adc(adc_clock_internal); set_adc_channel( 0 ); printf("%c\r\n",selection); while( TRUE ) { value=read_adc(); printf("%2X\r",value); set_pwm1_duty(value); // This sets the time the pulse is high each cycle. We use the A/D // input to make a easy demo. the high time will be: // if value is LONG INT: // value*(1/clock)*t2div // if value is INT: // value*4*(1/clock)*t2div // for example a value of 30 and t2div // of 1 the high time is 12us // WARNING: A value to high or low will // prevent the output from // changing. } }

Este programa muestra cmo implementar una rutina de servicio de interrupcin para amortiguar en venir datos en serie.
#if defined(__PCM__) #include <16C74.H> #fuses HS,NOWDT,NOPROTECT #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12 #define BUFFER_SIZE 32 byte buffer[BUFFER_SIZE]; byte next_in = 0; byte next_out = 0; #int_rda void serial_isr() { int t; buffer[next_in]=getc(); t=next_in; next_in=(next_in+1) % BUFFER_SIZE; if(next_in==next_out) next_in=t; // Buffer full !! } #define bkbhit (next_in!=next_out)

byte bgetc() { byte c; while(!bkbhit) ; c=buffer[next_out]; next_out=(next_out+1) % BUFFER_SIZE; return(c); } main() { enable_interrupts(global); enable_interrupts(int_rda); printf("\r\n\Running...\r\n"); // The program will delay for 10 seconds and then display // any data that came in during the 10 second delay do { delay_ms(10000); printf("\r\nBuffered data => "); while(bkbhit) putc( bgetc() ); } while (TRUE); }

Vous aimerez peut-être aussi