Как предотвратить помехи между двигателем постоянного тока и Arduino?

Возможно, вопрос уже задавался в где-то, но я борюсь!

У меня есть четырехколесный робот, которым я хочу управлять, чтобы он выполнял поворот на 90 градусов влево/вправо. Я использую MPU6050 3dof для получения углов, однако все в порядке, когда двигатели постоянного тока выключены, а показания MPU6050 довольно хорошие.

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

изображение ниже — моя схема Любая помощь будет оценена по достоинству, и я открыт для любых предложений.

, 👍2

Обсуждение

Вы сказали: «Я пытался использовать разные источники питания для двигателей постоянного тока» — предоставьте подробности. На вашей схеме показана батарея 9 В, которая едва ли может обеспечить достаточный ток для работы двух двигателей и Arduino. Убедитесь, что вы включили в свой вопрос все соответствующие детали., @jose can u c

@josecanuc, спасибо за ответ, и извините, что я неточно задал вопрос, однако сейчас я использую батарею 11,3 В для двигателей постоянного тока и 7,3 В для Arduino, остальная часть изображения - это соединения для моей установки, а также я соединил GND двигателя с GND Arduino., @Mostafa Abbas


2 ответа


2

Вам нужно сделать две основные вещи:

  1. Используйте подходящие подтягивающие резисторы на линиях I2C (2,2 кОм) вместо того, чтобы полагаться на (ужасные) внутренние подтягивающие резисторы ATMega.
  2. Добавьте конденсаторы в двигатели.

Для пункта 2 вам понадобятся два или три небольших керамических конденсатора (от 10 до 100 нФ) на каждый двигатель.

  • Подключите по одному от каждой клеммы к корпусу двигателя.
  • При необходимости подключите третью клемму между двумя клеммами двигателя.

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

(Даже если это не полностью решит вашу основную проблему, вам определенно следует сделать это в любом случае.)

,

Хорошо, спасибо за предложения. Ничего, если я выполню оба пункта?, @Mostafa Abbas

Да. Вам следует выполнить оба пункта., @Majenko

У меня есть вопрос, если вы можете на него ответить: почему, когда я нажимаю кнопку сброса на Arduino, все становится нормально и показания с **MPU6050** возвращаются в норму?, @Mostafa Abbas

Понятия не имею. Электромагнитные помехи вызывают странные вещи., @Majenko

это не сработало! Я добавил конденсаторы, как вы сказали, и подтягивающие резисторы, но ничего не изменилось! проблема осталась только с первым включением, когда сбросил ардуино кнопкой RESET все вернулось в норму, @Mostafa Abbas


1

Вы можете просто изменить порт заземления для вашего 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