本帖最后由 qhtflsw 于 2025-4-28 22:52 编辑
在网上找了很多,按照写了,还是抖动厉害。还有漏响应的。
弄了两天,按照自己思路写了才弄出来。
之前以为开双路下降沿检测,后面仔细研究了一下。
只要一路外部中断即可。开双边沿检测。这样每转一次,都可以检测到,不会漏响应
A相
B相
简单看成2个按键,按下时候有相位差,用这个相位差判定是正转还是反转。
然后执行响应动作。
初始化打开A相外部中断开上升沿和下降沿外部中断,B相不用开。另外开一个1ms定时器,做3-5ms的延时开启中断
外部中断函数里:
假设PA0检测到A相下降沿或者上升沿才进来
if(0 == PA0)
{
if(PB0)//判定B相电平,高则正转,低则反转,正转计数+1,反转计数-1
{ cnt++;
}
else
{
cnt--;
}
}
else//A相上升沿
{
if(0==PB0)//判定B相电平,低则正转,高则反转,正转计数+1,反转计数-1
{ cnt++;
}
else
{
cnt--;
}
}
执行完后置位延时标志
delay=1;
关闭外部中断;//抖动持续1-3ms
1ms定时器中断里:
if(delay)
{
if(++A5ms》=5)
{
A5MS=0;
delay=0;
开A相外部中断;
}
}
OK,搞定。解决了
|