HC32L110 采集ADC有可能一直没有值吗
先说现象:1.试产了1000个大约有20个,ADC采样一直通不过。复位以后程序又正常工作,采样正常。2.对不能正常工作的产品测量对应引脚:
(1)引脚上模拟信号量在变化,0~3V。
(2)ADC连续转换中断有产生,因为我的程序在转换完成中断会关闭ADC使能,把检测口关闭。还把光敏电阻的电源关闭。通过测量光敏电阻电源,和引脚上的变化。确定ADC程序在运行,正常结束。
程序结构:
1.上电后初始化ADC功能。关闭ADC。因为是低功耗项目,所以不用的时候都关闭了外设。
2.在需要的时候,开启转换。转换完成中断后,把ADC值保存在数组中,关闭ADC。
3.程序任务判断ADC的值,做出对应动作。出错在这里,外部模拟量变化,这里没有反应。
我怀疑是我的ADC设置不对,但是又没有找到哪不对。
其中,我实际使用中因为不停的开关BGR,发现BGR的使能时间对结果影响非常大。我实际测试当BGR使能时间大于1ms,结果比较稳定。我程序中是使能了1.5ms才开启的转换。
实际电路中因为输入阻抗大,所以程序开启了电压跟随器功能。
看具体的操作:
需要转换时:
开启光敏电源
使能对应扫描通道
使能ADC时钟
使能ADC
使能BGR
延时1.5ms
清除ADC 连续转换完成中断标志
中断使能
复位ADC连续转换状态
启动ADC转换
ADC中断程序:
清除连续转换完成中断
获取对应通道ADC值保存在数组中。
禁止BGR
禁止ADC
禁止ADC时钟
禁止ADC中断
关闭光敏电源
使用时:
取ADC数据赋给局部变量
局部变量参与运算,判断数据在哪个区间段
根据区间段做出对应动作。
最后,希望有大佬能提供思路。我在考虑是不是要周期性重新初始化ADC,但是这个是治标不治本的办法,我没有找到为什么会出现这个。
出了问题以后,我对这个有问题的产品,开了打印程序,打印ADC值,是变化的。芯片本身ADC功能也正常。对不能采集到ADC数据的,只要复位一次就好了。困惑中 不明白你为流程里为什么每次都要禁止ADC,而且还禁止了它的时钟,你又开启的连续转换模式。如果硬要这样操作,那么ADC就要重新初始化更好一些,而不是只开ADC时钟和使能它。
像你这种应用,不是应该使用单次模式更好吗? hjl2832 发表于 2023-12-21 08:47
不明白你为流程里为什么每次都要禁止ADC,而且还禁止了它的时钟,你又开启的连续转换模式。如果硬要这样操 ...
每次都禁止是为了低功耗,开启连续转换是为了使用中断,并且我不止一路ADC,有时候开启一路,有时候开起2路。 建议确保BGR稳定后再进行ADC转换,并在程序中增加BGR的等待时间。 可以考虑在复位后或在ADC异常情况下重新初始化ADC。 检查电源管理相关的寄存器设置和状态。 确保ADC引脚的配置正确,包括模拟输入引脚没有配置错误,以及引脚上的任何保护电路或滤波电路不会干扰ADC的采样。 可能是硬件问题,考虑检查ADC模块、BGR模块以及相关电路是否存在故障。 怎么解决的 即使没有输入,也会有个比较低的采样值。 不可能的。只要采集,一直都会有值。 ADC连续转换中断有产生,因为我的程序在转换完成中断会关闭ADC使能 不用的时候都关闭了外设。 直接接上5v分压后的看数值
页:
[1]