找回密码
 立即注册
楼主: 我的用户名

ADC采集为什么有时候是0?

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-11-5 10:45:44 | 显示全部楼层
VC*** 发表于 2024-11-4 00:13
这个问题的结论究竟如何呢?

代码里的用法不对?或者是硬件设计自身缺陷? ...

硬件设计自身缺陷会重复出现问题,而不会是偶尔出现。
出现读到0的几种情况:
1、ADC输入端对地没有接电容(特别是输入电阻比较大时),一般接1nF~100nF。ADC没有输入缓冲,是直接采样的,这个电容可以提供瞬间的采样电流,也可以滤除尖峰干扰。尖峰干扰可可能会在某个采样时刚好干扰到0.
2、硬件输入电路错误。比如,使用补偿电容的情况,在输入为方波下降沿时,就有机会度到0,因为电容将输入都变成负电压了。
3、如果是查询方式转换,触发ADC后,延时0.5us再查询是否完成。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2024-11-19 22:19:37
已绑定手机

0

主题

12

回帖

80

积分

注册会员

积分
80
发表于 2024-11-13 20:38:13 | 显示全部楼层
我也碰到了,之前用DIP的15系没有这个问题,目前用STC8G1K08A- sop8 和 最新的8H2K12U- sop8都一样 我用P33脚直接用电阻接电源,再读最小值看,不知什么时候就得到0了 有时几秒 有时几十秒,大家怎么解决???
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2024-11-19 22:19:37
已绑定手机

0

主题

12

回帖

80

积分

注册会员

积分
80
发表于 2024-11-13 20:53:41 | 显示全部楼层
梁*** 发表于 2024-11-5 10:45
硬件设计自身缺陷会重复出现问题,而不会是偶尔出现。
出现读到0的几种情况:
1、ADC输入端对地没有接电 ...

你读最小值,是会重复出现的,把最小值设个值,过不久就有0来了,不存在输入端干扰问题,因为我并了47μ电容和104电容,并且从电源直接接个电阻分压到端口...你试试,之前用DIP16的15W系的没这个问题 ,做了好些板,不知道怎解决了,STC8G1K08A- sop8 和 最新的8H2K12U- sop8都一样有这问题

点评

我用各种型号的DAC做过很多东西,没有发现你说的读到0的情况。 好多控制器,如果ADC读到0,是会出大问题的,实际上我一次都没碰到过。  详情 回复 发表于 2024-11-13 22:42
用我们实验箱测试下,我们没发现  详情 回复 发表于 2024-11-13 21:32
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-11-13 21:32:12 | 显示全部楼层
pzeg*** 发表于 2024-11-13 20:53
你读最小值,是会重复出现的,把最小值设个值,过不久就有0来了,不存在输入端干扰问题,因为我并了47μ ...

用我们实验箱测试下,我们没发现,8G/8H 的 ADC 很稳,用的产品太多了
截图202411132134057062.jpg

截图202411132134312323.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:74
  • 最近打卡:2025-04-29 13:02:20
已绑定手机

0

主题

130

回帖

174

积分

注册会员

积分
174
发表于 2024-11-13 22:09:07 来自手机 | 显示全部楼层
参考电压有问题吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-11-13 22:42:55 | 显示全部楼层
本帖最后由 梁工 于 2024-11-13 22:44 编辑
pzeg*** 发表于 2024-11-13 20:53
你读最小值,是会重复出现的,把最小值设个值,过不久就有0来了,不存在输入端干扰问题,因为我并了47μ ...

我用各种型号的DAC做过很多东西,没有发现你说的读到0的情况。
好多控制器,如果ADC读到0,是会出大问题的,实际上我一次都没碰到过。
输入脚高电压还能读到0的,基本都是软硬件不对导致的。如果能经常读到0,我们内测都过不了,更别说量产了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:45
  • 最近打卡:2025-04-28 09:23:48

3

主题

43

回帖

493

积分

中级会员

积分
493
发表于 2024-11-13 23:13:17 | 显示全部楼层

前面提到老梁示波器读方波不存在数据跳动的说法,其实这个对比并不严谨。


因为如果只是在短时间内多次采样同一个ADC通道,ADC采样保持电容上的电压将始终与外部电压保持较低的压差,
即使输入不放置储能电容,也可以使每次ADC转换都不会产生和外部太大的误差或者跳动;


但如果存在切换ADC采样通道的情况,那么这一次采样后,ADC采样保持电容上的电压和这一次采样的输入电压就有可能存在不同,
此时ADC的采样保持电容就会对外部信号放电或者从外部抽取较多的电荷进行电压平衡,等效过来就是输入阻抗突然变小或者为负。

实际电路中的现象也是和这个原理符合的,当上一个ADC通道输入电压和这一次输入通道的电压存在较大压差,切换采样通道进行采样时,
就可以用示波器看到引脚上出现一个电压跌落或者抬升。
即使采样同一个通道,ADC采样间隔时间过长,ADC采样保持电容的电消耗完了,开始转换时也会对输入信号抽取较多的电流,从而形成电压跌落。
如果遇到这种情况,解决的办法只能是降低信号输入的阻抗(主要是交流阻抗,增加电容大小),或者是让ADC采样开关导通的时间变长(STC8系列可以单独设置),
我个人观察STC8系列一般ADC外部输入电容在1nF以下的话,采样开关导通时间大于15uS基本可以使内外部压差小于1LSB。

所以基于这个分析思路,这个问题大概有几种可能:
1,单片机ADC的引脚最近处没有放置足够有效的(如果接地回路阻抗太大也是无效的)储能电容,一般STC的单片机最少需要470pF;

2,ADC的采样保持时间过短,等效的输入阻抗变小,导致信号被拖垮;
3,ADC在切换这次通道的时候被上一通道的电压干扰到,导致ADC采样回来的电压存在跌落(可以观察一下出问题时候的采样通道时序);
可以用示波器测量这个引脚的电压波形,观察在采样时是否有太大的电压掉落,可以判断储能电容是否足够。


STC的ADC模块确实是性能很好的,无论是10位还是12位,都可以做到实打实的有效位数,前提当然是保证参考电压稳定和ADC引脚上电压波形的稳定。
即使是因为ADC输入采样保持电容导致的电压跌落,用示波器抓取波形时,看到跌落后的电压和ADC获得的电压也是基本一致的,
换言之就是ADC转换器本身是精度保证的,你给到ADC采样保持后是什么样的电压,ADC就可以读出什么样的电压。

我用STC做过多次项目,ADC这一块可以完全信任芯片,数据是可以不滤波的(只是针对输入的源数据),采一次的结果就直接用了,数据跳动都是正负1bit,没有出现异常的跳动,
可以做到每次采样都是有效的,因为有些项目上如果ADC有一次出错,程序都报错,现在观察下来并不存在这个问题。

点评

“如果存在切换ADC采样通道的情况,那么这一次采样后,ADC采样保持电容上的电压和这一次采样的输入电压就有可能存在不同” 设置合适的采样时间即可。内部采样500R+16pF,假设外部输入串联1K电阻,则RC时间理论值为2  详情 回复 发表于 2024-11-14 15:30
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-11-14 15:30:51 | 显示全部楼层
本帖最后由 梁工 于 2024-11-14 15:32 编辑
rm5*** 发表于 2024-11-13 23:13
前面提到老梁示波器读方波不存在数据跳动的说法,其实这个对比并不严谨。

“如果存在切换ADC采样通道的情况,那么这一次采样后,ADC采样保持电容上的电压和这一次采样的输入电压就有可能存在不同”

设置合适的采样时间即可。内部采样500R+16pF,假设外部输入串联1K电阻,则RC时间理论值为24ns,如果采样时间为1us,已经是40倍(还可以设置更长的采样时间),足够充放电到输入电压了,就算有偏差,也不应该度到0(输入电压比较大时比如1V)。

我举例示波器读方波,是因为这种有输入补偿电容的情况,更容易出现容性信号而已。而一般的输入是RC滤波,就不会出现有输入补偿电容的情况,更不容易读到0.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:45
  • 最近打卡:2025-04-28 09:23:48

3

主题

43

回帖

493

积分

中级会员

积分
493
发表于 2024-11-14 16:38:13 | 显示全部楼层
梁*** 发表于 2024-11-14 15:30
“如果存在切换ADC采样通道的情况,那么这一次采样后,ADC采样保持电容上的电压和这一次采样的输入电压就 ...

这个是考虑外部输入阻抗非常低的情况,内部的RC才能这样估算。当外部输入阻抗大的时候,内部电容抽取电荷的瞬间外部电压就会下降得非常快。
下次我开一个帖子来详细描述这个现象。

点评

输入对地有一个电容,一般是1nF~100nF,只要采样率设计好,就会消除高输入电阻的影响,在别的贴子我也说明过。  详情 回复 发表于 2024-11-14 17:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-14 16:48:48 | 显示全部楼层
我的*** 发表于 2023-12-23 08:55
采样部分代码如下,请大神们帮忙看看是不是有问题,谢谢!

u16 read_ADC10value()  //读取ADC数值

    ADC_RES = 0;
    ADC_RESL = 0;
这两句是多余的
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:19 , Processed in 0.150776 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表