HAL库中断下降沿解决编码器问题方案

EC11旋转编码器 下降沿中断触发判断正反转问题解决方案

首先上一张旋转编码器的电平逻辑图:
在这里插入图片描述
先说一下思路:A引脚我设置了下降沿中断触发,B引脚设置了读输入。当A引脚出现由高电平向低电平转换的现象,中断触发器检测到下降沿,就会触发下降沿中断,在中断函数里面编写函数读取B引脚的高电平还是低电平。如果是高电平,那么此编码器是正转,反之,低电平是编码器反转。

在这里插入图片描述

先说一下出现的两个问题:
现在,我有两个编码器P1和P2。
问题1:
示波器测量P2正处于高电平状态,当正向旋转P1的时候,P2的数值也会正向的增大,调试代码发现P2也跟着进入到了下降沿中断,此时P2的B引脚一直为高电平,因此P2的数值会跟着增大------------------问题:为什么旋转P1,P2会跟着进入中断?(旋转P1的产生中断的那一刻,在示波器40ns的时候看到P2的A引脚叠加了幅值为0.2V左右的高频杂波,幅值这么小难道影响P2的A引脚进入中断?)
这个问题让我很是不明白,P1的旋转抖动为什么会传到P2的A引脚上去,如果有懂的大佬可以留言说说自己的看法。

软件上的做法我增加了一个误判断的方法:在进入中断后读取A引脚的电平,如果读取后的电平状态是高电平说明中断误进入,直接return 退出中断即可。

问题2:
当正向旋转P2的时候,P2的数值会正向增大,但有时候也会减小。通过示波器看到的下降沿抖动的信号(示波器看到抖动信号不超过10us)。

根据问题2和问题1考虑到:如果是真的中断,我应该考虑下降沿的时间做以相应的延迟,避免正好读取的电平是抖动后的高电平造成误判没有进入中断(Delay_us就是这个功能),这个延迟也不能太长,否则读取B引脚状态也会出现问题:

	void EXTI0_IRQHandler(void)
	{
		Delay_us(100);                                   /* 延时消抖 */
  		if(__HAL_GPIO_EXTI_GET_IT(ENA8_Pin) != RESET)    /* 中断标志位获取 */
    	{
 		 	__HAL_GPIO_EXTI_CLEAR_IT(ENA8_Pin);
 		 	HAL_GPIO_EXTI_Callback(ENA8_Pin);           /* 中断回调 */
		 }
}

除了软件上这种消抖,硬件上也需要在B脚加消除高频杂波的电容(100nf电容如还出现问题2 ,建议使用10nf电容),如上基本上可以解决问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看电路的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值