# ADC简介
***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.***
---
ADC 子系统由信号复用器和电压模数转换器(VADC)组成,用于将内部及外部模拟信号通过多路复用方式路由至 VADC,并完成模拟量到数字量的转换。
# ADC架构框图
```{image} images/image_WUQ8bpxNoohsFgxziIPcJFconQh.webp
:width: 834px
:height: 446px
```
# ADC接口位置
智能主控板上ADC接口的位置如下图所示,其中Quectel Pi M1支持ADC0、ADC1,Quectel Pi L1只支持ADC0。
```{image} images/image_EspbbT9JSoFy9cxeXcac1pmcngs.webp
:width: 1397px
:height: 911px
```
智能主控板上ADC的位置
# ADC管脚定义
**Quectel Pi M1** 支持使用的ADC管脚定义如下:
| **接口** | **引脚号** | **引脚名** | **PM4250引脚号** | **电压域** | **MPM中断** | **引脚描述** |
| --- | --- | --- | --- | --- | --- | --- |
| ADC | 128 | ADC0 | GPIO4 | 1.8 V | - | PMU_GPIO04 |
| ADC | 185 | ADC1 | GPIO7 | 1.8 V | - | PMU_GPIO07 |
**Quectel Pi L1** 支持使用的ADC管脚定义如下:
| **接口** | **引脚号** | **引脚名** | **PM4250引脚号** | **电压域** | **MPM中断** | **引脚描述** |
| --- | --- | --- | --- | --- | --- | --- |
| ADC | 128 | ADC0 | GPIO6 | 1.8 V | - | PMU_GPIO06 |
# ADC使用说明
通过ADC节点可以来查看该不同ADC通道的ADC输入数据。
## 使用方法
测试时使用可调直流电源作为输入信号源:
- 将电源 **正极** 连接到 **ADC0** 或 **ADC1** 引脚。
- 电源 **GND** 与智能主控板 **GND** 相连。
**M1:** 各通道对应关系及输入特性如下:
- **ADC0**:
- 连接到GPIO4
- 节点:`in_voltage_adc_gpio4_input`
- 支持输入电压范围:约 **0~5.25 V**
- **ADC1**:
- 连接到GPIO7
- 节点:`in_voltage_adc_gpio7_input`
- 支持输入电压范围:约 **0~5.25 V**
设置直流电源输出为目标电压后,可通过以下命令读取 ADC 采样结果(单位:μV):
```bash
adb shell
cd /sys/bus/iio/devices/iio:device0
cat in_voltage_adc_gpio4_input
cat in_voltage_adc_gpio7_input
```
```{image} images/image_FK3ib6g8Bo1WnkxEzX4cm6unnUb.webp
:width: 711px
:height: 458px
```
ADC读取示例输出
**L1:** 通道对应关系及输入特性如下:
- **ADC0**:
- 连接到PMU_GPIO6
- 节点:`in_voltage_adc_gpio6_input`
- 支持输入电压范围:约 **0~5.25 V**
设置直流电源输出为目标电压后,可通过以下命令读取 ADC 采样结果(单位:μV):
```bash
adb shell
cd /sys/bus/iio/devices/iio:device1
cat in_voltage_adc_gpio6_input
```
## 测试代码
以下示例代码演示了在应用程序中读取 ADC 电压值的基本方法。程序通过访问ADC对应的节点文件,读取ADC原始值(单位为 μV),并转换为整数以供后续处理。
点击展开/折叠:ADC读取测试代码(可自行NDK编译)
```c
#include
#include
#include
#include
#include
#include
int main()
{
int fd = -1;
int adc_value;
char buff[64] = {0};
// 打开ADC节点文件(ADC0对应GPIO4)
fd = open("/sys/bus/iio/devices/iio:device0/in_voltage_adc_gpio4_input", O_RDONLY);
if(fd < 0){
perror("open error\n");
return fd;
}
// 读取ADC值int n_read = read(fd, buff, sizeof(buff));
if(n_read < 0) {perror("read error\n");close(fd);return -1;}// 将读取的字符串转换为整数(单位为μV)
adc_value = atol(buff);
printf("read %d bytes, content: %s\n", n_read, buff);
printf("ADC value: %d μV\n", adc_value);
close(fd);
return 0;
}
```
```c
#include
#include
#include
#include
#include
#include
int main()
{
int fd = -1;
int adc_value;
char buff[64] = {0};
// 打开ADC节点文件(ADC0对应PMU_GPIO06)
fd = open("/sys/bus/iio/devices/iio:device1/in_voltage_adc_gpio6_input", O_RDONLY);
if(fd < 0){
perror("open error\n");
return fd;
}
// 读取ADC值int n_read = read(fd, buff, sizeof(buff));
if(n_read < 0) {perror("read error\n");close(fd);return -1;}// 将读取的字符串转换为整数(单位为μV)
adc_value = atol(buff);
printf("read %d bytes, content: %s\n", n_read, buff);
printf("ADC value: %d μV\n", adc_value);
close(fd);
return 0;
}
```
**代码说明:**
- 使用 `open()` 函数打开ADC节点文件 `/sys/bus/iio/devices/iio:device0/in_voltage_adc_gpio4_input`。
- 使用 `read()` 函数读取ADC原始值(字符串格式,单位为μV)。
- 使用 `atol()` 函数将字符串转换为长整型数值。
- 读取的ADC值单位为微伏(μV),可根据需要转换为电压值。
**编译和运行:**
```bash
# 使用NDK编译# 将编译好的可执行文件推送到设备并运行
adb push test_adc /data/local/tmp/test_adc
adb shell "chmod +x /data/local/tmp/test_adc"
adb shell "/data/local/tmp/test_adc"
```
# ADC测试数据
## ADC引脚规格
板载ADC引脚定义如下:
| **接口** | **模块引脚号** | **模块引脚名** | **模块 I/O** | **NET名称
复用功能** | **说明** |
| --- | --- | --- | --- | --- | --- |
| ADC | 128 | ADC0 | I | ADC0 | 1) 连接器输入电压范围:0–5.25 V。
2) 分压电阻:RH = 18 kΩ,RL = 10 kΩ。
3) ADC引脚电压 = 连接器输入电压(J0403)× (10/28)。
4) 示例:输入 3 V 时,ADC引脚电压应为 3 V × 10/28 ≈ 1.0714 V。 |
| ADC | 185 | ADC1 | I | ADC1 | 与ADC0相同的电气特性(0–5.25 V输入范围,RH = 18 kΩ,RL = 10 kΩ,ADC引脚电压 = Vin × 10/28)。 |
## ADC0测试数据
| **电压源** | **ADC0(μV)** | **理论值(V)** |
| --- | --- | --- |
| 1.8 V | 638408 | 1.8 V×10/28 = 0.642857 |
| 3 V | 1066414 | 3 V×10/28 = 1.07143 |
| 5 V | 1784623 | 5 V×10/28 = 1.78571 |
## ADC1测试数据
| **电压源** | **ADC1(μV)** | **理论值(V)** |
| --- | --- | --- |
| 1.8 V | 640549 | 1.8 V×10/28 = 0.642857 |
| 3 V | 1069269 | 3 V×10/28 = 1.07143 |
| 5 V | 1789814 | 5 V×10/28 = 1.78571 |