Введение
Для грамотного использования микроконтроллера необходимо иметь представление об электрических характеристиках его выводов. Эти характеристики определяют максимально допустимый втекающий/вытекающий ток и уровни входных/выходных напряжений. От них зависит что и как можно подключать к микроконтроллеру, и к чему это приведет.
Сегодняшний материал посвящен как раз этой теме. Данные, приведенные ниже, взяты из описания на микроконтроллер 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".
В режиме выхода вывод микроконтроллера может быть или источником или потребителем тока (то есть ток или вытекает из него или втекает). Это зависит от того, какой логический уровень установлен на выводе – ноль или единица (то есть это зависит от содержимого регистра PORTх). Если на выводе логический ноль, то любое положительное напряжение, приложенное к выводу, вызовет втекающий ток. Если на выводе логическая единица, то любое внешнее напряжение, меньше напряжения питания микроконтроллера, вызовет вытекающий ток.
Протекание тока сопровождается падением напряжения на внутренних цепях вывода микроконтроллера. Величину падения можно оценить по тем же графикам "I/O Pin Current vs Output Voltage".
Зависимость выходного напряжения от втекающего тока.
Вывод микроконтроллера в режиме выхода, установлен логический ноль, напряжение питания 5В.
Зависимость выходного напряжения от вытекающего тока.
Вывод микроконтроллера в режиме выхода, установлена логическая единица, напряжение питания 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 прямое падение напряжения на светодиоде
Кстати, величину собственного потребления микроконтроллера можно найти в разделе типичных электрических характеристик. Оно зависит от напряжения питания, тактовой частоты, количества работающей периферии и режима работы микроконтроллера. Это только один из графиков, приведенных в том разделе.
Зависимость тока потребления от тактовой частоты и напряжения питания микроконтроллера в активном режиме.
Режим входа
Режим входа используется для приема или ввода данных в микроконтроллер. Например, для получения данных с цифрового датчика или определения состояния тактовой кнопки.
В режиме входа вывод микроконтроллера может быть или в высокоимпедансном состоянии (Hi-Z) или подтянут к плюсу питания через встроенный резистор (20 - 50 кОм). Спалить вывод в режиме входа замыканием на землю или плюс питания нельзя, в отличии от режима выхода. Но можно спалить внутренние цепи вывода, подав чрезмерно большое напряжение. Конечно, если бросок напряжения на входе микроконтроллера будет кратковременным, защитные диоды предохранят его.
Подключая к микроконтроллеру внешние микросхемы, с которых принимаются данные, нужно всегда проверять, согласуются ли выходные уровни микросхемы с входными уровнями микроконтроллера.
В разделе типичных электрических характеристик приведены графики "Pin Thresholds And Hysteresis", по которым можно оценить уровни входных напряжений в зависимости от напряжения питания микроконтроллера AVR.
Зависимость порогового напряжения от напряжения питания микроконтроллера. Любое напряжение выше графика, воспринимается микроконтроллером как логическая единица.
Как можно видеть из рисунка, при напряжении 5 В входное напряжение > 2 В будет восприниматься микроконтроллером как логическая единица.
Аналогичный график представлен и для логического нуля.
Зависимость порогового напряжения от напряжения питания микроконтроллера. Любое напряжение ниже графика, воспринимается микроконтроллером как логический ноль.
При питании 5 В, входное напряжение меньше ~1.4, воспринимается микроконтроллером как логический ноль.
Думаю ты заметил, что между пороговыми уровнями логического нуля и единицы разница 2 - 1.4 = 0.6 В. Как микроконтроллер воспринимает напряжение попавшее в этот диапазон? Никак. Благодаря наличию гистерезиса, внутренняя логика вывода микроконтроллера не реагирует на эти значения. И только в случае превышения порогов, переключается в одно из состояний. Про гистерезис ты можешь немного почитать в статье "Компаратор на операционном усилителе".
Зависимость гистерезиса от напряжения питания микроконтроллера
Итак, что еще можно сказать про режим входа. Не следует оставлять выводы микроконтроллера в высокоимпедансном состоянии. Они будут "ловить" помехи и без конца переключаться из логической единицы в логический ноль и наоборот, увеличивая потребление микроконтроллера. Для снижения энергопотребления рекомендуется конфигурировать неиспользуемые выводы на вход с включенными подтягивающими резисторами.
Заключение
Подводя итог выше сказанному, сформулирую несколько правил:
- подключаешь внешние микросхемы к микроконтроллеру, проверяй как согласуются их уровни напряжений,
- управляешь с помощью микроконтроллера нагрузкой, ограничивай ток через выводы микроконтроллера,
- управляешь несколькими нагрузками, проверяй не превышаешь ли максимально допустимый ток потребления микроконтроллера.
- не используешь выводы микроконтроллера, конфигурируй их в режим входа с подтягивающими резисторами.
Кстати, недавно я наступил на грабли, связанные с согласованием уровней. В одной из схем я применил 5-ти вольтовый сторожевой таймер и 3-х вольтовую ПЛИС. Выход таймера согласовал со входом ПЛИС, а про согласование входа сброса таймера с выходом ПЛИС забыл. Когда плата пришла с завода, я обнаружил, что уровня выходного напряжения ПЛИС не хватает для перезагрузки сторожевого таймера и тот постоянно ее сбрасывает. Из положения пришлось выходить, используя 5-ти вольтовую логическую микросхему на плате. У нее оставалось 2 незадействованных логических элемента и она "нормально воспринимала" логические уровни ПЛИС. Так что будьте аккуратнее, такой момент можно случайно проглядеть, особенно, если в схеме много микросхем.
Comments
К портам эти фузы не имеют отношения.
Входом мега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В на долго - пофиг, в итоге "сжег" молотком.
Так что в заключении можно добавить - никогда не верить тому что написано :).
RSS feed for comments to this post