10
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:

Servomotor Porgramacion Controlar La Pocicion

Embed Size (px)

Citation preview

Page 1: Servomotor Porgramacion Controlar La Pocicion

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 bytetrisb=0portb=0for n=1 to 25 step 1pulsout portb.0,150pause 10next

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:

Page 2: Servomotor Porgramacion Controlar La Pocicion

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 byten var bytetrisb=0portb=0for m=50 to 250 step 1pulsout portb.0,mpause 10nextfor m=250 to 50 step -1pulsout portb.0,mpause 10next

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 Hardwarecmcon=7control var portb.1incrementar var porta.0 'Pin de pulsador para incrementodisminuir var porta.1 'Pin de pulsador para decrementox var byte 'x de tamaño 256r var byte 'y de tamaño 256trisb=0portb=0x=150 ; 'Posición inicial del servo motorinicio:pulsout control,x 'Envía x por el pin portb.1 (control)gosub timer 'Subrutina de chequeo del pulsadorgoto iniciotimer: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"returnmas: 'Subrutina de aumento de posiciónpause 10x=x+1 ; 'Aumento del pulso de salidaif x>200 then x=200 'Determina un valor máximo de 200

Page 3: Servomotor Porgramacion Controlar La Pocicion

returnmenos: 'Subrutina de disminución de posiciónpause 10x=x-1 'Disminución del pulso de salidaif x<100 then x=100 'Determina un valor mínimo de 100returnend

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

El mismo programa modificado para el PIC12F629:

cmcon=7control var gpio.0 'Pin para el servo motorincrementar var gpio.1 'Pin de pulsador para incrementodisminuir var gpio.2 'Pin de pulsador para decrementox var byte 'x de tamaño 256r var byte 'y de tamaño 256trisio=%00000110gpio=0x=150 ; 'Posición inicial del servo motorinicio:pulsout control,x 'Envía x por el pin portb.1 (control)gosub timer 'Subrutina de chequeo del pulsadorgoto iniciotimer: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"

Page 4: Servomotor Porgramacion Controlar La Pocicion

returnmas: 'Subrutina de aumento de posiciónpause 10x=x+1 ; 'Aumento del pulso de salidaif x>200 then x=200 'Determina un valor máximo de 200returnmenos: 'Subrutina de disminución de posiciónpause 10x=x-1 'Disminución del pulso de salidaif x<100 then x=100 'Determina un valor mínimo de 100returnend

Diagrama en Proteus:

 

Page 5: Servomotor Porgramacion Controlar La Pocicion

soy nuevo en esto de la electronica y tengo un problema que para mi es importante y complicado de resolver.

Tengo un problema a la hora de programar este pic (16f628a), ya que no se como usar el oscilador interno a 4mhz, hasta ahora lo he venido haciendo con el propio programador (WinPic), pero para mi nuevo programa nada funciona, eso si en proteus funciona perfectamente.

Codigo en PicBasicPro

Código:

n var byte

Page 6: Servomotor Porgramacion Controlar La Pocicion

portb=0

inicio:

for n=50 to 250 step 1

pulsout portb.0,100

pause 100

next

for n=50 to 250 step 1

pulsout portb.0,150

pause 100

next

goto inicio

end

Este codigo en proteus funciona perfectamente, pero luego en la placa de prototipado no funciona.

El esquema que monto es el siguiente (va en paint porque ahora no tengo eagle)

espero que puedan ayudarme, gracias

Page 7: Servomotor Porgramacion Controlar La Pocicion

Última edición por MmUeRtTe; 28-nov-2010 a las 12:24

hola que tal a todos

bueno soy estudiante de Sistemas digitales  y para este fin de semestre tengo que mostrar un proyecto

mi idea es hacer un brazo robot con 2 tipos de uso , el primero con una secuencia de movimientos

totalmente automatizados , y la segunda poder controlar el brazo por medio de un control  ( elaborado

por mi mismo con push boton). el problema con el que me encuentro es el siguiente, no soy bueno en

eso de la programacion de los "Pic" tengo conocimientos muy basicos de programacion con Pic Basic Pro,

y por medio de unos tutoriales en logrado controlar un servo HS-311  con una movimiento de 180° 

quiero mostrarles el codigo que elabore , lo que deseo es poder controlar 3 servos con diferentes

votones , ejemplo  2 pulsadores para cada servo(esto podria ser derecha izquierda ariba o abajo

depende) el codigo que les presento es  para un Pic  12F629  pero me hacen falta terminales para

conectar mis servos y pulsadores yo nesesito un minimo de 12  pin's

Citar

Page 8: Servomotor Porgramacion Controlar La Pocicion

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>250 then x=250 'Determina un valor máximo de 300

return

menos: 'Subrutina de disminución de posición

pause 10

x=x-1 'Disminución del pulso de salida

if x<50 then x=50 'Determina un valor mínimo de 300

return

end

muchas gracias por su tiempo ,  qusiera un pequeña orientacion sobre como programar .