打印
[电路/定理]

单片机模数转换中遇到的奇特现象,不知道大家遇到过否?

[复制链接]
4809|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 幸福至上 于 2015-3-17 12:21 编辑

    最近采用STC15F408AD单片机设计了一块板子,其中的一个功能是进行AD采样转换(10位:0-1023),要转换的信号来源之一是隔离电流检测芯片ACS712的输出,该部分的具体电路图如下图1所示:

图1

  图中关于ACS712的接法完全是按照手册上所推荐的连接到AD的连接方式,C21是放置在接近AD输入管脚的位置的。该芯片正常工作,输出符合芯片手册的描述,用电压表实测是:平时无电流通过时,VIOUT输出电压为2.5V,经过一个开关二极管后,大概是2.31V的电压,也就是AD采样转换到的电压值应该是2.31V左右,这是关于硬件设计的介绍。在调试中,我设定每隔100ms采样一次电压,共采集10s(100次),软件中进行AD采样时的程序完全参考STC官方程序,并且做了滤除采样头几次数据和剩余数据做平均处理的算法。测试完成后的数据,会通过串口打印出来。然后遇到的奇特现象如下:

  1、如果C21的104的电容接上的话,那么进行AD转换时所得到的转换值出现这样一个现象:第一次测试时,100个数据从前往后是:840-->721,对应的电压值大概是:4.10V-->3.52V,过了大概1分钟,再次测试,100个数据从前往后依次是:518-517之间,对应的电压值大概是:2.53V。再后面的测试基本就稳定在这个数值了。作为对比,如果去掉C21的104电容,则无论什么时候测试,其电压转换值则是:514-519之间,转换值有波动很正常,因为少了一个电容平滑变化。但也说明了刚开始的时候由于该电容的充电,导致了采集数值的偏差很大。但即便这样,到最后的采样数值也是不对的,应该对应的电压值为2.31V,采样值大概为:478左右。

2、作为测试1的对比,我在测试的时候,一直把电压表接入到D10的阴极和GND之间,此时电压表读数为2.31V,再进行AD转换测试,采集出来的100个数值则基本在477-479之间波动了,对应的电压值就正好是3.21V,说明此时AD采样就工作正常了。相对于测试1所描述的,只是多了一个地方:将电压表串到AD输入和地之间,我猜测可能是因为电压表起了一个泄流的作用,不知道是否如此?

  第一次设计AD接口电路,有很多需要注意的地方还不太清楚,麻烦大家根据以上所说帮我分析下,指出其中需要改正的地方。先谢谢了~~

现在通过更换硬件器件测试,又有了一些新的变化,去掉了D10这个二极管后(C21有接104电容),ACS712的输出通过一个2KΩ电阻之后,就直接接AD输入了,这下子的测试结果大概在517和518之间波动了,算下来的话,还是比理想值:514多了3-4个读数,这个是正常情况还是不正常情况哦?还有为什么去掉D10,转换结果就正常了许多......?





相关帖子

沙发
lfc315| | 2015-3-17 11:50 | 只看该作者
软件开启转换之后,单片机模数转换IO的内阻,引起D10两端电压的非线性变化。
话说,D10是干啥用的?

使用特权

评论回复
板凳
幸福至上|  楼主 | 2015-3-17 12:01 | 只看该作者
lfc315 发表于 2015-3-17 11:50
软件开启转换之后,单片机模数转换IO的内阻,引起D10两端电压的非线性变化。
话说,D10是干啥用的? ...

引起D10两端电压非线性变化?这个怎么说呢?D10我也仔细研究了一下,根据官方手册的参考电路图描述,D10是降压的,以便适用于3.3V的单片机采样。因为ACS712检测到电流变化1A,对应的电压值变化大概185mV,最大5A电流的话,对应的电压值变化则是:0.185*5=0.925V,加上本来0A下是2.5V,则2.5V+0.925V=3.425V,通过这个二极管降压大概0.2V,则ACS712部分电路最后输出的最大电压值为:3.425-2=3.225V。

使用特权

评论回复
地板
幸福至上|  楼主 | 2015-3-17 12:03 | 只看该作者
lfc315 发表于 2015-3-17 11:50
软件开启转换之后,单片机模数转换IO的内阻,引起D10两端电压的非线性变化。
话说,D10是干啥用的? ...

AD输入管脚设置在上电初始化时就进行,并打开了AD模块电源,之后也一直没改过。

使用特权

评论回复
5
lfc315| | 2015-3-17 13:16 | 只看该作者
不是已经由2个电阻分压了么?二极管显得多余吧;
二极管的压差不稳定,会影响测量结果。

使用特权

评论回复
6
幸福至上|  楼主 | 2015-3-17 13:54 | 只看该作者
lfc315 发表于 2015-3-17 13:16
不是已经由2个电阻分压了么?二极管显得多余吧;
二极管的压差不稳定,会影响测量结果。 ...

是通过2K和10K分了电压的,那可能就是另一个说法了:怕AD采样端口影响ACS712的输出?我参考了一些该IC的设计电路图,有的有加这个二极管,有的没加。我最新的测试,去掉了这个二极管,读数稳定到了517,518左右,和理论计算值:514就比较接近了。看来漂移这么大,确实和这个二极管有关系,但为什么会这样。。。压差不稳定吗?

使用特权

评论回复
7
lfc315| | 2015-3-17 14:09 | 只看该作者
看看二极管的电流/压差曲线

使用特权

评论回复
8
liangyu888| | 2015-3-17 14:34 | 只看该作者
你那个电流传感器的周围有没有磁场干扰

使用特权

评论回复
9
hnkf118| | 2015-3-17 14:48 | 只看该作者
C21上并100K以上的泄放电阻,另外STC的基准是VCC,需要你检查下你的VCC的稳定性。另外一点。你是MOTO负载,需要绿波? 先用纯电阻负载试试稳定性。看滤波系数确定什么水平比较合适。
这个芯片我在用,如果只要外界环境不变的情况下,还可以的。

使用特权

评论回复
10
william008| | 2015-3-17 14:48 | 只看该作者
非常肯定的告诉你,问题是由于D10的压降动态变化造成的。
ADC采样时,输入端有个很小的电流,用于给内部采样电容充电。所以流过D10的电流不是零,这个电流是很难计算,还是动态变化的,所以D10的压降你是很难确定的,也是动态变化的
加个万用表,相当于并联了一个电阻(1M~10M这样,取决于万用表),该电阻的电流远大于ADC的输入电流,而且是稳定的,所以此时D10的压降是确定的,ADC的值也是稳定的。
用二极管来降压是很不准的,受器件离散性和温度影响很大!

使用特权

评论回复
11
william008| | 2015-3-17 14:51 | 只看该作者
去掉二极管后,读数值比理想值多3~4个读数——R18和R19有误差造成的。
你家的电阻都是有误差的吧?

使用特权

评论回复
12
幸福至上|  楼主 | 2015-3-17 15:54 | 只看该作者
william008 发表于 2015-3-17 14:51
去掉二极管后,读数值比理想值多3~4个读数——R18和R19有误差造成的。
你家的电阻都是有误差的吧? ...

呃,忘了说,之前说去掉D10的时候,还把R19:10K也去掉的。现在读数有2-4个偏差,不知道这样是否正常不?电阻使用5%精度的。。。(⊙﹏⊙)b

使用特权

评论回复
13
幸福至上|  楼主 | 2015-3-17 16:00 | 只看该作者
liangyu888 发表于 2015-3-17 14:34
你那个电流传感器的周围有没有磁场干扰

我这个传感器是采集电机驱动电流的,离电机驱动的电源走线也还有一定距离,这个真不清楚哩。我贴个图出来看看:

图中,是电路板背面走线,蓝色粗线是电机驱动的地,正面的灰色粗线是电机驱动的电源,最细的红框是ACS712芯片,该芯片左边的红框里是电机驱动芯片L298N,左上和左下两个是外接的电机接线孔。这样的布局方式是否存在这方面的问题呢?麻烦看一下,谢谢。:)


使用特权

评论回复
14
幸福至上|  楼主 | 2015-3-17 16:01 | 只看该作者
lfc315 发表于 2015-3-17 13:16
不是已经由2个电阻分压了么?二极管显得多余吧;
二极管的压差不稳定,会影响测量结果。 ...

听大家都这么说,我也觉得是了。。。(⊙﹏⊙)b

使用特权

评论回复
15
幸福至上|  楼主 | 2015-3-17 16:15 | 只看该作者
lfc315 发表于 2015-3-17 14:09
看看二极管的电流/压差曲线

我把我用的这个1N4448W的电流/压差图截出来:

我自己算了一下,按照ACS712满输出:2.5+0.925=3.425-Vf/2K,电流值大约为1mA+,这个看图上的话,确实变化有些大了,不过应该也不至于ADC读数漂移这么大,没去掉之前,大概能读到700-800左右(理论参考值:514),并慢慢减小。

使用特权

评论回复
16
幸福至上|  楼主 | 2015-3-17 16:24 | 只看该作者
hnkf118 发表于 2015-3-17 14:48
C21上并100K以上的泄放电阻,另外STC的基准是VCC,需要你检查下你的VCC的稳定性。另外一点。你是MOTO负载, ...

通过串入电压表,我也觉得应该需要一个泄放电阻,VCC我用的USB供电,外接Hub,供电是很稳定的5V,并用磁珠对USB的5V供电做了处理。这里ADC调试得差不多了之后,估计就是调试ACS712的这个滤波电容了。谢谢你的建议,希望多交流。:)

使用特权

评论回复
17
liangyu888| | 2015-3-17 16:24 | 只看该作者
给你个参考看看

使用特权

评论回复
18
lfc315| | 2015-3-17 16:27 | 只看该作者
楼主你可以这样试试:
单片机不要开启AD转换,把C21加大到105,上电等待几分钟,在电路进入稳态以后,接上万用表测量D10负极的电压,看是不是刚接上万用表时显示的电压最高,然后会慢慢下降;
如果有慢慢下降的过程,你又还不理解是怎么回事,我也不知道怎么说了。。。

使用特权

评论回复
19
你好陌生人| | 2015-3-17 16:42 | 只看该作者
个人感觉,流过D10的电流不同,D10的管压降是不同的,所以造成的采样不准确

使用特权

评论回复
20
lvyunhua| | 2015-3-17 16:56 | 只看该作者
AD采样,需要考虑很多因素的影响,电源电压变化、线路阻抗变化、元器件参数、环境温度、外接干扰影响等都需要综合考虑。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:重庆电子交流圈:521107487,欢迎各位工程师朋友们加入,一起交流讨论,互动分享,共同进步。

38

主题

854

帖子

10

粉丝