.::PIC - CONTROL DE LA POSICIÓN DE UN MOTOR SERVO HS-311::.

MATPIC.COM- Desarrollamos software y hardware bajo demanda y optimizamos código existente en términos de velocidad y memoria.

PIC - CONTROL DE LA POSICIÓN DE UN MOTOR SERVO HS-311

logo matpic

Nuevo Medición de distancias con una cámara web y un puntero láser

Nuevo Seguir rostro usando una webcam en MATLAB.

Nuevo Reconocimiento de género por voz usando MATLAB.

Nuevo MATLAB reconoce forma y color

Nuevo Ecualizador de Audio con MATLAB - SIMULINK.

Nuevo Sistema de seguridad SPYCAM con MATLAB

Nuevo Seguimiento de color con MATLAB.

Nuevo Seguimiento de objeto con MATLAB.

Nuevo Reconocimiento de formas con MATLAB.

Nuevo Simulink - modulaciones y de modulaciones digitales.

Nuevo GUI para procesamiento de imágenes.

Nuevo Adquisición de señales ECG.

Nuevo CD con videos tutoriales de MATLAB & SIMULINK.

¿PREGUNTAS? Puedes hacerlas mediante esta ventana de chat.
¿Preguntas acerca de los servicios de MATPIC? Llámanos haciendo clic en el botón de Skype

 

CONTROL DE LA POSICIÓN DE UN MOTOR SERVO HS-311

Como se conoce, la posición de un servo motor está determinada por el ancho del pulso que se aplica a su pin de control (para el caso de los motores HS-311 el cable amarillo). En el caso del motor HS-311, la posición de 0º se consigue con un pulso de 0.5 ms, la posición central de 90º con un pulso de 1.5 ms y el extremo de 180º con un pulso de 2.5 ms.

Para controlar la posición del motor usaré la función pulsout, cuya sintaxis es:

Pulsout pin, ancho_pulso

La cual genera un ancho de pulso determinado por su segundo parámetro de entrada en el pin determinado. Por ejemplo:

Pulsout portb.0, 150

Generará un pulso de ancho 1.5 ms en el pin 0 de puerto B.

Ahora bien, la frecuencia de envío de este pulso será generada por un ciclo for-next y la función pause.

El ejemplo siguiente posicionará el motor en 90º:

n var byte
trisb=0
portb=0
for n=1 to 25 step 1
pulsout portb.0,150
pause 10
next

Es importante inicializar a 0 el pin por el cual se sacará el pulso, debido a que la función pulsout invierte el estado del pin.

Vamos a ver este programa de inicio en Proteus:

servo1

Para el caso del motor HS-311 es necesario cambiar la configuración del motor para la simulación como muestra la siguiente figura:

limites

Vamos a programar una secuencia que mantenga al motor en continuo movimiento de un extremo al otro. Aquí entra el ciclo for-next.

m var byte
n var byte
trisb=0
portb=0
for m=50 to 250 step 1
pulsout portb.0,m
pause 10
next
for m=250 to 50 step -1
pulsout portb.0,m
pause 10
next

Vamos a ir un poco más adelante, y controlaremos la posición del motor con dos pulsadores: uno para girar el motor a una posición y el otro para llevarlo a la posición contraria.

;Only Hardware
cmcon=7
control var portb.1
incrementar var porta.0 'Pin de pulsador para incremento
disminuir var porta.1 'Pin de pulsador para decremento
x var byte 'x de tamaño 256
r var byte 'y de tamaño 256
trisb=0
portb=0
x=150 ; 'Posición inicial del servo motor
inicio:
pulsout control,x 'Envía x por el pin portb.1 (control)
gosub timer 'Subrutina de chequeo del pulsador
goto inicio
timer:
if incrementar=0 then gosub mas 'Si el p esta a tierra, ir a subr "mas"
if disminuir=0 then gosub menos 'Si el p esta a tierra, ir a subr "menos"
return
mas: 'Subrutina de aumento de posición
pause 10
x=x+1 ; 'Aumento del pulso de salida
if x>200 then x=200 'Determina un valor máximo de 200
return
menos: 'Subrutina de disminución de posición
pause 10
x=x-1 'Disminución del pulso de salida
if x<100 then x=100 'Determina un valor mínimo de 100
return
end

El esquema de este programa se muestra en la siguiente figura:

servo2

El mismo programa modificado para el PIC12F629:

cmcon=7
control var gpio.0 'Pin para el servo motor
incrementar var gpio.1 'Pin de pulsador para incremento
disminuir var gpio.2 'Pin de pulsador para decremento
x var byte 'x de tamaño 256
r var byte 'y de tamaño 256
trisio=%00000110
gpio=0
x=150 ; 'Posición inicial del servo motor
inicio:
pulsout control,x 'Envía x por el pin portb.1 (control)
gosub timer 'Subrutina de chequeo del pulsador
goto inicio
timer:
if incrementar=0 then gosub mas 'Si el p esta a tierra, ir a subr "mas"
if disminuir=0 then gosub menos 'Si el p esta a tierra, ir a subr "menos"
return
mas: 'Subrutina de aumento de posición
pause 10
x=x+1 ; 'Aumento del pulso de salida
if x>200 then x=200 'Determina un valor máximo de 200
return
menos: 'Subrutina de disminución de posición
pause 10
x=x-1 'Disminución del pulso de salida
if x<100 then x=100 'Determina un valor mínimo de 100
return
end

Diagrama en Proteus:

servo

 

descargar

 

buzon

Contáctanos

©2009 MATPIC