Você está na página 1de 11

CONTROL DEL SERVO CON PULSADORES

Un servomotor (tambin llamado servo) es un dispositivo similar a un motor de corriente continua que tiene la capacidad de ubicarse en cualquier posicin dentro de su rango de operacin, y mantenerse estable en dicha posicin. Un servomotor es un motor elctrico que consta con la capacidad de ser controlado, tanto en velocidad como en posicin. Los servos se utilizan frecuentemente en sistemas de radio control y en robtica, pero su uso no est limitado a estos. Es posible modificar un servomotor para obtener un motor de corriente continua que, si bien ya no tiene la capacidad de control del servo, conserva la fuerza, velocidad y baja inercia que caracteriza a estos dispositivos.

Los servomotores tienen 3 terminales: Terminal positivo: Recibe la alimentacin del motor (4 a 8 voltios) Terminal negativo: Referencia tierra del motor (0 voltios) Entrada de seal: Recibe la seal de control del motor

Est conformado por un motor, una caja reductora y un circuito de control. Tambin potencia proporcional para cargas mecnicas. Un servo, por consiguiente, tiene un consumo de energa reducido. En otras palabras, un servomotor es un motor especial al que se ha aadido un sistema de control (tarjeta electrnica), un potenciometro y un conjunto de engranajes.

Los servomotores hacen uso de la modulacin por ancho de pulsos (PWM) para controlar la direccin o posicin de los motores de corriente continua. La mayora trabaja en la frecuencia de los cincuenta hercios, as las seales PWM tendrn un periodo de veinte milisegundos. La electrnica dentro del servomotor responder al ancho de la seal modulada. Si los circuitos dentro del servomotor reciben una seal de entre 0,5 a 1,4 milisegundos, este se mover en sentido horario; entre 1,6 a 2 milisegundos mover el servomotor en sentido antihorario; 1,5 milisegundos representa un estado neutro para los servomotores estndares. A continuacin se exponen ejemplos de cada caso:

Seal de ancho de pulso modulado: _ __ ____ ____ _ || | | | | | ||| || | | | | | ||| _________| |____| |___| |________| |_| |__________ Motor en sentido horario (ejemplo 0,7 ms): _ _ _ _ _ _ || || || || || || || || || || || || _________| |____| |___| |________| |__| |__| |___________ Motor neutral (1,5ms): ___ ___ ___ ___ ___ ___ | | | | | | | | | | | | | | | | | | | | | | | | _________| |____| |___| |___| |__| |__| |_____ Motor en sentido antihorario (ejemplo 1,8ms): ______ ______ ______ ______ ______ | | | | | | | | | | | | | | | | | | | | _________| |____| |___| |___| |__| |____

cmcon=7 x var byte trisb=%00000110 portb=0 x=150 inicio: pulsout portb.0,x gosub timer goto inicio

timer: if portb.1=1 then gosub mas if portb.2=1 then gosub menos return
mas: pause 10 x=x+1 if x>200 then x=200 return menos: pause 10 x=x-1 if x<100 then x=100 return end

;Programa en donde se mueve un servo motor de tres lineas con el pic 16f877A, ;se utiliza LCD 2X16 que muestra la posicion de giro dada por tres botones ;conectados al puerto B, los cuales dan las posiciones: giro derecha ,centro y ;giro izquierda referenciado de 0 a 1000, donde posicion de centro es 500. ; deficion de Oscilador Externo @ device xt_osc ; oscilador externo XT define osc 4 ; especifica que se va a utilizar uno de 4 Mhz ' Libreria para la operacion del programa Define LOADER_USED 1 ; Definicion de conecciones del LCD Define LCD_DREG PORTD Define LCD_DBIT 4 Define LCD_RSREG PORTA Define LCD_RSBIT 0 Define LCD_EREG PORTA Define LCD_EBIT 1 pos var word ' Posicion del servo servo1 var PORTC.1 'pin donde se conecta el servo ADCON1 = 7 ' PORTA y PORTE digitales Low PORTA.2 ' LCD R/W low = escritura Pause 100 ' retardo para inicializar el LCD OPTION_REG = $7f Low servo1 ;portc.1 como salida para controlar el servo Gosub center 'ir a centro

LOOP: PORTB = 0 TRISB = $fe

' PORTB lineas a cero logico para leer botones

'Rutinas para el chequeo de botones y posiciones del servo If PORTB.4 = 0 Then Gosub left Endif If PORTB.5 = 0 Then Gosub center Endif If PORTB.6 = 0 Then Gosub right Endif ;Rutina para mostrar mensaje y valor decimal de la posicion del servo Lcdout $fe,1 Lcdout $fe,2,"Position = ", #pos servo1 = 1 ' iniciar pulso hacia el servo Pauseus 1000 + pos servo1 = 0 ' termine pulso Pause 16 ' retardo

Goto LOOP ' Crea un bucle cerrado


' giro hacia la izquierda left: If pos < 1000 Then pos = pos + 1 Endif Return ' giro hacia la derecha right: If pos != 0 Then pos = pos - 1 Endif Return ' posicion de centro center: pos = 500 Return End

Você também pode gostar