Эксперимент 8. Аппаратный ШИМ

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

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

С помощью таймера- счетчика можно получать сигнал с широтно- импульсной модуляцией. Кроме того, нам даже не потребуется разбираться с настройками этого устройства, это уже сделали до нас и создали специальный объект PWM в библиотеке machine. Соберем схему со светодиодом и попробуем применить библиотеку.

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

Рисунок 1. Электрическая принципиальная схема эксперимента

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

Единственным отличием этой схемы, от предыдущей, является то, что светодиод мы подключили к другому выводу микроконтроллера, к выводу 15. Дело в том, что периферийные устройства подключаются только к определенным ножкам из-за аппаратных особенностей реализации микросхемы. И на 16 выводе аппаратный ШИМ не возможен.

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

Exp8.py
  1. from machine import Pin, PWM
  2. import time
  3. _init()
  4.  
  5. LedPin = 15
  6.  
  7. led = Pin(LedPin, Pin.OUT)
  8. pwmLed = PWM(led)
  9. pwmLed.freq(200)
  10.  
  11. while True:
  12. pwmLed.duty(200)
  13. time.sleep(1)
  14. pwmLed.duty(1023)
  15. time.sleep(1)

В первой строке мы указываем интерпретатору Python, что из системной библиотеки machine мы хотим импортировать не только Pin, но и PWM

  1. from machine import Pin, PWM

Далее мы, как обычно, создаем объект Pin, настроенный как выход. Но на этом настройка не заканчивается. Мы создаем объект PWM, передавая в качестве параметра только что созданный Pin

  1. led = Pin(LedPin, Pin.OUT)
  2. pwmLed = PWM(led)

Теперь мы получили объект для управления аппаратным генератором ШИМ, подключенным к 15 выводу микроконтроллера. Теперь нужно настроить и его. Как мы уже знаем, у сигнала с широтно- импульсной модуляцией есть два параметра- частота и коэффициент заполнения или скважность. Выберем частоту достаточно большую, чтобы глаз не замечал мерцания, например, 200 герц

  1. pwmLed.freq(200)

Настройки закончили, теперь будем управлять яркостью светодиода:

  1. while True:
  2. pwmLed.duty(200)
  3. time.sleep(1)
  4. pwmLed.duty(1023)
  5. time.sleep(1)

В бесконечном цикле мы устанавливаем значение ШИМ равное 200, а потом 1023 с задержками по 1 секунде. В результате наш светодиод одну секунду горит тускло, потом одну секунду горит ярко.

Осталось разобраться что это за цифры 200 и 1023, которые мы передали в качестве параметров в функцию duty(). Это и есть коэффициент заполнения, только здесь он он выражен не в процентах, а числом от 0 до 1023, где 0 — это 0%, а 1023 — это 100%.

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

Для остановки программы нажми на кнопку остановки в верхней панеле EsPy.

Попробуй изменить программу так, чтобы светодиод имел не два, а 3 или более вариантов яркости, которые переключались бы по- очереди.