pwmio
– 支持基于 PWM 的协议¶
该 pwmio
模块包含提供对基本脉冲 IO 的访问的类。
如果程序在使用后继续,所有类都会更改硬件状态,并且在不再需要它们时应取消初始化。为此,请调用deinit()
或使用上下文管理器。有关更多信息,请参阅
Lifetime 和 ContextManagers 。
例如:
import pwmio
import time
from board import *
pwm = pwmio.PWMOut(D13)
pwm.duty_cycle = 2 ** 15
time.sleep(0.1)
此示例将初始化设备,设置
duty_cycle
,然后休眠 0.1 秒。程序完成后,CircuitPython 将在重置所有硬件时自动关闭 PWM。使用deinit()
或with
语句自行完成。
在这些板上可用
-
class
pwmio.
PWMOut
(pin: microcontroller.Pin, *, duty_cycle: int = 0, frequency: int = 500, variable_frequency: bool = False)¶ 在给定引脚上输出脉宽调制信号。
创建与给定引脚关联的 PWM 对象。这允许您在给定的引脚上写出 PWM 信号。除非
variable_frequency
为真,否则频率在 init 之后是固定的。笔记
当
variable_frequency
为 True 时,进一步的 PWM 输出可能会受到限制,因为它可能需要更多的内部资源才能灵活。因此,在输出固定和灵活频率信号时,首先构建固定输出。- 参数
简单的 LED 渐变:
import pwmio import board pwm = pwmio.PWMOut(board.D13) # output on D13 pwm.duty_cycle = 2 ** 15 # Cycles the pin with 50% duty cycle (half of 2 ** 16) at the default 500hz
特定频率下的 PWM(伺服和电机):
import pwmio import board pwm = pwmio.PWMOut(board.D13, frequency=50) pwm.duty_cycle = 2 ** 15 # Cycles the pin with 50% duty cycle (half of 2 ** 16) at 50hz
变频(通常是音调):
import pwmio import board import time pwm = pwmio.PWMOut(board.D13, duty_cycle=2 ** 15, frequency=440, variable_frequency=True) time.sleep(0.2) pwm.frequency = 880 time.sleep(0.1)
-
duty_cycle
:int¶ 16 位值,指示一个周期中有多少是高 (1) 与低 (0)。0xffff 将始终为高,0 将始终为低,0x7fff 将半高然后半低。
根据 PWM 在特定板上的实现方式,占空比的内部表示可能具有小于 16 位的分辨率。读取此属性将从内部表示返回值,因此它可能与设置的值不同。
-
frequency
:int¶ 32 位值,指示以赫兹为单位的 PWM 频率(每秒周期数)。仅在使用
variable_frequency=True
.根据 PWM 在特定板上的实现方式,当频率发生变化时,可能需要重新计算 PWM 占空比的内部值。在这些情况下,占空比会根据原始占空比值自动重新计算。这应该发生而无需手动重新设置占空比。
-
__exit__
(self) → None¶ 退出上下文时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers 。