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

SEMINARIO DE COMPUTADORES I DISE~ NO CON MICROCONTROLADORES MSP430: Manejo de motor servo Nombres: Daniel Arancibia Carocca Alex Garay Herrera Juan

22 downloads 110 Views 163KB Size

Recommend Stories

Story Transcript

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

Nombres:

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

´Indice 1. Funci´ on para generaci´ on de modulaci´ on del servomotor 1.1. Servomotor . . . . . . . . . . . . . . . . 1.2. Puerta Dallas . . . . . . . . . . . . . . . 1.3. Inicializaci´on de osciladores . . . . . . . 1.4. Funci´on de PWM . . . . . . . . . . . . . 2. Manejo de los botones implementados rollo EasyWeb II 2.1. Configuraci´on de puertos utilizados . 2.2. Configuraci´on del Timer B . . . . . . 2.3. Rutina de atenci´on de Interrupciones

2

de ancho de pulso . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

3 3 4 4 7

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

1.

Funci´ on para generaci´ on de modulaci´ on de ancho de pulso del servomotor

Aqu´ı daremos una explicaci´on de c´omo se puede generar una funci´on que trabaje con PWM (modulaci´on de ancho de pulso), donde ocuparemos Modos de comparaci´on del timer A y in Up mode los cuales ser´an explicados a continuaci´on y se mostrara un ejemplo claro y funcional para poder mover un servo motor con variaciones de ´angulo del eje del propio servo a trav´es de una entrada de control que es manejada con la modulaci´on de ancho de pulso. Empezaremos por dar una rese˜ na del servo motor:

1.1.

Servomotor

Para el control de un servo motor es posible a trav´es de una entrada de control que posee (cable blanco), donde tambi´en es necesario su alimentaci´on con voltajes VCC =4.8 a 6[V] (rojo se aplica el voltaje y Grd= negro). Para que el servo mantenga un ´angulo espec´ıfico es necesario que se aplique un tren de pulsos por el cable de control donde las caracter´ısticas se pueden observar en la figura 1.1.

Figura 1: Ejemplos de posicionamiento de un servo

3

1.2.

Puerta Dallas

Luego de poder tener una idea de c´omo funciona el servo motor se debe 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 continuaci´on: Se puede observar que al conectar el control del servo en la puerta

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

1.3.

Inicializaci´ on de osciladores

Con esta rese˜ na del uso del servo y donde se conectar´a este mismo, comenzaremos con la parte de programaci´on del MSP430F149, donde a trav´es de este aplicaremos un m´etodo para poder generar la PWM (modulaci´on de ancho de pulso), en primer lugar es debido una inicializaci´on de los osciladores internos del micro, los cuales son mostrados a continuaci´on: void InitOsc(void) { // (1) WDTCTL = WDTPW | WDTHOLD; // Se detiene el stop watchdog timer BCSCTL1 |= XTS; // XT1 se setea a high-frequency. P´ ag 4-15 del manual del micro //(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);

4

BCSCTL1 &= ∼DIVA0; // ACLK = XT1 / 4 = 2 MHz BCSCTL1 |= DIVA1; IE1 &= ∼WDTIE; // Deshabilita interrupci´ on WDT IFG1 &= ∼WDTIFG; // Limpia el flag de interrupci´ on del WDT 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. P´ ag 4-16 del manual del micro }

Hay que tener claro que para cualquier modificaci´on de los osciladores el watchdog timer debe ser detenido con el comando WDTHOLD, y adem´as debe aplicarse el sistema de escritura WDTPW el cual est´an mas explicados con detalles en el manual del micro, tambi´en se especifico la p´agina a en la cual se le puede encontrar. Este tema no se explicar´a con mucho detalle ya que el fin es de poder mover el servo es a trav´es de la PWM. Luego de la inicializaci´on de los osciladores y respectivas divisiones del timer ACLK para que quedara en 2 [MHz], daremos una detallada explicaci´on de c´omo generar PWM con el timer A ocupando el modo de comparaci´on y Up in mode. Los registros usados son explicados a continuaci´on, m´as espec´ıficamente 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 figura:

5

Donde los distintos comandos entregan diferentes ordenes al watchdog.

6

1.4.

Funci´ on de PWM

En este punto vamos a dar explicaci´on de cada punto ocupado en la funci´on a continuaci´on descrita, con el fin de aclarar un m´etodo para generaci´on de PWM. Donde en primer lugar se defini´o como perif´erico la salida ”Dallas” correspondiente 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 perif´ erico. //(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´ a en Reset/Set //(5) TACCTL2 &= ∼CAP; // Est´ a en modo de comparaci´ on TACCR0 = 0x1388; TACCR2 = 0x0130; }

7

Punto 2 del programa

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

8

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 figura anterior que para este caso se utiliz´o .out mode 3: set / reset”el que esta habilitado en la parte 4 del programa, puesto que con este modo se puede generar una se˜ nal a la que se puede variar su ciclo de trabajo a trav´es del registro TACCR2 como se puede ver en la en programa //(5) Aqu´ı se le dio un valor a TACCR2 con el fin de probar el servo pero para poder variar el ciclo de trabajo a trav´es de la botonera que tiene la tarjeta de desarrollo, se us´o un valor que depende de una variable la que es proporcionada por una funci´on que se basa en los botones. Para el caso de TACCR0 se uso un valor constante, ya que, de este depende la frecuencia de la se˜ nal la que debe ser de 50 [Hz].

9

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 bot´on se produce un canto de bajada en el pin correspondiente al bot´on presionado. Luego, configurando el Timer en modo captura con canto de bajada, se producir´a un evento de captura cada vez que se presione un bot´on, y de acuerdo a las especificaciones de funcionamiento del timer, ante cada captura se seteara un flag de interrupciones lo que permitir´a realizar alguna acci´on conveniente atendiendo la rutina de interrupciones cada vez que un bot´on sea presionado.

2.1.

Configuraci´ on de puertos utilizados

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 configurados como perif´ericos. Para esto se necesitan las siguientes instrucciones: P4SEL |= BIT4; // se setea P4.4 como perif´ erico (TB4) P4SEL |= BIT5; // se setea P4.5 como perif´ erico (TB5) P4SEL |= BIT6; // se setea P4.6 como perif´ erico (TB6)

2.2.

Configuraci´ on del Timer B

Para esta aplicaci´on se configuro el Timer B en modo continuo de 16 bits con la siguiente instrucci´on: TBCTL = ID1 | TBSSEL0 | MC1; // cuenta 16 bits, inicio timer, o modo continuo

Luego, se configura 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 / comparaci´on x). Se setea cada uno de ellos en modo captura con canto de bajada y con interrupci´on habilitada mediante 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 atenci´ on de Interrupciones

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

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.