Я построил робота, используя 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). Транзисторы не используются.
Проблемы с электромагнитными помехами в таких конструкциях часты, и общего лекарства от этого нет. Одна вещь, которую необходимо сделать, это разделение заземления - подключать их только рядом с источником питания. Другой вариант – наилучшая фильтрация питания электропривода. Каждая сетка с большим током, включая цепь управления затвором, должна быть как можно короче. Может резисторы на затворах помогут. Наденьте ферритовое кольцо на кабель двигателя рядом с драйвером. Используйте буферы для i2c. Удачи!
Асмыльдоф
Доктор Коконат
Энди ака
техночувак
Доктор Коконат
Доктор Коконат
Асмыльдоф
пользователь16222
Дуб