Порты ввода-вывода микроконтроллеров AVR. Электрические характеристики

24/03/2013 - 16:16 Павел Бобков

   Введение

   Для грамотного использования микроконтроллера необходимо иметь представление об электрических характеристиках его выводов. Эти характеристики определяют максимально допустимый втекающий/вытекающий ток и уровни входных/выходных напряжений. От них зависит что и как можно подключать к микроконтроллеру, и к чему это приведет. 
   Сегодняшний материал посвящен как раз этой теме. Данные, приведенные ниже, взяты из описания на микроконтроллер Atmega16 в разделах Electrical Characteristics и Typical Characteristics. Для более детального изучения этого вопроса, рекомендую обязательно их посмотреть. 

Схема 

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

   Схема ограничивает величину входных напряжений в диапазоне от -Vd до Vcc+Vd В, где Vd - прямое падение напряжения на диоде (обычно принимается 0,7 В), Vcc - напряжение питания микроконтроллера. Это защищает цепи микроконтроллера от перенапряжений и пробоя статическим электричеством. Однако, эти защитные диоды довольно хиленькие и выдерживают ток в единицы миллиампер. 

   Несмотря на свою полезную функцию, схема может доставить ряд неприятностей. Если подать входные сигналы на выводы выключенного микроконтроллера, то они через защитный диод запитают микроконтроллер и все остальную схему. Это явление называют паразитным питаниям. Как при этом поведет себя микроконтроллер, сложно предсказать, поэтому такой режим нежелателен.
   По хорошему, нужно сначала подавать питание, а потом входные сигналы. При выключении же наоборот – снимать входные сигналы, затем отключать питание.
   Также на схеме ты можешь видеть подтягивающий резистор Rpu (pull up) и паразитную емкость Cp. Номинал подтягивающего резистора ~20 - 50 кОм, паразитная емкость имеет величину несколько пФ.
Выводы микроконтроллеров AVR могут работать или в режиме входа, или в режиме выхода. Рассмотрим эти режимы.

Режим выхода

   Данный режим используется, когда микроконтроллер управляет или передает данные какому-нибудь внешнему устройству. Например, управляет светодиодом, сдвиговым регистром, внешним АЦП и т. д.
Подключая к микроконтроллеру внешние микросхемы, ты всегда должен проверять, согласуются ли уровни ее входных напряжений с выходными напряжениями микроконтроллера.
   Для этого в описании на микроконтроллер ATmega16 в разделе электрических характеристик приведены значения выходных напряжений логического нуля Vol (output low voltage) и единицы Voh (output high voltage). Обрати внимание, данные приведены для определенного напряжения питания и токов, даны минимальные и максимальные значения. Уровни напряжений для других условий можно оценить по графикам "I/O Pin Current vs Output Voltage".

Логические уровни выходного напряжения для AVR

   
   В режиме выхода вывод микроконтроллера может быть или источником или потребителем тока (то есть ток или вытекает из него или втекает). Это зависит от того, какой логический уровень установлен на выводе – ноль или единица (то есть это зависит от содержимого регистра PORTх). Если на выводе логический ноль, то любое положительное напряжение, приложенное к выводу, вызовет втекающий ток. Если на выводе логическая единица, то любое внешнее напряжение, меньше напряжения питания микроконтроллера, вызовет вытекающий ток.
   Протекание тока сопровождается падением напряжения на внутренних цепях вывода микроконтроллера. Величину падения можно оценить по тем же графикам "I/O Pin Current vs Output Voltage".

График зависимости напряжения от втекающего тока для AVR

Зависимость выходного напряжения от втекающего тока.
Вывод микроконтроллера в режиме выхода, установлен логический ноль, напряжение питания 5В.

График зависимости напряжения от вытекающего тока для AVR

Зависимость выходного напряжения от вытекающего тока.
Вывод микроконтроллера в режиме выхода, установлена логическая единица, напряжение питания 5В.

   Как ты можешь видеть, графики приведены для диапазона токов от 0 до 70 мА (для температуры +25 С), но это вовсе не означает, что через каждый из выводов микроконтроллера AVR может протекать такой ток. Таблица Аbsolute Maximum Ratings в разделе электрических характеристик говорит нам о том, что максимальный ток через один вывод микроконтроллера AVR не должен превышать 40 мА, а ток через выводы VCC и GND не должен превышать 200 мА для PDIP и 400 мА для корпусов TQFP/MLF. 

   Это позволяет нам оценить, какую нагрузку микроконтроллер способен запитать своими силами. Например, мы можем подключить 8 ярких светодиодов при токе 20 мА и микроконтроллер не сгорит. При этом для расчета ограничительных резисторов нужно будет учитывать падение напряжения (~0.5 В) на выходе микроконтроллера.

8 * 20 мА = 160 мА
+ 10 мА собственное потребление
итого 170 мА < 200 мА

Rd = (5 - 0.5 - Vd)/20 , где Vd прямое падение напряжения на светодиоде

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

Зависимость тока потребления AVR от частоты и напряжения питания

Зависимость тока потребления от тактовой частоты и напряжения питания микроконтроллера в активном режиме. 

Режим входа

   Режим входа используется для приема или ввода данных в микроконтроллер. Например, для получения данных с цифрового датчика или определения состояния тактовой кнопки.
   В режиме входа вывод микроконтроллера может быть или в высокоимпедансном состоянии (Hi-Z) или подтянут к плюсу питания через встроенный резистор (20 - 50 кОм). Спалить вывод в режиме входа замыканием на землю или плюс питания нельзя, в отличии от режима выхода. Но можно спалить внутренние цепи вывода, подав чрезмерно большое напряжение. Конечно, если бросок напряжения на входе микроконтроллера будет кратковременным, защитные диоды предохранят его.
   Подключая к микроконтроллеру внешние микросхемы, с которых принимаются данные, нужно всегда проверять, согласуются ли выходные уровни микросхемы с входными уровнями микроконтроллера.
   В разделе типичных электрических характеристик приведены графики "Pin Thresholds And Hysteresis", по которым можно оценить уровни входных напряжений в зависимости от напряжения питания микроконтроллера AVR.

Пороговое напряжение логической единицы для AVR

Зависимость порогового напряжения от напряжения питания микроконтроллера. Любое напряжение выше графика, воспринимается микроконтроллером как логическая единица. 

   Как можно видеть из рисунка, при напряжении 5 В входное напряжение > 2 В будет восприниматься микроконтроллером как логическая единица.

   Аналогичный график представлен и для логического нуля.

Пороговое напряжение логического нуля для AVR

Зависимость порогового напряжения от напряжения питания микроконтроллера. Любое напряжение ниже графика, воспринимается микроконтроллером как логический ноль. 

   При питании 5 В, входное напряжение меньше ~1.4, воспринимается микроконтроллером как логический ноль. 

   Думаю ты заметил, что между пороговыми уровнями логического нуля и единицы разница 2 - 1.4 = 0.6 В. Как микроконтроллер воспринимает напряжение попавшее в этот диапазон? Никак. Благодаря наличию гистерезиса, внутренняя логика вывода микроконтроллера не реагирует на эти значения. И только в случае превышения порогов, переключается в одно из состояний. Про гистерезис ты можешь немного почитать в статье "Компаратор на операционном усилителе".

Зависимость гистерезиса от напряжения питания AVR

Зависимость гистерезиса от напряжения питания микроконтроллера

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

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

Заключение 

    Подводя итог выше сказанному, сформулирую несколько правил:

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

   Кстати, недавно я наступил на грабли, связанные с согласованием уровней. В одной из схем я применил 5-ти вольтовый сторожевой таймер и 3-х вольтовую ПЛИС. Выход таймера согласовал со входом ПЛИС, а про согласование входа сброса таймера с выходом ПЛИС забыл. Когда плата пришла с завода, я обнаружил, что уровня выходного напряжения ПЛИС не хватает для перезагрузки сторожевого таймера и тот постоянно ее сбрасывает. Из положения пришлось выходить, используя 5-ти вольтовую логическую микросхему на плате. У нее оставалось 2 незадействованных логических элемента и она "нормально воспринимала" логические уровни ПЛИС. Так что будьте аккуратнее, такой момент можно случайно проглядеть, особенно, если в схеме много микросхем.


Comments   

# v3launch 2013-03-26 07:26
BOD level во фьюзах расширяет диапазон гистерезиса? Или он постоянно 0.6 В, а BOD задает планку?
# frolikum 2013-03-26 08:34
BOD включает защитную схему контроля питания МК, а BODlevel задает планку для этой схемы еще выше ~4.5V.
К портам эти фузы не имеют отношения.
# Pashgan 2013-03-27 08:26
Точно. А для BOD схемы гистерезис 50 - 100 мВ и от BOD level он не зависит.
# Вовка 2013-03-28 00:09
Расскажу-ка я про грабли от атмела на которые я налетел в 2008, быть может ещё актуальные.
Входом мега8 я щупал через резистор состояние ключа, построенного на составном транзисторе кт972 или кт973, и программа жила своей жизнью, после долгого поиска причин в своих кривых руках и башке, была составленна программа из серии PINA.0=PORTB.0 , ко входу был прицеплен многооборотный резистор и я получил что от 0 до 0,6В МК считает что у него на входе лог.0, от 0,6 до 0,7В была дискотека (привет гистерезис, а куда ты ?), от 0,7 и выше МК считал что лог.0, питание было четко 5В, а в спецификации на МК написано что порог переключения Uпит/5 т.е. 1В.
Опять же из практики, я всегда ставлю светодиоды без резисторов, а динамические индикаторы опять же без резисторов и транзисторов цепляю напрямую к ногам и никогда не было проблем, хотя зачастую это работает не выключаясь годами. Мне кажется спалить выход можно только перегрев микросхему, они и КЗ достаточно долго держат, а входы здорово дохнут даже через резисторы от самоиндукции катушек.
Это всё относится к АВР.
Помню как-то раздраконила меня К155ЛА3 и решил я её ритуально сжечь, замкнул все выходы - пофиг, поднял напряжение до 20В на долго - пофиг, в итоге "сжег" молотком.
Так что в заключении можно добавить - никогда не верить тому что написано :).
# Вовка 2013-03-28 00:17
*от 0.7В и выше - лог.1 *
# Pashgan 2013-03-28 17:35
У меня тоже на одной плате резистивную сборку вместо 220 Ом поставили 22 Ом. Там с одной стороны сборки регистр подключен, а с другой светодиоды. Ну да, работает не сгорает, но гарантированные параметры производителя превышены.
# frolikum 2013-03-29 09:14
Живучесть портов по току можно объяснить тем что полевики которые стоят на выходе порта как и все порядочные их братья при нагреве увеличивают сопротивление канала поэтому при прямом подключении светодиодов не сгорают, а сами выступают в качестве резисторов. Ну и как полагается от выброса напряжения самоиндукции(ко роткого но очень высокого) один из стаканов в нижнем ключе порта пробивается и он шунтирует все остальные и порт в КЗ на землю. Лично сам подавал на mega8 +12В и работала. Но +12 это в разы меньше самоиндукции.
# Артем 2017-02-14 10:21
Спасибо за разъяснение про втекание и вытекание токов! Павел, может вы знаете, как обстоит дело с направлением токов в ногах, которые настроены на выход в 8051 микроконтроллер ах? Там ток тоже может протекать в обоих направлениях?

У вас недостаточно прав для комментирования.