Upload
juan-fco-rocha-paredes
View
309
Download
2
Embed Size (px)
Citation preview
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:
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
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"
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:
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
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
Ú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
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 .