Здравствуйте уважаемые читатели! Сегодня поговорим о работе с Широтно-импульсной модуляцией (сокращенно ШИМ) на микроконтроллерах семейства ATtiny.
Для того чтобы плавно управлять яркостью светового прибора, либо скоростью вращения коллекторного мотора, достаточно плавно увеличивать подаваемое на него напряжение от нуля, до некоторого номинального значения, установленного производителем.
Например, плавно регулировать яркость светодиода мы можем с помощью потенциометра, увеличивая подаваемое на него значение от 0 до 5 вольт.
Но как быть, если яркость того же светодиода мы хотим регулировать не в ручном режиме, с помощью потенциометра, а программно?
Дело в том, ни ATtiny, ни Arduino, ни абсолютное большинство других микроконтроллеров, не могут плавно менять напряжение на выходе своих пинов.
В этом случае нам на помощь придет технология Широтно-импульсной модуляции. Основана она на том, что можно изменять длину импульса (скважность), при сохранении постоянной частоты сигнала. Т.е. если рассматривать пример со светодиодом, чем больше будет длина импульса, тем ярче будет гореть светодиод.
Для работы с ШИМ-сигналом в Arduino IDE служит специальная функция analogWrite (pin, value).
Первый ее аргумент определяет номер пина, в который мы будем передавать ШИМ-сигнал. У Arduino UNO это пины 3, 5, 6, 9, 10 и 11. Эти пины на плате Arduino UNO выделены размещенной рядом с ними волнистой чертой «~». У ATtiny13 это пины 5 и 6. У ATtiny25/45/85 - пины 5, 6 и 3.
Второй аргумент – определяет длину импульса ШИМ-сигнала. Его значения находятся в диапазоне от 0 до 255. Чем больше значение, тем меньше промежутки между импульсами (выше скважность), что в случае светодиода будет означать большую его яркость, а в случае электродвигателя – большую скорость его вращения.
Работа с ШИМ на примере Arduino UNO
Вначале возьмем для примера Arduino UNO. Берем светодиод и соединяем его короткую ножку с уже припаянным резистором на 220 ом с землей, а длинную ножку соединяем с 11 пином Ардуино.
Напишем небольшой скетч в котором, вначале будем в течение 5 секунд увеличивать длину импульса от 0 до 100% (т.е. значение второго аргумента функции analogWrite от 0 до 255), тем самым увеличивая яркость светодиода. Затем установим задержку в 1 секунду, чтобы светодиод горел на максимальной яркости. А после будем так же плавно в течение 5 секунд снижать его яркость.
Загружаем скетч в Ардуино и видим плавное изменение яркости светодиода.
Работа с ШИМ на примере ATtiny13
Теперь перейдем к ATtiny. Переведем Arduino UNO в режим программатора. Изменим пин светодиода в нашем скетче на нулевой, что соответствует пятой ножке ATtiny.
Установим на Ардуино наш самодельный модуль для прошивки. Подробности его создания и схема есть в статье - Создаем удобный модуль для программирования микроконтроллеров ATtiny. И разместим в гнездо модуля АTtiny13.
Переходим в Arduino IDE. В инструментах меняем плату на АTtiny13. Загружаем загрузчик, если до этого его не загружали. Напоминаю, это делается только один раз. Подробно о прошивке микроконтроллеров АTtiny13 и АTtiny85 я рассказывал в статье ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino. И далее, загружаем наш скетч в ATtiny, выбрав в меню «Скетч» - «Загрузить через программатор».
Подключаем светодиод с резистором к 4 и 5 ножке ATtiny13. И видим, как все работает, светодиод плавно разгорается и плавно гаснет.
Работа с ШИМ на примере ATtiny85
Теперь вместо ATtiny13 установим ATtiny85 и попробуем снова прошить микроконтроллер тем же скетчем.
В инструментах меняем плату, на ATtiny25/45/85, процессор - ATtiny85 и Clock - 16 МГц.
И далее загружаем скетч в ATtiny. Всё прекрасно работает.
Вообще согласно описанию к ATtiny25/45/85 с ШИМ сигналом у нас могут работать еще 6 пин и 3 пин.
А у ATtiny13, всего 1 таймер и работать он может только на 5 или на 6 пину. OC0A и OC0B, соответственно.
В этой статье мы разобрались как ATtiny работает с ШИМ-сигналом. А в следующей перейдем к практическому применению данной информации и создадим устройство для плавной регулировки освещения. В качестве примера светового прибора, работающего от постоянного тока у нас будет светодиодная лента, а от переменного тока - лампа накаливания и светодиодная лампа.
Ниже размещено видео по материалам данной статьи.
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!
Другие публикации по теме:
- ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino.
- Что такое фоторезистор? Подключение фоторезистора к ATtiny13 и управление светодиодом.
- Создаем удобный модуль для программирования микроконтроллеров ATtiny.
- Регулируемое фотореле для уличного освещения на ATtiny13 своими руками.