Закон Ома
Все знают закон Ома, но не все умеют им пользоваться. Применительно к источникам питания и потребителям он работает так: потребитель берёт такой ток, какой ему нужен для работы, он называется ток потребления:
- Сервопривод: ~500 мА во время движения
- Реле: ~60 мА при активации
- Датчики-модули ~1-10 мА
- Мотор: ~500 мА
- Плата Arduino: ~20 мА
- Дисплеи: ~40 мА
Источник питания в свою очередь имеет такой параметр как максимальный ток, который он может отдать без повреждений и сильного изменения характеристик (напряжение, пульсации). Например:
- USB порт: 500 мА
- Сетевой 5V адаптер из набора: 2000 мА
- Литиевый аккумулятор: ~5 A
- Алкалиновая батарейка: ~1 А
Суммарный ток потребления нескольких потребителей должен быть меньше, чем максимальный ток источника питания, иначе источнику питания будет “тяжело” и он может выйти из строя. Также это означает, что можно спокойно подключать слабенький датчик хоть к 100 Амперному источнику питания, он возьмёт столько, сколько ему надо. Остальное останется “с запасом”.
Схема
Реализовать описанное поведение можно разными способами. Кто-то скажет, что достаточно пары резисторов и одного MOSFET’а, затвором которого управляет Ардуино. Такой вариант не всегда окажется рабочим: может получиться так, что транзистор не закроется полностью и продолжит питать Ардуино. Более надёжной является схема, в которой полевой транзистор управляется биполярным. Пример такого ключа и его подключение к Ардуино представлены ниже:
Здесь P-канальный MOSFET Q1 открывается либо кнопкой, либо биполярным NPN транзистором Q2. Последний открывается при подаче на базу логической единицы через токоограничивающий резистор R2. Подтягивающий резистор R1 нужен для удержания полевого транзистора в закрытом состоянии при отсутствии управляющего сигнала.
Выбор в пользу P-канального полевого транзистора обусловлен тем, что он позволяет отключать от нагрузки линию Vcc. N-канальный транзистор отсоединяет землю — это не лучший вариант для схем управления питанием.
О выборе компонентов и номиналов. Полевой транзистор следует выбирать с малым сопротивлением канала (параметр Rds)
Также обратите внимание на его предельные значения напряжения сток-исток (Vds) и тока (Id), они должны соответствовать требованиям устройства. У меня из P-канальных под рукой только CJ2301 в smd корпусе, он рассчитан на напряжение 20В и ток до 2.3А, сопротивление канала составляет 0.09Ом – этого вполне достаточно для многих устройств на Ардуино
В качестве Q2 подойдёт, пожалуй, любой биполярный транзистор малой мощности. Например, популярный 2N3904. Что касается номиналов резисторов, то я использую порядка 50кОм.
Пример работы
В качестве примера повторим первый эксперимент «Маячок» из набора Матрёшка. На плате уже есть встроенный пользовательский светодиод , подключенный к пину микроконтроллера.
- blink.ino
-
void setup() { // Устанавливаем пин светодиода в режим выхода. // Используем определение LED_BUILTIN, // которое содержит в себе пин светодиода pinMode(LED_BUILTIN, OUTPUT); } void loop() { // Включаем светодиод digitalWrite(LED_BUILTIN, HIGH); // Ждём пол секунды delay(500); // Выключаем светодиод digitalWrite(LED_BUILTIN, LOW); // Ждём пол секунды delay(1000); }
После загрузки программы встроенный светодиод начнёт мигать раз в секунду.
Это значит, всё получилось, и можно смело переходить к другим экспериментам на Ардуино.
Где это может пригодиться
Описанные способы управления питанием отлично подойдут для устройств, работающих на батарейках или аккумуляторах, если вы хотите использовать в них плату Ардуино, а не отдельный микроконтроллер. И даже в случае использования микроконтроллера это всё ещё хорошая альтернатива спящему режиму, поскольку отключаются сразу все компоненты устройства.
Ещё один вариант использования приведённых схем — это включение питания при удержании кнопки нажатой: достаточно добавить задержку на пару секунд в начало функции setup. Если за это время кнопка не будет отпущена, то питание будет удерживаться уже самой Ардуинкой — хороший приём для избежания случайных включений устройства.
Элементы платы
Микроконтроллер ATmega328P
Сердцем платформы Arduino Uno является 8-битный микроконтроллер фирмы Microchip — ATmega328P на архитектуре AVR с тактовой частотой 16 МГц.
Контроллер обладает тремя видами памяти:
- 32 КБ Flash-памяти, из которых 0,5 КБ используются загрузчиком, который позволяет прошивать Uno с обычного компьютера через USB. Flash-память постоянна и её предназначение — хранение программ и сопутствующих статичных ресурсов.
- 2 КБ RAM-памяти, которые предназначены для хранения временных данных, например переменных программы. По сути, это оперативная память платформы. RAM-память энергозависимая, при выключении питания все данные сотрутся.
- 1 КБ энергонезависимой EEPROM-памяти для долговременного хранения данных, которые не стираются при выключении контроллера. По своему назначению это аналог жёсткого диска для Uno.
Микроконтроллер ATmega16U2
Микроконтроллер не содержит USB интерфейса, поэтому для прошивки и коммуникации с ПК на плате присутствует дополнительный микроконтроллер ATmega16U2 с прошивкой USB-UART преобразователя. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт.
общается с ПК через по интерфейсу UART используя сигналы и , которые параллельно выведены на контакты и платы Uno. Во время прошивки и отладки программы, не используйте эти пины в своём проекте.
Светодиодная индикация
Имя светодиода | Назначение |
---|---|
ON | Индикатор питания платформы. |
L | Пользовательский светодиод на пине микроконтроллера. Используйте определение для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается. |
RX и TX | Мигают при прошивке и обмене данными между Uno и компьютером. А также при использовании пинов и . |
Порт USB Type-B
Разъём USB Type-B предназначен для прошивки и питания платформы Arduino. Для подключения к ПК понадобится кабель USB (A — B).
Понижающий регулятор 5V
Понижающий линейный преобразователь NCP1117ST50T3G обеспечивает питание микроконтроллера и другой логики платы при подключении питания через или пин Vin. Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 В с максимальным выходным током 1 А.
Понижающий регулятор 3V3
Понижающий линейный преобразователь LP2985-33DBVR обеспечивает напряжение на пине . Регулятор принимает входное напряжение от линии 5 вольт и выдаёт напряжение 3,3 В с максимальным выходным током 150 мА.
ICSP-разъём ATmega328P
ICSP-разъём выполняет две полезные функции:
- Используется для передачи сигнальных пинов интерфейса SPI при подключении Arduino Shield’ов или других плат расширения. Линии ICSP-разъёма также продублированы на цифровых пинах , , и .
- Предназначен для загрузки прошивки в микроконтроллер через внешний программатор. Одна из таких прошивок — Bootloader для Arduino Uno, который позволяет .
А подробности распиновки .
Снижение тактовой частоты.
Потребление любого микроконтроллера сильно зависит от частоты его тактирования, и снижая ее, мы можем добиться значительного снижения энергопотребления. В микроконтроллерах AVR имеется возможность программного изменения предделителя частоты тактирования. А для простоты работы с ним мы будем использовать специальную библиотеку Prescaler.h, скачать которую можно по адресу https://github.com/fschaefer/Prescaler:
#include “Prescaler.h”
Изменение предделителя тактирования производится с помощью функции setClockPrescaler(); имеющей один аргумент, отвечающий за величину предделителя. Существует 9 констант в качестве аргументов для данной функции:
setClockPrescaler(CLOCK_PRESCALER_1); setClockPrescaler(CLOCK_PRESCALER_2); setClockPrescaler(CLOCK_PRESCALER_4); setClockPrescaler(CLOCK_PRESCALER_8); setClockPrescaler(CLOCK_PRESCALER_16); setClockPrescaler(CLOCK_PRESCALER_32); setClockPrescaler(CLOCK_PRESCALER_64); setClockPrescaler(CLOCK_PRESCALER_128); setClockPrescaler(CLOCK_PRESCALER_256);
В зависимости от аргумента, данная функция снижает тактовую частоту в несколько раз (CLOCK_PRESCALER_16 означает что базовая тактовая частота микроконтроллера будет снижена в 16 раз).
Перед использованием данной функции, необходимо отметить, что правильность работы всей периферии сильно зависит от тактовой частоты, и при ее снижении – большинство функций микроконтроллера, завязанные на времени, будут работать неправильно (таймеры, PWM, USART, I2C и т.д.). Кроме того неправильно будут работать стандартные функции millis(); и delay();. Но данная библиотека предоставляет замену этим функциям в виде функций trueMillis(); и trueDelay();.
Рассмотрим вариант применения снижения тактовой частоты на примере работы с Serial интерфейсом:
#include "prescaler.h" int i = 0; void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600); setClockPrescaler(CLOCK_PRESCALER_256); //Понижаем тактовую частоту в 256 раз } void loop() { digitalWrite(LED_BUILTIN, HIGH); //включаем светодиод trueDelay(200); //ждем 200 мс с учетом пониженной частоты digitalWrite(LED_BUILTIN, LOW); //выключаем светодиод trueDelay(1000); //ждем 1 секунду с учетом пониженной частоты i++; if (i == 5) { //каждый 5 цикл отправляем данные в Serial порт setClockPrescaler(CLOCK_PRESCALER_1); //Повышаем частоту тактирования до стандартной Serial.println("I'm alive!"); //Отправляем данные delay(15); //Ждем пока данные отправятся setClockPrescaler(CLOCK_PRESCALER_256); //Обратно снижаем частоту тактирования i = 0; } }
Как видно, перед тем как использовать Serial порт, необходимо сначала повысить частоту тактирования до стандартной, и только потом отправлять данные. То же самое касается и приема данных – необходимо позаботиться о возвращении стандартной частоты тактирования еще до того, как данные будут отправлены на наш микроконтроллер, иначе они будут приняты неверно. То же касается и остальной периферии, завязанной на временных промежутках.
Таким образом, мы рассмотрели 4 различных способа снижения энергопотребления микроконтроллером во время его работы. Пробуйте комбинировать данные способы в своих проектах для достижения максимальной эффективности ваших устройств. Удачи!
Сборка двигателя
Транзистор – это электрический выключатель, который активирует цифровые контакты или пины микропроцессора Aрдуино. В этом примере он управляется выводом 9, таким же образом, как и светодиод, за исключением того, что транзистор включает и выключает схему приспособления.
Эта схема работает, но она по-прежнему создает обратный ток из-за импульса прибора, по мере его замедления, или из-за того, что двигатель повернется другой стороной. Если генерируется обратный ток, он перемещается с отрицательной стороны и пытается найти простой путь к земле.
Маршрут проходит через транзистор или платформу, описанную выше. Невозможно точно вычислить, что произойдет, поэтому необходимо обеспечить способ контроля избыточного тока.
Чтобы обеспечить полную безопасность устройства, устанавливается диод через прибор. Диод обращен к источнику напряжения, это означает, что напряжение подается через устройство. Если ток генерируется в противоположном направлении, он блокируется от поступления в микропроцессор.
Другой вариант схемы
Рассмотрим еще один вариант схемы включения питания. От предыдущего он отличается тем, что кнопка подключена к выводу Ардуино и её можно опрашивать. Таким образом, включение может осуществляться одной из кнопок, уже используемых в устройстве.
Здесь вывод D3, подключенный к кнопке, «изолирован» от полевого транзистора биполярным транзистором Q3 и не мешает ему закрываться при отсутствии управляющего сигнала. При нажатии на кнопку, во-первых, откроется транзистор Q3 и затем Q1 (если он ещё не открыт), т.е. будет включено питание устройства; во-вторых, сигнал на входе D3 изменится от LOW к HIGH, что может быть зафиксировано при его опросе.
Резистор R4 между кнопкой и линией питания необязателен. Но если вывод D3 по ошибке будет настроен как OUTPUT и на нём будет значение LOW, то при нажатии на кнопку через него потечет ток и он не будет ничем ограничен. Напоминаю, что предельно допустимый ток через вывод AVR микроконтроллеров составляет 40мА. И его превышение приведёт к повреждению микроконтроллера. Резистор между кнопкой и Ардуино поможет избежать этого.
Логика скетча для данной схемы не отличается от предыдущего. Высокий уровень на выводе D2 удерживает полевой транзистор открытым. А с кнопкой работаем как обычно: можем опрашивать её в скетче или использовать для генерации прерываний.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); #define PIN_POWERON 2 #define PIN_BTN 3 void setup() { pinMode(PIN_POWERON, OUTPUT); digitalWrite(PIN_POWERON, HIGH); lcd.begin(); lcd.print("Push to shutdown"); while (digitalRead(PIN_BTN) == HIGH); while (digitalRead(PIN_BTN) == LOW); lcd.clear(); lcd.print("Shutdown after"); } void loop() { unsigned long tm; for (uint8_t i = 5; i > ; i--) { lcd.setCursor(7, 1); lcd.print(i); tm = millis(); while (millis() - tm < 1000) { if (digitalRead(PIN_BTN) == HIGH) return; } } digitalWrite(PIN_POWERON, LOW); }
Использование библиотеки Narcoleptic
Эта библиотека позволяет вводить микроконтроллер в режим сна на определенное время с помощью одной функции – Narcoleptic.delay();. Аргументом данной функции является время в миллисекундах – используется точно так же как и стандартная функция delay();.
Рассмотрим ту же программу что и ранее, но с использованием данной библиотеки:
#include <Narcoleptic.h> void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, LOW); Narcoleptic.delay(1000); digitalWrite(LED_BUILTIN, HIGH); Narcoleptic.delay(120); }
Как видно, код стал значительно проще, и в случае, когда нужны простые паузы между полезными действиями – эта библиотека является самым простым и удобным решением.
Из чего состоит плата Arduino?
Выпускаются различные модели Arduino. Каждая из них «заточена» для различных задач. Некоторые платы принципиально отличаются от приведенной на рисунке ниже. Но большинство из них имеют следующие одинаковые узлы:
Разъем питания (USB / разъем для адаптера)
Каждая плата Arduino должна подключаться к источнику питания. Arduino Uno может запитываться от USB кабеля от вашего персонального компьютера Или от отдельного адаптера, который подключается к предусмотренному на плате разъему. На рисунке соединение через USB отмечено (1), а разъем для внешнего источника питания — (2).
USB также используется для загрузки вашей программы (скетча) на плату.
Примечание! Не используйте источник питания с напряжением на выходе более 20 вольт. Это может привести к тому, что ваша плата перегорит. Рекомендуемое напряжение питания для Arduino — от 6 до 12 вольт.
Разъемы (пины) (5V, 3.3V, GND, Analog, Digital, PWM, AREF)
Пины на вашей плате Arduino — это предусмотренные разъемы, к которым вы будете подключать провода от периферийных устройств (очень часто для прототипов используют монтажные платы (макетная плата, макетка) и провода с коннекторами на концах). На Arduino несколько типов пинов, каждый из которых подписан в соответствии с выполняемой функцией.
- GND (3): сокращение от ‘Ground’ — ‘Земля’. На платах несколько пинов GND, каждый из которых может использоваться для заземления вашей электрической цепи.
- 5V (4) и 3.3V (5): как вы могли уже догадаться — питы, которые на выходе обеспечивают питание 5 вольт и 3.3 вольт соответственно. Большинство компонентов, которые подключаются к Arduino, благополучно питаются именно от 5 или 3.3 вольт.
- Analog (6): на участке, который подписан ‘Analog In’ (от A0 до A5 на Arduino Uno) расположены аналоговые входы. Эти пины позволяют считывать сигналы от аналоговых датчиков (например, датчик температуры) и преобразовывать их в цифровые значения, которыми мы в дальнейшем оперируем.
- Digital (7): напротив аналоговых пинов находятся цифровые пины (от 0 до 13 на Arduino Uno). Эти пины используются для цифровых входящих (input) сигналов (например, нажатие кнопки) и для генерации цифровых исходящих (output) сигналов (например, питание светодиода).
- PWM (8): вы наверное заметили знак (~) рядом с некоторыми цифровыми пинами (3, 5, 6, 9, 10, и 11 на UNO). Эти пины работаю как в обычном цифровом режиме, так и в режиме ШИМ-модуляции (PWM). Если объяснить вкратце — эти пины могут имитировать аналоговый выходной сигнал (например, для постепенного затухания светодиода).
- AREF (9): Этот пин используется достаточно редко. В некоторых случаях это подключают в схему для установки максимального значения напряжения на аналоговых входах (от 0 до 5 вольт).
Кнопка сброса (Reset Button)
Как и на оригинальных Nintendo, на Arduino есть кнопка сброса (reset) (10). При нажатии на нее контакт сброса замыкается с землей и код, загруженный на Arduino начинает отрабатывать заново. Полезная опция, если ваш код отрабатывает без повторов, но вы хотите протестить его работу.
Индикатор питания (Power LED)
Немного справа и ниже надписи “UNO” установлен светодиод, подписанный «on» (11). Этот светодиод должен загореться, когда вы подключили Arduino к источнику питания. Если светодиод не загорелся — плохой знак ;).
Светодиоды TX и RX
TX — сокращение от transmit (передача), RX — от receive (прием). Эти условные обозначения часто встречаются в электронике для обозначения контактов, которые отвечают за серийный обмен данным. На Arduino Uno эти контакты встречаются два раза на цифровых пинах 0 и 1 и в качестве светодиодов TX и RX (12). Эти светодиоды позволяют визуально отслеживать, передает или принимает данные Arduino (например, при загрузке программы на плату).
Главная интегральная микросхема (IC)
Черная деталь с металлическими коннекторами с двух сторон это интегральная микросхема, микропроцессор (IC или Integrated Circuit) (13). Можете смело считать, что это «мозги» нашей Arduino. Этот чип разный в разных моделях Arduino, но обычно он относится к линейке микропроцессоров ATmega от компании ATMEL
Это может оказаться важной информацией для загрузки скетча на плату. Модель интегральной микросхемы обычно указана на ее верхней корпусной части
Для дополнительной информации о вашей микросхеме стоит обратиться к ее даташиту.
Регулятор напряжения
Регулятор напряжения (14) is выполняет функцию, указанную в названии — контролирует напряжение, которое поступает на плату Arduino. Можете его себе представить как охранника, который не пропускает слишком большое напряжение на плату во избежание ее повреждений. Конечно же, у регулятора есть свой предел. Так что питать Arduino напряжением больше 20 вольт нельзя.
С чего начать работу с Ардуино
Если вы делаете первые шаги в мире Ардуино, то советуем вам заранее приготовиться к двойному потоку знаний. Во-первых, вам придется разобраться с тем, что такое контроллер Arduino, какие устройства можно к нему подключить и как это сделать. Потребуется разобраться с основами электроники. Во-вторых, придется научиться навыкам программирования в Arduino. Для профессиональной работы нужны знания C++, для начинающих доступны многочисленные графические среды с блочным программированием. Например, mBlock или ArduBlock. При отсутствии реальной платы можно воспользоваться одним из эмуляторов ардуино.
Все это потребует и времени, и знаний, но результатом станет удивительное ощущение восторга от сделанных своими руками умных устройств
Счастья от того, что вы стали почти волшебником, приближаясь шаг за шагом к вершинам технического мастерства. Крайне важно, чтобы теория сочеталась с практикой и вы как можно быстрее переходили от чтения статей к созданию реальных устройств
Плата Arduino Mini
Является одной из самых простых и удобных устройств Arduino.
Используется микроконтроллер ATmega 168 с рабочим напряжением на 5 вольт с частотой в 16 МГц. Максимальное напряжение питания в моделях составляет 9 вольт. Значение максимального тока на выводах составляет 40 mA.
Плата содержит:
- 14 цифровых выводов (из них 6 могут быть использованы в качестве ШИМ-выходов), могут применяться в качестве как входа, так и выхода;
- 8 аналоговых входов (4 из них оснащены выводами);
- 16 МГц – кварцевый генератор.
Пины устройства Arduino Mini имеют следующее предназначение:
- Два вывода, посредством которых осуществляется питание платы «плюс»: RAW, VCC.
- Вывод контакта «минус» – пин GND.
- Выводы под номерами 3, 5, 6, 9, 10, 11 используются для ШИМ при применении функции analog Write.
- К выводам №0, №1 можно подключать другие устройства.
- Аналоговые входы №0 – №3 с выводами.
- Аналоговые входы №4 – №7 не имеют выводов и требуют пайки при необходимости.
- Вывод AREF, который предназначен для изменения верхнего напряжения.
- Вывод Reset – перезагрузка микроконтроллера.
Расположение выводов в различных версиях arduino mini могут различаться.
Элементы платы
Микроконтроллер ATmega328P
Сердцем платформы Arduino Uno является 8-битный микроконтроллер фирмы Microchip — ATmega328P на архитектуре AVR с тактовой частотой 16 МГц.
Контроллер обладает тремя видами памяти:
- 32 КБ Flash-памяти, из которых 0,5 КБ используются загрузчиком, который позволяет прошивать Uno с обычного компьютера через USB. Flash-память постоянна и её предназначение — хранение программ и сопутствующих статичных ресурсов.
- 2 КБ RAM-памяти, которые предназначены для хранения временных данных, например переменных программы. По сути, это оперативная память платформы. RAM-память энергозависимая, при выключении питания все данные сотрутся.
- 1 КБ энергонезависимой EEPROM-памяти для долговременного хранения данных, которые не стираются при выключении контроллера. По своему назначению это аналог жёсткого диска для Uno.
Микроконтроллер ATmega16U2
Микроконтроллер не содержит USB интерфейса, поэтому для прошивки и коммуникации с ПК на плате присутствует дополнительный микроконтроллер ATmega16U2 с прошивкой USB-UART преобразователя. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт.
общается с ПК через по интерфейсу UART используя сигналы и , которые параллельно выведены на контакты и платы Uno. Во время прошивки и отладки программы, не используйте эти пины в своём проекте.
Светодиодная индикация
Имя светодиода | Назначение |
---|---|
ON | Индикатор питания платформы. |
L | Пользовательский светодиод на пине микроконтроллера. Используйте определение для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается. |
RX и TX | Мигают при прошивке и обмене данными между Uno и компьютером. А также при использовании пинов и . |
Порт USB Type-B
Разъём USB Type-B предназначен для прошивки и питания платформы Arduino. Для подключения к ПК понадобится кабель USB (A — B).
Понижающий регулятор 5V
Понижающий линейный преобразователь NCP1117ST50T3G обеспечивает питание микроконтроллера и другой логики платы при подключении питания через или пин Vin. Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 В с максимальным выходным током 1 А.
Понижающий регулятор 3V3
Понижающий линейный преобразователь LP2985-33DBVR обеспечивает напряжение на пине . Регулятор принимает входное напряжение от линии 5 вольт и выдаёт напряжение 3,3 В с максимальным выходным током 150 мА.
ICSP-разъём ATmega328P
ICSP-разъём выполняет две полезные функции:
- Используется для передачи сигнальных пинов интерфейса SPI при подключении Arduino Shield’ов или других плат расширения. Линии ICSP-разъёма также продублированы на цифровых пинах , , и .
- Предназначен для загрузки прошивки в микроконтроллер через внешний программатор. Одна из таких прошивок — Bootloader для Arduino Uno, который позволяет .
А подробности распиновки .
Выключение компонентов микроконтроллера
Этот метод подойдет в случаях, когда микроконтроллер длительное время должен выполнять ряд определенных действий с одной и той же периферией.
Любой микроконтроллер представляет из себя набор различных модулей, и для всех модулей предусмотрена возможность включения и отключения питания.
Для того чтобы воспользоваться данным методом необходимо подключить библиотеку power.h:
После этого нам будет доступен ряд функций для включения и отключения отдельных модулей периферии микроконтроллера:
Функция выключения | Функция включения | Описание модуля |
power_aca_disable() | power_aca_enable() | Аналоговый компаратор порта А. |
power_adc_disable() | power_adc_enable() | АЦП. |
power_adca_disable() | power_adca_enable() | АЦП порта А. |
power_evsys_disable() | power_evsys_enable() | Модуль EVSYS |
power_hiresc_disable() | power_hiresc_enable() | Модуль HIRES порта C. |
power_lcd_disable() | power_lcd_enable() | Модуль LCD. |
power_pga_disable() | power_pga_enable() | Усилитель с программируемым коэффициентом усиления. |
power_pscr_disable() | power_pscr_enable() | Контроллер пониженной мощности. |
power_psc0_disable() | power_psc0_enable() | 0 Контроллер уровня мощности. |
power_psc1_disable() | power_psc1_enable() | 1 Контроллер уровня мощности. |
power_psc2_disable() | power_psc2_enable() | 2 Контроллер уровня мощности. |
power_ram0_disable() | power_ram0_enable() | SRAM блок 0. |
power_ram1_disable() | power_ram1_enable() | SRAM блок 1. |
power_ram2_disable() | power_ram2_enable() | SRAM блок 2. |
power_ram3_disable() | power_ram3_enable() | SRAM блок 3. |
power_rtc_disable() | power_rtc_enable() | Модуль часов реального времени. |
power_spi_disable() | power_spi_enable() | Интерфейс SPI |
power_spic_disable() | power_spic_enable() | Интерфейс SPI порта C |
power_spid_disable() | power_spid_enable() | Интерфейс SPI порта D |
power_tc0c_disable() | power_tc0c_enable() | Таймер/счетчик 0 порта C |
power_tc0d_disable() | power_tc0d_enable() | Таймер/счетчик 0 порта D |
power_tc0e_disable() | power_tc0e_enable() | Таймер/счетчик 0 порта E |
power_tc0f_disable() | power_tc0f_enable() | Таймер/счетчик 0 порта F |
power_tc1c_disable() | power_tc1c_enable() | Таймер/счетчик 1 порта C |
power_twic_disable() | power_twic_enable() | Интерфейс I2C порта C |
power_twie_disable() | power_twie_enable() | Интерфейс I2C порта E |
power_timer0_disable() | power_timer0_enable() | Таймер 0 |
power_timer1_disable() | power_timer1_enable() | Таймер 1 |
power_timer2_disable() | power_timer2_enable() | Таймер 2 |
power_timer3_disable() | power_timer3_enable() | Таймер 3 |
power_timer4_disable() | power_timer4_enable() | Таймер 4 |
power_timer5_disable() | power_timer5_enable() | Таймер 5 |
power_twi_disable() | power_twi_enable() | Интерфейс I2C |
power_usart_disable() | power_usart_enable() | Интерфейс USART |
power_usart0_disable() | power_usart0_enable() | Интерфейс USART 0 |
power_usart1_disable() | power_usart1_enable() | Интерфейс USART 1 |
power_usart2_disable() | power_usart2_enable() | Интерфейс USART 2 |
power_usart3_disable() | power_usart3_enable() | Интерфейс USART 3 |
power_usartc0_disable() | power_usartc0_enable() | Интерфейс USART 0 порта C |
power_usartd0_disable() | power_usartd0_enable() | Интерфейс USART 0 порта D |
power_usarte0_disable() | power_usarte0_enable() | Интерфейс USART 0 порта E |
power_usartf0_disable() | power_usartf0_enable() | Интерфейс USART 0 порта F |
power_usb_disable() | power_usb_enable() | Интерфейс USB |
power_usi_disable() | power_usi_enable() | Интерфейс USI |
power_vadc_disable() | power_vadc_enable() | Модуль напряжения АЦП |
power_all_disable() | power_all_enable() | Все модули |
Доступность данных функций будет определяться типом используемого микроконтроллера, и тем какая периферия в нем присутствует. Для того чтобы не изучать документацию на каждый конкретный контроллер, можно отключать при запуске всю периферию контроллера с помощью функции power_all_disable(), а затем отдельно включать необходимые модули.
Для примера давайте добавим в нашу первую программу отправку данных через Serial порт, а всю остальную периферию микроконтроллера отключим:
Автономное питание
Бывает, что нужно обеспечить автономное питание проекта, т.е. вдали от розетки, давайте рассмотрим варианты. Также для этих целей пригодится урок по энергосбережению и режимам сна микроконтроллера.
Максимальный выходной ток с пина 5V – 500 мА!
Питание в пин Vin (или штекер 5.5×2.1 на плате UNO/MEGA)
- Любой блок питания/зарядник от ноута с напряжением 7-18 Вольт
- 9V батарейка “Крона” – плохой, но рабочий вариант. Ёмкость кроны очень небольшая;
- Сборка из трёх литиевых аккумуляторов: напряжение 12.6-9V в процессе разряда. Хороший вариант, также имеется 12V с хорошим запасом по току (3А для обычных, 20А для высокотоковых аккумуляторов) для двигателей или светодиодных лент;
- “Модельные” аккумуляторы, в основном Li-Po. В целом то же самое, что предыдущий пункт, но запаса по току в разы больше;
- Энергосбережение – не очень выгодный вариант, т.к. стабилизатор потребляет небольшой, но всё же ток;
- Максимальный выходной ток с пина 5V при питании в Vin: 2А при 7V на Vin, 500ma при 12V на Vin
Питание в пин 5V
- Для стабильных 5V на выходе – литиевый аккумулятор и повышающий до 5V модуль. У таких модулей обычно запас по току 2А, также модуль потребляет “в холостом режиме” – плохое энергосбережение;
- Литиевый аккумулятор – напряжение на пине 5V и GPIO будет 4.2-3.5V, некоторые модули будут работать, некоторые – нет. Работа МК от напряжения ниже 4V не гарантируется, у меня работало в целом стабильно до 3.5V, ниже уже может повиснуть. Энергосбережение – отличное;
- Пальчиковые батарейки (ААА или АА) – хороший вариант, 3 штуки дадут 4.5-3V, что граничит с риском зависнуть. 4 штуки – очень хорошо. Новые батарейки дадут 6V, что является максимальным напряжением для МК AVR и при желании можно так работать;
- Пальчиковые Ni-Mh аккумуляторы – отличный вариант, смело можно ставить 4 штуки, они обеспечат нужное напряжение на всём цикле разряда (до 4V). Также имеют хороший запас по току, можно даже адресную ленту питать.
- Платы с кварцем (тактовым генератором) на 8 МГц позволяют питать схему от низкого напряжения (2.5V, как мы обсуждали выше), отлично подойдут те же батарейки/аккумуляторы, также для маломощные проекты можно питать от литиевой таблетки (3.2-2.5V в процессе разряда).
- Максимальный выходной ток с пина 5V ограничен током источника питания
Заключение
Существует много вариантов снижения энергопотребления. Подводя итог тому, что мы обсуждали до сих пор, потребление энергии Arduino можно снизить следующими методами:
- Использование режима сна и режима глубокого сна;
- Уменьшение тактовой частоты;
- Замена или удаление ненужных компонентов;
- Понижение напряжения питания на плате;
- Создание собственной Arduino.
Среди этих методов некоторые работают как по волшебству, а некоторые только в определенных ситуациях. Чтобы еще больше снизить энергопотребление ваших проектов на базе Arduino, выключайте внешние устройства, такие как SD-карты, с помощью MOSFET, когда они не используются. Кроме того, не используйте ненужные дисплеи с подсветкой или индикацией.