Servo múltiple, se mueve cuando no está encendido

Así que estoy tratando de controlar 28 servos para hacer un reloj de visualización de 7 segmentos con segmentos en movimiento. Usando una sola línea de señal y 4 MOSFET de canal p y 7 MOSFET de canal n y un decodificador de binario a 7 segmentos (cd4511).

Enlace al vídeo

A continuación se muestra un esquema de muestra y luego el esquema real, sé que ambos MOSFET aparecen como canal N, pero el producto final tiene los canales P adecuados con el pinout correcto, también puede ver la placa real, el módulo en el medio es para un RTC, junto al conector de barril es Vreg para el microcontrolador y Vreg para los servosEjemplo de esquema ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Mire las imágenes provistas como referencia en el esquema real porque en mis esquemas uso etiquetas y no líneas reales, así que no estoy seguro si eso lo ayudará a comprender el circuito, por eso dibujé uno de muestra con líneas. También tengo un enlace de video de uno de los dígitos que funciona como se esperaba, pero el problema surge una vez que conecto el resto de los dígitos.

Primero, hay un decodificador CD4511 binario a 7 segmentos, esto tomará 4 entradas ABCD, siendo A el bit menos significativo, manejo esos pines alto y bajo para hacer un número binario entre 0 y 9. El IC luego maneja las líneas de salida correspondientes ( ABCDEFG) alto para que ese número aparezca en una pantalla de segmento. Sin embargo, no lo estoy usando para manejar una pantalla LED, sino que estoy manejando MOSFET que actúan como interruptores laterales BAJOS para los servos, ¡los 28 servos! Sin embargo, no todos los 28 están realmente encendidos porque por cada 7 servos (por lo tanto, un dígito) tengo un MOSFET de canal P como interruptor lateral alto, que controlo con el microcontrolador, así que cuando cambia el tiempo solo cambio un dígito (7 servos ) a la vez y nunca los 28 servos.

Entonces, por ejemplo, si quiero que el primer dígito (el dígito de las unidades para el minuto) muestre un 3, configuraría A y B alto en el chip CD4511, esto luego a través de los MOSFET de canal N proporcionaría el lado bajo para el servos, entonces también activaría el P_channel MOSFET a través del microcontrolador para proporcionar solo el lado alto de los primeros 7 servos que corresponden al dígito de las unidades de los minutos. Entonces ahora esos 7 servos están "encendidos" y les doy la señal PWM para mover sus brazos a la posición deseada que revelará el segmento como en el video. En teoria el resto de los servos no estan ENCENDIDOS porque el decodificador CD4511 no esta prendiendo sus MOSFETs y tampoco les he ENCENDIDO el MOSFET de lado alto... el problema es que SI se mueven y los que quiero moverse no moverse correctamente!!! y no a la posición establecida por la señal PWM, sino de forma errática. Ahora, si desconecto todos los servos y solo dejo 7 servos conectados, no importa qué 7 servos sean, pero siempre que solo trabaje con un dígito, todo funciona. bien como en el video, los problemas son cuando todo está enchufado... Simplemente no puedo entender por qué. La señal PWM se ve limpia en el osciloscopio.

¿Qué justifica un voto negativo? ¿Pregunté incorrectamente? Por favor corrígeme para que pueda hacer mis preguntas como se deben hacer, de lo contrario nunca aprenderé.
No sé qué motivó a alguien a votar negativo. Me parece una pregunta justa. De todos modos, llegando al punto. ¿Puede compartir más detalles, me refiero al número MOSFET y los detalles del servo? ¿Están todos los servos alimentados a través de 7805 IC?
Sus servos necesitan VCC y conexión a tierra todo el tiempo. Activar y desactivar VCC alterará el control interno del servo. Todo lo que necesita hacer es controlar la señal PWM a cada segmento para los dígitos. Dado que en realidad solo tiene dos posiciones para cada servo, simplemente puede activar/desactivar el PWM para cada segmento desde puertos digitales simples y ejecutar dos PWM como activación impulsada por interrupción. No necesita un decodificador en absoluto ... todo esto podría hacerse simplemente en software.
Solo para una mejor comprensión y poder brindar una mejor solución, ¿puede explicar por qué eligió este diseño? Quiero decir, ¿su aplicación es muy sensible a la energía? Es porque creo que una mejor solución sería usar solo un multiplexor analógico en modo cascada y solo 5 mux deberían hacer que el circuito funcione. Aunque no estoy seguro de ello.
Estoy de acuerdo con @JackCreasey, la decodificación podría ser realizada simplemente por el controlador y el decodificador no es necesario en absoluto.
@Mayank. Un multiplexor analógico no funcionará (para la señal). Si tiene VCC aplicado a un servo y no hay marcos entrantes (la señal), el servo está en modo libre (será de baja corriente). Si aplica los marcos de señal (típicamente 50 -300 Hz dependiendo del tipo), entonces el servo mantendrá o buscará la señal PWM definida.
La elección de usar el decodificador fue simplemente porque tenía el chip por ahí y pensé que podía evitar muchas declaraciones condicionales o cambiar casos en mi programa simplemente dejando que el IC lo hiciera, sin mencionar que reduje los pines utilizados. , 4 para el decodificador bcd versus 7 que tendría que usar para controlar los MOSFET a través del microcontrolador. Además, apago los servos porque cuando se dejan encendidos hay una fluctuación constante, sin mencionar el diseño, si los dejo encendidos movería los servos que no quería mover.
Además, dado que los servos mueven un brazo muy liviano, no me preocupa que no mantengan su posición, ya que el brazo es tan liviano que simplemente no mueve el servo cuando está apagado. Pero como mencioné, el circuito funciona bien cuando un dígito está conectado a la PCB, pero una vez que tengo un lío de cables con los 28 servos conectados, obtengo un comportamiento errático. Supongo que las líneas eléctricas se están volviendo ruidosas, las miré en el visor y se están volviendo ruidosas, lo más probable es que sea el plano de tierra. Ah, y los servos funcionan con un 7806, el microcontrolador con un 7805 a través de una entrada de 12V 2A.
Desearía poder obtener los esquemas de estos 32 servocontroladores en eBay. Aparentemente, puede enviarle comandos y decirle qué servo mover, cuánto y qué tan rápido.

Respuestas (1)

En teoría el resto de los servos no están ENCENDIDOS porque el decodificador CD4511 no está prendiendo sus MOSFET y tampoco he ENCENDIDO el MOSFET del lado alto para ellos... el problema es que SÍ se mueven

Sospecho que esto es causado por la retroalimentación de potencia a través de los servos 'sin potencia'. A diferencia de los LED que bloquean la corriente inversa, los servos RC tienen un IC de control (y quizás un puente H discreto) que parece un diodo con polarización directa cuando se conecta con polaridad inversa.

Considere el siguiente circuito simplificado con solo 2 segmentos y 2 dígitos. Los FET de dígitos y segmentos se modelan como interruptores y los servos como lámparas con diodos inversos parásitos:

esquemático

simular este circuito : esquema creado con CircuitLab

El dígito 1 y el segmento A están encendidos y suministran energía a Servo1A. Pero hay otro camino, mostrado por las flechas, a través de Servo1B, Servo2B (invertido) y Servo2A. Servo2B caerá alrededor de ~0.6V, dejando ~5.4V para ser compartidos entre Servo1B y Servo2A. Cualquiera de estos servos o ambos pueden moverse si su parte del voltaje es suficiente para operarlos.

Para evitar retroalimentaciones, puede colocar un diodo en serie con el cable positivo de cada servo. Sin embargo, podría ser mejor cambiar las entradas de señal de los servos en lugar de sus fuentes de alimentación. La multiplexación de las señales de los servos también evitaría los posibles problemas causados ​​por las señales que se envían a los servos sin alimentación con tierras flotantes.