Está en la página 1de 12

SEMINARIO DE COMPUTADORES I DISE~O CON MICROCONTROLADORES N MSP430: Manejo de motor servo

Nombres:

Daniel Arancibia Carocca Alex Garay Herrera Juan Carlos Jarur Mu~oz n Bruno Mundaca Moraga Rodrigo Vizcarra Acevedo Profesor: Leopoldo Silva Bijit

Indice
1. Funcin para generacin de modulacin o o o del servomotor 1.1. Servomotor . . . . . . . . . . . . . . . . 1.2. Puerta Dallas . . . . . . . . . . . . . . . 1.3. Inicializacin de osciladores . . . . . . . o 1.4. Funcin de PWM . . . . . . . . . . . . . o 2. Manejo de los botones implementados rollo EasyWeb II 2.1. Conguracin de puertos utilizados . o 2.2. Conguracin del Timer B . . . . . . o 2.3. Rutina de atencin de Interrupciones o de ancho de pulso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 4 7

en la tarjeta de desar10 . . . . . . . . . . . . . . 10 . . . . . . . . . . . . . . 10 . . . . . . . . . . . . . . 11

1.

Funcin para generacin de modulacin de o o o ancho de pulso del servomotor

Aqu daremos una explicacin de cmo se puede generar una funcin o o o que trabaje con PWM (modulacin de ancho de pulso), donde ocuparemos o Modos de comparacin del timer A y in Up mode los cuales sern explicados o a a continuacin y se mostrara un ejemplo claro y funcional para poder mover o un servo motor con variaciones de ngulo del eje del propio servo a travs a e de una entrada de control que es manejada con la modulacin de ancho de o pulso. Empezaremos por dar una resea del servo motor: n

1.1.

Servomotor

Para el control de un servo motor es posible a travs de una entrada de e control que posee (cable blanco), donde tambin es necesario su alimentacin e o con voltajes VCC =4.8 a 6[V] (rojo se aplica el voltaje y Grd= negro). Para que el servo mantenga un ngulo espec a co es necesario que se aplique un tren de pulsos por el cable de control donde las caracter sticas se pueden observar en la gura 1.1.

Figura 1: Ejemplos de posicionamiento de un servo

1.2.

Puerta Dallas

Luego de poder tener una idea de cmo funciona el servo motor se debe o encontrar un lugar correcto donde conectar el servo a la tarjeta de desarrollo, la cual fue elegida por su arquitectura Dallas la cual se mostrara a continuacin: Se puede observar que al conectar el control del servo en la puerta o

Dallas cualquier peticin de corriente ser entregada por la fuente (+3.6 [V]) o a y por ende el pulso a generar ser de el mismo voltaje. a

1.3.

Inicializacin de osciladores o

Con esta resea del uso del servo y donde se conectar este mismo, comenn a zaremos con la parte de programacin del MSP430F149, donde a travs de o e este aplicaremos un mtodo para poder generar la PWM (modulacin de ane o cho de pulso), en primer lugar es debido una inicializacin de los osciladores o internos del micro, los cuales son mostrados a continuacin: o
void InitOsc(void) { // (1) WDTCTL = WDTPW | WDTHOLD; // Se detiene el stop watchdog timer BCSCTL1 |= XTS; // XT1 se setea a high-frequency. Pg 4-15 del manual del micro a //(2) BIC SR (OSCOFF); // Se enciende el oscilador XT1 do // Se realiza un tiempo de espera hasta que el oscilador este estable IFG1 &= OFIFG; while (IFG1 & OFIFG);

BCSCTL1 &= DIVA0; // ACLK = XT1 / 4 = 2 MHz BCSCTL1 |= DIVA1; IE1 &= WDTIE; // Deshabilita interrupcin WDT o IFG1 &= WDTIFG; // Limpia el flag de interrupcin del WDT o WDTCTL = WDTPW | WDTTMSEL | WDTCNTCL | WDTSSEL | WDTIS1; // Se usa el WDT como timer, flag cada // 512 pulsos de ACLK. // WDTSSEL es el flag que indica al WDT que ocupe como fuente ACLK. while (!(IFG1 & WDTIFG)); // Cuenta 1024 pulsos de XT1 // Hasta que la amplitud del XT1 este bien. WDTCTL = WDTPW | WDTHOLD; // Para watchdog timer IFG1 &= OFIFG; BCSCTL2 |= SELM0 | SELM1; // Se setea XT1 como MCLK. Pg 4-16 del manual del micro a }

Hay que tener claro que para cualquier modicacin de los osciladores el o watchdog timer debe ser detenido con el comando WDTHOLD, y adems a debe aplicarse el sistema de escritura WDTPW el cual estn mas explicados a con detalles en el manual del micro, tambin se especico la pgina a en la e a cual se le puede encontrar. Este tema no se explicar con mucho detalle ya a que el n es de poder mover el servo es a travs de la PWM. e Luego de la inicializacin de los osciladores y respectivas divisiones del o timer ACLK para que quedara en 2 [MHz], daremos una detallada explicacin o de cmo generar PWM con el timer A ocupando el modo de comparacin y o o Up in mode. Los registros usados son explicados a continuacin, ms espec o a camente los del watchdog como por ejemplo WDTCTL que es el registro de control de watchdog timer donde este se ve mas claro en la siguiente gura:

Donde los distintos comandos entregan diferentes ordenes al watchdog.

1.4.

Funcin de PWM o

En este punto vamos a dar explicacin de cada punto ocupado en la funo cin a continuacin descrita, con el n de aclarar un mtodo para generacin o o e o de PWM. Donde en primer lugar se deni como perifrico la salida Dallas coro e respondiente a la puerta P1 en el pin 7, el cual se habilita de la forma que se muestra al inicio del programa (1).
void func(void){ //(1) P1SEL = 0x80; P1DIR |= BIT7; // Salida Dallas habilitada como perifrico. e //(2) TACTL = ID1 | ID0 | TASSEL0 ; //(3) // Se detiene el timer y se usa ACLK / 8 = 250 kHz. TACTL |= MC1; // Se prende el timer modo continuo up-mode MC1=0x0020. //(4) TACCTL2 = OUTMOD2 | OUTMOD1 | OUTMOD0 |CCIS0; // En este caso el Timer A est en Reset/Set a //(5) TACCTL2 &= CAP; // Est en modo de comparacin a o TACCR0 = 0x1388; TACCR2 = 0x0130; }

Punto 2 del programa

En esta parte se dene el timer A como ACLK (reloj auxiliar) mediante seal de control TASSELx con x=0, como se puede observar en la gura n anterior. Luego se dividi este en 8 con el n de usar una frecuencia de 250 o [kHz] esto se hizo mediante IDx ( ID1 e ID0 ).

Up-Mode (punto 3, 4, 5 del programa) En la parte 3 del programa se habilita este modo (Up-Mode).

Como se puede observar en la gura anterior que para este caso se utiliz .out mode 3: set / resetel que esta habilitado en la parte 4 del programa, o puesto que con este modo se puede generar una seal a la que se puede variar n su ciclo de trabajo a travs del registro TACCR2 como se puede ver en la en e programa //(5) Aqu se le dio un valor a TACCR2 con el n de probar el servo pero para poder variar el ciclo de trabajo a travs de la botonera que e tiene la tarjeta de desarrollo, se us un valor que depende de una variable o la que es proporcionada por una funcin que se basa en los botones. Para o el caso de TACCR0 se uso un valor constante, ya que, de este depende la frecuencia de la seal la que debe ser de 50 [Hz]. n

2.

Manejo de los botones implementados en la tarjeta de desarrollo EasyWeb II

Los tres primeros botones de la tarjeta de desarrollo se encuentran conectados a los pines 4, 5 y 6 del puerto 4 del microcontrolador. Al mismo tiempo, estos pines corresponden a los pines TB4, TB5 y TB6 del Timer B. De acuerdo al diagrama de conexiones de la tarjeta, al presionar un botn se produce o un canto de bajada en el pin correspondiente al botn presionado. Luego, cono gurando el Timer en modo captura con canto de bajada, se producir un a evento de captura cada vez que se presione un botn, y de acuerdo a las o especicaciones de funcionamiento del timer, ante cada captura se seteara un ag de interrupciones lo que permitir realizar alguna accin conveniente a o atendiendo la rutina de interrupciones cada vez que un botn sea presionado. o

2.1.

Conguracin de puertos utilizados o

Los puertos utilizados son los pines 4,5 y 6 del puerto 4, esto es P4.4, P4.5 y P4.6, los cuales deben ser congurados como perifricos. Para esto se e necesitan las siguientes instrucciones:
P4SEL |= BIT4; // se setea P4.4 como perifrico (TB4) e P4SEL |= BIT5; // se setea P4.5 como perifrico (TB5) e P4SEL |= BIT6; // se setea P4.6 como perifrico (TB6) e

2.2.

Conguracin del Timer B o

Para esta aplicacin se conguro el Timer B en modo continuo de 16 bits o con la siguiente instruccin: o
TBCTL = ID1 | TBSSEL0 | MC1; // cuenta 16 bits, inicio timer, o modo continuo

Luego, se congura cada uno de los puertos utilizados mediante el seteo de su respectivo registro de control que para este caso es el registro TBCCTLx (Registro de control de Captura / comparacin x). Se setea cada uno de ellos o en modo captura con canto de bajada y con interrupcin habilitada mediante o las siguientes instrucciones:

10

TBCCTL4 |= CM1 | CCIE | CAP; // p4.4 canto de bajada, IE, modo Captura TBCCTL5 |= CM1 | CCIE | CAP; // p4.5 canto de bajada, IE, modo Captura TBCCTL6 |= CM1 | CCIE | CAP; // p4.6 canto de bajada, IE, modo Captura

2.3.

Rutina de atencin de Interrupciones o

La siguiente rutina detalla las rutinas que se atienden al momento de presionar alguno de los botones:
#pragma vector=TIMERB1 VECTOR //Vector de interrupciones interrupt void Botones (void) { switch( TBIV ) //Pooling de registro TBIV { case 8: BIC SR(GIE); for(i=0;i<3200;i++); t-=10; EINT(); break; case 10: BIC SR(GIE); for(i=0;i<3200;i++); t+=10; EINT(); break; case 12: BIC SR(GIE); for(i=0;i<3200;i++); g=125+(2.22*t); servo(&g); EINT(); break; } }

El registro TBIV (Timer B Interrupt Vector) contiene los ags que se setean al momento de producirse una captura en alguno de los registros del Timer B producto, en este caso, de que un botn ha sido presionado. o El diseo propuesto, consta del uso de 3 botones(por limitaciones de la n tarjeta de desarrollo) los cuales cumplirn las siguientes funciones: a

11

Botn 1: Disminuye una cuenta interna del ngulo del motor. o a Botn 2: Aumenta una cuenta interna del ngulo del motor. o a Botn 3: Enter, pasa el valor de la cuenta a la funcin que entrega la o o seal al motor. n El registro TBIV es encuestado mediante una rutina SWITCH en la cual se pregunta por los casos 8, 10 y 12 que corresponden a los ags de interrupciones por captura del timer B detallados anteriormente. Para el caso TBIV=8 se tiene que se disminuye una variable interna que lleva la posicin del motor en grados, el caso TBIV=10 aumenta esta misma variable o y nalmente el caso TBIV=12 calcula el parmetro para la funcin servo a o que es la encargada de entregar la seal de mando de la posicin del motor. n o Para cada caso se implemento una rutina for como delay temporal suciente para eliminar efectos de rebote de los botones segn lo visto en las pruebas u realizadas.

12

También podría gustarte