Шум двигателя мешает I2C

Я построил робота, используя Arduino Due со всеми датчиками, работающими на 5 В через I2C. На обеих линиях I2C имеется переключатель уровня. Двигатели управляются с помощью драйвера двигателя VNH5019 от Polulu (который принимает вход PWM). Скорость и направление двигателя быстро изменяются в этом конкретном приложении.

Когда моторы не работают, все в порядке и показания в норме. При запуске всего робота на земле с двигателями он работает нормально от 30 секунд до минуты, прежде чем шина I2C полностью перестанет отвечать. Все устройства на шине I2C начинают отключаться по тайм-ауту, и в результате робот начинает катастрофически плохо себя вести. Ардуино нужно перезагрузить. После сброса обычно требуется меньше времени, чтобы сойти с ума.

Я запускал двигатели с колесами над землей, и я получаю значительно лучшее время работы, поэтому я сильно подозреваю, что это как-то связано с током, потребляемым двигателями. Двигатели отделены от Arduino и специальной печатной платы, которую я использую для маршрутизации сигналов I2C, двумя слоями металлических пластин (предположительно, это обеспечивает некоторую защиту). Я установил керамические конденсаторы на 0,1 мкФ на клеммах двигателя и конденсатор на 220 мкФ на блоке питания Arduino.

Я также разместил дополнительные подтягивания до и после переключателя уровней, но, похоже, это не решило проблему.

В настоящее время я в полной растерянности относительно того, что еще я могу сделать, чтобы остановить шум двигателя.

Изменить: некоторые схемы (для чего это стоит)Цепь питания

Эта схема посылает сигналы двигателям и обеспечивает питание драйверов двигателей. Vin и GND на самом деле не подключены к Arduino. На двух слоях печатной платы есть медные заливки для заземления и 12 В для поддержки тока.

Цепь датчика

Эта схема соединяет шину I2C Arduino с различными компонентами. Имеется переключатель уровня напряжения с 3V3 на 5V (LS1 и LS2). Транзисторы не используются.

Не могли бы вы разместить некоторые графические материалы, например, нарисовать схему с помощью инструмента на форуме или разместить фотографии. Пожалуйста, включите некоторую информацию о том, как различные вещи сгруппированы или связаны. Если все правильно, все должно работать нормально, но где-то может быть небольшая ошибка. Кроме того, 100 нФ на двигателе, который двигает робота, вообще мало что даст, слишком мало энергии может храниться в этом, чтобы иметь какое-либо значение.
Даже если это небольшой двигатель на 12 В с током останова 2 А?
Это будет проблема с землей / 0 В, усугубляемая потенциально плохой маршрутизацией шины IIC. Конденсатор двигателя — отвлекающий маневр: если вы используете ШИМ для управления двигателем, существует вероятность выхода из строя контроллера из-за увеличения емкости.
Если у вас есть осциллограф, можете ли вы выложить скриншоты шины I2C на обоих концах при работе на земле?
@Andyaka Маршрутизация шины I2C и мощность двигателя обрабатываются отдельными печатными платами. 0 В контроллера и двигателей подключается только к клемме аккумулятора. Двигатель управляется через соответствующий драйвер двигателя, который использует ШИМ в качестве входа. Arduino и все датчики все еще включены, и датчики по последовательному порту продолжают работать. Обычно только одна из шин i2c полностью перестает отвечать.
@Techydude извините, я делаю это как проект в старшей школе, и у нас нет осциллографа.
@DrCoconut Даже без графиков осциллографа некоторые люди здесь смогут сделать некоторые разумные предположения, но без реальной графики это намного сложнее. Просто «это, это и это, и все это связано вот так» дает гораздо меньше информации, чем то же самое предложение с любой схемой или рисунком. Мы не можем видеть контуры заземления или шумовую обратную связь, которую вы могли пропустить, если не на что смотреть.
«Он работает нормально в течение примерно от 30 секунд до минуты, прежде чем шина I2C полностью перестанет отвечать. Время ожидания всех устройств на шине I2C истекает, и в результате робот начинает вести себя катастрофически неправильно. Arduino необходимо перезагрузить. После сброса , обычно требуется меньше времени, чтобы сойти с ума». Какое охлаждение у коммутаторов? насколько близко эти переключатели к мастеру I2C?
У меня сейчас очень похожая проблема. Вы нашли решение для себя?

Ответы (1)

Проблемы с электромагнитными помехами в таких конструкциях часты, и общего лекарства от этого нет. Одна вещь, которую необходимо сделать, это разделение заземления - подключать их только рядом с источником питания. Другой вариант – наилучшая фильтрация питания электропривода. Каждая сетка с большим током, включая цепь управления затвором, должна быть как можно короче. Может резисторы на затворах помогут. Наденьте ферритовое кольцо на кабель двигателя рядом с драйвером. Используйте буферы для i2c. Удачи!