10 советов по использованию микроконтроллеров AVR в системах с двигателями

Среди людей, увлекающихся электроникой, одним из самых популярных этюдов является изготовление гусеничного робота. Этой теме посвящена масса статей, в том числе и на Хабре. Обилие руководств, схем и статей привело меня к мысли, что это будет не так уж трудно, и мне тоже захотелось самому изготовить такую прекрасную самоделку. Можно сказать, что мне не повезло — в процессе работы я столкнулся с массой проблем, связанных с наличием двигателей. В конце концов все эти проблемы мне удалось решить, но это заняло очень много времени. В данной статье я предлагаю несколько советов по проектированию схем, содержащих двигатели, на базе микроконтроллеров AVR. В практической полезности всех этих советов мне пришлось убедиться на собственном опыте. Многие советы, как мне кажется, подойдут и для других микроконтроллеров.



Скажу сразу, что когда я приступил к этому проекту, мой опыт в электронике был минимален. Arduino к тому моменту у меня была уже довольно давно, так что я купил гусеницы и двойные редукторы Tamiya, микросхему L293NE (драйвер двигателей) и за пару вечеров смастерил шильдик для Arduino c которым этот «робот» бодро бегал по комнате (правда совершенно бестолково).

Но мне хотелось большего. Раздражала необходимость таскать за собой отдельную батарейку «Крона» для питания Arduino. Да и сам факт использования Arduino (прошу прощения у его поклонников!) оставлял неприятное чувство — все равно, что собрать машинку из конструктора (зато из Arduino получается вполне удобный программатор для AVR — им я и пользовался).

У меня была Atmega8, модуль Bluetooth, ультразвуковой датчик расстояния, трехосный акселерометр, микросхемы L293NE и 74HC595 и целое множество резисторов, конденсаторов и светодиодов всех сортов и расцветок, а также фоторезистор, потенциометр и электромагнитный генератор звука. Я поставил себе задачу питать двигатели и логическую часть от одного источника — четырех аккумуляторов формата AA 1.2V. Я видел радиоуправляемые танки, питающиеся от такого источника, так что у меня не было сомнений, что это возможно.

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

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

  • Cпонтанная перезагрузка МК при включении двигателей. Она проявлялась чаще при включении двух двигателей одновременно, и особенно при использовании ШИМ. Просадку напряжения было видно невооруженным глазом по уменьшению яркости диодов;
  • Сбои в работе МК. Зависание, пропуск кусков программы, спонтанное увеличение или уменьшение тактовой частоты.


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

Все собранные ниже соображения наверняка в том или ином виде присутствуют в Интернете. Моей основной целью было собрать все советы воедино: если бы такая статья попалась бы мне на глаза раньше, это сэкономило бы мне много времени, денег и душевного спокойствия.

Итак, советы.
  1. Делайте развязку питания
    В момент пуска двигатели потребляют гораздо больше тока, чем в нормальном режиме. Например, для двигателей, которые использую я, пусковой ток составляет 1А. Это приводит к тому, что в при запуске происходит мгновенная просадка напряжения, часто достаточная для перезагрузки микроконтроллера. Чтобы побороть эту просадку необходимо осуществить развязку питания диодом Шоттки и большим конденсатором.

    Линия Vcc питает всю логическую часть схемы, а силовая часть драйвера двигателя запитана от батарейки непосредственно (самая верхняя линия на рисунке). Когда напряжение питания падает, диод закрывается, и ток от конденсаторов идет только на линию Vcc, что нам и требуется. Емкость конденсатора должна быть достаточной, чтобы поддерживать питание логики на время просадки. Мне хватило двух конденсаторов по 4,7мФ. Последовательно включенная индуктивность превращает всю конструкцию в LC-фильтр.
  2. Разделяйте землю на аналоговою и цифровую части
    На предыдущем рисунке видно, что земля разделяется на две ветки, AGND и DGND. На схеме это неважно, но на практике это означает, что линия земли, обслуживающая цифровую часть, и земля двигателей должны пересекаться лишь в одной точке, максимально близко расположенной к «минусу» источника питания.

    Разумеется, земляные полигоны также должны быть разделены (штрих-пунктир на рисунке).
  3. Убедитесь в целости механических частей
    Этого совета в Интернете я не встречал, но в моем случае он оказался одним из решающих. На одном из моих двигателей треснула пластиковая шестерня на валу. Это практически не сказалось на работоспособности двигателя с редуктором, поэтому заметил это я только на осциллографе. В момент попадания шестерни редуктора в трещину происходило небольшое подклинивание, что приводило в мгновенному возрастанию потребляемого тока и появлению помехи на частоте вращения двигателя.
  4. Заземлите кварцевый резонатор
    Цепь внешнего тактирования Atmega XTAL1/XTAL2 служит отличным путем для наводок. Поэтому если в вашем проекте вы используете кварцевый резонатор, велика вероятность, что в сильно шумящем окружении контроллер начнёт сходить с ума. В моем случае это выразилось в зависании, пропуске кусков программы или внезапном изменении частоты работы в большую или меньшую сторону. Чтобы победить эту проблему, мне хватило совета из п. 2., однако если и это не помогло, попробуйте заземлить кварц, припаяв на его корпус провод, идущий к цифровой земле. Будьте осторожны — кварцевый резонатор легко вывести из строя перегревом.
  5. Экранируйте кварцевый резонатор
    Обычно я делаю цельноземляную заливку на плате, но если это вам не по душе, сделайте по крайней мере небльшой земляной полигон вокруг кварца и балластных конденсаторов, как сказано в рекомендациях Atmel. Как и в предыдущем пункте, это поможет защитить линию тактирования от помех. Это же относится к случаю, если какая-либо аналоговая линия проходит параллельно логической — имеет смысл разделить их земляным полигоном.
  6. Используйте внутренний осцилятор
    Многие контроллеры AVR оснащены внутренним осциллятором. Он не такой точный, как кварцевый резонатор, а также (например, в случае моей Atmega8) зачастую не дает максимальную для контроллера тактовую частоту. Но если совсем ничего не выходит — можно попробовать использовать его. Первая неудачная модель моего робота стабильно работала только с внутренним осциллятором.
  7. Электроника — наука о плохих контактах
    Трижды проверьте все контакты на предмет плохой пропайки. Избегайте перемычек на линии питания логики.
    Контакты бывают и хорошие, но не там, где нужно. У меня был случай, когда робот прекрасно работал, но моментально перезагружался при попытке послать что-либо через Bluetooth. Оказалось, что Reset был закорочен на линию серийного порта капелькой припоя.
  8. Следуйте рекомендациям производителей
    Почти все даташиты предлагают рекомендации по обвесу. Atmel выпускает даже отдельный документ — AVR Hardware Design Considerations.
    Например, Atmega8 должна быть оснащена четырьмя конденсаторами (Reset, Vcc, ARef, AVCC), располагающимися как можно ближе к соответствующим выводам. Reset должен быть подтянут к питанию через резистор в 10KОм, основное питание (Vcc) оснащается своим отдельным LC-фильтром. Кварц и балластные конденсаторы должны располагаться как можно ближе к МК. Вообще любая микросхема должна иметь собственный отдельный конденсатор, развязывающий питание.
  9. Поставьте конденсаторы параллельно контактам двигателей
    Конденсаторы (100нФ) следует припаять непосредственно к контактам двигателей. Собственно, это мне было известно с самого начала, и этот совет здесь просто для полноты картины.
  10. Понизьте уровень Brown-out
    Brown-out — означает падение уровня напряжения. Микроконтроллеры оснащены детектором такой просадки. При ее возникновении микроконтроллер отключается. Однако уровень, при котором происходит отключение, можно регулировать. Например у Atmega8 существует три опции: детектирование отключено, срабатывание при уровне 2.7V, срабатывание при уровне 4.0V. Отключать Brown-out detection полностью я не советую, но понижение уровня срабатывания может помочь. Когда я понизил уровень до 2.7V система стала работать значительно стабильнее.


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



Ссылки

  1. Техника разводки печатных плат
  2. AVR Hardware Design Considerations
  3. Подключение Atmel AVR: стабилизация работы микроконтроллера


Хочу поблагодарить своих друзей, без помощи и советов которых я бы давно сдался, а эта статья никогда бы не была написана.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 23

    +1
    Полезная подборка советов, не хватает пожалуй только более подробно описания разработки проекта (логика работы, исходный код, схемы). Может быть оформите в отдельную статью? Было бы интересно посмотреть.
      +1
      Я и сам думаю, что это тема для отдельной статьи. Просто здесь уже было несколько постов про гусеничный роботов, и делать еще один такой же мне показалось лишним. Хотелось написать что-то действительно полезное. Если интересно, то, конечно, выложу.
      +3
      Советы значительно более универсальны и применимы не только к AVR!
        +9
        Я просто оставлю это тут :)
        easyelectronics.ru/razvedenie-pitaniya.html

        Вообще смысл не в разделении всего и вся, а замыкании помех и больших токов таким образом, чтобы они шли мимо мозгов.
          +2
          И есть еще такой неявный прикол, обычно встречается с реле. Когда реле само по себе щелкает нормально, но стоит подключить на контакты реле нагрузку как схема начинает сходить с ума. Хотя, казалось бы, какая тут связь вообще? Цепи то разные. Но нет, искра контактной группы наводит на катушке реле наводки и они бьют по мозгам контроллера.
            0
            А метрошные реле с параллельной контактной группой с угольными контактами шумят меньше? или это обусловлено только тем что такие контакты не пригорают и не привариваются?
              0
              Скорей это защита от пригорания. Т.к. искра идет от разрыва индуктивного тока и там просто пробой воздуха.
                0
                Так, а если не секрет а как с этой наводкой бороться? Не разу не встречал в жизни, хотя коммутирую реле токи до 16А (220В), но осторожность всегда не помешает.

                P.s как понимаю если она противоположна по знаку питающей цепи то она через защитный диод закоротиться, а если совпадает то ситуация хуже, и всплеск может уйти в сеть питания так? тогда по идее если цепь питания реле у нас 12 вольт, а цепь питания МК через LDO с нужной обвязкой 5 вольт, то помеха по идее не страшна если по уровню напряжения не сожжет сам LDO так?
                  0
                  Зависит от того, что за токи вы коммутируете. Если это нагреватель какой то искры не будет. А если двигатель или еще какая реактивная нагрузка, то можете огрести по полной.

                  В питание можно поставить супрессор хотя это обычно перебор. Ну и емкостей побольше, частота у таких импульсов дикая, они неплохо замыкаются через емкости. Главное чтобы контур по которым он замыкался шел подальше от проца и вообще каких-либо чувствительных цепей.

                  Они высоковольтные, но энергетически слабые. Так что они могут сбросить или повесить МК, но сжечь что то более дубовое вряд ли.
            0
            Привязка важных IO ножек к питанию обусловлено борьбой с шумами, чтобы на ножке в покое был некий «гарантированны» потенциал
            Универсальные советы. Так могу добавить что почти для всех микросхем логики неиспользуемые выводы кидают на землю.
              0
              Поправлю. Неиспользованные входы. А то можно ведь и у НЕ элемента вход и выход на землю повесить :)
                0
                Да, точно. Ой как нехорошо иначе получится :)
              +4
              caxapa.ru/lib/emc_immunity.html

              и вот еще хорошая статья.
                +3
                Видел ли кто в продаже такие тележки с траками, только с без-коллекторными двигателями?
                  +1
                  Или может кто видел где продаются более серьезные гусеничные подвески?
                  +6
                  «У меня была Atmega8, модуль Bluetooth, ультразвуковой датчик расстояния, трехосный акселерометр, микросхемы L293NE и 74HC595 и целое множество резисторов, конденсаторов и светодиодов всех сортов и расцветок, а также фоторезистор, потенциометр и электромагнитный генератор звука. Я поставил себе задачу питать двигатели и логическую часть от одного источника — четырех аккумуляторов формата AA 1.2V. Я видел радиоуправляемые танки, питающиеся от такого источника, так что у меня не было сомнений, что это возможно.» Прямо цитата из «Страх и ненависть в Лас-Вегасе»
                    0
                    >>> одним из самых популярных этюдов является изготовление гусеничного робота
                    А я думал коптера
                      0
                      Гусеницы дают больше пространства для творчества. Способы изготовления.

                      К тому же входной порог для летающих роботов очень высокий. Надо очень прилично владеть мат частью. С гусеничным роботом попроще. Не говоря уже о том, что гусеницы прощают ошибки чаще, а вероятность потерять модель почти нулевая.
                      0
                      Когда своего хексапода тестировал, в момент включения питания двигателей резко отваливался его мозг)
                      При питании мозга от отдельного БП, либо при питании всей схема от мощного ЛБП такого не происходило, так что, видимо, сильно просаживалось напряжение на выходе самого БП.
                      Кстати, по идее, напряжение на выходе Li-Poly не должно так сильно просаживаться, учитывая какой ток они могут отдать? По идее, у них очень низкое внутреннее сопротивление.
                        0
                        Они разные бывают. У Li-Po блоков обычно указано сколько они могут отдавать на выходе. Если максимум 60А, но модель надо взять 100А, то такое поведение вполне ожидаемо. Производители любят врать к тому же. Лучше тестировать батареи перед использованием…
                          0
                          Да не, у меня запас огромный там, так что с ЛиПо проблем быть не должно…
                        0
                        В чём заключается «робот»? На видео радиоуправляемая модель. Хотелось бы увидеть робота, пожалуйста.
                          0
                          Еще иногда бывает возьмешь проводник малого диаметра и при обычном токе все нормально, но вот когда скачки то и падение напряжения образуется и как следствие то что на конце такого проводника «может помереть с голоду».

                          Only users with full accounts can post comments. Log in, please.