Se trata de utilizar la placa PCA9865 de Adafruit para mover varios servos, y no consigo que los mueva.
El programa es uno de los de ejemplo de la libreria de la PCA9865.
Los materiales son Arduino Uno, Adafruit PCA9865, Micro Servo SG90.
La alimentación de la placa PCA9865 la efectúo con una fuente DC a 5,00 V.
La alimentación de la placa Arduino UNO la realizo con el puerto USB del ordenador.
En las pruebas las puntas del osciloscopio están en la salida a los servos de la placa PCA9865, la línea amarilla en el positivo, y la línea azul en la señal.
El voltaje, en la salida de la placa al servo, supera los 4 voltios, pero la intensidad en la señal no supera los 5 mA. Conectando un led en una de las salidas de la placa PCA9865, sí opera según lo esperado, pero el micro servo SG90 en ningún caso funciona.
El servo lo he testeado y funciona.
Probé inicialmente con una placa Arduino NANO.
Y he probado con dos placas PCA9865 de distintos proveedores.
También probé sin conectar el pin V+, y/o el pin OE, con el mismo resultado, el servo nunca funciona.
A mi entender el problema parece estar centrado en la poca intensidad de corriente que llega al servo, pero no sé porqué pasa esto, y mucho menos como solucionarlo, o si se trata de otra causa.
Los códigos deben postearse como lo indican las normas no como capturas de imágenes porque se hace dificil seguirlos.
Ahora pongamos buena predisposicion y a ver que puedo decir.
No olvides editar y leer las normas de este foro. 1er hilo de cualquier sección
Este hilo trata temas similares al tuyo y a el le funcionan varios, luego tiene problemas en el 5to.
Algo que siempre debes hacer es buscar temas similares porque las preguntas o proyectos que uno hace casi siempre ha sido hecha por alguien mas.
El código no me gusta. Funciona pero solo porque estas en un ciclo en el que le envias lo mismo a 16 servos. Espero que tengas una fuente potente.
Como mides la corriente que le llega al servo?
Esos 5 a 10 mA son la corriente Idle del Servo o sea cuando esta en reposo esperando órdenes. Es correcta.
Dices que un led si funciona pero el servo no.
El servo ya lo he probado en la posición cero, en la posición 15 tengo un Led que sí funciona, y en la 7 la toma de datos con el osciloscopio.
También había probado con varios ejemplos, siempre con idéntico resultado.
Desde el osciloscopio veo un comportamiento similar al que presenta cuando lo testeo directamente, pero con la placa PCA9865 no se mueve. También probé con otro modelo más potente de servo (previamente testeado) pero no funcionó tampoco.
Ya los había leído en las búsquedas que llevo realizadas, y los intenté poner en práctica antes de abrir este hilo.
El código se corresponde con un ejemplo para testear la placa presente en la propia librería, tan sólo modifico en los ejemplos 2 y 3 al añadir valor para V+ pin 2 siguiendo lo indicado en los tutoriales de Adafruit.
La fuente es de laboratorio, no tiene problema de potencia sobretodo para hacer andar a un microservo,. De hecho lo hace, ya que, es la que utilizo para testearlo.
La corriente la mido con un multímetro en la señal que va al servo.
Si está esperando instrucciones ¿porqué la señal varía ?, y si no recibe instrucciones ¿porqué el led luce con intermitencia?
Creo que te refieres al servo, sí está conectado correctamente, en el esquema le dí la vuelta a la placa para liar menos con los cables. No obstante está correctamente conectado (sin embargo también había probado al revés por desesperación)
Bueno, lo del osciloscopio lo mal interpreté. Okay.
Tenemos otro problema para resolver que es el que te esta afectando.
Analizo y te respondo aquí mismo o si alguien lo hace en otro post.
Dices que el led lo comanda claramente porque 10mA son suficientes pero no el servo que es cuando requiere mas corriente.
A ver si hay un problema de corriente.
Eso tmb me llama la atención. 4V no parecen ser suficientes. Porque solo 4V?
No muestras la escala amarilla en los oscilogramas como para leer la tensión VCC que le llega al servo. Mide con un tester por favor.
Analizando el circuito veo que el conector externo solo pasa por un PMOS
Asi que si tienes 4V a la salida ese PMOS esta mal? pero lo que no cierra es que tienes dos placas y es dificil de creer que en las dos te pase lo mismo.
Bueno, por favor pon esto en tu código y no lo dejes asi ()
Moderador:
Te pedi que edites tu post inicial agregando los códigos y no capturas. Sigues respondiendo y no lo haces.
Por favor, corrige el post o simplemente agrégalo al final de cada captura. Usa el icono para códigos </>. Recuerda, pones la etiqueta, pegas el código no al revés.
La medición es inferior a los 5v que cabría esperar, pero ello es debido a que le entran 4,86 desde el puerto usb del ordenador.
Hice otras pruebas, paso a explicarlas.
Tengo un brazo robótico con una tercera placa PCA que sí funciona, al final opté por desmontarla del brazo y ponerla en el montaje que da problemas y no funcionó.
Luego en el brazo robótico con fuentes de alimentación distintas, puse una de las que dan problemas y no funcionó, pero al reponer la que tenía previamente en el brazo robótico, funcionó.
Entonces es posible que se trate de dos problemas y no sólo uno.
Probé la continuidad de los cables y no me dieron problema.
La placa de Arduino es una R3 original.
El programa es el propio de la librería.
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// you can also call it with a different address you want
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
// you can also call it with a different address and I2C interface
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40, Wire);
void setup() {
Serial.begin(9600);
Serial.println("GPIO test!");
pwm.begin();
pwm.setPWMFreq(1000); // Set to whatever you like, we don't use it in this demo!
// if you want to really speed stuff up, you can go into 'fast 400khz I2C' mode
// some i2c devices dont like this so much so if you're sharing the bus, watch
// out for this!
Wire.setClock(400000);
}
void loop() {
// Drive each pin in a 'wave'
for (uint8_t pin=0; pin<16; pin++) {
pwm.setPWM(pin, 4096, 0); // turns pin fully on
delay(100);
pwm.setPWM(pin, 0, 4096); // turns pin fully off
}
}
Hi,
Segun las especificacions del PCA9865 dice que debes de alimentar los servos con un power supply de 5 a 6 voltios y que pueda suplir 2 amperios. Esto depende de cuantos servos estas usando. Tambien dice que no debes de usar los 5 voltios del arduino para alimentar los servos. Como alimentas los servos ya que en la foto no tienes la fuente de las servos conectada.