Эксперимент 18. тестер батареек

Общий принцип использования ШИМ

Управляя скоростью модуляции ШИМ (Pulse Width Modulation, PWM) можно регулировать, к примеру, силу свечения светодиода – данный принцип пояснен на следующем рисунке. Аналогичный механизм используется и для управления скоростью вращения двигателя.

Если на представленном рисунке выключатель будет замкнут на протяжении некоторого времени, то на протяжении этого же времени лампочка будет гореть. Если переключатель будет замкнут в течение 8ms и будет разомкнут 2ms в течение интервала 10ms, тогда лампочка будет гореть только в течение интервала 8ms. В рассмотренном примере можно сказать, что среднее выходное напряжение (на лампочке) будет составлять 80% от напряжения батареи.

В другом случае выключатель замыкается на 5ms и размыкается на эти же самые 5ms в течение интервала 10ms, таким образом среднее напряжение на лампочке будет составлять 50% от напряжения батареи. Принято говорить, что если напряжение батареи 5В и цикл занятости составляет 50%, то среднее напряжение на оконечном устройстве (лампочке) будет составлять 2.5В.

В третьем рассмотренном на рисунке случае цикл занятости составляет 20% и поэтому среднее напряжение на оконечном устройстве (лампочке) будет составлять 20% от напряжения батареи.

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

Программирование

Код. Ничего лишнего

Ардуино программируется на языке программирования C/C++ с соответствующим ему синтаксисом. Встроенный сборщик, препроцессор и компилятор (avr-gcc или Win-AVR) прощают большое количество ошибок и делает многое за пользователя автоматически, мы даже об этом не знаем и не задумываемся. Базовые функции для управления выводами и интерфейсами микроконтроллера, математика и некоторые другие функции/макросы взяты из открытого фреймворка для работы с микроконтроллерами под названием Wiring. Именно из него состоит базовый набор инструментов Ардуино. В связи с этим сами разработчики Ардуино называют язык “упрощённым c++”, и даже дали ему отдельное название – Arduino Wiring.

Тут следует отделить мух от котлет: “из коробки” в Arduino IDE нам доступна огромная куча различных функций и инструментов:

  • Все возможности языка C++, которые предоставляет компилятор: типы данных, операторы и вообще весь необъятный синтаксис. Мы программируем на том же C++, на котором можно программировать в любом другом месте.
  • “Ядро” Ардуино – библиотека Arduino.h, которая автоматически подключается в код. В ней содержатся функции для управления пинами, интерфейсами, а также имеется набор всяких полезных функций и инструментов. А ещё оно отвечает за инициализацию и настройку периферии микроконтроллера при запуске. В ядре кстати лежат стандартные библиотеки для Serial, Wire, SPI и EEPROM.
  • В папке с программой лежит набор стандартных библиотек: для LCD дисплея, шаговика, сервопривода и некоторых других железок.
  • С компилятором идёт набор низкоуровневых библиотек для AVR (сон, progmem, watchdog и многие другие).
  • Компилятор позволяет работать с микроконтроллером “напрямую” при помощи регистров и чтения даташита до утра.
  • Также мы можем писать на ассемблере, взяв под контроль каждый такт работы МК.

Если вы научитесь свободно прогать на Ардуино и вдруг перейдете к разработке программ на том же C++ в более взрослых средах разработки, вы будете неприятно удивлены большим количеством дополнительного кода, который придется писать руками. И наоборот, если умеющий в плюсы (си-плюс-плюсы) человек посмотрит на типичный ардуино-код, он скажет “да как это вообще работает то?”. Компилятор в Arduino IDE настроен на максимальную всеядность и прощение ошибок, потому что это обучающая платформа.

Сейчас вернёмся к такому понятию, как библиотека. Жизнь рядового ардуинщика неразрывно связана с библиотеками, потому что огромное комьюнити за годы своего существования сделало огромное количество этих самых библиотек на все случаи жизни и для всех продающихся датчиков и модулей. Библиотека это набор файлов, в которых содержится дополнительный код, которым мы можем пользоваться просто ознакомившись с документацией или посмотрев примеры. Такой подход называется “черным ящиком”, мы можем даже не догадываться, какой ужас и кошмар (в плане сложности кода) содержится в библиотеке, но с лёгкостью пользоваться возможностями, который этот код даёт. Купили модуль – нашли библиотеку – открыли пример – всё, результат достигнут…

Защита от помех AC

Момент выключения

Напряжение в сети является синусоидой, которая 100 раз в секунду пересекает значение 0. Если выключить нагрузку в тот момент, когда напряжение в сети равно нулю – это сильно уменьшит выброс. Для этих целей проще всего использовать твердотельные реле (SSR) с детектором нуля (Zero-Crossing Detector): такие реле сами отключают и включают нагрузку в нужный момент. Детектор нуля есть почти во всех моделях SSR, но лучше уточнить в документации.

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

Искрогасящие цепи AC

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

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

Материалы для печати

Краски для шелкографии в настоящее время производятся на предприятиях России централизованно. Их классифицируют по типу пленкообразующего и запечатываемого материала. Для номенклатуры таких красок используют цифровые и буквенные обозначения. Маркировка красок зарубежных производителей отличается от отечественной. Однако она также выражается при помощи цифр и букв. При применении красок для шелкографии следует придерживаться рекомендаций, которые дает фирма-производитель.

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

Элементы платы

Troyka-контакты

Датчик подключается к управляющей электронике по трём проводам.

  • Питание (V) — красный провод. На него должно подаваться напряжение 5 В (или 3,3 В).
  • Земля (G) — чёрный провод. Должен быть соединён с землёй микроконтроллера.
  • Сигнальный (S) — жёлтый провод. Подключается к цифровому входу микроконтроллера. Через него датчик передает микроконтроллеру бинарное значение, ноль или единицу.

Оптопара TCRT5000

Оптопара TCRT5000 — это собранные в одном корпусе светоиод (синий на рисунке) и фототранзистор n-p-n типа (чёрный на рисунке). Светодиод излучает в инфракрасном диапазоне на длине волны 950 нм. Свет отражается от поверхности и попадает на фототранзистор.

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

Инвертор

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

Переменный резистор

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

Сигнальный светодиод

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

Метод tick()

Метод занимается отправкой и приёмом данных по шине, то есть измеряет время и слушает/дёргает пин, что обеспечивает “асинхронную” работу интерфейса. Вызывать тик нужно как можно чаще, желательно как минимум в 4 раза чаще, чем микросекунд. То есть например для скорости 300 это будет микросекунд. Можно оставить его в и обеспечить его “прозрачное” выполнение без задержек, либо дополнительно положить в прерывание таймера с таким периодом. Логика работы автоматически переключается в зависимости от текущего режима: во всё время кроме отправки мы “слушаем” шину.

Также возвращает текущее состояние шины.

Ковка ножа

Важные страницы

  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макро, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

Опорное напряжение

Опорное напряжение играет главную роль в измерении аналогового сигнала, потому что именно от него зависит максимальное измеряемое напряжение и вообще возможность и точность перевода полученного значения 0-1023 в Вольты. Изучим следующую функцию – , где mode:

  •  опорное напряжение равно напряжению питания МК. Активно по умолчанию
  • : встроенный источник опорного на 1.1V для ATmega168 или ATmega328P и 2.56V на ATmega8
  • : встроенный источник опорного на 1.1V (только для Arduino Mega)
  • : встроенный источник опорного на 2.56V (только для Arduino Mega)
  • : опорным будет считаться напряжение, поданное на пин AREF

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

Значение 1023 функции будет соответствовать выбранному опорному напряжению или напряжению выше его, но не выше 5.5V, что спалит плату. То есть при режиме мы можем оцифровать напряжение от 0 до напряжения питания. Если напряжение питания 4.5 Вольта, и мы подаём 4.5 Вольт – получим оцифрованное значение 1023. Если подаём 5 Вольт – опять же получим 1023, т.к. выше опорного. Это правило работает и дальше, главное не превышать 5.5 Вольт. Как измерять более высокое напряжение (12 Вольт например) я расскажу в отдельном уроке.

Что касается точности: при питании от 5V и режиме мы получим точность измерения напряжения (5 / 1024) ~4.9 милливольт. Поставив мы можем измерять напряжение от 0V до 1.1V с точностью (1.1 / 1024) ~0.98 милливольт. Весьма неплохо, особенно если баловаться с делителем напряжения.

Что касается внешнего источника опорного напряжения. Нельзя использовать напряжение меньше 0V или выше 5.5V в качестве внешнего опорного в пин AREF. Также при использовании режима нужно вызвать до вызова функции , иначе можно повредить микроконтроллер. Можно подключить опорное в пин AREF через резистор на ~5 кОм, но так как вход AREF имеет собственное сопротивление в 32 кОм, реальное опорное будет например 2.5 * 32 / (32 + 5) = ~2.2V.

Что измеряет сенсор

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

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

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

Таймеры (ШИМ)

Выводы таймеров: в микроконтроллере, помимо обычного вычислительного ядра, с которым мы работаем, находятся также “хардварные” счётчики, работающие параллельно со всем остальным железом. Эти счётчики также называют таймерами, хотя к таймерам они не имеют никакого отношения: счётчики буквально считают количество тиков, которые делает кварцевый генератор, задающий частоту работы для всей системы. Зная частоту генератора (обычно 16 МГц) можно с очень высокой точностью определять интервалы времени и делать что-то на этой основе. Какой нам прок от этих счётчиков? “Из коробки” под названием Arduino IDE мы имеем несколько готовых, основанных на таймерах инструментов (функции времени, задержек, измерения длин импульсов и другие).

В этой статье речь идёт о пинах и выходах, о них и поговорим: у каждого счётчика есть два выхода на GPIO. У нано (у МК ATmega328p) три счётчика, соответственно 6 выходов. Одной из возможностей счётчиков является генерация ШИМ сигнала, который и выводится на соответствующие GPIO. Для нано это D пины 5 и 6 (счётчик 0), 9 и 10 (таймер 1) и 3 и 11 (таймер 2). ШИМ сигналу посвящен отдельный урок, сейчас просто запомним, что с его помощью можно управлять яркостью светодиодов, скоростью вращения моторчиков, мощностью нагрева спиралей и многим другим. Но нужно помнить, что ограничение по току в 40 мА никуда не делось и питать от пинов ничего мощнее светодиодов нельзя.

Регулировка оборотов

Известно, что при подключении такого двигателя к источнику питания он сразу начинает вращаться, а направление его вращения зависит от полярности подключенного напряжения.

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

Балластные резисторы греются, выделяют энергию в виде тепла в воздух – это не эффективно и бесполезно.

Смысл ШИМ-регулирования состоит в подаче импульсов с фиксированной частотой, но изменяющейся шириной. От ширины импульса зависит действующее напряжение на подключенной нагрузке и вычисляется по формуле:

где Uнагр – напряжение на нагрузке, Uпит – напряжение источника питания, k – коэффициент заполнения.

Коэффицент заполнения – то отношение ширины импульса (tимп) к периоду (T), то есть:

На рисунке ниже вы видите, как выглядит питание нагрузки через ШИМ-регулятор при разных коэффициентах заполнения.

Короче говоря,при ШИМ-регулировании питание очень быстро включается и отключается, то есть подаётся импульсами. И чем уже эти импульсы – тем меньшее напряжение доходит до нагрузки.

Для ШИМ-регулирования можно собрать схему на таймере NE555 и других микросхемах либо использовать микроконтроллер.

Семейство плат с микроконтроллером ардуино также способно выдавать ШИМ сигнал, стандартная частота ШИМ у них 500Гц, а если быть точным, то 488,28 Гц. Если вам не принципиальная частота – то можно использовать как есть без сторонних библиотек. Отмечу, что для большинства применений этого достаточно. Не очень хорошо это подходит для регулирования яркости осветительных приборов из-за повышения коэффициента пульсаций светильника и вреда для зрения в итоге.

Обратите внимание на иллюстрацию, приведенную выше. Из неё мы видим микроконтроллер Atmega328, который лежит в основе этих плат выдаёт ШИМ-сигнал только на выходах 3, 5, 6, 9, 10, 11, которые обычно помечены знаком «. » плате, а на картинках с распиновками сокращением «PWM»

» плате, а на картинках с распиновками сокращением «PWM».

Сетевой диммер управляемый Arduino | arduinoLab

Управление мощной сетевой нагрузкой, при помощи симистора и ардуино, файлы и код из видео

Схема модуля

печатная плата в формате .layза основу взята плата отсюда. код взят отсюда

/* AC Light Dimmer - Inmojo  AC Voltage dimmer with Zero cross detection  Author: Charith Fernanado http://www.inmojo.com   License: Released under the Creative Commons Attribution Share-Alike 3.0 License.  http://creativecommons.org/licenses/by-sa/3.0 Target:  Arduino  Attach the Zero cross pin of the module to Arduino External Interrupt pin Select the correct Interrupt # from the below table Pin    |  Interrrupt # | Arduino Platform --------------------------------------- 2      |  0            |  All 3      |  1            |  All 18     |  5            |  Arduino Mega Only 19     |  4            |  Arduino Mega Only 20     |  3            |  Arduino Mega Only 21     |  2            |  Arduino Mega Only  */

int AC_LOAD = 3;    // Output to Opto Triac pin
int dimming = 128;  // Dimming level (0-128)  0 = ON, 128 = OFF

void setup()
{
  pinMode(AC_LOAD, OUTPUT);	      // Set the AC Load as output
  attachInterrupt(0, zero_crosss_int, RISING);  // Choose the zero cross interrupt # from the table above
}

void zero_crosss_int()  // function to be fired at the zero crossing to dim the light
{
  // Firing angle calculation :: 50Hz-> 10ms (1/2 Cycle)
  // (10000us - 10us) / 128 = 75 (Approx)
  int dimtime = (75*dimming);      
  delayMicroseconds(dimtime);    // Off cycle
  digitalWrite(AC_LOAD, HIGH);   // triac firing
  delayMicroseconds(10);         // triac On propogation delay
  digitalWrite(AC_LOAD, LOW);    // triac Off
}

void loop()
{
  dimming = 128; 
  delay(100);
  dimming = 75;  
  delay(100);
  dimming = 25;  
  delay(100);

}





01.12.2015

Потребление МК

Частота тактирования

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

Более того, от частоты тактирования зависит напряжение, при котором МК гарантированно стабильно работает. Вот картинки из даташита на ATmega328:

На самом деле всё как обычно слегка “завышено”, потому что на 16 МГц клоке Ардуино прекрасно работает начиная от 3.3V, а на 8 МГц (внутреннем) – от 1.8V (при отключенном BOD). Есть четыре уровня управления тактовой частотой:

  • Подключение внешнего кварца с нужной частотой (на плате Ардуино стоит 16 МГц, сам МК поддерживает вплоть до 20 МГц без разгона).
  • Выбор источника тактирования при помощи фьюзов: внешний (частота соответствует установленному генератору) и внутренний (8 МГц).
  • Изменение системной частоты прямо из программы: большинство МК avr позволяют понизить приходящую с источника тактирования частоту, а именно – поделить (реализовано в GyverPower). Таким образом можно замедлить работу всего МК для уменьшения потребления энергии или увеличения стабильности работы от пониженного напряжения. Можно выполнить необходимые действия на высокой частоте, а затем понизить её до минимума до наступления внешних событий по прерываниям или по таймеру. На некоторых МК есть PLL – умножитель частоты (например на Attiny85), позволяющий тактироваться на частоте 36 МГц от внутреннего источника! Для такого разгона придется поднять напряжение и обеспечить теплоотвод, но об этом не в этом уроке =).
  • Фьюз CKDIV8: системный делитель из предыдущего пункта автоматически устанавливается на 8 перед запуском МК. Это нужно для более надёжного старта при низком напряжении. Обычно используют так: МК стартует с CKDIV8 на пониженной частоте, измеряет напряжение питания, если оно достаточно высокое (аккумулятор не разряжен) частота выставляется на необходимую и работа продолжается. Иначе например можно всё вырубить и уйти в сон.

Также прилагаю картинку с графиками тока потребления МК в активном режиме (не во сне) в зависимости от частоты и напряжения питания:

Режимы энергосбережения

У микроконтроллера есть несколько режимов энергосбережения, в каждом из которых остаются в активном режиме только некоторые из аппаратных блоков (таймеры, интерфейсы, АЦП, и т.д.). Также у мк есть блок BOD, отвечающий за постоянный мониторинг напряжения и перезагрузку в случае его падения ниже настроенного порога. Во всех режимах сна остаётся активен АЦП, его нужно отключать отдельно (всё реализовано в GyverPower). Режимы энергосбережения МК (AVR):

  • – Легкий сон, отключается только клок CPU и Flash, пробуждается мгновенно от любых прерываний
  • – Наиболее глубокий сон, отключается всё кроме WDT и внешних прерываний, просыпается от аппаратных (обычных + PCINT) или WDT, пробуждение за 16+6 тактов (~1.375 мкс на 16 МГц). Прерывание должно быть длиннее этого времени для успешного пробуждения!
  • – Глубокий сон, идентичен + system clock активен, пробуждение за 6 тактов (0.4 мкс)
  • – Глубокий сон, идентичен  + timer 2 активен (+ можно проснуться от его прерываний), можно использовать для счета времени
  • – Глубокий сон, идентичен + system clock активен, пробуждение за 6 тактов (0.4 мкс)

Самый часто используемый на практике режим – power down, самый глубокий сон. В нём отключается всё, кроме watchdog и аппаратных прерываний (обычные external и PCINT). В данном режиме МК потребляет минимальный ток (ATmega328 – чуть меньше 1 мкА), а проснуться можно только по прерыванию Watchdog таймера или по аппаратному прерыванию (по кнопке). Очевидно, что в глубоком сне не работают таймеры и прерывания по ним, поэтому счёт времени становится отдельной задачей (в GyverPower эта задача решена максимально удобно).

Периферия

Помимо главного “ядра” у микроконтроллера есть куча периферийных блоков (АЦП, компаратор, таймеры, интерфейсы связи), которые по сути работают отдельно и могут общаться с МК на аппаратном уровне. Каждый блок потребляет некоторый ток, и при желании некоторые блоки можно отключить. В режиме глубокого сна они отключаются автоматически, а вот в активной работе нужно отключить их вручную. Большую таблицу с потреблением МК в разных режимах и с разным набором активной периферии можно посмотреть на официальной странице библиотеки Low Power, на всякий случай приложу её ниже. Управление периферией также реализовано в GyverPower.

Измерения проводились на 8 МГц плате Pro Mini при питании от Li-Ion аккумулятора (3.7V):

Питание

Источник питания

Выбор источника питания очень важен для эффективного энергосбережения: максимально желательно питать МК напрямую от батарейки/аккумулятора:

  • Трёх-четырёх АА/ААА батареек или аккумуляторов достаточно для работы на стандартной частоте 16 МГц (с 4-мя батарейками нужно быть аккуратнее по суммарному напряжению, а 4 никелевых аккумулятора подходят идеально).
  • От одного литиевого аккумулятора (3.7-4.2V) можно работать на 16 МГц, но при разряде ниже 3.5V работа на такой частоте уже может быть не очень стабильной (частоту можно чуть понизить, об этом ниже).
  • От литиевой 3V таблетки (CR2025, CR2032 и прочие) микроконтроллер отлично будет работать на внутреннем 8 МГц клоке.
  • Плохим вариантом можно считать ситуации, когда приходится использовать понижающие преобразователи и стабилизаторы: они все будут тратить несколько миллиампер “в тепло”, и даже режим сна МК может оказаться абсолютно бессмысленным. Но в любой ситуации нужно считать потребление и прикидывать время работы, для каких-то задач и работа от “Кроны” через стабилизатор будет приемлемой во имя упрощения схемы и стабильных 5 Вольт (китайский транзистор-тестер, например, включается на несколько секунд, поэтому заморочек по питанию нет).
  • Если в устройстве используется аккумуляторная батарея, то можно схитрить: высоковольтный потребитель (мотор к примеру) может питаться от общего напряжения с батареи через драйвер, а микроконтроллер может работать от одной его “банки”, соединяясь общим проводом с минусом. Микроконтроллер, особенно в режиме сна, потребляет ничтожно мало по сравнению с тем же мотором, поэтому о разбалансировке банок можно не беспокоиться. Таким образом МК также может мониторить напряжение батареи и отключать её при разряде, выполняя роль BMS. Про измерение напряжения мы говорили в уроке про аналоговые входы.
  • Также напомню, что питать всякие железки напрямую от МК можно только в некоторых пределах, подробнее о них и вообще питании проекта мы говорили в уроке о питании Ардуино и схемы в целом.

Самоблокировка питания

Самый надёжный и аппаратно простой способ сэкономить энергию – самоблокировка питания. Он подходит для устройств, которые включаются тактовой кнопкой (без фиксации) и через некоторое время должны сами отключиться до следующего клика по кнопке. Самоблокировка работает следующим образом: нажатие на кнопку подаёт ток на МК, он запускается, подаёт сигнал на “ключ”, который запараллеливает линию питания. Мы отпускаем кнопку, а МК продолжает работать, потому что сам удерживает ключ, через который идёт питание. Отсюда и название: самоблокировка питания. По тайм-ауту или другому алгоритму работы МК может отпустить ключ и отключиться. Через этот же ключ могут питаться и остальные железки, и точно так же быть отключены от питания при самовыключении.

Проблема в том, что МК от AVR могут питаться от любого GPIO пина (при наличии общей GND), поэтому практически все старые схемы из интернета не работают. Пока что удалось найти две схемы на форуме arduino, но лично я их не тестировал. В будущем дополню урок.

Но есть шикарный, простой и рабочий вариант: использовать стабилизатор напряжения с пином Enable, за который МК может “заблокировать” себе питание (за идею спасибо Дмитрию Карманову). Вот пример со стабилизатором me6212c33m5g на 3.3V (стоит в районе 15 руб). На схеме PWR_EN ведёт на физическую кнопку, подключенную второй ногой к питанию (батарейке), BUT_MK идёт на пин МК, который будет подавать высокий сигнал при запуске. 3V3 соответственно линия 3.3 (от неё питается сам МК и опционально что-то ещё), и BAT – батарейка.

Алгоритм управления Arduino

Программа управления симистором создана на базе таймера Timer1 и библиотеки Cyber.Lib, благодаря чему отсутствует влияние на работу других программных кодов. Принцип её действия следующий. При переходе сетевого напряжения через ноль «снизу вверх» таймер перенастраивается на обратный переход «сверху вниз» и начинает отсчёт времени в соответствии со значением переменной «Dimmer». В момент срабатывания таймера Arduino формирует управляющий импульс и симистор открывается. При следующем переходе через ноль симистор перестаёт пропускать ток и ожидает очередное срабатывание таймера. И так 50 раз в секунду. За регулировку задержки на открывание симистора отвечает переменная «Dimmer». Она считывает и обрабатывает сигнал с потенциометра и может принимать значение от 0 до 255.

Заключение. ШИМ в дисплеях — что это, добро или зло?

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

К счастью, производители ничего не имеют против того, чтобы предлагать экраны, в которых ШИМ либо отсутствует в принципе, либо работает на высоких частотах порядка десятков, а то и сотен килогерц. Беда в том, что наличие или отсутствие мерцания далеко не всегда указывается.

Если в случае с обычными мониторами сейчас можно встретить маркировку «Flicker-Free», то, когда речь заходит о ноутбуках, что за матрица стоит и в каком режиме она работает – загадка для посвященных. Узнать это можно только из обзоров или проведя самостоятельно примитивный тест на определение наличия ШИМ («карандашный» тест или при помощи обычного бытового вентилятора).

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

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий