В Arduino просто эксплуатируется факт, что современные микроконтроллеры работают очень быстро, но, по мере усложнения программы, вы довольно скоро упретесь в порог этого быстродействия и не будете понимать, как из этой ситуации вывернуться. На Habrahabr.ru один критик платформы писал, что «вы можете всю жизнь формировать задержки с помощью delay-функций и не иметь простейшего представления, как работает таймер на микроконтроллере».
Впечатляют и размеры программ, получающихся после компилирования скетчей в среде Arduino IDE. Программа метеостанции с ЖК-дисплеем займет почти 20 килобайт — около 10 тыс. AVR-команд. Это непредставимо большая величина для таких устройств, и неудивительно, что при выполнении времязависимых операций они будут тормозить, — именно по этой причине при сборе данных, поступающих из последовательного порта, нам приходится с помощью задержек ожидать, пока они не соберутся в буфере. А если нам понадобится принять или передать пару десятков килобайт или мегабайт данных, что много больше объема буфера? Как угадать задержки так, чтобы гарантированно ничего не потерять?
Программа, состоящая из всего двух функций: digitalWrite (HIGH) и digitalWrite (LOW), переменно переключающих внешний вывод без искусственных задержек, при проверке на осциллографе покажет меандр с частотой 50Гц — это в контроллере, работающем на частоте 16 МГц! Простая замена этих функций на непосредственное управление портом, даже без выхода за пределы среды Arduino, ускоряет выполнение операций переключения порта примерно в 10 тыс. раз — с почти 2 миллисекунд до долей микросекунды.
Хорошей иллюстрацией к расточительности языка служит также пример пустой программы из двух строк, которую мы употребляли в качестве заглушки при программировании Xbee-модуля. Ее размер после компиляции составит целых 466 байтов — с помощью ассемблера в такой объем можно запросто втиснуть небольшую программку ориентирования по звездам для орбитального аппарата (реальный случай с одним программистом 60-х годов прошлого века из НАСА, который упаковал такую программу в остававшиеся свободными 256 байт памяти бортовой ЭВМ спутника).
Нет особых проблем применять к разработке программ для Arduino все возможности МК AVR, включая и прерывания, но при этом среда Arduino потеряет свою простоту и идеальную приспособленность к нуждам любителей. Придется ковыряться в англоязычных «даташитах», изучать регистры, прерывания и таймеры, вникать в тонкости программирования той или иной процедуры, и тогда вы быстро придете к выводу, что Arduino IDE вместе с языком Proccesing только мешают — придется переходить на обычный С или на ассемблер. К этому выводу в конце концов приходят все, кто старается двигаться дальше. Но не унывайте: Arduino дает отличный старт!
Международная цветная маркировка резисторовТаблицы номиналов резисторов и конденсаторов
Далее приведены множители для номиналов резисторов и конденсаторов (см. главу 5) с допуском 5 % (ряд Е24) и 10 % (ряд Е12, выделен жирным). Из этих значений формируются стандартные номиналы резисторов путем их умножения на степень десяти — например: 1,8 Ом, 18 Ом, 180 Ом, 1,8 кОм, 18 кОм, 180 кОм и т. д.
Резисторы с допуском 1 % (ряд Е96) имеют следующие множители для номиналов:
Стандартные обозначения...
... размеры и характеристики некоторых гальванических элементов
В табл. П2.1 представлены стандартные разновидности бытовых одноразовых электрохимических элементов питания. Элементы одного типоразмера взаимозаменяемы, а также могут быть заменены NiMH-аккумуляторами аналогичных типоразмеров (подробности описаны в главе 9). Щелочные элементы (с буквой L в обозначении или надписью «alkaline» на корпусе) приблизительно в три раза превышают по энергоемкости «обычные» солевые (последние часто маркируются надписью «GENERAL PURPOSE», то есть «общего назначения»). Кроме стандартных щелочных, существуют также элементы Super (Ultra) Alkaline, емкость которых еще приблизительно на треть-четверть выше.
* Буква L означает щелочной элемент, F — литий-железо-дисульфидный (Li/FeS2).
** Для щелочных элементов
Аккумуляторы NiMH тех же типоразмеров имеют близкую емкость (в среднем на 10–20 % ниже), за исключением типоразмера «Крона» — емкость аккумулятора в этом исполнении не превышает 200 мАч.
Кроме указанных в таблице элементов марганец-цинковой системы (к которым относятся и щелочные, и солевые батарейки), в последние годы появились литийжелезо-дисульфидные в типоразмерах АА и ААА, со стандартным номинальным напряжением питания 1,5 В (в отличие от обычных литий-марганцевых, имеющих напряжение 3–3,6 В). Они отличаются повышенной емкостью при больших токах разряда, и при токе порядка 0,5 А превышают щелочные примерно вдвое. В маломощных приборах при комнатной температуре в емкости выигрыша литиевые элементы почти не дают, но их высокая стоимость все равно оправдывается долгим сроком хранения (15 лет при комнатной температуре), а также намного большей стойкостью к низким температурам — так, фирма Energizer гарантирует работу своих FR6-элементов до -40 °C. Основная особенность литиевых, отличающая их от других типов, — они держат напряжение «до последнего», после чего оно быстро падает до нуля (см. разрядные кривые на рис. 9.3 в главе 9).
Для питания маломощных электронных устройств широко применяются «таблетки»: серебряно-оксидные (SR) или литиевые (CR) малогабаритные элементы. Литиевые имеют номинальное напряжение 3 В, «серебряные» — 1,55 В, причем размеры корпусов для тех и других отличаются, литиевые больше диаметром и обычно тоньше («монетки»). Емкость ходовых литиевых элементов (CR2032) достигает 225 мАч при токе разряда не более 0,2 мА, у «серебряных» она ниже, и для самых крупных (SR44) не превышает 200 мАч. В тех же габаритах, что и «серебряные», изредка можно встретить щелочные «таблетки» (LR) с близким номинальным напряжением (1,5 В), их емкость примерно на 30 % ниже, а в остальном они взаимозаменяемы. Система обозначений «таблеток» и «монеток» очень проста: первые две цифры обозначают диаметр, третья и четвертая — толщину (например, 2032 — «монетка» 20 мм в диаметре и толщиной 3,2 мм, 1225 — «таблетка» диаметром 12,5 мм и толщиной 2,5 мм).
В зависимости от режима работы выходных транзисторов усилители (не только УМЗЧ — усилители мощности звуковой частоты) делятся на классы. Различают классы А, В, АВ, С, D, G и Н, недавно был также предложен еще один класс — Т.
Классы D и Т относятся к дискретным (цифровым) усилителям, остальные — к линейным (аналоговым). Рассмотрим особенности режимов работы выходного каскада для распространенных классов А, В и АВ.
Действующее значение напряжения
Для того чтобы было более понятно рассмотрение важнейшего вопроса о КПД для различных классов, приведем сначала точное определение действующего значения напряжения переменного тока Uд (именно действующее значение определяет мощность на нагрузке и выходных транзисторах, а следовательно, и КПД):
(1)
Здесь Ua — амплитудное значение напряжения u(t), T — период (в данном случае мы рассматриваем полпериода от 0 до π). Для синусоидального напряжения u(t) = sin(t):
(2)
При выводе учитывается, что:
Соотношение (2) для действующего значения (без вывода) уже приводилось в главе 4.
Классы усилителей
Класс А (рис. П3.1) — это фактически режим, соответствующий усилительному каскаду с общим эмиттером (см. рис. 6.6).
Рис. П3.1. Режим работы усилителя класса А
В классе А на коллекторе транзистора устанавливается ровно половина питания. Если считать переходную характеристику каскада строго линейной (сплошная линия на рис. П3.1), то амплитуда выходного сигнала может достигать напряжения питания. Для оценки КПД в этом идеализированном случае обратим внимание, что незатемненная область на графике выходного напряжения соответствует мгновенным (в каждый момент времени) значениям напряжения на нагрузке, а затемненная — напряжениям на выходном транзисторе. Как мы видим из графика, эти области строго равны друг другу по площади, поэтому соответствующие интегралы (1) и действующие значения напряжения на нагрузке и на транзисторе будут равны, так что КПД будет равен ровно 50 % — половина затрачиваемой мощности выделяется на нагрузке, половина — на транзисторе. В реальности же переходная характеристика имеет S-образный вид (пунктир на рис. П3.1), поэтому во избежание искажений приходится ограничивать амплитуду сигнала, так что в действительности КПД может быть значительно меньше, да и реальный сигнал никогда не достигает максимальных амплитудных значений.