авитолог цена услуг Обращайтесь к профессионалам. Основные ценности агентства QQROOZA - высокий уровень сервиса и максимальный результат. По нашему опыту, Лиды из Авито минимум вдвое дешевле, чем Лиды из Я. Директа.

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

Микроконтроллеры / Для начинающих /

Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2022 года составляет 80 000 рублей). Подробнее…

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

  1. Не рассчитаны на работу с высоким напряжением.
  2. Не рассчитаны на управление мощной нагрузкой (нагрузкой, которая потребляет большой ток).
  3. Не имеют гальванической развязки (иногда это важно даже при управлении слаботочной нагрузкой).

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

  1. Подключение нагрузки через оптрон
  2. Подключение нагрузки через транзистор.
  3. Подключение нагрузки через электромагнитное реле.
  4. Подключение нагрузки через твёрдотельное реле.

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

Подключение нагрузки через оптрон

Итак, один из наиболее простых способов — это подключение через оптрон (фотосемистор, фототиристор и т.п.).

Этот способ подходит для управления активной нагрузкой, такой как лампы накаливания, электронагреватели и т.п. Его преимуществами являются наличие гальванической развязки, относительная простота подключения и дешевизна оптронов. Серьёзный недостаток, пожалуй, один. Но довольно существенный — при управлении индуктивной нагрузкой, такой как электродвигатели, симистор/тиристор оптрона может самопроизвольно открыться (без команды от микроконтроллера). Так что для такого случая придётся принимать дополнительные меры, усложняющие устройство на микроконтроллере.

Также недостатком можно считать то, что для использования оптрона надо хоть немного разбираться в электронике.

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

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


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

Подключение нагрузки через транзистор

Тоже выполняется довольно просто. Стоимость обычных транзисторов тоже относительно невелика. Это плюс.

Минусы — можно управлять только нагрузкой постоянного тока (речь идёт о дешёвых биполярных транзисторах). Причём напряжение нагрузки тоже по возможности должно быть небольшим. Потому что высоковольтные транзисторы стоят уже не очень дёшево (а некоторые и очень дорого).

Ещё один недостаток — отсутствие гальванической развязки между нагрузкой и выходом микроконтроллера.

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

§ 38. Использование ШИМ. Подключение полевых транзисторов.

Киселев Роман, Июнь 2007
Статья обновлена 26 Мая 2014
Файлы к статье
В этой статье мы рассмотрим вопросы регулировки мощности различных устройств, подключенных через полевой транзистор к МК с помощью широтно-импульсной модуляции (ШИМ).

Сначала немного теории. ШИМ — это широко используемый в электронике способ регулировки мощности самых разнообразных устройств. Где он только не нашел еще применения! Способ заключается в кратковременном включении устройства (на доли миллисекунд), а затем его отключении на некоторый момент времени. Такой цикл включений-выключений непрерывно повторяется. Рассмотрим диаграмму ниже.

На диаграмме показана зависимость напряжения на нагрузке от времени. Закрашенное серым — это область, когда управляемый с помощью ШИМ прибор был включен. Выделяемую энергию можно считать пропорциональной площади этой области. Отношение периода повторения импульсов (T) к их длительности (AC) называется скважностью

. Величина, обратная скважности, называется
коэффициентом заполнения
. Судя по диаграмме, скважность наиболее велика в середине диаграммы. Значит, на этом участке на нагрузке выделялось наименьшее количество энергии в единицу времени. Надеюсь, с этим все понятно. Но возникает вопрос: а чем же так хороша ШИМ? Почему бы не использовать для регулировки мощности устройство, способное менять сопротивление (переменный резистор или транзистор)? Рассмотрим две, казалось бы, эквивалентные схемы.

Если менять сопротивление резистора, как показано на графике в центре, а на ключевой элемент правой схемы подавать ШИМ-последовательность, изображенную на диаграмме, то лампочки будут в любой момент времени светить одинаково (UL — напряжение на лампочке). Но в правой схеме энергия будет выделяться только в лампочке, а в левой — и в лампочке, и в резисторе (или транзисторе, которым можно с успехом его заменить). Резистор будет разогреваться, и, возможно, не хуже лампочки. Поэтому на вопрос, какая схема рациональнее, я думаю, любой ответит, что правая. Она называется импульсной, а левая схема — линейной. Когда работают с мощной сильноточной электроникой, всегда отдают предпочтение именно импульсным элементам и способам. Линейные применяются лишь там, где управляют малыми мощностями и слабыми токами. К тому же, в цифровой электронике, где существуют лишь два состояния — «включено» и «выключено», ШИМ реализовать намного легче. Чем мы и займемся в этой статье.

Для этого нам понадобится совсем немного — полевой транзистор, который и будет работать у нас в качестве ключа (в ключевом режиме). Полевой транзистор предпочтительней потому, что его затвор изолирован от силовой схемы и управление производится электрическим полем, а ток управления достигает микроампер. Это позволяет, используя один-два транзистора, управлять с их помощью нагрузкой огромной мощности (до десятков ампер и десятков-сотен вольт), не нагружая МК. Замечательные мощные и недорогие (10 — 30 руб) транзисторы производит фирма International Rectifier. Они имеют название IRFxxxx, где xxxx — трех или четырехзначный номер. Я использовал в своей макетной плате IRF7311. Подойдут также и другие подобные ему: IRF7341, IRF7103 IRF7301, IRF7343, IRF7401, IRF7403, IRF7413… Эти транзисторы управляются логическим уровнем +5 В, т. е. нашего МК будет достаточно, чтобы полностью их открыть. Они, в свою очередь, могут управлять напряжением от 20 В (все) до 50 В (IRF7103, IRF7341) и через них можно будет открывать и закрывать более мощные транзисторы с достаточно высоким управляющим напряжением, например, IRF530. Таким образом, возможно собрать очень мощный быстродействующий каскад на полевых транзисторах, способный с помощью ШИМ плавно менять мощность на нагрузке, коммутируя токи в десятки ампер. Учитывая также тот факт, что полевые транзисторы можно соединять параллельно (в отличие от биполярных), возможно получить еще более мощный каскад на сотни ампер.

Итак, предположим, Вы решили купить IRF7311. Если открыть его Datasheet (есть в файлах к статье), то выясняется следующее: это махонькая микросхема в корпусе SO-8, внутри которой располагаются два полевых транзистора с индуцированным каналом N-типа и встроенными диодами Шоттки. Это означает, что для открывания транзистора надо подать на затвор G (Gate — «ворота, шлюз») управляющее напряжение +5 В по отношению к истоку S (Source — «источник»). Тогда, если было приложено коммутируемое напряжение «плюсом» к стоку D (Drain — «сток») и «минусом» к истоку, то потечет достаточно сильный ток (до 6 А) от D к S. Наличие диода Шоттки позволяет, не боясь ЭДС самоиндукции, применять эти транзисторы для управления электромоторами. Ниже приведу цоколевку транзистора и его внешний вид:

Сверху на корпусе в углу должна быть точка, такая же, как на рисунке. Она стоит рядом с «ножкой» 1. Кстати, у всех микросхем «ножки» нумеруются начиная от подобной метки против часовой стрелки, если смотреть сверху — а то вдруг кто не знает… Если Вы купили полевой транзистор с P-каналом — ничего страшного. Тогда Вам придется подать «минус» на G (относительно S) для включения и поменять полярность нагрузки. То есть для любого полевого транзистора с индуцированным затвором нужно подавать ток против стрелочки, расположенной между затвором и диодом, а нагрузку подключать так, чтобы ток через нее тек в направлении, обратном встроенному диоду. Вот и все.

Прицепим теперь наш транзистор IRF7311 затвором к 21 «ножке» МК (PD7, OC2

) и истоком к «земле». К его стоку подключим «плюс» внешнего источника питания (до 20 В), а между его «минусом» и истоком подключим нагрузку, например, лампочку или электромоторчик постоянного тока.

Когда я все собрал, получилось вот так (хоть проводов и не видно, но лампочка подключена):

Осталось только разобраться, как МК реализует ШИМ и написать программу. Как уже говорилось ранее, в нашем МК есть 3 таймера, и все они могут работать в ШИМ-режиме. Таймер1 является самым навороченным и может выводить ШИМ сразу на двух выводах МК. Но мы не будем вдаваться в ненужные нам пока подробности и сложности и рассмотрим работу с ШИМ на примере таймера2.

Существуют два режима работы таймера в качестве ШИМ-модулятора. Это Fast PWM (быстрая ШИМ) и Phase correct PWM (ШИМ с фазовой коррекцией). Рассмотрим оба режима на следующих диаграммах:

Режим работы определяется содержимым битов WGM (Waveform Generation Mode) в регистре TCCR2. В Datasheetе написано, что для ШИМ с фазовой коррекцией нужно установить в единицу WGM20, а для быстрой ШИМ WGM20 и WGM21. Чем же отличаются эти режимы? В быстром режиме меняется состояние «ножки» OC2 в моменты совпадения счетного регистра TCNT2 и регистра сравнения OCR2 (зеленая стрелка), а также в момент сброса таймера (синяя стрелка).При этом серединка импульса (оранжевая) как бы смещается влево, меняется фаза импульса. В режиме фазовой коррекции такого явления не наблюдается. В этом режиме таймер, досчитав до максимума (до 255), начинает счет в другую сторону. В моменты совпадения регистров TCNT2 и OCR2 меняется состояние ножки OC2. При этом серединка импульса никуда не смещается. Этот режим имеет в два раза меньшую частоту, чем быстрый, но изготовитель утверждает, что он лучше подходит для управления электромоторами (скорее всего, шаговыми). Быстрый режим можно использовать в любых других случаях. Все остальные таймеры работают в ШИМ-режиме аналогично, таймер1 позволяет также менять период ШИМ произвольным образом, но, думаю, нам это ни к чему.

С теорией вроде бы теперь все понятно. Откроем IAR, создадим новый проект, наберем следующий код:
#include
«iom16.h» unsigned char pwm = 1; unsigned char inc = 1;
// inc = 0 — уменьшать, inc = 1 — увеличивать яркостьvoid
timer2_init() { OCR2 = 1;
//ШИМ почти выключена // Быстрая ШИМ, переключать OC2 (PD7), увеличение таймера каждые 64 такта
TCCR2 |= (1 void timer1_init() { OCR1A = 43200;
//Прерывание 32 раза в секунду
TCCR1A = 0;
// СТС режим, увеличение таймера каждые 8 тактов
TCCR1B |= (1 // Прерывание по совпадению А таймера1 TIMSK |= (1 //Разрешить прерывания }
void
io_init()
//Инициализация портов ввода-вывода
{ DDRD = (1 void main () { timer2_init(); timer1_init(); io_init(); while(1) { } }
// Заставляет лампу плавно загораться и гаснуть раз в 8 секунд#pragma
vector = TIMER1_COMPA_vect
__interrupt void
PWM_change() {
if
(inc == 1) {
if
(pwm // Увеличиваем яркость лампы, пока не достигнем максимума OCR2 = pwm; }
else
{ inc = 0; } }
else
{
if
(pwm > 1) { pwm—;
// Уменьшаем яркость лампы, пока не остигнем минимума
OCR2 = pwm; }
else
{ inc = 1; } } }

Функция timer2_init() используется нами для включения таймера в ШИМ-режиме. Таймер будет увеличивать счетный регистр каждые 64 такта, работать в режиме Fast PWM, меняя состояние ОС2 неинвертированным образом (биты СОМ20, СОМ21). Да, забыл сказать. Эти биты отвечают за поведение «ножки» ОС2, к которой подключен транзистор. Режим может быть инвертированным и неинвертированным. Чтобы это понять, посмотрите на диаграмму выше. Там приведен график состояния ОС2 (неинвертированный выход) и ОС2 с чертой (инвертированный выход). Если оба бита установлены в 1, то режим будет инвертированным. При работе с ШИМ и использовании транзисторов есть одна ловушка: не все транзисторы могут очень быстро менять свое состояние. Для одних могут потребоваться десятки-сотни наносекунд (как для нашего), для других — микросекунды и десятки микросекунд. Поэтому не советую, не изучив документацию на транзистор, использовать его на высокой частоте — большая нагрузка при высокой частоте ШИМ может его сжечь.

timer1_init() включает таймер2 и заставляет его делать 32 прерывания в секунду. Когда происходит прерывание, меняется OCR2 регистр и, соответственно, яркость лампы. Таким образом, лампа будет плавно загораться и плавно гаснуть раз в 8 секунд. Можно вместо таймера подключить кнопки и менять яркость при их нажатии. Но у нас для наглядности все будет происходить автоматически.

Сохраним этот файл в папке с проектом, добавим его в проект, установим опции проекта так, как это написано в статье 1, но можно оптимизацию теперь не выключать. Дело в том, что в первой статье мы формировали задержку с помощью цикла. Это делать с точки зрения программирования неграмотно и для увеличения скорости программы компилятор такие циклы выкидывает. Сейчас же мы используем встроенное в МК «железо», что не уменьшает производительность и скорость. Поэтому оптимизация ничего плохого не сделает.

Выбираем Release, нажимаем F7, программа компилируется. Запускаем AVReal, прошиваем МК. Кстати, возможно, у Вас возникал вопрос: а бесконечное ли число раз можно перепрошивать МК? Оказывается, нет. Всего лишь 10000 раз (как минимум). Поэтому, думаю, об этом совершенно не стоит беспокоиться. После того, как все это сделали, можно проверять устройство.

ВАЖНО!!!

Сначала нужно подать питание на МК, убедиться, что транзистор подсоединен к МК, и лишь затем подавать питание в цепь с лампой (мотором) и полевым транзистором. Иначе можете сжеть транзистор. Дело в том, что в выключенном состоянии «ножки» МК «болтаются в воздухе» — они ни к чему не подключены, и на них возникают наводки. Этих слабеньких наводок достаточно, чтобы частично открыть очень чувствительный полевой транзистор. Тогда его сопротивление между стоком и истоком упадет от нескольких МОм до нескольких Ом или долей Ом и через него потечет большой ток к лампе. Но транзистор не откроется полностью, т. к. для этого нужно подать на затвор не 1-3 В наводки, а стабильные 5 В, и его сопротивление будет намного больше минимального (для IRF7311 это 0,029 Ом). Это приведет к выделению на нем большого количества тепла, и он задымится, а может, и сгорит. Хотя, конечно, все зависит от мощности лампы или мотора.

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

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

© Киселев Роман Июнь 2007 https://www.kernelchip.ru

Подключение нагрузки через электромагнитное реле

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

Преимущества электромагнитного реле:

  1. Низкая цена.
  2. Можно управлять нагрузкой практически любой мощности и напряжения.
  3. Можно управлять нагрузкой как постоянного, так и переменного тока.
  4. Можно управлять как активной, так и индуктивной нагрузкой без каких-либо дополнительных ухищрений.
  5. Есть гальваническая развязка между выходом микроконтроллера и нагрузкой.
  6. Не требуется особых познаний в электронике, чтобы подобрать реле под нагрузку.

Недостатки:

  1. Необходимо принимать дополнительные меры для защиты выхода микроконтроллера.
  2. Относительно низкое быстродействие (реле переключается существенно медленнее, чем полупроводниковые приборы — иногда это важно).
  3. Большие габариты и вес. Хотя современные реле довольно миниатюрны, их размеры и вес всё-равно больше, чем размеры полупроводниковых приборов.
  4. Относительно низкий ресурс. Так как в реле имеются контакты, то ресурс реле ниже, чем у полупроводников. Из-за искрения контакты быстрее выходят из строя. Хотя, как показывает практика, качественные реле могут работать десятки лет без поломок.

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

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

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

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

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

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


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

Подключение нагрузки через твёрдотельное реле

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

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

Недостаток у твёрдотельного реле, пожалуй, один — это высокая цена. Твёрдотельное реле, как правило, стоит в 5…10 раз дороже обычного электромагнитного реле (то есть это сотни и тысячи рублей за штуку).

Кнопки

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

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

Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]