# 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 |