Безопасное подключение устройств к микроконтроллеру

Защита входов цифровой электроники

Введение

В любом электронном устройстве есть такие элементы управления как кнопки, переключатели, датчики и т.д., которые находятся под контролем конечных пользователей. При определенных условиях входные сигналы с них могут представлять угрозу для устройства. Особенно это актуально для используемой в промышленности электроники, которая работает в цехах. Как правило, данные с элементов управления считывает центральный процессор (микроконтроллер, ПЛИС или другое устройство). В таких случаях крайне важно защитить входы процессора от угроз, сохраняя при этом полезный сигнал.

Суть проблемы

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

Рис. 1 Упрощенная схема

Обычно микроконтроллеры имеет входное сопротивление порядка 20 МОм и работают с напряжениями в диапазоне от 1.2 до 5.0В. На рис. 2 приведён дополненный рис. 1.


Рис. 2 Входное сопротивление

На этом рисунке видна проблема незащищённости входа. Любое большое напряжение, появившееся в результате индукции, нажатия кнопки, ошибки пользователя или по другой причине и попавшее на вход микроконтроллера может вывести его и всю систему из строя. В связи с этим, необходимо защитить входы микроконтроллера. Для понимания деталей обратите внимание на рис. 3. Переключатель подключен к микроконтроллеру по соединительному проводу длиной 7 метров. Обратите внимание на подключение одного из контактов переключателя к GND и подтягивающий резистор на входе микроконтроллера. Когда переключатель разомкнут, на входе микроконтроллера находится высокий уровень сигнала, вызванный подтягивающим резистором.


Рис. 3 Схема подключения переключателя

При изменении положения переключателя напряжение идет по длинным проводам, что вызывает индукцию. Вследствие этого, на микроконтроллер попадает повышенное напряжение. Это показано на рис. 4. Обратите внимание на минимальное напряжение вызванное индукцией -5.88В. Это более чем достаточно, чтобы вызвать проблемы в электронной системе.


Рис. 4 Осциллограмма перепада напряжения

Теперь, когда мы поняли в чем проблема, можно приступить к её решению.

Защита входов

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

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


Рис. 5 Полная схема

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

Ограничение тока

Самый простой способ защиты – это токоограничивающий резистор (рис. 6). Сопротивление этого резистора таково, что падение напряжения на нем не влияет на напряжение на входе контроллера. Этот резистор и входной резистор микроконтроллера образуют делитель напряжения, следовательно, его значение может быть довольно большим. Для большинства входов можно использовать значения от 100 Ом и до 10 кОм. Я использовал резистор 1 кОм.


Рис. 6 Защита входа ограничением тока

Эта защита хорошо работает для коротких проводов. Рис. 7 показывает эффективность этой защиты. Минимальное напряжение с такой защитой составило -0,810 В.


Рис. 7 Эффективность защиты

Фильтрация

На рис. 6 выше показан простой ограничитель тока. При добавлении к данной схеме конденсатора (рис. 8) у нас получится ФНЧ (Фильтр Низких Частот), который обеспечит ещё более высокий уровень защиты.


Рис. 8 Использование ФНЧ

При использовании этой схемы следует внимательно отнестись к номиналам компонентов. Из-за предельных частотных характеристик схемы, значения резисторов и конденсаторов должно быть рассчитаны таким образом, чтобы микроконтроллер не пропустил ни одного сигнала. Для их расчета используйте следующую формулу:

Время нарастания сигнала = 2.2RC

Расчет значений R и C:
Определите максимальную входную частоту.
Выберите значение R. Используйте стандартное значение, например 1 кОм.
С помощью вышеприведенной формулы определите значение C.
Возможно значение С придётся немного изменить в ходе использования устройства.
На рис. 8, значения R и С 1 кОм и 0,01 мкФ, т.е. эта схема рассчитана на максимальную частоту 1 кГц. На рис. 9 показана эффективность этой схемы. Обратите внимание на более гладкие края. Это заслуга конденсатора.


Рис. 9 Эффективность RC фильтра

Также, RC фильтр обрезает ложные сигналы, которые могут давать неверные показания микроконтроллеру. К сожалению, при длинных проводах с этой схемой всё ещё могут быть скачки напряжения, что опасно для внутренних диодов.

Внешние диоды

Чтобы обезопасить внутренние диоды микроконтроллера, можно использовать внешние диоды Шоттки (рис.10.). Диоды Шоттки используются из-за того, что падение напряжения на них 0.2В, в отличие от падения 0.7В у внутренних диодов. Обратите внимание, что для защиты диодов Шоттки от перегрузки по току используется резистор. Поскольку эти диоды работают очень короткое время, резистора около 10 Ом хватит. Если ваши диоды Шоттки выдерживают кратковременные импульсы высокого тока, резистор можно упустить.


Рис. 10 Схема с внешними диодами

На рис. 11 показана эффективность этой схемы. Желтая линия – замеры на плюсе конденсатора, зелёная линия – замер между резистором 10 Ом и диодом Шоттки. Обратите внимание на отрицательный всплеск -0,650 В, что ниже напряжения падения встроенных диодов микроконтроллера.


Рис. 11 Результаты при использованием внешних защитных диодов

Другие идеи

В основном, другие идеи направлены на снятия сигнала с источника высокого напряжения (рис. 12).


Рис. 12 Схема для снятия показаний с повышенным напряжением

Диод служит для защиты от импульсов со значением меньше нуля. После него использован стабилитрон для стабилизации напряжения на входе, он также убирает необходимость использования подтягивающего резистора. Обратите внимание, что в данном случае, ограничительный резистор достаточно мал, чтобы обеспечить достаточный ток для стабилитрона. На рис. 13 показана эффективность этой схемы при подачи на вход 12В.


Рис. 13 Эффективность схемы при подачи на вход 12В

Заключение

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

:: ПОДКЛЮЧЕНИЕ ATMEL AVR ::
СТАБИЛИЗАЦИЯ РАБОТЫ МИКРОКОНТРОЛЛЕРА


Избитая шутка в исполнении Бибота и Бобота.

Питание микроконтроллеров AVR и тактовая частота

Существует два основных типа микроконтроллеров AVR. Первый из них предназначен для получения максимального быстродействия при высокой частоте, второй – для экономичной работы на небольших тактовых частотах. Маркировка микросхем второго типа отличается от первого тем, что на конце добавляется буква “L”. Например, ATtiny26 и ATtiny26L, ATmega8 и ATmega8L.

Микроконтроллеры первой группы допускают питание в диапазоне от 4,5 до 5,5 вольт при тактовой частоте 0. 16 МГц (для некоторых моделей – до 20 МГц, например ATtiny2313-20PU или ATtiny2313-20PI), вторые – соответственно 2,7. 5,5 вольт при частоте 0. 8 МГц (для большинства моделей, у некоторых моделей диапазон может быть уже). Ток потребления у них также различается: микроконтроллеры с индексом “L” потребляют меньше электроэнергии.

Существуют также микроконтроллеры с возможностью понижения питания до 1.8 В, которые обычно маркируются буквой “V”, например ATtiny2313V. При понижении питания соответствующим образом должна быть снижена и тактовая частота. Для ATtiny2313V при питании 1,8. 5,5 В частота должна находиться в интервале 0. 4 МГц, при питании 2,7. 5,5 В – в интервале 0. 10 МГц.

Для создания экспериментальных роботов подойдут микроконтроллеры любой группы. К тому же, если вы, например, захотите поставить ATmega8 в схему с питанием 3 вольта и запустить его на невысокой тактовой частоте, то ничего страшного не произойдет: в таком режиме он будет успешно работать. Единственное, что нельзя будет гарантировать, так это устойчивый запуск микроконтроллера при крайних значениях температур, да и ток потребления будет выше, чем у ATmega8L.

Таким образом, мы можем говорить, что если требуется максимальное быстродействие, то надо ставить ATtiny26 или ATmega8 и повышать тактовую частоту до 8. 16 МГц при питании 5 В. Если важнее всего экономичность вашего робота, то лучше применить ATtiny26L или ATmega8L и понизить частоту и питание. Хорошим вариантом во втором случае может быть питание от трех пальчиковых аккумуляторов по 1,2 В, что в сумме дает 3,8 В или от трех алкалиновых батарей по 1,5 В, что в сумме даст 4,5 В.

Хотя в datasheets [2] указывается максимальное рекомендуемое напряжение в 5,5 В, тем не менее на практике очень часто используют напряжение питания 6 В: микроконтроллер AVR можно запитать от четырех батарей по 1,5 В. Это удобно также в тех случаях, когда не используется раздельное с моторами питание. При этом стоит учитывать, что чем выше частота, тем выше потребление энергии, а соответственно, и нагрев микросхемы. Т. е. в данном случае лучше не запускать микроконтроллер на крайнем значении тактовой частоты. Стоит также учитывать, что максимальный ток через выводы GND, VCC не должен превышать 200 мА.

Чтобы сгладить возможные броски напряжения, особенно в схемах с общим питанием для микросхем и моторов, параллельно питающим линиям включают электролитический конденсатор 100-1000 мкф (C1), который обычно дополняют керамическим конденсатором около 0,1 мкф (C2) для фильтрации высокочастотных и среднечастотных помех (точный номинал этого конденсатора можно расчитать только тогда, когда точно известна паразитная частота).


Кроме того, чтобы развязать питание моторов и микросхем, в положительную линию питания микроконтроллера включают диод, например, 1N4001 или 1N4004.

В экспериментальной и hobby-робототехнике часто применяют сборки батарей с напряжением 9 В и даже 12-вольтовые аккумуляторы. В этих случаях ставят пятивольтовый стабилизатор положительного напряжения КР142ЕН5А или его зарубежный аналог 7805.

Подключение питания к микроконтроллеру AVR

Среди микроконтроллеров AVR существуют микросхемы, имеющие двойное питание: “цифровое” (выводы VCC и GND) и “аналоговое” (AVCC и AGND, который часто обозначают просто GND). К таким микросхемам относятся, например, ATmega8 и ATtiny26. В стандартном включении выводы VCC и AVCC закорачивают между собой. Выводы GND уже замкнуты внутри микроконтроллера через сопротивление 0,7 Ом, и их обычно просто соединяют с “землей”.

Керамические конденсаторы С1 и С2 емкостью 0,1 мкф располагают максимально близко от “своих” по схеме выводов. Если у микроконтроллера AVR нет вывода AVCC, то, вместо двух, ставят один конденсатор. На практике так часто поступают и для микросхем с двойным питанием.

Если используется встроенный аналогово-цифровой преобразователь (АЦП), то вывод AVCC подключают к напряжению питания VCC через резистор около 100 Ом. Кроме того, для уменьшения помех применяют последовательный LC-фильтр для питания.

Номинал индуктивности L1 может лежать в диапазоне 30. 47 мкГн. Танталовый конденсатор C1 – 4,7 мкф.

Снижение риска непреднамеренного сброса

Как уже говорилось выше, линия RESET имеет внутренний резистор привязки к шине питания для увеличения помехозащищенности, который калибруется на фабрике при изготовлении микроконтроллера. Кроме того, микроконтроллеры AVR второго поколения имеют улучшенную защиту от кратковременных (brown-out) и полных (black-out) просадок питания. Исходя из этого в простых схемах на AVR иногда обходятся без дополнительных мер по отношению к выводу RESET и даже оставляют его висящим в “воздухе” [3].

Такой подход может быть применим для экспериментального макетирования и любительских самоделок, но в промышленной автоматике может приводить к сбоям при помехах по питанию. В условиях сильных внешних помех сопротивление этого резистора (100-500 кОм) оказывается слишком большим, и при отсутствии на линии RESET сигнала высокого уровня может происходить случайный сброс микроконтроллера.

Существует несколько способов снижения риска непреднамеренного сброса. Один из самых простых – это подключить к линии RESET внешний подтягивающий резистор с рекомендуемым значением сопротивления от 4,7 до 10 кОм.

Для дополнительной защиты линии RESET от внешних помех рекомендуется также шунтировать ее на землю с помощью внешнего конденсатора емкостью около 0,1 мкф. Но при этом необходимо помнить, что вход внешнего сброса RESET может использоваться однопроводным интерфейсом debugWIRE при отладке программного обеспечения микроконтроллера. Наличие конденсатора, подключенного параллельно входу RESET, будет приводить к сбоям в работе этого интерфейса. Поэтому, если планируется отлаживать микроконтроллер на целевой плате с помощью debugWIRE, необходимо предусмотреть перемычку, чтобы отключать этот конденсатор на время отладки прикладного программного обеспечения.


Для поддержки режима высоковольтного программирования микроконтроллеры AVR не имеют стандартного внутреннего диода для защиты от избыточного напряжения на входе RESET. Поэтому, если высоковольтное программирование не используется, для защиты от помех рекомендуется подключать внешний диод, например 1N4148 между линией RESET и шиной питания микроконтроллера. Таким образом, типовая схема внешней “обвязки” для линии RESET будет выглядеть следующим образом.

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

Кнопка “Сброс”

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

Контакты кнопки при внутрисхемном программировании должны обязательно находиться в разомкнутом состоянии.

Микроконтроллер в схеме с электромоторами


Для того чтобы снизить помехи от “искрящих” цепей электродвигателей, параллельно двигателям включают керамические конденсаторы 0,01. 0,1 мкф. Конденсаторы располагают непосредственно на самих контактах двигателей.

Дополнительной мерой может служить шунтирование каждого контакта электродвигателя на его корпус или на “землю”.

Емкость керамических конденсаторов С2 и С3 в этом случае также может лежать в диапазоне 0,01. 0,1 мкф


При установке микроконтроллера в непосредственной близости от двигателей следует позаботиться о снижении риска возможных наводок на внешние цепи AVR. Так, цепь внешнего тактирования может служить транзитным путем для наводок. Чтобы устранить возможные сбои, рекомендуется конденсаторы С1 и С2 устанавливать как можно ближе к выводам XT1 и XT2, а их “земляные” обкладки подключать непосредственно к выводу GND микроконтроллера короткими проводниками. Кроме того, рекомендуется корпус кварцевого резонатора Q1 припаивать коротким проводом к цепи GND. Еще большую безопасность может обеспечить экранирующий контур на печатной плате вокруг кварцевого резонатора и конденсаторов.

Это оригинальная статья myROBOT.ru
Постоянный адрес статьи: http://myrobot.ru/articles/mc_stab.php

Комментарии:

1.
Ко второму поколению микроконтроллеров AVR можно отнести почти все микроконтроллеры семейств ATmega и ATtiny.
вернуться

2.
Datasheet – основной документ, которым производители сопровождают свои устройства. В разделе Downloads находятся datasheets на микроконтроллеры, описываемые на сайте myROBOT.ru
вернуться

3.
“Вывод RESET можно подключить к источнику питания либо оставить неподключенным, поскольку он уже подсоединен к источнику питания подтягивающим резистором”.
Евстигнеев А.В. Микроконтроллеры AVR семейства Tiny и Mega фирмы “ATMEL” – М.: Издательский дом “Додэка-XXI”, 2004. – 560с.
стр. 220.

“Поскольку к выводу RESET подключен подтягивающий резистор, этот вывод может оставаться неподключенным, если не требуется внешний сброс”.
М.С. Голубцов, А.В. Кириченкова Микроконтроллеры AVR: от простого к сложному. Изд. 2-е, испр. и доп. – М.: СОЛОН-Пресс, 2004. 304 с. – (Серия “Библиотека инженера”)
стр. 33.

“Вывод RESET имеет внутреннее соединение с шиной питания через резистор, что избавляет от необходимости использования внешнего соединения. В процессе отладки системы, когда надо постоянно перезапускать МК и наблюдать за его поведением, все, что вам для этого нужно, – это простая кнопка, которая будет замыкать вывод RESET на землю. В законченной системе вы можете оставлять вывод RESET не подключенным”.
Из диссертационной работы – Коробков Г. Н., Воронежский Государственный Университет, кафедра физики полупроводников, Зав. кафедрой физики полупроводников профессор Петров Б.К., научный рук. доцент Клюкин В.И.
вернуться

Литература:

С.М. Рюмик Микроконтроллеры AVR. “Радiоаматор”, №№ 1-7, 2005г.

Как безопасно подключать внешние устройства к микроконтроллеру?

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

Введение

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

Многие устройства ввода/вывода потребляют много тока (> 100 мА), которые большинство микроконтроллеров не могут обеспечить в безопасном режиме, а когда они пытаются обеспечить такое количество тока, они часто ломаются. Здесь нам на помощь приходят специальные схемы, которые называются «драйверы» (англ. – drivers). Драйверы – это схемы, которые могут принимать небольшой слабый сигнал от микроконтроллера, а затем использовать этот сигнал для управления каким-либо энергопотребляющим устройством.

Для правильной работы микроконтроллеров с внешними устройствами иногда требуются специальные схемы. Эти внешние устройства включают:

  • Цепи драйвера
  • Схемы защиты входа
  • Схемы защиты выхода
  • Цепи изоляции

Итак, давайте посмотрим на некоторые из этих схем и на то как они работают!

Простой светодиодный (LED) драйвер

Эта простая схема удобна для управления светодиодами с высоким энергопотреблением с помощью микроконтроллеров, где выход микроконтроллера подключен к «IN».

Пример простого светодиодного драйвера

Когда микроконтроллер выводит 0, транзистор Q1 отключается, а также светодиод D1. Когда микроконтроллер выводит 1, транзистор включается, и поэтому D1 также включается. Значение R1 зависит от выходного напряжения вашего микроконтроллера, но значения между 1KΩ

10KΩ часто работают хорошо. Значение R2 зависит от размера нагрузки, которую вы питаете, и эта схема подходит для питания устройств до 1А и не более.

Простой релейный драйвер

Устройствам, которые потребляют более 1 А тока и будут включаться и выключаться раз в несколько секунд, лучше подойдут реле.

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

Для обычных реле требуются токи около 60 мА

100 мА, что слишком много для большинства микроконтроллеров, поэтому реле требуют схему с использованием управления транзистором (как показано выше). Однако вместо резистора, который необходимо использовать для ограничения тока, требуется обратный диод защиты (D1).

Когда микроконтроллер (подключенный к «IN»), выдает 1, тогда включается транзистор Q1. Это включает реле RL1, и в результате загорается лампа (R2). Если микроконтроллер выводит 0, то транзистор Q1 отключается, что отключает реле, и поэтому лампа выключается.

Реле очень часто встречаются в схемах, требующих переключения цепей электропитания переменного тока, и доступны для переключения 230В и 13А (подходит для тостеров, чайников, компьютеров и пылесосов).

Пример простого релейного драйвера

Кнопки

При подключении кнопки к микроконтроллеру могут иногда возникнуть простые проблемы. Первая (и самая раздражающая проблема) возникает в виде отскока, когда кнопка посылает много сигналов при нажатии и отпускании.

Кнопки обычно представляют собой кусок металла, который при контакте соприкасается с каким-то другим металлом, но когда кнопки вступают в контакт, они часто отскакивают (хотя они чаще всего крошечные). Этот отскок означает, что кнопка соединяется и отключается несколько раз, прежде чем зафиксироваться, а в итоге – результат, который ненадолго выглядит случайным. Поскольку микроконтроллеры очень быстрые, они могут поймать этот отскок и выполнять события нажатия кнопки несколько раз. Чтобы избавиться от отскока, можно использовать схему ниже. Схема, показанная здесь, представляет собой очень тривиальную схему, которая хорошо работает и проста в построении.

Защита входа: напряжение

Не все устройства ввода будут дружественными к вашему микроконтроллеру, а некоторые источники могут даже нанести ущерб. Если у вас есть источники входного сигнала, которые поступают из окружающей среды (например, датчик напряжения, датчик дождя, человеческий контакт) или источники входного сигнала, которые могут вывести напряжения, превышающие то, что может обрабатывать микроконтроллер (например, цепи индуктора), тогда вам потребуется включать некоторую защиту ввода напряжения. Схема, показанная ниже, использует 5V стабилитронов для ограничения входных напряжений, так что входное напряжение не может превышать 5 В и ниже 0 В. Резистор 100R используется для предотвращения слишком большого тока, когда диод Зенера захватывает входное напряжение.

Пример защиты ввода напряжения

Защита ввода/вывода: ток

Входы и выходы микроконтроллеров иногда могут быть защищены от слишком большого тока. Если устройство, такое как светодиод, потребляет меньше тока, чем максимальный выходной ток от микроконтроллера, тогда светодиод может быть напрямую подключен к микроконтроллеру. Тем не менее, последовательный резистор будет по-прежнему необходим, как показано ниже, а общие значения последовательных резисторов для светодиодов включают в себя 470 Ом, 1 кОм и даже 2,2 кОм. Серии резисторов также полезны для входных контактов в редких случаях, когда неисправны контакты микроконтроллеров или входное устройство испытывает всплеск выходного тока.

Пример использования резисторов для защиты тока

Преобразователи уровня

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

Хотя многие радиолюбители предпочли бы использовать один уровень напряжения, правда состоит в том, что более старые 5-вольтовые части могут не работать на 3,3 В, в то время как более новые устройства 3,3 В не могут работать при более высоком напряжении 5 В. Если устройство 5V и устройство 3.3V хотят общаться, то требуется сдвиг уровня, который преобразует один сигнал напряжения в другой. Некоторые устройства с напряжением 3,3 В имеют 5 В “толерантность”, что означает, что сигнал 5 В может напрямую подключаться к сигналу 3,3 В, но большинство устройств 5 В не могут переносить 3.3 В. Чтобы охватить оба варианта, приведенные ниже схемы показывают преобразование от 5 до 3,3 В и наоборот.

Примеры преобразователей уровня

Изоляция: Оптоизолятор

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

Оптоизоляторы взаимодействуют с использованием света, когда одна цепь излучает свет, который затем обнаруживается другой схемой. Это означает, что оптоизоляторы не используются для аналоговой связи (например, уровни напряжения), но вместо этого для цифровой связи, где выход включен или выключен. Оптоизоляторы могут использоваться как для входов, так и для выходов на микроконтроллеры, где входы или выходы могут быть потенциально опасны для микроконтроллера. Интересно, что оптоизоляторы также могут использоваться для смещения уровня!

Пример использования optoisolation для защиты вашего микроконтроллера

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 система стала работать значительно стабильнее.

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

Ссылки

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

Источники:

http://myrobot.ru/articles/mc_stab.php

http://arduinoplus.ru/bezopasnoe-podkluchenie-vneshnego-ustroistva-k-mikrokontrolleru/

http://habr.com/post/176203/

http://xn--18-6kcdusowgbt1a4b.xn--p1ai/%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA-%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B0%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE/

Ссылка на основную публикацию