Construí un robot usando Arduino Due con todos los sensores funcionando a 5V sobre I2C. Hay un cambiador de nivel en ambas líneas I2C. Los motores se controlan mediante un controlador de motor VNH5019 de Polulu (que toma entrada PWM). La velocidad y dirección del motor cambia rápidamente en esta aplicación en particular.
Cuando los motores no están funcionando, todo está bien y las lecturas están bien. Al hacer funcionar todo el robot en el suelo, con los motores, funciona bien durante unos 30 segundos a un minuto antes de que el bus I2C deje de responder por completo. Todos los dispositivos comienzan a expirar en el bus I2C y, como resultado, el robot comienza a comportarse de manera catastrófica. El Arduino tiene que ser reiniciado. Después de un reinicio, tiende a llevar menos tiempo volverse loco.
Hice funcionar los motores con las ruedas levantadas del suelo y obtuve un tiempo de funcionamiento significativamente mejor, por lo que sospecho que tiene algo que ver con la corriente que consumen los motores. Los motores están separados del arduino y la PCB personalizada que uso para enrutar las señales I2C por dos capas de placas de metal (presumiblemente esto proporciona algo de protección). He instalado condensadores cerámicos de 0,1 uF en los terminales del motor y un condensador de 220 uF en la fuente de alimentación del Arduino.
También coloqué pull-ups adicionales antes y después del cambio de nivel, pero nada de esto parece detener el problema.
Actualmente estoy completamente perdido en cuanto a qué más podría hacer para detener el ruido del motor.
Editar: algunos esquemas (por lo que vale)
Este circuito envía señales a los motores y proporciona energía a los controladores de motor. Vin y GND no están realmente conectados al Arduino. Hay vertidos de cobre para GND y 12V en las dos capas de la PCB para soportar la corriente.
Este circuito conecta el bus I2C de Arduino a los distintos componentes. Hay un cambiador de nivel de voltaje de 3V3 a 5V (LS1 y LS2). Los transistores no están en uso.
Los problemas de EMI son frecuentes en dicho diseño y no existe una medicina común para eso. Una cosa que debe hacerse es la separación de tierra: solo conéctelos cerca de la fuente de alimentación. Otro: el mejor filtrado posible en el suministro de accionamiento del motor. Cada malla con alta corriente, incluido el circuito de activación de la puerta, debe ser lo más corta posible. Tal vez las resistencias en las puertas ayuden. Coloque el anillo de ferrita en el cable del motor cerca del conductor. Use búferes para i2c. ¡Buena suerte!
Asmyldof
Dr coco
Andy alias
Techydude
Dr coco
Dr coco
Asmyldof
usuario16222
duda