# ADC 使用教程

## 什么是 ADC？

**ADC（Analog-to-Digital Converter，模数转换器）** 是一种将**模拟信号**（如电压）转换为**数字信号**的硬件模块。
在嵌入式系统中，ADC 是连接传感器与微处理器之间的桥梁，用于采集电压信号并转化为可计算的数值数据。

K230 芯片内部集成了一个高性能 ADC 模块，具有以下特性：

- 支持 **6 个独立通道**
- 分辨率：**12 位**（即输出值范围为 0\~4095）
- 采样速率高达 **1 MHz**
- 输出格式：原始数值（`read_u16()`）或电压（`read_uv()`，单位：微伏）

## 示例概览

以下示例演示了如何通过 K230 提供的接口，读取 ADC 通道的**采样值**和**电压值**，用于后续信号处理或传感器数据采集。

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

```python
from machine import ADC

# 实例化 ADC 通道 0
adc = ADC(0)
```

### 读取原始采样值（单位：无量纲）

```python
# 读取通道 0 的原始采样值（0 ~ 4095）
value = adc.read_u16()
print("ADC 原始值:", value)
```

- 返回值范围：**0 \~ 4095**
- 代表的是输入电压在参考电压下的比例
- 可用于数字信号处理、阈值判断等场景

### 读取电压值（单位：微伏）

```python
# 读取通道 0 的电压值，单位为 uV
voltage = adc.read_uv()
print("ADC 电压值:", voltage, "uV")
```

- 返回单位：**微伏（μV）**
- 提供更直观的实际电压信息，便于与电路或传感器参数对应
- 若需要以伏特（V）为单位，可除以 `1_000_000`

### 示例输出（假设输入为 1.65V）

```text
ADC 原始值: 2047
ADC 电压值: 1650000 uV
```

## 分辨率与电压映射

K230 ADC 为 12 位分辨率，采样值与实际电压之间为线性关系：

$$
V_{in} = \frac{\text{ADC\_Value}}{4095} \times V_{\text{ref}}
$$

⚠️ 默认参考电压一般为 3.3V，视芯片配置而定

## 注意事项

| 项目         | 说明                                        |
| - | -- |
| **通道编号**   | 支持 6 个通道（编号 0\~5），请确保所连接通道对应的引脚有模拟输入功能    |
| **输入电压范围** | 最大输入不得超过参考电压（如 3.3V），否则可能损坏芯片             |
| **单位转换**   | `read_u16()` 为原始采样值；`read_uv()` 为实际电压（μV） |
| **采样噪声**   | 建议平均多次读数，以减小 ADC 采样的瞬时抖动和外部干扰影响           |

## 应用场景

- 电压检测（如电池电压、电源状态）
- 模拟传感器读取（如温度、电位器、光敏电阻）
- 音频、震动等模拟信号采样
- 反馈控制系统中模拟信号监测

## 延伸阅读 & 工具资源

- 📘 [K230 ADC 模块 API 文档](../../api/machine/K230_CanMV_ADC模块API手册.md)
- 📘 [K230 FPIOA 模块 API 手册](../../api/machine/K230_CanMV_FPIOA模块API手册.md)
- 📥 [K230 引脚功能对照表（Excel）](https://kendryte-download.canaan-creative.com/developer/k230/HDK/K230%E7%A1%AC%E4%BB%B6%E6%96%87%E6%A1%A3/K230_PINOUT_V1.2_20240822.xlsx)
- 🛠️ [K230 IOMUX 配置工具](https://www.kendryte.com/zh/tools/dts_config_generation_tool)
