Программирование AVR Введение во встраиваемую электронику, часть 1 Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Введение во встраиваемую электронику, часть 1 Печать
Добавил(а) microsin   

Здесь приведен перевод замечательного на мой взгляд руководства Sparkfun [1], которое поможет начинающим радиолюбителям окунуться в занимательный мир микроконтроллеров (автор Nathan Seidle). Эта часть посвящена общим вопросам и источнику питания.

Эти лекции в целом посвящены людям, слегка знакомым с электроникой и интересующимися этим вопросом (например, второкурсникам факультетов Электротехники и/или Вычислительной техники), если они хотят что-нибудь узнать о диком мире Embedded Electronics (электроника встраиваемых микроконтроллерных систем, далее просто Embedded). Я предполагаю, что Вы знакомы с понятием электричества, и знаете, что такое радиодетали. Все остальное будет разъяснено как можно подробнее. Прошу также прощения за некоторый беспорядок в изложении. Когда это руководство было подготовлено и многие фотографии были сделаны, то использовались микроконтроллеры ATmega8, но сейчас мы переходим на более современный ATmega328. Вы найдете всю необходимую информацию об ATmega328 на страницах этих туториалов, однако картинки будут показывать ATmega8.

Прим. переводчика: ATmega8 по разводке портов ввода/вывода и типам корпусов взаимозаменяем с ATmega328. Кроме того, большинство программ для ATmega8 будут работать на ATmega328 даже без перекомпиляции (обратное верно не всегда).

[Итак, что такое Embedded, что такое микроконтроллер?]

Вы наверное знаете, что такое логический элемент OR (т. е. по-русски ИЛИ). Логический элемент OR производит операцию над двумя входами (входов может быть и больше), и по результату операции управляет выходом. Вы можете поиграться с такими логическими элементами, есть даже соответствующая микросхема DIP14, в корпусе которой находятся 4 таких элемента (например 74HC32 или наш аналог КР555ЛЛ1).

SN74HC32N 74HC32-pinout

Корпус DIP требует подачи питания на микросхему на специально предназначенные для этого выводы питания (к примеру, для 74HC32 нужно подать напряжение постоянного тока 5V минусом к ножке 7 и плюсом к ножке 14). Электрический ток течет через микросхему, и дает энергию, необходимую для её работы. Вы можете и не знать всех тонкостей внутреннего устройства микросхемы, однако понимаете, что если менять уровни сигнала на входах микросхемы, то состояние её выхода также поменяется (в соответствии с логической операцией OR, как в нашем примере). Логические сигналы (лог. 0, лог. 1) можно подавать на входы микросхемы, если замкнете их либо на землю (минус питания, этот сигнал также называют GND, ground), либо на + питания (эта шина также известна как VCC). Удобнее всего проводить такие эксперименты на платках breadboard, и возможно Вы это делали. Если же это что-то совсем чуждое Вам (либо слишком очевидное), то не судите строго! Мы просто пытаемся облегчить для Вас понимание предмета разговора.

Микроконтроллер является сердцем встраиваемых систем (Embedded). По входам и выходам он работает аналогично логическому элементу OR. С микроконтроллером Вы также имеете несколько входов, и также несколько выходов. Ко входам можно подключать разные датчики, кнопки. К выходам можно подключать светодиоды, транзисторные ключи, реле, биперы. На рисунке показан популярный представитель семейства AVR - микроконтроллер ATmega328P в корпусе DIP28. Такой микроконтроллер и и используется для различных радиолюбительских плат, например Arduino и metaboard.

ATmega328P-DIP

Однако самая сумасшедшая вещь с микроконтроллером состоит в том, что он умеет выполнять машинный код. Например, Вы можете очень просто сделать так, что будут проверяться входы на ножках микроконтроллера A и B. Состояние сигнала на этих входах будет управлять состоянием выходной ножки C. Так можно повторить логику работы элемента OR (если или А, или В равно 1, то на C выдать 1, иначе на C выдать 0):

if (A == 1 || B == 1)
{
   C = 1;
}
else
{
   C = 0;
}

Ого, да это же код на языке C! Вы можете таким способом закодировать любой алгоритм для любого приложения, скомпилировать код, загрузить его в память микроконтроллера, подать питание на микроконтроллер, и код начнет свою работу. Это очень просто! Микроконтроллеры используются сейчас во всех электронных приборах и устройствах типа микроволновки, пульта управления телевизором, сотового телефона, компьютерной мыши, принтера, и более 150 микроконтроллеров может быть встроено в один новый автомобиль! Например, микроконтроллер может следить за нажатием на педаль тормоза (BRAKES == 1) и также следить за отсутствием проскальзывания колес на дороге (LOCK_UP == 1). Когда эти условия происходят одновременно, то микроконтроллер включает тормоз (логическая операция AND). По такому принципу работает система ABS (anti-lock brake system).

Давным давно микроконтроллеры были однократно программируемые (OTP, One Time Programing), программу можно было записать в них только один раз. Т. е. Вы можете сделать только одну попытку написать код и протестировать его работу; если что-то пошло не так, то микроконтроллер можно было выбрасывать. Сегодня микроконтроллеры имеют на борту память FLASH, и программировать стало намного проще. Это означает, что Вы можете записывать, стирать и снова записывать память программ микроконтроллера множество (многие тысячи) раз. Я прошиваю микроконтроллеры несколько лет, и всегда портил его по какой-то другой причине, никогда не доходя до предела количества циклов перепрограммирования FLASH.

FLASH-микроконтроллеры сильно отличаются от компьютеров и памяти RAM. Компьютерам для работы нужны десятки и сотни ватт питающей мощности, и они состоят из множества компонентов, порой весьма сложных. Компьютеры в работе обычно сильно нагреваются, и требуют систем охлаждения. Компьютеру нужно довольно много времени, чтобы загрузиться и прийти в рабочее состояние. Микроконтроллеры могут запустить свой код за считанные миллисекунды после подачи питания, и они обычно в работе чуть теплые или совсем холодные. Если микроконтроллер значительно нагрелся, так что Вы это почувствовали, то скорее всего Вы его сожгли. Да, и еще микроконтроллер стоит порядка 2 долларов.

Теперь вернемся обратно к микросхеме логики с элементами OR типа 74HC32. Она имеет набор ножек, каждая из которых жестко закреплена за выбранной функцией - это либо вход, либо выход встроенных в микросхему элементов OR. Имеем 4 логических элемента в одном корпусе, 8 входов, 4 выхода, и 2 вывода для подключения питания/земли. Итого 14 ножек. Ни назначение ножек, ни внутреннюю логику микросхемы поменять нельзя, имеем то что имеем. Теперь давайте сравним с микроконтроллером. Да, тут тоже входы и выходы, но каждая ножка гибко конфигурируется, и может работать именно так, как Вы захотите - это может быть либо вход, либо выход. Поэтому ножки микроконтроллера называются порты GPIO (general purpose input/output). Эти ножки GPIO настраиваются программно кодом, который Вы записываете в память микроконтроллера. Это очень крутая возможность! Состояние каждой ножки может отслеживаться, и с ней можно предпринимать любые действия. Пример:

if (PORTC.2 == 1)
   //то делаем что-нибудь...

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

while(1)
{
   RB3 = 1;
   delay_ms(1000);
   RB3 = 0;
   delay_ms(1000);
}

Этот код переключает ножку порта из состояния 0 в 1 и обратно каждые 2 секунды. Выглядит необычно? Этот код считается примером "Hello World" для мира микроконтроллеров, с него новички начинают изучение embedded-программирования. Пример кажется тривиальным, но когда после долгих часов неудачных попыток Вы рвали на себе волосы, но в результате впервые увидели мигающий светодиод - это просто великолепно!

Подробнее про то, как работать с портами ввода/вывода GPIO микроконтроллера AVR см. [2].

[Какие бывают микроконтроллеры?]

Вот очень краткий обзор разновидностей микроконтроллеров (в реальном мире их намного больше):

PIC. Классические микроконтроллеры от компании Microchip. Очень простые, проверенные, но в них часто отсутствуют многие функции, которые другие производители встраивают в свои микроконтроллеры. С PIC-ами я получил большой опыт, и был в течение долгих лет их несгибаемым поклонником, но потом начал замечать их ограничения и преимущества микроконтроллеров других платформ!

Прим. автора: с мнением автора можно поспорить, конечно. Лично у меня архитектура PIC и его система команд вызывала стойкое отвращение после знакомства с такой замечательной платформой, как 8051.

AVR. Это основной конкурент для PICs. Может делать все, что делает PIC, но лучше, быстрее, дешевле и проще. Короче говоря, больше возможностей и меньше головной боли за те же деньги.

MSP. Очень неплохие микроконтроллеры от компании Texas Instruments (TI), но не столь популярные, как AVR или PIC. Однако они очень хороши для приложений, где важно низкое энергопотребление. Более подробно постараюсь написать об этом позже, но представьте себе, что можно создать полностью рабочую систему, которая будет работать от одной батарейки AA целых 5 лет. Токи потребления составляют порядка наноампер. Сумасшествие!

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

8051. '8051 core' было долгое время стандартом де-факто для 8-битных микроконтроллеров. Платформа была разработана Intel в далекие 1980-е, и получила систему команд, которую до сих пор очень любят преподавать в колледжах и ВУЗ-ах. 8051 основывается на архаической, но весьма проверенной временем системе команд. Как мне кажется, это очень старая технология, однако эти микросхемы были впоследствии значительно улучшены (теперь они тоже снабжены FLASH, имеют ADC, SPI и многое другое).

Прим. автора: с такой низкой оценкой ядра 8051 я не готов согласиться. Долгая жизнь платформы 8051 объясняется отличной сбалансированностью архитектуры, а также логичной и удобной системой CISC-команд ассемблера. К тому же имелась система приоритетов прерываний, и каждая команда ассемблера выполнялась за строго фиксированный, заранее известный интервал времени. Этим не могут похвастаться большинство популярных в настоящее время микроконтроллеров AVR и ARM, которые пришли на смену микроконтроллерам 8051. Система команд 8051 по синтаксису была очень похожа на команды 8080 / Z80. Поэтому на 8051 быстро были сделаны компиляторы с ассемблера, и разработчикам было довольно просто перейти с 8080 на 8051. Кроме того, система команд ассемблера 8051 идеально подходила для создания компилятора C, и поэтому компиляторы C генерировали очень эффективный (по размеру и быстродействию) код. Это позволяло на 4… 8 килобайтах памяти программ легко решать большой спектр задач.

68HC08/11. Еще один популярный набор инструкций, разработанный компанией Motorola. Весьма популярный микроконтроллер, изучить который в университете мне было довольно сложно, поэтому я его люблю ненавидеть =). Оригинальные 68HC08/11 часто испытывали недостаток во встроенной памяти RAM и FLASH.

Google может дать по каждой из этих платформ больше информации. Для себя я выбрал в качестве объекта изучения микроконтроллер AVR ATmega168. Почему?

• 20 MIPs (миллион выполненных инструкций в секунду!), этой мощности достаточно для разработки удивительных проектов.
• Этот AVR дешев: стоит всего лишь $2.
• Все что нужно, в ATmega168 уже встроено (UART, SPI, I2C, ADC, внутренний генератор, PWM, и т. д.).
• На 16K памяти программ можно выполнить любой проект начинающего программиста.
• Весь необходимый инструментарий для AVR бесплатен! При этом компиляторы C для многих других микроконтроллеров стоят денег.
• Аппаратура и программатор для прошивки стоят дешево (примерно $20).

Прим. переводчика: для некоторых макетных плат AVR даже не нужно покупать программатор - это Arduino, AVR-USB-MEGA16, AVR-USB162, metaboard и многие другие. В них прошит USB-загрузчик (USB bootloader). Достаточно подключить плату к компьютеру через USB, установить драйвер и нужное программное обеспечение (бесплатное!). После чего можно заливать программу в память микроконтроллера прямо через USB! С совсем небольшим набором железа (если брать плату AVR-USB-MEGA16, то она обойдется всего лишь в 500 рублей без учета пересылки), Вы можете быстро научиться мигать светодиодом. Затем можно продолжить обучение, и это очень увлекательный процесс.

Хотите попробовать уже сейчас? Как и с любой микросхемой, Вам нужно позаботиться об источнике питания. Почти всегда микроконтроллер имеет два вывода для подключения питания VCC (+ питания, чаще всего это +5V или +3.3V) и GND (земля, минус, общий провод).

Прим. переводчика: на корпусе микроконтроллера может быть несколько ножек для подключения VCC и несколько ножек для подключения GND, например как у микроконтроллера ATmega32A в корпусе TQFP44. Все эти выводы питания должны быть должным образом соединены параллельно и разведены на шины VCC и GND. Микроконтроллер ATmega168, который можно установить на плату metaboard или Arduino, имеет действительно только 2 вывода для подключения питания.

Меткой VCC обозначают положительный полюс питания. Если это для Вас новость - не волнуйтесь, привыкнете быстро. GND это сокращение от слова ground (земля). Все электрические токи в конце концов перетекают от положительного полюса источника питания на землю. Шина земли GND часто называется "общий провод", потому что уровни сигналов измеряются относительно него.

Есть тысячи различных микроконтроллеров, но напряжение питания 5V (пять вольт) является самым обычным для VCC. Напряжение 3.3V встречается также довольно часто, и иногда даже бывают микроконтроллеры, которые работают от 2.8V и 1.8V VCC. Теперь стоит позаботиться о питании - где взять источник питания на 5V и где найти шины +5V и GND, чтобы его подключить.

Прим. переводчика: для плат наподобие AVR-USB-MEGA16, AVR-USB162, metaboard искать источник питания не нужно - плата получает питание прямо через USB, и этого вполне достаточно для программирования и экспериментов. Впоследствии, если это будет необходимо, Вы можете подключить к плате любой другой внешний источник питания на 5V.

[Где найти эти 5V для питания?]

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

Вы уже знаете, что нужно подать 5V на микроконтроллер через его контакты VCC и GND. В розетке питающей сети есть напряжение 220V переменного тока, AC (для других стран это может отличаться). Аббревиатура AC расшифровывается как alternating current, и его напряжение очень опасно для микроконтроллеров, питающихся от 5V DC (direct current, постоянный ток). Поэтому для получения 5V DC из 220V AC нужен специальный адаптер (блок питания).

Примечание: если Вы перепутаете полярность подачи питания на Ваш микроконтроллер, то может произойти неприятная вещь - он выйдет из строя. Поэтому тщательно проверяйте полярность Вашего источника питания 5V, и правильно подключите +5V к ножкам VCC, и - к ножкам GND микроконтроллера. Если полярность все-таки перепутаете, и подключите +5V к GND и - на VCC, то скорее всего взрыва и дыма не будет, но микроконтроллер нагреется как сумасшедший, и Вы потеряете $2, потраченные на микроконтроллер. Я это делал, и много раз. Вам не советую.

Хорошо, нам нужны эти 5V DC. Время сделать простой регулятор напряжения!

Вы можете купить на рынке какой-нибудь небольшой, недорогой блочок питания, предназначенный для запитки роутера или зарядки сотового телефона. Есть даже такие, которые сразу выдают стабилизированное напряжение на 5V, тогда ничего делать не надо, можно воспользоваться этим блоком питания. Но часто напряжение другое - нестабилизированное 9V DC или 12V DC, тогда на его выход нужно подключить простейший стабилизатор, что будет разъяснено далее. Напряжение блока питания обычно написано на его наклейке, также можно проконсультироваться у продавца. Кроме того, Вы можете измерить напряжение блока питания с помощью мультиметра (если не знаете, что это такое, то см. руководство [3]). Имейте в виду, что даже если на блоке питания будет написано '5V', он не всегда будет выдавать именно 5V DC. Блок питания может выдавать переменное напряжение AC, или быть попросту неисправным. Поэтому лишняя проверка никогда не помешает.

Предположим, что Вы подключили мультиметр к блоку питания, и увидели, что на его выходе постоянное напряжение (DC) примерно 9V. Напрямую подключать такое напряжение к микроконтроллеру нельзя, он может выйти из строя! Кроме того, на выходе блока питания напряжение 9V может содержать помехи. Что это значит? Вам нужно получить стабилизированное напряжение DC (которое преобразовано от переменного). Дешевые простые блоки питания часто имеют очень простую схему, которая плохо сглаживает пульсации выходного напряжения, которые получаются после преобразования 220V AC в 9V DC. В результате на постоянное выходное напряжение может быть наложена переменная составляющая 100..500 mV (если в блоке питания отсутствует сглаживающий конденсатор, то пульсации будут от 0 до 9..12V!). Если подключить на выход блока питания осциллограф, то будут хорошо видны эти пульсации. Эти помехи могут внести хаос в работы Вашей системы, и 9V слишком большой уровень напряжения (нам нужно 5V!). Таким образом, на выход 9V блока питания нам нужно подключить стабилизатор, который дает чистое без помех напряжение 5V. Если это слишком непонятно звучит для Вас - расслабьтесь, тут ничего сложного. После того, как Вы создадите свою первую 5V систему, то будете удивленны, почему раньше это казалось сложным (а это очень просто, я Вам клянусь).

Чаще всего микросхему линейного регулятора напряжения для получения 5V DC называют LM7805. Я не знаю почему. Мне в реальности никогда не попадались компоненты, на которых было написано именно LM7805. Всегда на них что-то другое типа 'LV78X05' или 'x05', что вызывает головную боль. Просто знайте, что очень много производителей делают такие стабилизаторы, и каждый завод норовит назвать свою радиодеталь по-своему. Все, что Вам нужно - это стандартный регулятор напряжения, который дает 5V. Чтобы его найти, достаточно прогуглить '5V linear regulator'. Если Вы собираете свою схемку на плате типа breadboard, то хорошо подойдут стабилизаторы в корпусах TO-92 или TO-220 (см. картинку ниже).

LM7805

Итак, у Вас в руках микросхема стабилизатора и адаптер питания, который выдает 9V DC. Теперь надо соединить их вместе.

На картинке показана цоколевка LM7805. Для того, чтобы её лучше запомнить, я называю её 'IGO', что означает input, ground, output (соответственно вход, земля, выход). Если Вы сомневаетесь в расположении ножек Вашей микросхемы стабилизатора, всегда сверяйтесь с даташитом перед использованием! Вывод Input (или IN) предназначен для подачи + входного напряжения, которое должно быть выше 7V (у нас 9V, так что все в порядке). GND это земля, общий провод, к нему нужно подключить - от блока питания. Вывод Output (или OUT) является выходом, на котором будет сгенерировано стабильное напряжение 5V, которые мы и будем использовать для питания микроконтроллера.

Итак, на выходе Вашего блока питания 2 вывода, + и -, на них Вы измерили напряжение 9V. Назовем плюс '+' как 9V, минус '-' как GND. Их надо правильно подключить к LM7805 согласно схеме (см. ниже). В первую очередь нужно правильно подключить все провода GND. Это одно из правил, которое новички не соблюдают, в результате чего у них получается нерабочая система. Провод GND целесообразно подключить на специальную шину питания breadboard.

PowerSupply1

Делать регулятор напряжения мы будем постепенно, по шагам добавляя нужные компоненты. На показанной схеме приведена базовая конфигурация регулятора, которая позволяет получить напряжение 5V DC из 9V .. 12V.

Примечание к схеме: два провода земли, помеченные как GND, на схеме не показаны как соединенные вместе. Но подразумевается, что цепи (это зеленые линии) с одинаковыми именами всегда электрически соединены друг с другом. Эта схема проста, но часто схема может быть большой и сложной, и применение имен позволяет добиться наглядности схемы и значительно упростить её для восприятия. В этом случае все провода, помеченные как GND соединяются вместе. Т. е. ножка GND регулятора и провод GND адаптера соединены друг с другом.

Но почему мультиметр не показывает на выходе стабилизатора точно 5.00V? Электроника не всегда точна. Дешевые регуляторы могут иметь допуск +/-5%. Это означает, что на выходе стабилизатора Вы можете увидеть напряжение в диапазоне 4.75V .. 5.25V. На практике Вы должны измерить напряжение примерно 4.9V .. 5.1V, которое дает большинство заводских регуляторов. Конечно же, Вы можете потратить больше денег, и получить на выходе напряжение точнее, но для наших целей отлично подойдет напряжение 4.9V .. 5.1V (допустимо даже 4.75V .. 5.25V).

Теперь нужно позаботиться о фильтрации помех. Шум поступает через входную ножку регулятора от сетевого блока питания. Регулятор пытается с ним бороться, но все-таки часть шума пролезает со входа на выход. Ваш мультиметр может показать 5.08V, но это просто потому, что он усредняет напряжение, и показывает только это среднее значение. У Вас есть осциллограф? Если это так, то на выходе стабилизатора Вы увидите шум размахом около 200 mV.

Настал черед разобраться, что такое фильтрующие конденсаторы? Это конденсаторы (часто довольно большой емкости), которые помогают сгладить пульсации. Есть много аналогий, которые позволяют понять работу конденсатора, вот еще одна: конденсаторы работают как водяные баки.

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

Можно ли заметить влияние пульсаций на схему? К сожалению, далеко не всегда. Вы также можете запустить Вашу систему совсем без фильтрующих конденсаторов, но это не будет хорошей технической практикой. Это прописная истина и основное правило для электроники! Если про него забыть, и что-то откажется работать, то Вы можете долго гадать, что на самом деле происходит. Или это глючит код, или неправильно заданы интервалы времени шины, или испортился датчик... Слишком много неизвестных факторов сводят с ума. Так что рекомендую: просто поставьте пару конденсаторов.

 Если на шине питания VCC микроконтроллера будут слишком больший пульсации, например 500 mV или больше, это может привести к зависанию микроконтроллера. Это означает, что при напряжении к примеру 4.8V он запустится, но при 4.3V может попасть в неопределенное состояние. Когда питание вернется к уровню 4.8V (пульсации напряжения приводят к его изменению вверх и вниз), микроконтроллер может зависнуть и перестать работать. Такое часто случалось со старыми моделями микроконтроллеров (наподобие семейства 8051), современные микроконтроллеры благодаря усилиям производителей имеют специальные узлы защиты и сброса от плохого питания (brownout detector), но в общем работа микроконтроллера в условиях помех по питанию это очень и очень плохо.

Предположим, Ваш микроконтроллер работает в условиях помех по питанию, измеряя уровень напряжения на выходе датчика температуры - напряжение микроконтроллер AVR может измерять с помощью встроенного АЦП (ADC, Analog to Digital Converter). Датчик температуры имеет выход, на котором меняется аналоговое напряжение. Изменение этого напряжения на 100 mV соответствует изменению температуры на 1 градус Цельсия. Наличие пульсаций 500 mV будет влиять на результат чтения показаний датчика температуры. К примеру, 25oC (комнатная температура) будет соответствовать напряжению на выходе датчика 2500mV (или 2.5V). Если Ваш микроконтроллер попытается преобразовать в цифровую форму это напряжение (с помощью встроенного ADC), то он будет оценивать его по уровню опорного напряжения, полученного от источника питания 5V с пульсациями. Так что если уровень питания 5V скачет на 500 mV вверх и вниз, то уровень 2.5V может быть прочитан как напряжение, случайно меняющее уровень в диапазоне от примерно 2.0V (что соответствует 20oC) до примерно 3.0V (что соответствует 30oC). Очевидно, это плохая точность в измерении температуры. Для измерения уровня аналоговых сигналов особенно важно иметь чистое, без помех напряжение питания.

PowerSupply2

Конденсатор емкостью 100 uF (сто микрофарад) стоит на входе стабилизатора, и еще один емкостью 10 uF (десять микрофарад) стоит на выходе. Эти два конденсатора значительно снижают пульсации, в результате чего получается чистое, без помех напряжение питания 5V. В источниках питания Вы обычно будете использовать конденсаторы порядка 100 uF и 10 uF. При этом возле микроконтроллера нужно установить конденсатор 0.1 .. 0.22 uF, которые выглядят как маленькие конфетки. 

Конденсаторы не могут мгновенно зарядиться из-за наличия внутреннего сопротивления в источниках энергии. Большие емкости (10 uF и 100 uF) сохраняют в себе больше энергии, однако из-за этого заряжаются и разряжаются медленнее. Чем меньше емкость конденсатора, тем он быстрее отдает и получает энергию. Если по питанию наблюдаются пульсации большой длительности (порядка 10..100 мс), то помочь могут конденсаторы большой емкости (100 .. 1000 uF), они могут так долго поддерживать спады напряжения. Маленький конденсатор по питанию (порядка 0.1 uF) поможет подавить высокочастотный шум и короткие пульсации по питанию (длительность импульсов в диапазоне 1 .. 100 мкс). Таким образом конденсаторы 0.1uF, размещенные в цепи питания непосредственно возле микроконтроллера, помогут бороться с высокочастотными выбросами по питанию (которые, кстати, может генерировать сам микроконтроллер), в то время как конденсаторы на 100 uF и 10 uF будут использоваться на шинах питания возле стабилизатора.

Обратите внимание на схематический символ электролитического конденсатора (C1 и C2 на 100 и 10 мкФ соответственно). Нижняя обкладка изогнута, и возле верхней обкладки стоит +. Это говорит о том, что здесь применены электролитические конденсаторы, и подчеркивает, что они имеют полярность подключения. Пора поговорить о том, какие бывают конденсаторы (рассмотрим только те типы, которые используются чаще всего).

• Электролитические конденсаторы. Они имеют повышенную емкость, которая бывает от 1 мкФ до 1 фарада (обычно 10 ... 4700 мкФ), и достаточно дешевы. Полярность на них обозначена на корпусе: иногда возле положительного вывода стоит '+', и часто на цилиндрическом корпусе конденсатора возле отрицательного электрода идет белая (она может быть пунктирной, или с символами '-') полоса.

electrolytic-capacitors-axial-lead electrolytic-capacitors-radial-lead

• Керамические конденсаторы. Это самые дешевые конденсаторы, емкость у них ограничивается значениями около 2 мкФ (минимальная емкость может быть десятки и даже единицы пикофарад). Для фильтрации питания чаще всего применяют номиналы 0.1 и 0.22 мкФ. Керамические конденсаторы не имеют полярности, поэтому можете их подключать как хотите. Поскольку керамические конденсаторы не бывают большой емкости, то они для фильтрации питания используются вместе с электролитическими конденсаторами.

generic-ceramic-capacitors 150-x-0.1uF-ceramic-disc-capacitors ceramic-capacitors SMD-Multilayer Ceramic_Capacitor_MLCC_X7R_X5R_C0G_Y5V_

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

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

leaky-caps

Такое может произойти не только из-за перепутанной полярности, но и из-за превышения допустимого напряжения для электролитического конденсатора. Донышко конденсатора слева слегка вспучилось. Это происходит, когда внутри корпуса конденсатора испарился электролит, и повышенное давление заставило корпус вздуться. Конденсатор справа имеет и вовсе поврежденную крышку; давление внутри было так велико, что разорвало верхнюю часть корпуса. Крестообразный надрез на донышке сделан специально для индикации проблем с конденсатором. Благодаря этому конденсатор не взрывается оглушительно и не разбрызгивает свое содержимое в разные стороны (как кстати бывало иногда с электролитическими конденсаторами старого типа), ему вместо этого немного "сносит крышу" =).

Фотография конденсаторов была сделана со старого компьютера компании Gateway (производства 1999 года). Gateway здесь использовала конденсаторы, работающие не предельном уровне напряжения 1000 uF 16V. Напряжение 16V означает, что гарантирована работа конденсаторов не выше этого напряжения. Хотя эти конденсаторы работали на сглаживании пульсаций напряжения 12V, но они все равно вышли из строя - видимо где-то произошел сбой. Gateway попыталась сэкономить $0.50 путем использования конденсаторов, рабочее напряжение которых было слишком близко к максимально допустимому. Но производство конденсаторов не идеально! В процессе производства количество конденсаторов и их допуски похожи на кривую нормального распределения (колоколообразная кривая). Большинство произведенных конденсаторов на 16V может выдержать 16V. Некоторые могут выдержать 18V, и даже 22V! Но допуски на напряжения у кривой распространяются по обе стороны от максимума; некоторое малое количество конденсаторов, рассчитанных на 16V, выйдут из строя при напряжении 10V, некоторые и на 8V. Когда при напряжении 12V Вы пытаетесь сгладить большие пульсации конденсаторами на 16V, то из-за большого тока и нагрева вероятность их выхода из строя еще больше возрастет. По этой причине многие инженеры говорят о "снижении нормы" у конденсаторов. Если у Вас напряжение питания 5V, то и не думайте использовать для сглаживания пульсаций конденсаторами на 5V! Хорошим рабочим правилом будет "снизить норму" конденсатора на 50%. Таким образом, следует использовать 12V конденсатор для 6V, и 24V конденсатор для 12V, и т. п.

Угадайте, что произойдет, когда электролитический конденсатор выйдет из строя, как на фото выше? Да собственно ничего не произойдет. Схема будет скорее всего продолжать работать, как ни в чем ни бывало. В большинстве такой отказ приведет к снижению (или иногда почти полному пропаданию) емкости конденсатора но короткого замыкания не произойдет, и поэтому схема будет продолжать работу. Настоящее веселье начинается, когда отказ настолько плох, что внутри конденсатора образуется короткое замыкание - могут получиться забавные хлопья из фольги вокруг взорвавшегося конденсатора! Если отказ конденсатора произойдет в компьютере, то повышение шума по питанию увеличит вероятность сбоев программного обеспечения.

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

Для фильтрующих конденсаторов вашего блока питания я рекомендую использовать конденсатор 100 uF на 25V (100uF/25V) для входа стабилизатора и конденсатор 10uF/10V для выхода стабилизатора. Здесь соблюдено инженерное правило защитного 'понижения нормы напряжения на 50%', что является хорошей практикой для надежности. Следуя этой идее 100uF/25V хорошо подойдет для фильтрации постоянного напряжения до 12.5V, и при этом можно не беспокоиться, что наружу вытолкнется электролит. Конечно, необязательно в точности соблюдать это правило, однако не сделайте наоборот - не используйте конденсатор на 5V там, где напряжение 9V.

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

PowerSupply3

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

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

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

PowerSupply4

На этой схеме показан диод (имеет метку D1). Диод позволяет току течь только в одном направлении (в направлении стрелки) и будет блокировать ток в обратном направлении. То есть если Вы случайно подключите 9V провода от сетевого адаптера наоборот, то ток через диод не потечет, и система будет защищена от повреждения. Может быть это излишество? Совсем немного. Однако мы всегда разрабатываем наши макетные платы со встроенным диодом, потому что заранее не знаем, какой источник питания подключит к плате наш клиент. Если он вдруг ошибется, и подключит адаптер с неправильной полярностью, то по крайней мере ничего необратимого не произойдет.

Когда применяете диод для защиты питания, то нужно иметь в виду следующее:

• Протекающий через диод ток всегда создает на нем некоторое падение напряжения, оно может быть примерно в диапазоне от 0.2V (если диод Шоттки) до 0.7V (если это обычный кремниевый диод). Величина этого падения напряжения зависит от типа диода и незначительно от величины протекающего через диод тока. Так что имейте в виду, что 9V от сетевого адаптера на выходе диода может превратиться в 8.5V.

• Диоды имеют предел максимального тока, который они способны через себя пропустить. Превышение его может повредить диод. Например, если Вы пропустите ток 1A (1 ампер) через диод, рассчитанный на 0.1A (100 миллиампер), то диод быстро перегреется и выйдет из строя. Для защиты от переполюсовки рекомендую использовать диод 1N4001, рассчитанный на 1A. Это очень дешевый диод, и он широко распространен.

Помните, что диод имеет полярность (у диода есть анод и катод), поэтому его нужно правильно подключить в схему. Большинство диодов в пластмассовом корпусе (как диод 1N4001) имеют возле катода белую полоску. Что такое катод? Прогуглите. Все, что Вам нужно помнить, чтобы правильно подключить диод - палочка на обозначении диода (на нашей схеме она справа) соответствует катоду и белой полосе на его корпусе. Если это трудно запомнить, то вспомните, что стрелочка на схеме соответствует аноду, и не помеченному белой меткой выводу диода.

Так что если Вы решили установить этот диод "защиты от переполюсовки", то провод +9V от сетевого адаптера должен быть подключен к выводу диода 1N4001, который без белой метки (к аноду диода). Другой конец диода, возле которого на корпусе есть белая метка в виде полоски (катод) должен быть подключен к среднему выводу выключателя, а задний вывод выключателя ко входу стабилизатора (см. схему). Передвиньте движок выключателя в положении включено, и Вы должны с помощью тестера наблюдать появление на выходе стабилизатора напряжения 5V. Хорошей идеей будет добавить индикацию наличия на выходе стабилизатора напряжения. Для этого будем использовать индикационный светодиод (LED, сокращение от Light Emitting Diode).

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

PowerSupply5

Если Вы подключите LED так, как показано на этой схеме, то он засветится очень ярко, перегреется и сгорит. Это потому, что протекающий через светодиод ток (от анода, по схеме вверху, до катода, по схеме внизу) ничем не ограничивается! Ток может составить около 1A, что очень быстро выведет светодиод из строя. Чтобы ограничить ток через светодиод, нужно поставить последовательно резистор, и вспомнить закон Ома (ага, книжные черви в этом месте приободрились =). Кроме того, нужно знать, что на светодиоде падает напряжение примерно 1.5V:

V = IR (это закон Ома)

Если напряжение, от которого получает питание светодиод, равно 5V (как в нашем случае), то на резисторе будет падение напряжения UR = 5 - 1.5 = 3.5V. Давайте выберем ток через светодиод 10 mA (0.01A), этого вполне достаточно для свечения LED. Итак, при падении на резисторе напряжения 3.5V ток через него должен быть 0.01A (10 mA). Следовательно:

UR = 3.5V = 0.01 * R

или

R = 3.5 / 0.01 = 350 Ом

В нашем случае можно выбрать любой резистор из стандартного ряда сопротивлений 330, 360, 390, 430 или 470 Ом, и все будет отлично работать.

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

PowerSupply6

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

[Несколько замечаний по сборке схемы блока питания]

На фотографии показан пример сборки конструкции блока питания на макетной плате типа breadboard.

breadboard-PowerSupply-mont

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

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

На фото Вы можете также увидеть гнездо для цилиндрического джека, которое подключено к выключателю, и от него идет провод на микросхему стабилизатора напряжения. Рядом также установлен светодиод LED и токоограничительный резистор для него. Когда выключатель устанавливают в положение ON (включено), то желтый светодиод загорится.

Гнездо для джека (в правом верхнем углу фотографии) применено потому, что мой 9V сетевой блок питания имел на выходе джек питания. У этого джека две контактные поверхности, внешняя и внутренняя. Внешний металлический контакт джека подключен к отрицательному проводу питания (этот провод должен приходить на шину GND схемы), а внутренний металлический контакт подключен к плюсу 9V. Эти два металлических контакта изолированы друг от друга. Использование джека очень удобно - Вы можете использовать сетевой адаптер и для других целей, быстро подключая джек в нужное место. Такое решение также хорошо подходит для транспортировки макета и сетевого адаптера.

Диод защиты от переполюсовки я не стал устанавливать, потому что убедился заранее в полярности напряжения на выходе джека, и перепутать полярность при подключении джека невозможно (внутренняя поверхность джека всегда +, внешняя всегда -). Если Вы хотите поступить подобным образом, но не уверены в полярности напряжения на выходе Вашего сетевого адаптера, проверьте это с помощью мультиметра [3].

Следующая часть: Введение во встраиваемую электронику, часть 2 (как программировать микроконтроллер).

[Ссылки]

1. Beginning Embedded Electronics site:sparkfun.com.
2. Доступ к портам I/O AVR на языке C (GCC, WinAVR).
3. Руководство: как пользоваться мультиметром.

 

Добавить комментарий


Защитный код
Обновить

Top of Page