MCU检测RC充电时间的误差问题

[复制链接]
5783|19
 楼主| szshawn2010 发表于 2010-4-20 16:51 | 显示全部楼层 |阅读模式
实际操作中发现,MCU计量RC充电时间,每次的测量值之间都有很大的误差。

    求教,实际操作中应该注意的事项,以尽可能的减小误差。谢谢
ShakaLeo 发表于 2010-4-20 16:55 | 显示全部楼层
用什么方法测量的?最好上个图
 楼主| szshawn2010 发表于 2010-4-20 17:07 | 显示全部楼层
如图:

100R电阻的 I/O :先为输出方向,输出低电平,延时,对电容放电(此时,其他I/O均为输入方向)。然后 100R的I/O转为输入方向,清零计数器。同时,其他I/O中的一个需要测量的I/O转入 输出方向,输出高电平。判 100R的I/O为高电平时,计录时间。为充电时间

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| szshawn2010 发表于 2010-4-20 17:10 | 显示全部楼层
使用这个方法,例如:对 PIN 1脚上的2K电阻,反复充电测试。每次的数值差别都是较大的。
已经确定了,电容放电完全。
ayb_ice 发表于 2010-4-20 17:30 | 显示全部楼层
rc常数设大点
 楼主| szshawn2010 发表于 2010-4-20 21:32 | 显示全部楼层
5# ayb_ice

太大了,8位的寄存器放不下啊。有更好的办法没?
ayb_ice 发表于 2010-4-21 09:06 | 显示全部楼层
<<太大了,8位的寄存器放不下啊。有更好的办法没?>>
放不下可以软件处理
yiwusuoyou 发表于 2010-4-21 15:59 | 显示全部楼层
RC常数放大点应该是有效果的,再做个滑动平均处理吧。C最好用钽电容
 楼主| szshawn2010 发表于 2010-4-21 22:45 | 显示全部楼层
8# yiwusuoyou

兄弟,你的 “滑动处理” 的意思是不是说,当检测I/O检测到高电平时,做个延时处理,然后再检测,如果还是高电平,则意味着充电完全?

如果是这样的话,那么延时多少时间为佳?10us够吗?
awey 发表于 2010-4-22 00:44 | 显示全部楼层
1、RC时间常数取大一些,计数频率减慢一些、
2、电容器选用无电荷存储效应的薄膜电容。
 楼主| szshawn2010 发表于 2010-4-22 10:09 | 显示全部楼层
10# awey

我以为频率快些会准确一些呢。
yiwusuoyou 发表于 2010-4-23 16:26 | 显示全部楼层
呵呵,做平均只是为了测量准确些(采样数据可能会变化比较大,不做简单滤波处理,数据跳动就大),频率应该是高些比较好的,精度就会高点的,我做过交流供电的,低温区比较准确,高温区误差略大。
 楼主| szshawn2010 发表于 2010-4-23 22:38 | 显示全部楼层
本帖最后由 szshawn2010 于 2010-4-23 22:40 编辑

13# yiwusuoyou

其实很多东西,理论上都是很简单的,但是当实际动手做时,就会有这样或那样的问题。

既然兄弟你做过这类的东东。那我就把我的情况再详细说一说,恳请你不吝赐教:


1.我的MCU只有一个定时器。这个定时器要为开启工作电路时刻准备着。溢出数值为256,因为需要,就赋了初值205。即每50个周期,会有一次定时中断。

2.同时,又开启了外部中断;

3.当需要对电容充电计时,每发生一次定时中断,则对寄存器R1加上数值50,此时R1有进位标志发生,则对R2加上数值1。

理论上,充电时间= R2{R1+(TIMO-TIMO初)}
           备注:草稿程序中,将TIMO这部分给省略掉了。即“R2R1”组成一个16位的
                   二进制寄存器。

4.实验结果是,电阻越大,计量的时间误差就越大。而且每次数据差距都很大。
           备注:在检测充电是否完全时,已经做了一次延时处理,大约为6个机器周期,约6us。


----------------
实践表明,若定时器仅为电容充电工作的话,测量效果还是很好的。但是却无法开启样板的主功能了。

在定时中断子程序中,外部中断子程序中,指令时间大约为30-60个机器周期。
awey 发表于 2010-4-23 23:31 | 显示全部楼层
电容器有电荷存储效应,通俗的比方就是:用木桶装水,会倒不干净。所以用于对充放电有精度要求的场合,最好用存储效应小的薄膜电容器。
速度慢一些,可以让电容充分放电,同时,放宽对软件处理及时性的要求。因为直接用IO口做为比较,对电源的纹波要求很高,如果电源不干净,将会带来很大的误差。
 楼主| szshawn2010 发表于 2010-4-24 01:02 | 显示全部楼层
本帖最后由 szshawn2010 于 2010-4-24 01:03 编辑

15# awey

感谢解答!我用的是瓷片电容 1UF。因精度要求不是很高,所以也懒得去找电容样品了。

实践中,定时器仅为电容充电计数的话,那么 计数值为 197时,误差为正负3。再大一些计数值为2000时,误差也在接受范围内。

当定时器,除了计数,还要处理其他任务时,计数值就不靠谱了。有时的大的很离谱。
QuakeGod 发表于 2010-4-24 02:15 | 显示全部楼层
瓷片电容 最要不得,不是精度的问题,而是温漂太大,随便吹口气,数值就差好多,
这个电容是最重要的电容,直接影响系统精度,应该用高精度的校正电容。
另外,让RC时间常数变大的目的就是减小定时误差造成的影响。
工控秀才 发表于 2010-4-24 11:37 | 显示全部楼层
带AD的MCU已经很便宜了.何必这么麻烦.
yangyicheng 发表于 2010-5-28 15:30 | 显示全部楼层
你是要计算R4的阻值,除法比较,即使有些误差,也没有关系啊,比值计算后就可以消除啊!通用的测温电路。
yslf1985 发表于 2010-8-10 16:17 | 显示全部楼层
学习一下~~
dzchb 发表于 2010-8-10 17:42 | 显示全部楼层
认真学习下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

636

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部