Как предотвратить помехи между двигателем постоянного тока и Arduino?
Возможно, вопрос уже задавался в где-то, но я борюсь!
У меня есть четырехколесный робот, которым я хочу управлять, чтобы он выполнял поворот на 90 градусов влево/вправо. Я использую MPU6050 3dof для получения углов, однако все в порядке, когда двигатели постоянного тока выключены, а показания MPU6050 довольно хорошие.
Но при включении двигателей постоянного тока показания начинают случайным образом увеличиваться. Я пытался использовать другой источник питания для двигателей постоянного тока и Arduino, но безуспешно. В конце концов, когда я перезагрузил Arduino, все вернулось в норму, даже если двигатели постоянного тока были включены!
Любая помощь будет оценена по достоинству, и я открыт для любых предложений.
@Mostafa Abbas, 👍2
Обсуждение2 ответа
Вам нужно сделать две основные вещи:
- Используйте подходящие подтягивающие резисторы на линиях I2C (2,2 кОм) вместо того, чтобы полагаться на (ужасные) внутренние подтягивающие резисторы ATMega.
- Добавьте конденсаторы в двигатели.
Для пункта 2 вам понадобятся два или три небольших керамических конденсатора (от 10 до 100 нФ) на каждый двигатель.
- Подключите по одному от каждой клеммы к корпусу двигателя.
- При необходимости подключите третью клемму между двумя клеммами двигателя.
Это уменьшит электромагнитные помехи, создаваемые двигателем, а улучшенные подтягивающие устройства должны легче подавлять электромагнитные помехи.
(Даже если это не полностью решит вашу основную проблему, вам определенно следует сделать это в любом случае.)
Хорошо, спасибо за предложения. Ничего, если я выполню оба пункта?, @Mostafa Abbas
Да. Вам следует выполнить оба пункта., @Majenko
У меня есть вопрос, если вы можете на него ответить: почему, когда я нажимаю кнопку сброса на Arduino, все становится нормально и показания с **MPU6050** возвращаются в норму?, @Mostafa Abbas
Понятия не имею. Электромагнитные помехи вызывают странные вещи., @Majenko
это не сработало! Я добавил конденсаторы, как вы сказали, и подтягивающие резисторы, но ничего не изменилось! проблема осталась только с первым включением, когда сбросил ардуино кнопкой RESET все вернулось в норму, @Mostafa Abbas
Вы можете просто изменить порт заземления для вашего MPU6050 или для ваших двигателей (поэкспериментируйте с разными вариантами). У вас есть еще один заземляющий порт рядом с контактом 13. Насколько я знаю, некоторые из них предназначены для аналоговых устройств, а некоторые — для цифровых (во избежание помех). Добавление конденсаторов может не помочь. Если ни один из способов не помог, попробуйте добавить в схему дроссель.
Пожалуйста, попробуйте это и напишите здесь, было ли это полезно или нет.
Обновление: Согласно этому сайту проблема вызвана данными кабели.
Большое спасибо!
Не пришлось менять частоту. Я только что устранил провода SDA и SCL. и подключил чип с MPU-6050 непосредственно к Arduino, и он работает без проблем. Благодаря вам эта проблема решена :)
Кроме того, хотелось бы отметить, что стандартные штыревые кабели Arduino очень шумные, поэтому все подключенные модули, использующие высокие скорости передачи данных или очень чувствительные к ошибкам данных (например, nRF24L01+), будут вести себя странно.
р>Временное и жесткое решение: Вы можете перезагрузите ваш Arduino после первого процесса инициализации (в конце настройки), затем сохраните флаг («1») в EEPROM, чтобы он не сбрасывался каждый раз при запуске Arduino (предупреждение: ячейки EEPROM можно перезаписать только 10000). раз).
if(EEPROM.read(0))
{
EEPROM.write(0,1);
//put your reset code here
}
if(EEPROM.read(1))
{
EEPROM.write(0,0); //make it back "0" for next start
}
Комментарии не предназначены для расширенного обсуждения; этот разговор был [перенесен в чат](https://chat.stackexchange.com/rooms/83982/discussion-on-answer-by-faig-how-to-prevent-interference-between-dc-motor-and- ар)., @Majenko
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Как соединить L293D и MPU6050 для совместной работы?
- MPU 6050 застрял на тех же значениях
- Тахометр на базе Леонардо?
- Проблема прерывания библиотеки MPU6050 Arduino Jeff Rowberg
- Почему Arduino I2C так чувствителен к RFI/EMI?
- Работа двигателя в течение 3 секунд непрерывно с прерыванием и без него
- Прерывание запуска двигателей
Вы сказали: «Я пытался использовать разные источники питания для двигателей постоянного тока» — предоставьте подробности. На вашей схеме показана батарея 9 В, которая едва ли может обеспечить достаточный ток для работы двух двигателей и Arduino. Убедитесь, что вы включили в свой вопрос все соответствующие детали., @jose can u c
@josecanuc, спасибо за ответ, и извините, что я неточно задал вопрос, однако сейчас я использую батарею 11,3 В для двигателей постоянного тока и 7,3 В для Arduino, остальная часть изображения - это соединения для моей установки, а также я соединил GND двигателя с GND Arduino., @Mostafa Abbas