Перейти к содержанию

PWM

ШИМ (PWM) — широтно-импульсная модуляция. Это может звучать сложно, но на самом деле это просто умный способ управления мощностью, подаваемой на такие устройства, как светодиоды, зуммеры и сервоприводы.

ШИМ состоит из двух основных параметров:

  • Частота (Frequency)
  • Коэффициент заполнения (Duty Cycle)

Базовое использование


PWM(slot) -> Pin

Чтобы создать объект PWM, вызовите PWM(slot).

Аргументы:

  • slot (string | int | tuple) — метка слота ("A", "B", "C", "D", "E", "F", "G", "H"), порт пина (0, 2 и т.д.), кортеж (0, Pin.OUT)

Возвращает: Возвращает цифровой выход Pin для slot.

from pibody import PWM

pwm = PWM("A")

.freq(value | None) -> None | int

Аргументы:

  • value (int) — необязательный параметр, задающий частоту ШИМ. Полезный диапазон: [20, 5000]. По умолчанию: 0

Если value пусто, метод возвращает частоту, использованную ранее.

pwm.freq(100)

print(pwm.freq())  # 100

.duty(value | None) -> None | float

Аргументы:

  • value (float) — необязательный параметр, задающий коэффициент заполнения ШИМ. Может принимать значение в диапазоне [0, 1.0]. По умолчанию: 0

Если value пусто, метод возвращает коэффициент заполнения, использованный ранее.

pwm.duty(0.5)

print(pwm.duty())  # 0.5

.duty_u16(value | None) -> None | int

Получить или установить коэффициент заполнения ШИМ как 16-битное значение.

Аргументы:

  • value (int) — необязательный параметр, задающий коэффициент заполнения ШИМ. Может принимать значение в диапазоне [0, 65535]. По умолчанию: 32768

Если value пусто, метод возвращает коэффициент заполнения, использованный ранее.

pwm.duty_u16(32768)

print(pwm.duty_u16())  # 32768

Примеры

Вы можете управлять светодиодом с помощью ШИМ для изменения яркости, используя функции .freq() и .duty().

Подключите модуль LED к слоту "A" и запустите код ниже. Вы увидите, как ШИМ влияет на работу светодиода.

from pibody import PWM

pwm = PWM("A")  # подключите LED к "A"

pwm.freq(100)
pwm.duty(0.5)

Другие функции


.deinit()

Отключает выход ШИМ и освобождает пин.

pwm.deinit()

.duty_ns(value | None) -> None | int

Получить или установить коэффициент заполнения ШИМ в наносекундах. Значение в наносекундах должно быть между 0 и общим периодом вашей частоты. Например, если вы установили частоту 1000 Гц (период = 1,000,000 нс), .duty_ns() должен находиться в диапазоне [0, 1000000].

Аргументы:

  • value (int) — необязательный параметр, задающий коэффициент заполнения в наносекундах

Если value пусто, метод возвращает коэффициент заполнения, использованный ранее.

data = pwm.duty_ns()
print(data)