ADC简介

ADC子系统包括信号复用和电压模数转换器(VADC),是一种将内部和外部信号路由到VADC的多路复用网络。

ADC模块硬件架构图

模块支持使用的ADC

模块支持使用的ADC如下:

接口 引脚号 引脚名 PM4250引脚号 电压域 MPM中断 引脚描述
ADC 128 ADC0 GPIO4 1.8 V - PMU_GPIO04
ADC 185 ADC1 GPIO7 1.8 V - PMU_GPIO07

ADC位置

智能主控板上ADC接口的位置如下图所示:

智能主控板上ADC的位置

智能主控板上ADC的位置

ADC节点使用示例

ADC节点主要用来查看该节点输入的ADC数值。

使用方法

测试方法为:使用可调直流电源作为输入信号源,将电源正极连接到ADC0或ADC1引脚,电源GND与智能主控板GND相连。

  • ADC0:连接到GPIO4,对应节点in_voltage_adc_gpio4_input,支持输入电压范围约0~5.25 V
  • ADC1:连接到GPIO7,对应节点in_voltage_adc_gpio7_input,支持输入电压范围约0~5.25 V

将直流电源输出设置为任意电压后,可通过下面命令读取返回的ADC值(单位为μV):

adb shell
cd /sys/bus/iio/devices/iio:device0
cat in_voltage_adc_gpio4_input
cat in_voltage_adc_gpio7_input
ADC读取示例输出

ADC读取示例输出

测试代码

以下示例代码演示了如何在应用程序中读取ADC值。该代码通过打开ADC节点文件,读取ADC原始值(单位为μV),并将其转换为整数进行后续处理。

点击展开/折叠:ADC读取测试代码(可自行NDK编译)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>

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; 
}

代码说明:

  • 使用open()函数打开ADC节点文件/sys/bus/iio/devices/iio:device0/in_voltage_adc_gpio4_input
  • 使用read()函数读取ADC原始值(字符串格式,单位为μV)。
  • 使用atol()函数将字符串转换为长整型数值。
  • 读取的ADC值单位为微伏(μV),可根据需要转换为电压值。

编译和运行:

# 使用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引脚定义如下:

接口 模块引脚号 模块引脚名 模块 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