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

В статье будет рассмотрено подключение светодиодов к микроконтроллеру, работа с портами и написание программы на СИ. Статья, прежде всего, предназначена новичкам, которые только взялись за микроконтроллеры AVR.

Для начала нужно выбрать микроконтроллер. В моем случае это ATmega8535. В данном случае микроконтроллер можно брать любой, так как данная задача легко реализуется под любой МК. Писать программу для микроконтроллера можно на Ассемблере, СИ, Pascal-е и Bascom. Я использовал язык СИ, все эти языки разные.
Конкретную разницу между Си и Паскалем можно увидеть ниже.

//Мигающий светодиод void main() { ddrB = 0b11111111; //задаём порты B на выход portB = 0b11111111; //по умолчанию всё выключено while(1) { portB = ˜portB; //переключаем состояние светодиода на обратное delay_ms(100); //делаем задержку на 100 миллисекунд } }

Program First; begin ddrB:= $FF; //задаём порт B на выход portB:= $FF; //по умолчанию ничего не горит while(1) do begin portB:= not(portB); //переключаем состояние светодиода на обратное delay_ms(100); //делаем небольшую задержку end; end.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит

ATmega8535

1 В блокнот
R1-R8 Резистор

220 Ом - 1 кОм

8 В блокнот
R9-R11 Резистор

10 кОм

3 В блокнот
V1-V8 Светодиод 8 В блокнот
Тактовая кнопка 3

Подключение питания.

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

К счастью, большинство микроконтроллеров нормально работают в широ­ком диапазоне внешних условий. Единственное, на что следует обратить вни­мание при разработке приложения, - это развязка питающего напряжения. Как правило, для развязки используется танталовый конденсатор емкостью 0,1мкФ, который подключается как можно ближе выводам питания. Этот кон­денсатор обеспечит повышенный выходной ток при переходных процессах, предохраняя аппаратуру отложных сбросов и искажения данных. Таким обра­зом простое включение конденсатора избавит вас от множества проблем.

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

Как правило, устройства, использующие микроконтроллеры, должны на­чинать работу при включении питающего напряжения. Чтобы быть уверен­ным, что запуск микроконтроллера произойдет, когда напряжение питания дос­тигло заданного стабильного значения, используют схему, показанную на рис.2. 10.

В этой схеме сигнал RESET на входе микроконтроллера становится актив­ным (принимает значение логического 0) приблизительно через 22 мс (вре­мя задержки Td = 2,2 RC) после включения питания. Этого времени доста­точно для стабилизации напряжения питания и установки требуемой частоты тактового генератора прежде, чем начнет работать микроконтроллер.

Кнопка RESET используется в процессе разработки устройства для сбро­са микроконтроллера в начальное состояние. При отладке устройства очень полезно иметь возможность выполнения сброса, чтобы обеспечить повтор­ный запуск микроконтроллера. Резистор сопротивлением 100 Ом, который включен последовательно с конденсатором, служит для ограничения тока разряда конденсатора в момент сброса (заряженный конденсатор является источником большого тока, когда он закорачивается на «землю»). Эта схема может быть использована для запуска микроконтроллеров, у которых сигнал RESET имеет высокий активный уровень (например, микроконтроллер 8051), путем инвертирования напряжения на конденсаторе (например, с помощью микросхемы типа 7404).


Рис. 2.10 - Схема формирования сигнала запуска RESET.

Для некоторых микроконтроллеров можно удалить RC-цепь в схеме за­пуска, так как внутри них имеется схема, обеспечивающая задержку включе­ния (пуск тактового генератора и начало выполнения первой команды про­граммы). В этом случае схема запуска может быть упрошена, как показано на рис. 2.11. Посмотрев на эту схему, вы, возможно, подумаете, что схему можно еще более упростить, просто подключив вывод RESET к шине питания Vdd. Это верно, но использовать такое включение следует только после того, как схема будет полностью отлажена. Однако при этом целесообразно включить токоограничивающий резистор, чтобы иметь возможность повторного запус­ка путем закорачивания вывода RESET на «землю».

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

Для решения этой проблемы существуют устройства - мониторы пита­ния, которые следят за уровнем напряжения Vcc/Vdd. Если это напряжение падает ниже определенного уровня (обычно 4.5В), то вырабатывается сигнал RESET. Как правило, такие мониторы питания содержат схему задержки и работают аналогично описанной выше RC-схеме запуска. Они монтируются в такой же корпус, как трехвыводной транзистор.

Рис. 2.11 - Модифицированная схема RESET.

В следующих статьях будут устройства, которые должны управлять внешней нагрузкой. Под внешней нагрузкой я понимаю все, что прицеплено к ножкам микроконтроллера – светодиоды, лампочки, реле, двигатели, исполнительные устройства … ну Вы поняли. И как бы не была заезжена данная тема, но, чтобы избежать повторений в следующих статьях, я все-же рискну быть не оригинальным — Вы уж меня простите:). Я кратенько, в рекомендательной форме, покажу наиболее распространенные способы подключения нагрузки (если Вы что-то захотите добавить – буду только рад).
Сразу договоримся, что речь идет о цифровом сигнале (микроконтроллер все-таки цифровое устройство) и не будем отходить от общей логики: 1 -включено, 0 -выключено. Начнем.

Нагрузкой постоянного тока являются: светодиоды, лампы, реле, двигатели постоянного тока, сервоприводы, различные исполнительные устройства и т.д. Такая нагрузка наиболее просто (и наиболее часто) подключается к микроконтроллеру.

1.1 Подключение нагрузки через резистор.
Самый простой и, наверно, чаще всего используемый способ, если речь идет о светодиодах.

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

Rгасящий = (5v / 0.02A) – Rн = 250 – Rн

Как видно, даже в самом худшем случае, когда сопротивление нагрузки равно нулю достаточно 250 Ом для того, что бы ток не превысил 20мА. А значит, если неохота чего-то там считать — ставьте 300 Ом и Вы защитите порт от перегрузки. Достоинство способа очевидно – простота.

1.2 Подключение нагрузки при помощи биполярного транзистора.
Если так случилась, что Ваша нагрузка потребляет более 20мА, то, ясное дело, резистор тут не поможет. Нужно как-то увеличить (читай усилить) ток. Что применяют для усиления сигнала? Правильно. Транзистор!

Для усиления удобней применять n-p-n транзистор, включенный по схеме ОЭ . При таком способе можно подключать нагрузку с большим напряжением питания, чем питание микроконтроллера. Резистор на базе – ограничительный. Может варьироваться в широких пределах (1-10 кОм), в любом случае транзистор будет работать в режиме насыщения. Транзистор может быть любой n-p-n транзистор. Коэффициент усиления, практически не имеет значения. Выбирается транзистор по току коллектора (нужный нам ток) и напряжению коллектор-эмиттер (напряжение которым запитывается нагрузка). Еще имеет значение рассеиваемая мощность — чтоб не перегрелся.

Из распространенных и легко доступных можно заюзать BC546, BC547, BC548, BC549 с любыми буквами (100мА), да и тот-же КТ315 сойдет (это у кого со старых запасов остались).
- Даташит на биполярный транзистор BC547

1.3 Подключение нагрузки при помощи полевого транзистора.
Ну а если ток нашей нагрузки лежит в пределах десятка ампер? Биполярный транзистор применить не получиться, так как токи управления таким транзистором велики и скорей всего превысят 20мА. Выходом может служить или составной транзистор (читать ниже) или полевой транзистор (он же МОП, он же MOSFET). Полевой транзистор просто замечательная штука, так как он управляется не током, а потенциалом на затворе. Это делает возможным микроскопическим током на затворе управлять большими токами нагрузки.

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

При включении полевого транзистора нужно учесть ряд моментов:
— так как затвор, фактически, является конденсатором, то в моменты переключения транзистора через него текут большие токи (кратковременно). Для того чтобы ограничить эти токи в затвор ставиться ограничивающий резистор.
— транзистор управляется малыми токами и если выход микроконтроллера, к которому подключен затвор, окажется в высокоимпедансном Z-состоянии полевик начнет открываться-закрываться непредсказуемо, вылавливая помехи. Для устранения такого поведения ножку микроконтроллера нужно «прижать» к земле резистором порядка 10кОм.
У полевого транзистора на фоне всех его положительных качеств есть недостаток. Платой за управление малым током является медлительность транзистора. ШИМ, конечно, он потянет, но на превышение допустимой частоты он Вам ответит перегревом.

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

Микросхема очень легко подключается к микроконтроллеру (просто ножка к ножке) имеет удобную разводку (вход напротив выхода) и не требует дополнительной обвязки. В результате такой удачной конструкции ULN2003 широко используется в радиолюбительской практике. Соответственно достать ее не составит труда.
- Даташит на сборку Дарлингтонов ULN2003

Если Вам нужно управлять устройствами переменного тока (чаще всего 220v), то тут все сложней, но не на много.

2.1 Подключение нагрузки при помощи реле.
Самым простым и, наверное, самым надежным есть подключение при помощи реле. Катушка реле, сама собой, является сильноточной нагрузкой, поэтому напрямую к микроконтроллеру ее не включишь. Реле можно подключить через транзистор полевой или биполярный или через туже ULN2003, если нужно несколько каналов.

Достоинства такого способа большой коммутируемый ток (зависит от выбранного реле), гальваническая развязка. Недостатки: ограниченная скорость/частота включения и механический износ деталей.
Что-то рекомендовать для применения не имеет смысла — реле много, выбирайте по нужным параметрам и цене.

2.2 Подключение нагрузки при помощи симистора (триака).
Если нужно управлять мощной нагрузкой переменного тока а особенно если нужно управлять мощностью выдаваемой на нагрузку (димеры), то Вам просто не обойтись без применения симистора (или триака). Симистор открывается коротким импульсом тока через управляющий электрод (причем как для отрицательной, так и для положительной полуволны напряжения). Закрывается симистор сам, в момент отсутствия напряжения на нем (при переходе напряжения через ноль). Вот тут начинаются сложности. Микроконтроллер должен контролировать момент перехода через ноль напряжения и в точно определенный момент подавать импульс для открытия симистора — это постоянная занятость контроллера. Еще одна сложность это отсутствие гальванической развязки у симистора. Приходится ее делать на отдельных элементах усложняя схему.


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

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

Симисторы довольно широко используются, а в некоторых областях просто незаменимы, поэтому достать их не составляет каких либо проблем. Очень часто в радиолюбительстве применяют симисторы типа BT138.

В предыдущих уроках были проведены способы вывода информации из микроконтроллера: подключение светодиода и ЖК индикатора. Но как, же вводить информацию в микроконтроллер? Существует множество вариантов и устройств для этого. Но пока что рассмотрим самый простой вариант, это обычная кнопка. Кнопки бывают двух видов: тактовые и фиксирующие. Тактовые кнопки работают по такому принципу: нажал – контакты замкнулись, отпустил – контакты разомкнулись. Следует учесть, что существуют тактовые кнопки, которые изначально замкнуты, а при нажатии размыкаются. Фиксирующие кнопки (их иногда называют: тумблеры, выключатели, переключатели) в отличии от тактовых фиксируют своё положение при нажатии, то есть: нажал – контакты замкнулись, еще раз нажал – контакты разомкнулись. В общем, с кнопками разобрались, теперь будем разбираться, как подключить эти кнопки к микроконтроллеру. А подключить на самом деле очень даже просто! Смотрим схему:

Возможно, вы спросите: Зачем резистор R1? А затем, что без резистора R1, когда кнопка S1 будет разомкнута, микроконтроллер на порте, к которому всё это подключено, будет видеть то логическую 1, то логический 0 тем самым будут производиться ложные срабатывания кнопки. Чтобы этого не происходило необходимо этот порт “подтягивать” сопротивлением к плюсу питания. Сопротивление резистора R1 может быть в интервале от 4,7кОм до 10кОм. С резистором получается такая картина: кнопка S1 нажата – на порте МК возникает логический 0, кнопка S1 не нажата – на порте МК возникает логическая 1 за счёт сопротивления R1. Конечно, нужно знать, что в некоторых AVR микроконтроллерах есть встроенные подтягивающие резисторы сопротивление порядка 50кОм, по умолчанию они отключены. В BASCOM-AVR эти резисторы можно включить, записав в необходимый порт логическую 1. Но я крайне не рекомендую использовать эти встроенные, гораздо надёжнее использовать внешние, как показано на схеме выше. Ну что, со схематическим решением разобрались, теперь будем разбираться программно. Для работы с кнопкой сначала нужно сконфигурировать порт микроконтроллера на вход, в BASCOM-AVR это делается вот так:
Config (порт микроконтроллера) = input
Пример:
Config PINB.3 = input

Обратите внимание, что для работы порта на вход, имя порта должно начинаться с PIN, а не с PORT как для конфигурации порта на выход!

После конфигурации порта на вход мы можем считать с него значение 1 или 0, в нашем случае 0 – кнопка нажата, 1 – кнопка не нажата. А проверить, что кнопка нажата, мы можем так:
If (порт микроконтроллера) = 0 then
(если кнопка нажата, то выполняем, действия описанные здесь)
End if
Можно и наоборот, проверить, не нажата ли кнопка:
If (порт микроконтроллера) = 1 then
(если кнопка не нажата, то выполняем, действия описанные здесь)
End if
Пример:
If PINB.3 = 0 then
PORTB.2 = 1 "если кнопка нажата, то включаем светодиод подключенный к PB.2
End if

Просто, не правда ли? Итак, теперь попробуем реализовать подключение кнопки к микроконтроллеру в “железе”. За основу возьмём микроконтроллер Attiny13 и для него сделанную немного ранее. Для того кто не делал отладочную плату, вот схема:

Алгоритм работы программы такой: кнопка S1 нажата – светодиод не горит, кнопка S1 не нажата – светодиод горит. А вот и сама программа на BASCOM-AVR:

$regfile = "attiny13.dat" $crystal = 8000000 Config Pinb.3 = Input Config Portb.2 = Output Do If Pinb.3 = 0 Then Portb.2 = 0 If Pinb.3 = 1 Then Portb.2 = 1 Loop End

Вот такая простая программа. Скомпилированная прошивка находится в архиве ниже. Фьюз биты можно не выставлять, так как в такой простой программе тактовая частота не особо важна. Для ленивых собирать в железе есть проект в нашем любимом , скачать можно в архиве ниже. Работа в схемы в симуляторе Proteus:

Скачать файлы для урока (проект в , исходник, прошивка) вы можете ниже

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
IC1 МК AVR 8-бит

ATtiny13

1 В блокнот
R1, R2 Резистор

4.7 кОм

2 В блокнот
R3 Резистор

150 Ом

1 В блокнот
HL1 Светодиод 1