Эксперимент 7. Регулирование яркости светодиода

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

Человеческое зрение способно различать лишь 25 «кадров» в секунду. Если сигнал меняется реже, то человек отчетливо видит его мерцание. Но если повысить частоту, то для человека это сливается уже в единую картину. По этому принципу устроено кино и мультипликация. На экране показываются отдельные картинки, но они быстро сменяют друг друга. Так быстро, что сливаются в непрерывное видео.

Поэтому, необходимо генерировать сигнал ШИМ определенной, достаточно высокой, частоты.

Схема эксперимента

Соберем уже привычную нам схему со светодиодом. Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp7.py
  1. from machine import Pin, PWM
  2. import time
  3. _init()
  4.  
  5. LedPin = 16
  6. led = Pin(LedPin, Pin.OUT)
  7.  
  8. while True:
  9. led.on()
  10. time.sleep_ms(10)
  11. led.off()
  12. time.sleep_ms(10)

Первые строки программы уже знакомы нам по прошлым программам. В теле цикла мы используем новую функцию time.sleep_ms(). Она очень похожа на знакомую там time.sleep(). Разница заключается в том, что она принимает в качестве параметра время задержки не в секундах, а миллисекундах. Приставка милли- означает одна тысячная. Таким образом эта функция принимает значение задержки в тысячных долях секунды. 1 миллисекунда это 0,001 секунда.

В теле цикла программа зажигает светодиод, ждет 10 миллисекунд, после чего выключает светодиод и ждет еще 10 миллисекунд. Таким образом мы генерируем импульсы. Так как время, которое светодиод горит и не горит одинаковое (и то и другое по 10мс), то получается Кзаполнения=50%

Период нашего сигнала получается 20мс. А его частота 1/20мс = 50 герц, это означает, что мы получили 50 импульсов в секунду, поэтому глаз не видит отдельных вспышек светодиода, но яркость светодиода заметно меньше, чем, когда он горел на полную мощность.

Изменим программу, чтобы получить коэффициент заполнения 10%

    led.on()
    time.sleep_ms(2)
    led.off()
    time.sleep_ms(18)

При таких задержках мы получили такой же, как и раньше, период импульсов (20мс), но теперь время свечения светодиода только 2мс, что составляет 10% от периода. Поэтому светодиод стал совсем тусклым, но по-прежнему не мигает, а горит, как кажется, с постоянной яркостью.

Дополнительное задание

1. Попробуй изменить время задержек в программе, не меняя период импульсов, и посмотри что изменится. 2. Попробуй изменить задержки в программе, увеличивая период импульсов, и посмотри, что изменится, когда частота станет менее 25 герц.