Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   PROGRAMACIÓN Microcontroladores: PICs , AVRs. (http://foros.zackyfiles.com/forumdisplay.php?f=437)
-   -   Control sencillo de un Servo Motor con PIC16F84 (http://foros.zackyfiles.com/showthread.php?t=523880)

ZackY 25/07/2007 17:17

Control sencillo de un Servo Motor con PIC16F84
 
Con este código podréis controlar de forma sencilla el posicionamiento de un servo. Yo solo he necesitado girar 90º (de 90º a 180º) el servo (lo he usado para abrir una pequeña puerta [tarmpilla]). Si deseáis que se posicione en otro punto del recorrido, solo deberéis modificar el ancho de pulso a enviar (2msg o 4msg).

[CODE]program Control_Servo
' Control de SERVO por tren de pulsos PWM
' *******************************************************************************
' (c) Autor: ZackY - zackyzgz@yahoo.es
'
'-HARDWARE:
' MCU: PIC 16F84A
' Cristal: 4 Mhz
' Servo conectado a PORTA.2 (Salida)
' Pulsadores conectados a PORTB.0 y PORTB.1 (Entradas)
' *******************************************************************************
Dim i as byte

Main:
TRISA = 0 ' PORTA como Salidas
PORTA = 0
TRISB = 1 ' PORTB como Entradas
PORTB = 1 ' Inicializo PORTB - Entradas OFF

Inicio:
While true
If PORTB.0 = 0 then ' Posiciono servo a 90º
For i=0 to 15 ' Envío 16 pulsos de 2 msg
PORTA.2 = 1
Delay_ms(2)
PORTA.2 = 0
Delay_ms(20)
next i
Delay_ms(1000) ' Tiempo para soltar pulsador
end if

If PORTB.1 = 0 then ' Posiciono servo a 180º
For i=0 to 15 ' Envío 16 pulsos de 4 msg
PORTA.2 = 1
Delay_ms(4)
PORTA.2 = 0
Delay_ms(20)
next i
Delay_ms(1000) ' Tiempo para soltar pulsador
end if
Wend
End.[/CODE]

Si tenéis algún comentario o duda sobre este código, podéis postearla en este hilo.

alfredoivan6 29/03/2009 22:42

[QUOTE=ZackY;2957394]Con este código podréis controlar de forma sencilla el posicionamiento de un servo. Yo solo he necesitado girar 90º (de 90º a 180º) el servo (lo he usado para abrir una pequeña puerta [tarmpilla]). Si deseáis que se posicione en otro punto del recorrido, solo deberéis modificar el ancho de pulso a enviar (2msg o 4msg).

[CODE]program Control_Servo
' Control de SERVO por tren de pulsos PWM
' *******************************************************************************
' (c) Autor: ZackY - zackyzgz@yahoo.es
'
'-HARDWARE:
' MCU: PIC 16F84A
' Cristal: 4 Mhz
' Servo conectado a PORTA.2 (Salida)
' Pulsadores conectados a PORTB.0 y PORTB.1 (Entradas)
' *******************************************************************************
Dim i as byte

Main:
TRISA = 0 ' PORTA como Salidas
PORTA = 0
TRISB = 1 ' PORTB como Entradas
PORTB = 1 ' Inicializo PORTB - Entradas OFF

Inicio:
While true
If PORTB.0 = 0 then ' Posiciono servo a 90º
For i=0 to 15 ' Envío 16 pulsos de 2 msg
PORTA.2 = 1
Delay_ms(2)
PORTA.2 = 0
Delay_ms(20)
next i
Delay_ms(1000) ' Tiempo para soltar pulsador
end if

If PORTB.1 = 0 then ' Posiciono servo a 180º
For i=0 to 15 ' Envío 16 pulsos de 4 msg
PORTA.2 = 1
Delay_ms(4)
PORTA.2 = 0
Delay_ms(20)
next i
Delay_ms(1000) ' Tiempo para soltar pulsador
end if
Wend
End.[/CODE]

Si tenéis algún comentario o duda sobre este código, podéis postearla en este hilo.[/QUOTE]




Me interesa mucho, tengo una duda la velocidad de giro del motor cual seria.

Para el proyecto que estoy preparando me interesa algo con una velocidad muy muy baja. Te cuento.

Necesito que el motor me vaya desde el punto de -45º al punto de 45º osea 90º de giro pero a una velocidad muy lenta. y que pasadas varias horas me haga el giro al reves pero no tengo mucha idea de programacion.

Me encantaria que me echaras una mano un saludo y gracias por adelantado

lucho89 26/08/2009 15:07

motor continuo
 
necesito alguna idea para frenar un motor continuo que hace girar dos ruedas... es un motor de baja tension y no se cual puede ser la mejor manera de frenarlo... todavia soy principiante en electronica..si se les ocurre algo se los agradeceria! saludos!

Deuteros 28/03/2010 20:44

Cita:

Iniciado por lucho89 (Mensaje 3844831)
necesito alguna idea para frenar un motor continuo que hace girar dos ruedas... es un motor de baja tension y no se cual puede ser la mejor manera de frenarlo... todavia soy principiante en electronica..si se les ocurre algo se los agradeceria! saludos!

No entiendo bien cual es tu problema en lo que escribes??? puedes ser mas exacto al plantear lo que deseas xD

Gracias

metuskale@gm 06/05/2011 01:00

Problemilla
 
Muy buenas, estoy empezando en esto de los PIC, en mi caso 18F4321, y me surge un ligero problema a la hora de controlar un servo.
He escrito un pequeño programa en C que simplemente quiero que lleve el servo de la posicion inicial a la final y viciversa, asi todo el tiempo.
Bien hay dos problemas
[LIST=1
[*]He conseguido que el servo avance hasta la posicion final pero no he conseguido hacerlo retroceder... :y
[*]Si alimento el servo de dos pins del PIC no hace nada, en cambio se conecto al pin positivo 5v de una fuente de alimentacion y la masa en masa si que llega al final (el problema 1 continua). :confuso
[/LIST]
Agradecería cualquier ayuda puesto que no se que mas probar, he intentado de todo.

Saludos y gracias de antemano.

metuskale@gm 06/05/2011 01:02

Al reves
 
Cita:

Iniciado por Deuteros (Mensaje 4013952)
No entiendo bien cual es tu problema en lo que escribes??? puedes ser mas exacto al plantear lo que deseas xD

Gracias

Yo creo que para frenar tienes que invertir el sentido de giro durante unos instantes, me explico, puesto que si los apagas simplemente no los haces girar pero todavia tienen inercia, puedes darles unos pulsos al motor para que gire en sentido contrario y frene. Prueba con diferentes longitudes del pulso hasta que encuentres una que te de una buena distancia de frenado.

Saludos.

rina 27/03/2013 16:35

metuskale@gm , siento no poder darte una solucion concreta.
pero un par de problemas similares ya los tuve. con la serie 16f84a. por no poner al dar corriente el bit designado al servo como salida y en 0 nada mas encender (eso ace que se raye el servo y despues no entienda nada mas)

otra fue con un 16f628, ese caso fue diferente. pongamos que como todos los que emos programado un servo a un pic 16f84 seguro que los conectamos al puerto a directamente sin amplificar la corriente de salida, vamos que la portadora del servo deve tener almenos 10mA sino no carrula y empieza el poco a poco a ir ala posicion de 0º. pongamos que el puerto a en muchos pic suele tener una salida transistorizada que le permite entregar algo mas de 10mA de corriente, el 16f628 no disponia de esa parte electrica, vamos el puerto a estaba preparado mas para las comparadoras.

un pequeño golpe.

as de mirar la documentacion de tu integrado y ver que la patilla donde conectas el servo esta transistorizada como salida para derivar tanto + de 10mA para 5V como para masa. fijate en el esquematico electrico de cada pin del pic. y busca algun terminal que se permita eso. sino tendras que acerlo tu externamente.

un saludo

Chaco501 21/10/2013 02:33

Confusion.
 
Hola Zacky, bueno se que mi pregunta sonara un poco tonta pero apenas inicio en esto de la progamacion de servos, ¿por que se le tiene que mandar 16 impulsos de 2ms para 90° y de 4ms para 180°, por que eh visto en otras imagenes que para 90° hay que mandarle 1.5ms y para 180° 2.5 ms.
Espero me puedas ayudar. Un Saludo.


La franja horaria es GMT +2. Ahora son las 13:24.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate