Урок 10. ШИМ
Довольно часто возникает необходимость плавного управления каким-либо процессом. Например, звуком динамика, скоростью вращения моторов или яркостью светодиода (чтобы зажечь его тускло или неочень ярко). Обычно для таких задач используется аналоговый сигнал, или для цифровых контроллеров ЦАП (цифро-аналоговый преобразователь). Но ЦАП присутствует далеко не на всех контроллерах, в том числе он отсутствует и на Гикконе.
Контроллер имеет только цифровой сигнал. Для того чтобы имитировать аналоговый сигнал можно подавать цифровой (включен или выключен), но с определённой частотой. Например, у нас крутится колесо с помощью мотора. Мы бы хотели чтобы колесо крутилось медленнее. Можно тогда не постоянно подавать на него ток, а через секунду. Секунду включен, секунду выключен, секунду включен, секунду выключен. Таким образом мотор будет крутиться в два раза медленнее. Если уменьшить количество времени включения, условно включить на половину секунды, затем на полторы выключить, скорость получится ещё в два раза меньше. Этот процесс называется широтно-импульсной модуляцией или ШИМ.
Не все выводы контроллера могут поддерживать ШИМ, те которые могут на платах обычно обозначаются знаком ~. На плате Гиккон Коннект мы можем видеть этот значок рядом с выводами 4, 12, 14, 15. Посмотрим как работает ШИМ на практике.
Возьмём зуммер. Зуммер - это маленький простой динамик, в котором мембрана колеблется с разной частотой и вызывает звук.
Подключите зуммер к плате Гиккон Коннект к выводу 12. Модуль кнопки подключите к выводу 13.
В ШИМ нас интересуют два основных параметра - заполнение и частота. Частота - это то как часто мы подаём сигнал и его отсутствие (например, подача сигнала 0,5 секунд и отсутствие сигнала 0,5 секунд, то есть частота 1 Гц). Заполнение - это то, сколько из этого времени сигнал будет заполнен (то есть включен).
За работу с ШИМ отвечает модуль machine
и его подраздел PWM
(PWM - это английское сокращение ШИМ). Таким образом подключая нужные нам функции используем импорт модулей:
# импорт модулей from machine import Pin from machine import PWM
В языке python можно упростить запись импорта нескольких модулей или функций из одного места, перечислив нужное через запятую:
# импорт модулей from machine import Pin, PWM
Укажем что мы будем использовать ШИМ с помощью функции PWM, где параметрами будет объект вывода контроллера. Переменную назовём buz от английского buzzer - зуммер.
buz = PWM(Pin(12, Pin.OUT))
Далее установим зуммеру частоту в 1000 Гц.
buz.freq(1000)
Также укажем вывод подключения кнопки
but = Pin(13, Pin.IN)
В основном цикле будем указывать заполнение с помощью функции duty()
, где в параметре 0
- это нулевое заполнение (нет активного сигнала), 1023
- максимальное заполнение. Мы возьмём половину - 512
. Таким образом при нажатии кнопки заполнение установим в 512
, если же кнопка не нажата - заполнение будет 0
.
# основной цикл программы while True: if but.value(): buz.duty(512) # установить заполнение в 512 else: buz.duty(0) # установить заполнение в 0
Мы получим дверной звонок. При нажатии на кнопку будет слышен звуковой сигнал. Полностью скрипт будет выглядеть следующим образом:
# импорт модулей from machine import Pin, PWM # создадим ШИМ вывод buz на 12 выводе buz = PWM(Pin(12, Pin.OUT)) buz.freq(1000) # установка частоты в 1000 Гц # кнопка подключена к выводу 13 but = Pin(13, Pin.IN) # основной цикл программы while True: if but.value(): buz.duty(512) # установить заполнение в 512 else: buz.duty(0) # установить заполнение в 0
Сохраните скрипт под названием buzzer и запустите его на исполнение.
Можно самостоятельно поменять значение параметра функции freq(частоту) и услышать как меняется звук зуммера.
Запомнить:
- Зуммер - это простейший динамик
- ШИМ - это сокращение от широтно-импульсная модуляция
- ШИМ нужна для имитации аналогового сигнала с помощью цифрового