los servo

5
Servomotores Los servomotores son sistemas integrados que tienen un control de posición angular, y un sistema mecánico de piñones para ofrecer mayor fuerza pero menor velocidad. Un servomotor tiene incorporado un control de posición angular, que puede ser gobernado por medio de una señal PWM. Las aplicaciones de los servomotores están desde la robótica hasta los modelos a escala como aviones, helicópteros y carros. Los servomotores cuentan con un terminal de tres pines para la alimentación, la referencia y la señal de control PWM. La apariencia física y la vista en ISIS de estos dispositivos es la siguiente: La característica de la señal de control es su periodo de PWM de 16m a 18m segundos y el periodo útil puede variar de 1 a 2 milisegundos, esto hace referencia respectivamente a 0 y 180 grados en la posición angular. La siguiente gráfica ilustra está situación: A continuación se muestra un ejemplo en lenguaje C, para controlar la posición de un servomotor: //Función para generar el PWM de //baja frecuencia, ajustado para

Upload: mundopic-mundopic

Post on 26-Jan-2016

214 views

Category:

Documents


0 download

DESCRIPTION

sefvo

TRANSCRIPT

Page 1: los servo

Servomotores Los servomotores son sistemas integrados que tienen un control de posición angular, y un sistema mecánico de piñones para ofrecer mayor fuerza pero menor velocidad. Un servomotor tiene incorporado un control de posición angular, que puede ser gobernado por medio de una señal PWM. Las aplicaciones de los servomotores están desde la robótica hasta los modelos a escala como aviones, helicópteros y carros. Los servomotores cuentan con un terminal de tres pines para la alimentación, la referencia y la señal de control PWM. La apariencia física y la vista en ISIS de estos dispositivos es la siguiente:

La característica de la señal de control es su periodo de PWM de 16m a 18m segundos y el periodo útil puede variar de 1 a 2 milisegundos, esto hace referencia respectivamente a 0 y 180 grados en la posición angular. La siguiente gráfica ilustra está situación:

A continuación se muestra un ejemplo en lenguaje C, para controlar la posición de un servomotor: //Función para generar el PWM de //baja frecuencia, ajustado para //cristal de 20MHz. void Pwm_Sevo( float ang ) { unsigned int n, max; max = 1.61*ang; PORTB.F0 = 1; delay_ms(1); for( n=0; n<max; n++ ) delay_us(1); PORTB.F0=0;

Page 2: los servo

delay_ms(15); } void main( void ) { //Angulo inicial. float ANGULO=90; //Inicio del puerto TRISB.F0 = 0; //Se activan las resistencias PULL-UP. OPTION_REG=0; while(1)//Bucle infinito. { Pwm_Sevo(ANGULO); //Se genera un pulso. //Si se pulsa el botón de RB6 //se decrementan 10 grados. if( PORTB.F6==0 ) { ANGULO-=10.0; if( ANGULO<0.0 )ANGULO=0.0; while( Button(&PORTB,6,5,0) ); } //Si se pulsa el botón de RB7 //se incrementan 10 grados. if( PORTB.F7==0 ) { ANGULO+=10.0; if( ANGULO>180.0 )ANGULO=180.0; while( Button(&PORTB,7,5,0) ); } } }

Page 3: los servo

//Constantes con la secuencia de pasos. const unsigned short PASOS[4] = { 0b00000001, 0b00000010, 0b00000100, 0b00001000 }; void main( void ) { //Declaración de variables. unsigned short PASO=0; //Inicio del puerto TRISB = 0xF0; PORTB = 0; OPTION_REG = 0; //Activación de las resistencias PULL-UP.while(1)//Bucle infinito. { //Bucle while para hacer girar en un sentido //por medio del pin RB6 while( Button( &PORTB, 6, 100, 0) ) { PORTB = PASOS[PASO]; PASO++; if( PASO==4 )PASO=0; } //Bucle while para hacer girar en un sentido contrario //por medio del pin RB7 while( Button( &PORTB, 7, 100, 0) ) { PORTB = PASOS[PASO]; PASO--; if( PASO==255 )PASO=3; } } }

Page 4: los servo

Motores DC Los motores DC, son de naturaleza inductiva y por consiguiente merecen el mismo tratamiento de los relevadores. En el siguiente ejemplo se puede apreciar como un microcontrolador hace cambios de velocidad en un motor DC, para este fin se implementa el módulo PWM de un microcontrolador 16F628A, con oscilador de 4MHz. El código fuente en lenguaje C es el siguiente: void main( void ) { unsigned short CU=0; OPTION_REG = 0; //Se activan las resistencias PULL-UP. PWM1_Init( 500 ); //Se inicia el módulo PWM a 500Hz. PWM1_Set_Duty(CU); PWM1_Start(); while(1) //Bucle infinito. { //Bucle de incremento del PWM cuando se pulsa RB1. while( Button( &PORTB, 1, 10, 0 ) ) { CU++; if( CU==0 )CU=255;

PWM1_Set_Duty(CU); delay_ms(10); } //Bucle de decremento del PWM cuando se pulsa RB0. while( Button( &PORTB, 0, 10, 0 ) ) { CU--; if( CU==255 )CU=0; PWM1_Set_Duty(CU); delay_ms(10); } } }

Page 5: los servo