关于F2812的QEP模块可能的bug

反映一个F2812的bug,是关于码盘计数器溢出中断的。

计数器的上溢出中断发生条件是计数器的值达为0xFFFF,下溢出中断的发生条件是计数器的值达为0x0000,注意!!只要计数器的值达到了0xFFFF,上溢出中断标志就会置位,对于下溢出也是一样。

实际上对于控制工程师,我们关心的是溢出事件:所谓上溢出事件,就是指计数器的值从0xFFFF又增加了1,此时值反而变成了0x0000,这个过程叫做上溢出。下溢出类似。当计数器的值等于0xFFFF时,并不意味着一定发生了溢出,也许我的值增加到了0xFFFF又开始减小了,实际上并未溢出,但这时2812的上溢出中断也会发生。如果计数器的值不幸停在了0xFFFF不变了,那么2812就会不停的中断,你清除中断标志位退出中断,然后马上又会进入这个中断!

也许你要说这种事情发生的概率小。那么我遇到的问题就不小了:由于我的设备需要连续旋转,因此码盘计数器会发生溢出,我使用计数器溢出中断(T2UFINT和T2OFINT)来判断溢出的发生以及溢出的方向,可是每次发生溢出时,上溢出中断标志和下溢出中断标志总是一起出现,不管实际溢出是正向还是反向。为什么呢?因为2812的溢出中断原则是:只要你等于0xFFFF,就认为你发生了上溢出,只要你等于了0x0000,就认为你发生了下溢出!当实际溢出发生时,计数器从0xFFFF跳变到0x0000,他就认为你既发生了上溢出,又发生了下溢出!因此当溢出发生时,上下溢出中断总是成对出现,本来想用来判断溢出方向的,这下根本形同虚设!后来只好用软件判断溢出方向。

永不止步步 发表于03-27 16:17 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345327个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号