Это старая версия документа!


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

Среди цифровых пинов контроллера выделяются некоторые со знаком ~, данные пины поддерживают сигнал ШИМ (PWM), то есть можно создать сигнал который имеет определенное напряжение и продолжительность.

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

Рисунок 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%.

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

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