减小软件计时累积误差的方法

[复制链接]
5266|19
 楼主| icmap 发表于 2008-11-19 21:52 | 显示全部楼层 |阅读模式
看来对定时器进行软件重装的方法也不错,论坛上有人已经解决了指令时间不相同的问题。
谈的元 发表于 2008-11-19 21:56 | 显示全部楼层

累计误差应该可以消除吧?

HWM 发表于 2008-11-19 22:13 | 显示全部楼层

找一个合适的晶振,定一个合适的时基,完全可以做到精确

在MCU中,定时误差完全取决于晶振的频率选择和频率精度,和软件没有关系。如果晶振的频率选择适当且绝对精确(理想),定时可以做到准确无误。
 楼主| icmap 发表于 2008-11-19 22:23 | 显示全部楼层

如果软件做好了,就对晶振频率没有要求。

如果软件做好了,就对晶振频率没有要求,何乐而不为?
只是对晶振还有精度要求而已,这是软件无法解决的。
我的方法有一个很好的优点,就是:很容易由软件对晶振偏差进行补偿,也可以进行温度补偿,只要知道补偿量即可。补偿的方法是将那两个常量改为变量,在程序中动态修改。
补偿量可以用专业的频率计对实际电路进行测量得到。
温度补偿需要温度传感器。
HWM 发表于 2008-11-19 22:29 | 显示全部楼层

呵呵,没得讲了。

ljm810010 发表于 2008-11-19 23:53 | 显示全部楼层

有点失望,不是我想要的

//      P1=~P1; //将P1口反转
竟然放在主循环里,除非CPU什么都不干,否则就算精准定时到了,也没空理会IO口输出反转。
ljm810010 发表于 2008-11-20 00:06 | 显示全部楼层

不存在无理数之说

无理数是指无限不循环小数,这里的定时中断频率与时钟频率只有整倍数和非整倍数两种,非整倍数会出现小数,但是是有限小数或循环小数,不可能是无理数。
ljm810010 发表于 2008-11-20 00:18 | 显示全部楼层

u32Time不断增大,终会溢出

程序中没考虑溢出问题
 楼主| icmap 发表于 2008-11-20 00:27 | 显示全部楼层

回复 9 楼

溢出不是问题,不明白吧?呵呵。
 楼主| icmap 发表于 2008-11-20 00:29 | 显示全部楼层

回复 7 楼

3分钟才翻转一次,主循环不会超过 0.1 秒吧?
 楼主| icmap 发表于 2008-11-20 00:31 | 显示全部楼层

关键是软件累积误差只有 0.06ppm,

而且不像某些程序那样要要求特定的晶振频率。
ljm810010 发表于 2008-11-20 00:40 | 显示全部楼层

再细看程序,P1口定时反转瞬时误差竟达65ms,何以谈精度?

ljm810010 发表于 2008-11-20 00:48 | 显示全部楼层

10楼,溢出不是问题?

if(u32Time - u32TimeOld >= 1800)

u32Time 溢出后为0,这时u32TimeOld 为 0xffffffff,以后,永远也不会再出现能比0xffffffff更大的可能
ljm810010 发表于 2008-11-20 00:52 | 显示全部楼层

回11楼,瞬时误差取决于主循环时间,这样好吗?

 楼主| icmap 发表于 2008-11-20 00:52 | 显示全部楼层

看用在什么地方。

如果是开关红绿灯,那足够了。
程序中不也说了吗,如果想减小瞬时误差,可以减小定时器的中断周期,
你减小定时器的中断周期就是了,注意还要相应修改那两个常数。
ljm810010 发表于 2008-11-20 00:57 | 显示全部楼层

呵呵,可能我说得有点偏激了

思路还可以,一种减少积累误差的方法,但对瞬时误差没什么效,程序也写得有点儿那个。
 楼主| icmap 发表于 2008-11-20 01:03 | 显示全部楼层

回复 14 楼

本帖最后由 icmap 于 2010-2-10 14:02 编辑

中断中的 u8DeciSecond 每隔 25.6 秒就溢出一次,也没影响计时,一样的道理。
ljm810010 发表于 2008-11-20 01:11 | 显示全部楼层

1 - 0xffffffff = 2,C的逻辑

呵呵,是我大意了,跟数学的意义完全两个样,这次是你对了
 楼主| icmap 发表于 2008-11-20 01:14 | 显示全部楼层

汇编也是这个逻辑,呵呵

ljm810010 发表于 2008-11-20 01:25 | 显示全部楼层

汇编有些不同

uchar x,y;
x=1;
y=2;

C:

if ((x-y) > 0)  ;条件永远成立,C认为 1-2大于0 

汇编:
mov a,x
mov b,y
clr c
subb a,b
jc lab123       ;相减为负,跳转
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

180

帖子

0

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