# PWM 使用教程

## 什么是 PWM？

**PWM（Pulse Width Modulation，脉宽调制）**
是一种通过控制数字信号的\*\*高低电平比例（占空比）\*\*来模拟模拟信号的方法。常用于：

- 控制 LED 亮度
- 驱动电机速度
- 调节音频音量
- 生成音调/方波等信号

K230 内部集成了两个 PWM 硬件模块，每个模块支持 3 个通道（共计 6 个通道）：

- 通道 **0\~2** 使用同一个时钟源（频率相同，占空比分别设置）
- 通道 **3\~5** 使用另一个独立时钟源
- 每个通道均可通过 `IOMUX` 配置到不同的输出引脚

## 示例概览

以下示例演示了如何使用 K230 的 `PWM` 模块完成以下操作：

- 初始化并启动 PWM 输出
- 动态调节频率与占空比
- 释放 PWM 通道资源

### 导入模块并初始化 PWM

```python
from machine import PWM, Pin

# 初始化 PWM 通道 0，设置频率为 1kHz，占空比为 50%
pwm0 = PWM(Pin(42), freq=1000, duty=50)
```

- `PWM(通道号, 频率Hz, 占空比%)`
  创建指定通道的 PWM 输出，输出 1kHz 方波，占空比为 50%

### 动态调节频率和占空比

```python
# 修改通道 0 的输出频率为 2kHz
pwm0.freq(2000)

# 修改占空比为 10%
pwm0.duty(10)
```

- `freq(x)`：设置输出频率（单位：Hz）
- `duty(x)`：设置占空比（单位：%，范围 0\~100）

### 释放通道资源

```python
# 完全释放通道 0，关闭输出并释放底层资源
pwm0.deinit()
```

- `deinit()`：关闭通道、释放资源，适用于退出场景或切换功能

### 示例输出波形说明

假设我们设置通道 0 输出 1kHz、50% 占空比的 PWM 波形，其波形为：

```text
周期 T = 1ms
高电平时间 = 0.5ms，低电平时间 = 0.5ms
```

```python
|‾‾‾‾‾     ‾‾‾‾‾     ‾‾‾‾‾
|     ‾‾‾‾‾     ‾‾‾‾‾
```

若将占空比调整为 10%，波形如下：

```text
|‾     ‾     ‾     ‾
|
```

## PWM 通道说明

| 通道号 | 所属模块 | 时钟共享组   |
|-  | - | - |
| 0   | PWM0 | Group A |
| 1   | PWM0 | Group A |
| 2   | PWM0 | Group A |
| 3   | PWM1 | Group B |
| 4   | PWM1 | Group B |
| 5   | PWM1 | Group B |

> ⚠ 注意：同一组的通道共用一个频率，但**占空比可以独立设置**

## 应用场景

- **LED 亮度调节**（通过占空比控制亮度）
- **蜂鸣器发声**（通过频率控制音调）
- **舵机控制**（特定占空比控制转角）
- **直流电机调速**（通过 PWM 控制电压平均值）
- **信号波形发生器**（方波、PWM 调制波等）

## 延伸阅读

- [K230 PWM API 文档](../../api/machine/K230_CanMV_PWM模块API手册.md)
- [FPIOA 模块完整 API 手册](../../api/machine/K230_CanMV_FPIOA模块API手册.md)
