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:
Para el caso del motor HS-311 es necesario cambiar la configuración del motor para la simulación como muestra la siguiente figura:
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 x="100"> |
El esquema de este programa se muestra en la siguiente figura:
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=000110 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 x="100"> |
Diagrama en Proteus:
http://www.4shared.com/file/81611316/85d31591/PIC_12F629_Servo_Motor_Control.html
No response to “CONTROL DE LA POSICIÓN DE UN MOTOR SERVO HS-311”
Publicar un comentario