ШИМ
широтно-импульсная модуляция · PWM
Это понятие впервые встречается на программе «Электроника, программирование и инженерная практика» — примерно 13-14 лет (7-8 класс).
Управление яркостью или скоростью через быстрое «вкл-выкл»: чем большую долю времени сигнал включён, тем ярче светит лампочка и быстрее крутится мотор.
Душ, который то включают, то выключают: держат чаще включённым — воды за минуту больше. Важно не «насколько открыт», а «как долго включён».
Убавить яркость светодиода на Arduino командой analogWrite и, помахав им в темноте, увидеть пунктир: свет на самом деле мигает.
Сигнал — прямоугольные импульсы с постоянной частотой; доля времени «включено» называется коэффициентом заполнения и задаёт среднюю мощность. На Arduino это analogWrite(пин, 0–255): 0 — выключено всегда, 255 — включено всегда, 127 — половину времени. Глаз и мотор сглаживают мигание сами: видим яркость, получаем скорость.
Написать скетч, где светодиод плавно разгорается и гаснет (analogWrite в цикле); объяснить, что меняется в сигнале на каждом шаге.
Широтно-импульсная модуляция: частота постоянна, информацию несёт коэффициент заполнения 0–100%; среднее напряжение = питание × заполнение. На Uno analogWrite работает на ~490 Гц (пины 5 и 6 — ~980 Гц). Применения: яркость, скорость моторов через драйвер, звук. Краевые случаи: низкая частота даёт мерцание и писк моторов; сервосигнал — родственник ШИМ, но там угол кодируется шириной импульса 1–2 мс при периоде 20 мс, а не долей мощности.
Измерить мультиметром напряжение на пине при analogWrite(64) и analogWrite(191); сравнить с расчётом 5 В × 64/255 и 5 В × 191/255.
Частое заблуждение
«analogWrite выдаёт плавное напряжение, как ручка громкости». Нет: пин умеет только «включено» и «выключено»; плавность — это среднее от очень быстрых переключений.