04 - ADC 采集应用
本章节介绍 Pico-G1 扩展板上的 ADC 采集应用示例 —— adc_display。该应用演示了如何使用芯片内置的 LSADC(12-bit SAR ADC)进行模拟电压采样,并在 TFT 屏幕上实时显示电压值。这是学习模拟信号采集的基础示例。
应用源码位于 SDK 目录 source/app/04_adc_display/,提供了完整的 ADC 字符设备操作实现。
1 应用概述
1.1 功能特性
- LSADC 采样:演示芯片内置 12-bit ADC 的电压采样
- 实时显示:在 TFT 屏幕上显示电压值和原始 ADC 值
- 高精度显示:支持毫伏级电压精度显示
- 自动校准:支持 VREF 电压参考配置
1.2 技术参数
| 参数 | 值 |
|---|---|
ADC 分辨率 | 12-bit(0~4095) |
采样通道 | CH1(GPIO1_1) |
VREF 电压 | 1.8V(默认,可配置) |
输入范围 | 0~VREF(≤ 3.3V) |
采样模式 | CONTINUOUS(连续采样) |
刷新频率 | 100ms(可配置) |
1.3 硬件连接说明
| 信号 | 板上 GPIO | 物理 pad | 说明 |
|---|---|---|---|
| AO | GPIO1_1 | iocfg_reg21 @ 0x12090004 | ADC 输入通道1 |
| VCC | 1.8V | — | 参考电压(必须 ≤ 3.3V) |
| GND | GND | — | 地线 |
2 编译与部署
2.1 编译应用
export PATH=$PATH:<SDK>/tools/linux/toolchains/arm-gcc12.2.0-linux-uclibceabi/bin
cd <SDK>/source/app/04_adc_display
make2.2 运行应用
scp adc_display root@<板端IP>:/usr/bin/
ssh root@<板端IP} '/usr/bin/adc_display'3 预期输出
3.1 控制台输出
/mnt # ./adc_display
[adc] pad 0x12090004 -> 0x00001004
[spi] pad 0x100C0028 -> 0x00001004
[spi] pad 0x100C002C -> 0x00001004
[spi] pad 0x100C0030 -> 0x00001000
[spi] pad 0x100C0020 -> 0x00001005
[spi] pad 0x100C001C -> 0x00001005
[spi] opening /dev/spidev2.0 ...
[spi] spidev opened, fd=3
[spi] spidev mode/bits/speed set (MODE3/8b/24MHz)
[spi] chardev request DC @ /dev/gpiochip4 line 5 ...
[spi] chardev request RES @ /dev/gpiochip4 line 4 ...
[spi] chardev request CS @ /dev/gpiochip5 line 1 ...
[spi] chardev-verify: DC=0(expect0) RES=1(expect1) CS=1(expect1) ==> OK(chardev 真驱动了引脚)
[spi] spi_hal_init done
[tft] init: SLPOUT
[tft] init: SLPOUT +120ms ok
[tft] init: config cmds ok
[tft] init: DISPON
[tft] init: DISPON ok
[tft] init: clear-flush start
[tft] flush #1 start
[tft] flush #1 done
[tft] init: clear-flush done
[adc] /dev/lsadc 不存在,自动 insmod xm_lsadc.ko ...
raw=4095 V=3.300
[tft] flush #2 start
[tft] flush #2 done3.2 TFT 屏幕显示

4 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| /dev/lsadc 不存在 | LSADC 驱动未加载 | 程序会自动加载 xm_lsadc.ko |
| 读数异常 | VREF 配置错误 | 修改 ADC_VREF_MV 参数 |
| 数值跳动 | 输入信号不稳定 | 增加滤波电路 |
