打印

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

[复制链接]
4329|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 | 只看该作者

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

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

使用特权

评论回复
5
HWM| | 2008-11-19 22:29 | 只看该作者

呵呵,没得讲了。

使用特权

评论回复
6
ljm810010| | 2008-11-19 23:53 | 只看该作者

有点失望,不是我想要的

//      P1=~P1; //将P1口反转
竟然放在主循环里,除非CPU什么都不干,否则就算精准定时到了,也没空理会IO口输出反转。

使用特权

评论回复
7
ljm810010| | 2008-11-20 00:06 | 只看该作者

不存在无理数之说

无理数是指无限不循环小数,这里的定时中断频率与时钟频率只有整倍数和非整倍数两种,非整倍数会出现小数,但是是有限小数或循环小数,不可能是无理数。

使用特权

评论回复
8
ljm810010| | 2008-11-20 00:18 | 只看该作者

u32Time不断增大,终会溢出

程序中没考虑溢出问题

使用特权

评论回复
9
icmap|  楼主 | 2008-11-20 00:27 | 只看该作者

回复 9 楼

溢出不是问题,不明白吧?呵呵。

使用特权

评论回复
10
icmap|  楼主 | 2008-11-20 00:29 | 只看该作者

回复 7 楼

3分钟才翻转一次,主循环不会超过 0.1 秒吧?

使用特权

评论回复
11
icmap|  楼主 | 2008-11-20 00:31 | 只看该作者

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

而且不像某些程序那样要要求特定的晶振频率。

使用特权

评论回复
12
ljm810010| | 2008-11-20 00:40 | 只看该作者

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

使用特权

评论回复
13
ljm810010| | 2008-11-20 00:48 | 只看该作者

10楼,溢出不是问题?

if(u32Time - u32TimeOld >= 1800)

u32Time 溢出后为0,这时u32TimeOld 为 0xffffffff,以后,永远也不会再出现能比0xffffffff更大的可能

使用特权

评论回复
14
ljm810010| | 2008-11-20 00:52 | 只看该作者

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

使用特权

评论回复
15
icmap|  楼主 | 2008-11-20 00:52 | 只看该作者

看用在什么地方。

如果是开关红绿灯,那足够了。
程序中不也说了吗,如果想减小瞬时误差,可以减小定时器的中断周期,
你减小定时器的中断周期就是了,注意还要相应修改那两个常数。

使用特权

评论回复
16
ljm810010| | 2008-11-20 00:57 | 只看该作者

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

思路还可以,一种减少积累误差的方法,但对瞬时误差没什么效,程序也写得有点儿那个。

使用特权

评论回复
17
icmap|  楼主 | 2008-11-20 01:03 | 只看该作者

回复 14 楼

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

中断中的 u8DeciSecond 每隔 25.6 秒就溢出一次,也没影响计时,一样的道理。

使用特权

评论回复
18
ljm810010| | 2008-11-20 01:11 | 只看该作者

1 - 0xffffffff = 2,C的逻辑

呵呵,是我大意了,跟数学的意义完全两个样,这次是你对了

使用特权

评论回复
19
icmap|  楼主 | 2008-11-20 01:14 | 只看该作者

汇编也是这个逻辑,呵呵

使用特权

评论回复
20
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

粉丝