衡山派开发板PSADC驱动测试指南:从RTOS到裸机的ADC数据采集实战
衡山派开发板PSADC驱动测试指南从RTOS到裸机的ADC数据采集实战最近在衡山派开发板上做数据采集项目发现很多朋友对板载的PSADC可编程逐次逼近ADC使用不太熟悉尤其是在RTOS和裸机两种不同环境下测试流程和命令还有差异。今天我就结合官方文档手把手带大家走一遍完整的ADC驱动测试流程从环境配置到数据读取把每个步骤和容易踩的坑都讲清楚。无论你是刚接触衡山派开发板还是需要在不同项目中验证ADC功能这篇教程都能帮你快速上手。1. 测试前的准备工作在开始测试ADC之前咱们得先把“战场”布置好。这包括硬件连接和软件环境配置两部分。1.1 硬件与软件环境清单硬件部分很简单衡山派开发板确保你的板子型号是D21x、D13x或D12x系列之一因为不同系列的基准电压不同这点后面会重点讲。USB数据线用于给开发板供电和串口通信。软件部分需要准备PC端串口终端软件比如Putty、MobaXterm或者SecureCRT。这个软件是用来连接开发板输入命令和查看输出结果的。你需要知道开发板连接到你电脑的串口号COM口和波特率通常是115200。test_psadc测试程序这是衡山派SDK里自带的ADC测试工具咱们今天的操作都围绕它展开。它需要你先在系统配置里开启然后编译进系统。1.2 配置并编译测试程序test_psadc工具不是默认就有的需要咱们手动配置开启。这里以RTOS环境Luban-Lite为例裸机环境的配置菜单可能略有不同但思路一致。进入配置菜单打开终端进入到你的Luban-Lite SDK根目录然后输入配置命令scons --menuconfig这个命令会打开一个图形化的配置界面。找到并开启ADC测试选项在配置菜单里按照以下路径导航Drivers options --- Drivers examples --- [*] Enable PSADC driver test command用空格键选中Enable PSADC driver test command这个选项前面会出现一个[*]星号然后保存并退出配置界面。重新编译系统配置保存后在SDK根目录下执行编译命令例如scons将test_psadc程序编译进系统镜像中。注意完成编译后需要将新的系统镜像烧录到开发板中重启后配置才能生效。2. RTOS环境下的ADC测试在Luban-Lite这类RTOS系统下test_psadc是以一个Shell命令的形式存在的使用起来非常方便。2.1 认识测试命令首先咱们通过帮助命令看看这个工具都能干什么。在开发板的串口终端里输入aic / test_psadc -h你会看到类似下面的输出Compile time: Jul 26 2023 08:20:53 Usage: test_psadc [options]: -r, --read Read the adc value -t, --voltage Set default voltage -s, --status Show more hardware information -n, --number Set the number of samples, default is 10 -h, --help Example: test_psadc -r这几个参数是核心-r读取ADC值这是最常用的功能。-t设置默认电压这是一个关键操作后面会详细解释什么时候需要用它。-s查看状态比如当前使能了哪几个ADC通道。-n设置采样次数默认是10次。2.2 关键概念基准参考电压在动手测试前必须理解一个核心概念——ADC基准参考电压。你可以把它想象成ADC测量电压的“尺子”的最大刻度。ADC读到的原始数字值比如0-4095需要结合这把“尺子”的长度才能换算成真实的电压值。衡山派开发板比较智能它会尝试从芯片内部的一个叫eFuse的存储单元里自动读取这把“尺子”的长度即基准电压。不同系列的芯片这把“尺子”的默认长度是不同的产品系列ADC基准参考电压D21x3.0 VD13x2.5 VD12x2.5 V什么是“默认电压”只有当系统无法从eFuse中读到基准电压时才会使用咱们手动设置的“默认电压”。这个默认值通常就设成上表对应系列的值。小技巧如果你在测试时看到串口打印Failed to obtain reference voltage through efuse这个错误信息这就说明系统自动读“尺子”失败了此时才需要你使用-t参数来手动设置默认电压。2.3 实战读取ADC数据假设我的开发板是D21x系列咱们来走一个完整的读取流程。查看ADC状态先看看系统当前使能了哪几个通道。aic / test_psadc -s输出可能如下In PSADC V1.01 enabled 3 channels: [5] [6] [7]这说明当前ADC的5、6、7三个通道是可以采样的。你的开发板配置可能不同请以实际输出为准。可选设置默认电压如果系统提示获取基准电压失败我们就需要手动设置。根据上表D21x是3.0V。aic / test_psadc -t 3可选设置采样次数如果觉得默认的10次太多或太少可以用-n调整。比如我只想采样2次aic / test_psadc -n 2执行读取命令最激动人心的时刻读取ADC值aic / test_psadc -r你会看到类似下面的详细输出The reference voltage is 3.0v Start sampling 2 samples for 3 channels Sample time: 11 us [1] PSADC: 4095 976 833 voltage: 3.0v 0.71v 0.61v Sample time: 10 us [2] PSADC: 4095 907 750 voltage: 3.0v 0.66v 0.54v我来解读一下这个结果The reference voltage is 3.0v当前计算使用的“尺子”是3.0V这和我们D21x系列是对应的。Start sampling 2 samples for 3 channels开始对3个通道进行采样总共采样2次。每一次采样输出两行PSADC: 4095 976 833这一行是原始ADC数字值。三个数字分别对应通道5、6、7从小到大排序。4095是最大值表示该通道输入电压等于或超过了基准电压3.0V可能是悬空或接了高电平。voltage: 3.0v 0.71v 0.61v这一行是换算后的实际电压值。系统已经帮我们用“尺子”3.0V把原始值0-4095换算成了直观的电压。可以看到通道6输入约0.71V通道7输入约0.61V。3. 裸机环境下的ADC测试如果你是在裸机Bare-metal环境下开发test_psadc的使用方式会有些不同主要是命令格式变了。但核心概念和步骤是完全相通的。3.1 裸机下的命令格式在裸机系统的串口终端中输入帮助命令aic / test_psadc help你会看到如下格式的帮助信息Compile time: May 29 2024 13:23:14 Usage: test_psadc [options] test_psadc read : Get the adc value test_psadc modify default_voltage : Modify default voltage test_psadc status : Check the psadc status test_psadc help : Get this help Example: test_psadc read注意这里的参数不再是-r、-t这种带短横线的形式而是变成了子命令形式read对应-rmodify对应-tstatus对应-s裸机版本暂时没有设置采样次数的-n参数采样次数可能是固定的。3.2 裸机环境实战操作操作流程和RTOS下几乎一样只是命令换了个写法。查看状态aic / test_psadc status必要时设置默认电压比如为D21x设置3.0V。aic / test_psadc modify 3读取数据aic / test_psadc read输出信息的内容和含义与RTOS环境下的test_psadc -r完全一致同样会显示基准电压、原始ADC值和换算后的电压值。4. 常见问题与调试心得最后分享几个我在测试过程中遇到过的问题和心得希望能帮你少走弯路。通道读数一直是4095满量程这通常表示该ADC通道的输入引脚悬空了。ADC输入阻抗很高悬空时容易受到干扰读到的值不稳定且通常为最大值。解决办法是确保通道连接了待测的模拟信号源或者如果不用最好在程序中将该通道禁用。电压换算不准首先确认你设置的基准电压值是否与你的开发板型号D21x/D13x/D12x匹配。其次检查你的模拟信号源是否稳定ADC测量的是瞬时值如果信号有波动读数也会变化。对于高精度要求还需要考虑电源噪声、参考源精度等因素。命令执行失败或找不到最可能的原因是没有在menuconfig中启用test_psadc驱动测试命令或者配置后没有重新编译和烧录系统。务必确认编译的镜像包含了此测试程序。RTOS和裸机命令别搞混这是最容易弄错的地方。在RTOS下用test_psadc -r在裸机下用test_psadc read。记不住的时候随时用-h或help参数查看帮助。好了关于衡山派开发板PSADC驱动的测试方法就介绍到这里。无论是RTOS还是裸机核心就是配置、理解基准电压、然后使用对应的命令读取。动手试试吧遇到问题多看看串口打印的提示信息大部分情况下都能找到线索。