首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:KBI消抖

1.中断服务程序提供信号标志,但是不要进行其他操作;
2.main函数查询中断服务提供的信号标志,进行处理相关的操作;
3.消抖太简单了,可以采取延迟、计时、计次等操作进行处理。

根据我提供的方法,可以轻松解决上诉问题。

/********** 飞思卡尔交流QQ群:82738157 ************/
我这边有个程序,2路采集脉冲信号(还需要计算脉冲的宽度),16路采集按键信号,8路采集AD信号。均有防抖处理。
其实防抖是个必要的过程。任何模拟量、脉冲信号的采集,都会有所误差和抖动,如果防抖没做好,那么数据就会产生实时性的偏移。
防抖处理绝对不能占用中断服务程序,不然会使整个系统失去实时性。

[此贴子已经被作者于2009-5-25 10:29:47编辑过]

/********** 飞思卡尔交流QQ群:82738157 ************/
for (;;)
{
WATCHDOG(); //喂狗

//---- 10MS 事件处理------------**
if(Time10MS == TRUE)
{
Time10MS = FALSE;

Main_10MS_Event();//按键、报警综合处理

}

//---- 100 MS事件处理------------**
if(Time100MS == TRUE)
{
Time100MS = FALSE;

if(u8TripShow == TRUE)
{
u8temp = Cantx_Milesep();
u8TripShow = FALSE;
}

//------- 蜂鸣器事件-----------
Pwm_Bzloop();

Main_100MS_SRVEvent(); //脉冲信号处理

//----- 1秒 事件处理------------**
tim1s ++;
if((m1s % 10) == 0) //1秒
{
Main_1S_Ad_Event();
Main_1S_Can_Event();
}
//----- 6秒 事件处理------------**
if((tm1s % 60) == 0)
{
Main_6S_Events(); //--
}

}
/********** 飞思卡尔交流QQ群:82738157 ************/

我特意做了个计时,main主循环里面的计时误差极小,1小时的误差在10秒内。

中断部分,除了提供10MS、100MS基准时钟外,还进行脉冲信号采集、计数,防抖处理均在主循环调用的函数中进行。

你主循环太慢,是你的中断系统使用不当引起的问题,或者算法问题。

浮点数运算有吗?

/********** 飞思卡尔交流QQ群:82738157 ************/
返回列表