Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
problemas con libreria servo
#1
Hola,
tengo un pequeño problema, a ver si alguien me puede dar una respuesta,

Tengo un sketch que controla 4 motores, y 3 servos, para ello utilizo la libreria servo, porque los servos se pueden conectar a cualquier pin digital. Esta parte funcionaba correctamente (bueno funcionaba no se si el código estaba muy ordenado   Rolleyes Rolleyes Rolleyes  ,  ahora he querido añadir un motor más pero no tengo más pines PWM (utilizo arduino UNO), por lo que he echo lo siguiente: he cambiado la salida de un servo que la tenia enchufado a un pin PWM por otro ssin PWM, i en este pin le he conectado el nuevo motor (a traves de un transistor),  el pin en concreto es el 9 y tambien he probado con el 10 y no hace nada, luego he probado con otros pines PWM diferentes y funciona OK,

Pensaba que se había jodido el arduino, bueno lo cambio por otro i hace lo mismo. Para comprobar que no fuesen los arduinos, tengo una pequeña placa de pruebas con entradas y salidas que se conecta a arduino,
pruebo los arduinos y funcionan prefectamente los pines 9 y 10. 

puede ser que haya algún problema con la libreria servo y los pines 9 y 10 (antes estaban conectados los dos servos y funcionaba ok).


adjunto el código.

no me deja subir el archivo en que formato lo subo, he probado .ino y .rar
gracias
Citar
#2
Bueno, recapitulemos, estamos hablando de "motores", pero todos son servos o intentas controlar un motor de DC aparte?

Si todos los motores son servos, la librería de servos utiliza una serie de timers y salidas digitales para generar un pulso pwm un poco diferente del normal... un servomotor no requiere de un pulso pwm continuo para funcionar, si no que identifica su posición cada 20ms mas a menos, siendo solo necesario enviarle un pulso pwm cada 20ms para que se vaya a su posición y la mantenga.... esto te posibilita controlar alrededor de 9 -10 servos reutilizando timers.... creo que puedes utilizar cualquier pin digital para esto pues lo va a gestionar la libreria.

Si estas intentando controlar un motor de DC (Por lo del transistor que has comentado), debes utilizar la función analogWrite() y un pin PWM para generar un pulso pwm real y continuo y así poder regular la velocidad. Si no es así y estas conectando un servo a través de un transistor... no necesitas ese transistor para nada...

Las salidas pwm que hay en el arduino que yo sepa son salidas directas que permiten generar el pulso pwm por hardware, por eso son tan limitadas, son las únicas que te permiten usar el analogWrite() y las puedes usar para cosas tales como leds rgb o para gestionar cargas como motores DC a través de transistores, incluso se utilizan para emular una señal analógica... como son salidas que las gestiona el hardware, puedes tenerlas generando un pulso pwm continuo sin que te afecte prácticamente a la ejecución del código

Para gestionar los servos casi te compensa más utilizar salidas normales, si es que tienes interes de usar las salidas pwm para alguna otra cosa... en caso contrario, una salida pwm te sirve como entrada/salida digital de igual forma.
Citar
#3
Si asi es como lo tengo.
Tengo 3 servos controlados por pines digitales normales. Con la libreria servo.
4 motores controlados mediante pwm conectados a pines pwm.
Ahora añado un nuevo motor, conectado al pin 9 o 10 del arduino Uno, estos pines son pwm no?
No sale ninguna señal por estos pines.
Queria subir el codigo pero no se como hacerlo a menos que no se un copy paste.
Si los pines pwm los controlo con la funcion analogWrite()
Citar
#4
En principio si, los pines 9 y 10 son pwm, fijate si los has declarado como salidas digitales en el setup ()

Puedes pegar el codigo en pastebin, lo pones para que no expire el pegado y pones el link aqui... es eso o pegarlo a lo bruto en un post, para ello podrias insertar un 'code' o un 'spoiler' y meter el codigo dentro para que no abulte demasiado. Lo que te sea mas sencillo.
Citar
#5
si usas la librería servo los pines 9 y 10 pierden sus capacidades PWM.
Citar
#6
Eso es lo que me temia.
Citar
#7
Umm, mira, una cosa nueva que he aprendido yo tambien jajaja, debe ser por lo que te he comentado antes, para gestionar los servos se utiliza timers, y debe ser el timer de esos pines el que utiliza para gestionar los servos esa libreria.

Por lo que se ve, este es el reparto de timers de arduino uno en concreto:
- Timer 0: Para gestionar las funciones delay(), millis() y micros() y que estas puedan funcionar.
- Timer 1: Para esa libreria de servos
- Timer 2: Para la funcion Tone()

Otras placas como el arduino Mega tienen más timers... a ver, hay maneras de hacer pulso pwm por software, pero es problematico, pues habitualmente implica esperar tener parado x tiempo el microcontrolador y por tanto, enlenteciendo el programa, y bastante.

Yo en su momento hice un código que teóricamente gestionaba servos por software y lo puse en este foro, pero no tuve tiempo a probarlo y no se si funcionaba, gestionaba los servos mediante temporizaciones por software en lugar de utilizar un timer... quizá podrías programar esos 2 servos utilizando ese código, le echaré un ojo a la noche a ver si la encuentro... aun asi, ya te aviso, enlentecerá tu programa, pues cada 20ms o menos debe detener el programa alrededor de 1 o 2ms por servo para darle la posición que debe alcanzar el servo.

Edit: Parece que aparte del timer 1, utiliza contadores para gestionar las salidas pwm... y por eso fallan esos dos pines al usar la libreria, he encontrado esto cuando buscaba en el foro de arduino:

Las 6 salidas PWM son controladas por 3 contadores, cada contador se encarga de dos salidas PWM:

Contador 0: D6 (PD6) y D5 (PD5)
Contador 1: D9 (PB1) y D10 (PB2)
Contador 2: D11(PB3) y D3 (PD3)
Citar
#8
Ok gracias, al final veo que tendre que utilizar un arduino mega. Supongo que no tendre problemas. Pero no lo habia utilizado por varias razones :
Uno el tamaño no se si me cabrà donde tiene que ir.
Dos quedaran muchos pines libres con el Uno estan más aprovechados.
3 - El precio es un poco más caro.
Aunque éste último no me importa mucho ya que la diferencia es poca.
Citar
#9
Bueno... un mega es mucho mas potente que un arduino uno, y la diferencia de precio... pues oye, tampoco es tanta, a dia de hoy se encuentran muy baratos, y mas los mega, que se popularizaron mas aun debido a la impresion 3D, pues miles de impresoras lo usan.


Piensa en que si mas adelante quieres ampliar el invento podras, es mejor eso a hacer cosas raras con el codigo a veces...

Edite mi post anterior, al parecer esos pines fallan debido al timer y/o los contadores que utilizan esos pines. Es lo malo de los microcontroladores, hay funciones multiplexadas y a veces si se quiere usar una cosa, otra se desactiva.

En esta web lo explican muy bien:
https://www.luisllamas.es/salidas-analog...n-arduino/
Citar
#10
Bueno finalmente he puesto un Mega y funciona correctamente, he podido colocarlo donde iva el arduino UNO.
Va muy justo pero cabe.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA Re: Arduino Mega, 1 servo ,1 nema, 3 motor DC carlos hop 8 391 26-09-2018, 01:30 PM
Último mensaje: Shellmer
  CONSULTA ROBOT DOS MOTORES CON SERVO PARA DIRECCION Miguelmetro 1 239 23-04-2018, 06:30 PM
Último mensaje: Iván
  control servo sin libreria "servo.h" homer32 11 3,755 08-12-2016, 01:25 PM
Último mensaje: homer32
  [Problema] Arduino y servo antoniobeta 6 5,223 20-07-2016, 11:07 AM
Último mensaje: tazma
  camara arduino libreria Asclem 2 2,086 07-01-2016, 03:47 PM
Último mensaje: Asclem