打印
[STC单片机]

请教STC15系单片机《ADC使用内部基准计算外部电压》问题

[复制链接]
9968|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
四方动力|  楼主 | 2014-6-9 08:13 | 只看该作者
附上原理图
原理图.pdf (253.13 KB)

使用特权

评论回复
板凳
coody| | 2014-6-9 11:13 | 只看该作者
因为内部基准是1.23V左右的,*123,表示两位小数。。。。

使用特权

评论回复
地板
四方动力|  楼主 | 2014-6-9 11:39 | 只看该作者
coody 发表于 2014-6-9 11:13
因为内部基准是1.23V左右的,*123,表示两位小数。。。。

*123如何表示两位小数?求祥解

使用特权

评论回复
5
coody| | 2014-6-9 14:32 | 只看该作者
四方动力 发表于 2014-6-9 11:39
*123如何表示两位小数?求祥解

放大100倍啊。。。。:L

使用特权

评论回复
6
四方动力|  楼主 | 2014-6-9 14:56 | 只看该作者
coody 发表于 2014-6-9 14:32
放大100倍啊。。。。

为何要放大100倍,不是1000倍,或者其它倍数?

使用特权

评论回复
7
四方动力|  楼主 | 2014-6-9 15:30 | 只看该作者
我是这样理解的:
VCC=5V时Bandgap=1.23V,这时Bandgap的ADC值为 251=1024*1.23/5。 ADC3的外部电压的 ADC值=1024*Vin/VCC,即外部电压Vin=j*5/1024。

当VCC不为5V时,这时候就要用上面的Bandgap(251)值作为基准值计算.
   假设VCC<5V时,采样ADC3的值为J1,Bandgap的值为B1。采样的值会比实际值大 B1/251。
则ADC实际电压的ADC值为;j=J1*251/B1。

   假设VCC>5V时,采样ADC3的值为J2,Bandgap的值为B2。采样的值会比实际值小 B2/251。
则ADC实际电压的ADC值为;j=J2*251/B2。

所以我认为:上面的值不是123,而是251。

还请高手指正!

使用特权

评论回复
8
四方动力|  楼主 | 2014-6-9 15:57 | 只看该作者

官方的数据手册 P747

QQ联系了STC的人,他只会发一些无用的文档过来,无法解开我的疑惑。还问了一些人,他以为我问的是1.23V怎么来的,最后还是没弄明白,其实我是问为什么*123而不是*251。
是的,谁都看得出来123跟1.23是100倍的关系,5L说放大100倍,我真心不明白为什么要放大100倍。是我太愚蠢了,还是我基础根本就不行。而且1.23V的ADC值为251不是123!

最后:Get_ADC10bitResult()函数返回的是一个10bit的数从0到1024,分别对应0V到5V,可以这么理解吧?

使用特权

评论回复
9
coody| | 2014-6-9 18:02 | 只看该作者
四方动力 发表于 2014-6-9 14:56
为何要放大100倍,不是1000倍,或者其它倍数?

你这样问,我实在无语。。。。。

就好比,我今天花了100元,你就问:为什么不是花了1000元?或其它数目的钱???

使用特权

评论回复
10
coody| | 2014-6-9 18:08 | 只看该作者
放大多少倍,是跟实际工程需要确定的。例程是测量大约5V左右的电压,分辨率大约是0.005V,而例程显示分辨率为0.01V,计算使用整数计算(定点),基准为1.23V,所以*123。

LZ对基本的计算不过关。软件是很灵活的东西。

使用特权

评论回复
11
xg3469| | 2014-6-9 23:14 | 只看该作者
同意coody的说法。

使用特权

评论回复
12
四方动力|  楼主 | 2014-6-10 09:42 | 只看该作者
本帖最后由 四方动力 于 2014-6-10 10:25 编辑

我一直以为j最后的值是ADC的值,今天再去把整个工程文件看完了,发现原来j不是ADC值,而是电压值!

我应用到我的程序的时候j一直是ADC值而不是电压值,错就错在这里!

j是ADC3的实际电压值,应当这么算(j = (u16)((u32)j * 123 / Bandgap);)。因为要向HC595发送字符,所以放大100倍显示到数码管。

coody被我气的…… 他可能没看到我7L说的,还不知道我错认为了j的值是ADC值。还是感谢coody热心回复。@coody

同时反映我的浮躁,还有转牛角尖那个毛病真的要好好治治了。。

  

使用特权

评论回复
评论
autopccopy 2014-6-10 21:42 回复TA
解决了就好。 :) 
13
coody| | 2014-6-10 10:15 | 只看该作者
:lol
我没被气,就是觉得这么浅显的问题。。。。
因为几乎8位MCU都没有浮点运算指令,所以速度慢,而整数(定点)运算就快得多,所以放大一个倍数是常用的方法。

在比如用STC的MCU做16阶的数字滤波,或者Goertzel滤波,用浮点是不现实的,但是换成整数运算却可以用在采样不是很高的情况,比如软解DTMF,或选者几个频率。。。。

使用特权

评论回复
14
沧海一粒| | 2015-4-12 17:27 | 只看该作者
路过,学习了!

使用特权

评论回复
15
知识阅览者| | 2015-8-20 18:34 | 只看该作者
coody 发表于 2014-6-10 10:15
我没被气,就是觉得这么浅显的问题。。。。
因为几乎8位MCU都没有浮点运算指令,所以速度慢,而整数( ...

是位厉害的人呀!你说的我好想都听说过,但是没用过呀!!

使用特权

评论回复
16
xsynet| | 2016-2-24 08:46 | 只看该作者
实际项目使用请串一个1K的电阻到ADC输入口, ADC输入口再并一个电容到地.请问,电容得多大?谢谢!

使用特权

评论回复
17
coody| | 2016-2-24 17:06 | 只看该作者
xsynet 发表于 2016-2-24 08:46
实际项目使用请串一个1K的电阻到ADC输入口, ADC输入口再并一个电容到地.请问,电容得多大?谢谢! ...

看你对信号反应的速度要求,一般设计使RC一阶低通滤波的转折频率 <= ADC采样频率 就可以了。

使用特权

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

本版积分规则

7

主题

92

帖子

0

粉丝