Изменение частоты ШИМ Ардуино (разрядности)
Платы Arduino Uno и Arduino Nano на базе ATmega168/328 имеют 6 аппаратных ШИМ модуляторов на аналоговых портах 3, 5, 6, 9, 10, 11. Управление ШИМ сигналом осуществляется с помощью функции analogWrite , которая генерирует на выходе аналоговый сигнал и задает коэффициент заполнения импульса. Arduino устанавливает на выводах частоту 488,28 Гц и разрешение 8 разрядов (от 0 до 255).

Схема. Широтно-импульсная модуляция для чайников
В Arduino на базе ATmega168/328 для ШИМ используются три таймера:
Таймер 0 — выводы 5 и 6
Таймер 1 — выводы 9 и 10
Таймер 2 — выводы 3 и 11

AVR ШИМ. Мигаем светодиодом плавно | Программирование микроконтроллеров
- Эффективность электропитания: индукция обмоток ротора будет усреднять ток (индукторы сопротивляются изменению тока). Транзисторы имеют низкий импеданс при низком падении напряжения и рассеивании мощности. Резистор рассеивает большую мощность (I2R) в виде тепла.
- Управление скоростью: двигатель будет видеть источник с низким импедансом, даже если он постоянно переключается между высоким и низким напряжением. Результат очевиден – двигатель ускоряется. Серийное сопротивление приведет к тому, что двигатель будет испытывать малое напряжение, поэтому легко остановится в нужный момент.
- Цепь управления: для цифровой электроники (например, микроконтроллера) очень легко включать или выключать напряжение с помощью транзисторов. Аналоговый выход (с электронным или механическим управлением) требует большего количества компонентов и увеличивает рассеивание мощности. Это будет более дорогостоящим вариантом, с точки зрения электроники и требований к электропитанию.
1 Общие сведения о широтно-импульсной модуляции
Если скважность равняется 100%, то всё время на цифровом выходе Arduino будет напряжение логическая «1» или 5 вольт. Если задать скважность 50%, то половину времени на выходе будет логическая «1», а половину — логический «0», и среднее напряжение будет равняться 2,5 вольтам. Ну и так далее.

В программе скважность задаётся не в процентах, а числом от 0 до 255. Например, команда analogWrite(10, 64) скажет микроконтроллеру подать на цифровой PWM выход №10 сигнал со скважностью 25%.
Выводы Arduino с функцией широтно-импульсной модуляции работают на частоте около 500 Гц. Значит, период следования импульсов — около 2 миллисекунд, что и отмеряют зелёные вертикальные штрихи на рисунке.
Получается, что мы можем сымитировать аналоговый сигнал на цифровом выходе! Интересно, правда?!
Как же мы можем использовать ШИМ? Применений масса! Например, управлять яркостью светодиода, скоростью вращения двигателя, током транзистора, звуком из пьезоизлучателя и т.д.…
ШИМ. Мигаем светодиодом плавно
Сегодня мы изучим возможность использования широтно-импульсной модуляции в микроконтроллере AVR, или, как говорят в народе, ШИМ.
Это конечно очень упрощённое понятие ШИМ. Есть более серьёзные разъяснение данной технологии, но нам для наших экспериментов этого будет вполне достаточно.
То есть, подведя итоги объяснению, мы управляем результирующим напряжением, а также и свечением светодиода, угловой скоростью электродвигателя и прочими значениями за счёт изменения скважности импульсов.
Но всё-таки самое интересное, как же всё-таки всё это организовано в нашем микроконтроллере?
В микроконтроллере AVR широтно-импульсную модуляцию можно организовать как программно, так и аппаратно.
Поэтому всегда в любой технологии мы стараемся придерживаться всё-таки именно аппаратного способа реализации.
Аппаратная организация ШИМ в МК AVR происходит на уровне таймера 2.
Как мы помним из предыдущего занятия, таймеров в конкретном нашем микроконтроллере Atmega8 три. И таймеры 0 и 2 являются восьмибитными. Но на уровне 2-го таймера как раз и организована широтно-импульсная модуляция.

Здесь иллюстрируется то, какие мы должны включить биты в регистре TCCR второго таймера, чтобы запустить широтно-импульсную модуляцию.
Биты WGM как раз и включают таймер в резим PWM (ШИМ). С остальными битами разберёмся позже, если это потребуется.
А сейчас, чтобы это всё прочувствовать, нам необходим проект, который мы и создадим сейчас.
Проект создаем таким же образом, как и на прошлых занятиях. Назовём его Test10, создадим и добавим файлы PWM.c и PWM.h, последний автоматически оформится при создании соответствующими директивами прероцессора. А в главном файле Test01.c мы напишем стандартный код
Как мы видим в коде, в порте B мы включили на выход 3 ножку. В распиновке контроллера мы видим, что у данной ножки есть ещё альтернативное обозначение OC2, которое и означает возможность этой ножки работать непосредственно с ШИМ
Файл main.h мы можем даже подключить с прошлого занятия по LCD и немного исправим код, подключив туда уже новый наш модуль PWM
Ну и теперь начнём писать код в новую библиотеку для работы непосредственно с ШИМ — в файл PWM.c.
Там мы также подключим заголовочный файл и создадим каркас функции для работы с ШИМ
А в заголовочный файл нашей библиотеки мы добавим прототип данной функции, а также подключим библиотеку для работы с прерываниями

Простая схема генератора шим сигнала. Широтно-импульсная модуляция (ШИМ)
Программа ШИМ для Arduino
На вход схемы подается сигнал ШИМ 5 В от Arduino Uno. В Arduino Uno PWM есть две частоты по умолчанию – 490 Гц и 980 Гц. Здесь используется цифровой вывод D3 с выходом ШИМ 490 Гц. Вот базовый скетч PWM на Arduino Uno.

Чем выше частота ШИМ-сигнала, тем меньше пульсация напряжения на выходе схемы ФНЧ. Если используется частота по умолчанию цифрового ШИМ-вывода D3 (490 Гц), она слишком мала для приличной настройки. Необходимо увеличить эту частоту ШИМ до уровня в несколько кГц, чтобы получить более стабильное выходное напряжение. Можно сделать это изменив регистр таймера Ардуино.
Вот такая получилась идея по необычному применению LM317 стабилизатора, который можно использовать в самых разных устройствах автоматики.

Шим генератор своими руками схема
Если нужно управлять плюсовым контактом
В таком случае нам понадобится другой мосфет- транзистор — P-канальный. Схема аналогична, только подтягивающий резистор подключен к плюсу.
Также нужно будет инвертировать сигнал на выходе ардуино, ведь при подаче 5 вольт транзистор будет закрываться, а при 0 — открываться, значит шим скважностью в 30% выдаст 70% мощность на выходе схемы.

ШИМ на irf4905, питание5 v
Если нужно управлять, к примеру,12 -ти вольтовым устройством, то схема немного усложнится. Добавится так называемое «плечо раскачки» или драйвер полевого транзистора. По классике он собирается на двух, а иногда и на трёх транзисторах, но мы есть вариант немного проще, который работает при невысоких частотах:
Ардуино, управление ШИМ по плюсовому проводу IRF4905

Мощный лабораторный генератор импульсов
- Тратить такую ценную и дорогую деталь на какой то вентилятор мне западло. Я для микроконтроллера поинтересней задачу найду
- Еще софт под это писать, вдвойне западло.
- Напряжение питания там 12 вольт, понижать его для питания МК до 5 вольт это вообще уже лениво
- IRF630
не откроется от 5 вольт, поэтому тут пришлось бы еще и транзистор ставить, чтобы он подавал высокий потенциал на затвор полевика. Нафиг нафиг.
