## machine.PWM

**machine.PWM** 类是 machine 模块下的一个硬件类，用于指定 PWM 设备的配置和控制，提供对 PWM 设备的操作方法。

- PWM (Pulse Width Modulation，脉冲宽度调制)  是一种对模拟信号电平进行数字编码的方式；
- PWM 设备可以通过调节有效电平在一个周期信号中的比例时间来操作设备；
- PWM 设备两个重要的参数：频率（freq）和占空比（duty）；
  - 频率：从一个上升沿（下降沿）到下一个上升沿（下降沿）的时间周期，单位为 Hz；
  - 占空比：有效电平（通常为电平）在一个周期内的时间比例；

### 构造函数

在 RT-Thread MicroPython 中 `PWM` 对象的构造函数如下：

#### **class machine.PWM**(id, channel, freq, duty)

在给定的总线上构建一个 `PWM` 对象，参数介绍如下：

- **id**：使用的 PWM 设备编号，如  `id = 1` 表示编号为 1 的 PWM 设备；
- **channel**：使用的 PWM 设备通道号，每个 PWM 设备包含多个通道，范围为 [0, 4]；
- **freq**：初始化频率，范围 [1, 156250]；
- **duty**：初始化占空比数值，范围 [0 255]；

例如：`PWM(1,4,100,100)` 表示当前使用 编号为 1 的 PWM 设备的 4 通道，初始化频率为 1000 Hz，初始化占空比的数值为 100。

### 方法

#### **PWM.init**(channel, freq, duty)

根据输入的参数初始化 PWM 对象，参数说明同上。

#### **PWM.deinit**()

用于关闭 PWM 对象，对象 deinit 之后需要重新 init 才能使用。

#### **PWM.freq**(freq)

用于获取或者设置 PWM 对象的频率，频率的范围为 [1, 156250]。如果参数为空，返回当前 PWM 对象的频率；如果参数非空，则使用该参数设置当前 PWM 对象的频率。

#### **PWM.duty**(duty)

用于获取或者设置 PWM 对象的占空比数值，占空比数值的范围为 [0, 255]，例如 `duty = 100`，表示当前设备占空比为 `100/255 = 39.22%` 。如果参数为空，返回当前 PWM 对象的占空比数值；如果参数非空，则使用该参数设置当前 PWM 对象的占空比数值。

### 示例

``` python
>>> from machine import PWM     # 从 machine 导入 PWM 类
>>> pwm = PWM(3, 3, 1000, 100)  # 创建 PWM 对象，当前使用编号为 1 的 PWM 设备的 4 通道，初始化的频率为 1000Hz，占空比数值为 100（占空比为 100/255 = 39.22%）
>>> pwm.freq(2000)              # 设置 PWM 对象频率
>>> pwm.freq()                  # 获取 PWM 对象频率
2000
>>> pwm.duty(200)               # 设置 PWM 对象占空比数值
>>> pwm.duty()                  # 获取 PWM 对象占空比数值
200
>>> pwm.deinit()                # 关闭 PWM 对象
>>> pwm.init(3, 1000, 100)      # 开启并重新配置 PWM 对象
```