stm32编码器正反转计数程序_stm32cubeMx配置使用encoder编码器

增量式编码器在实际应用中还是很常见。stm32的定时器带的也有编码器模式。所用的编码器是有ABZ三相,其中ab相是用来计数,z相输出零点信号。AB相根据旋转的方向不同,输出的波形如下图所示:

9d6d31d42a2d8d59421ddae02d49f356.png

从图上可以看出来,cw方向A相会超前B相90度左右,相反CCW方向,B相会超前A相90度左右。不过方向判断stm32自己是可以完成的。下面裂下使用stm32cubeMx配置的过程。

软件:stm32cubemx mdk

芯片型号:stm32F407IGH6

使用的是定时器2

首先打开timer2的encoder模式:

f5f0d9e664907f8d9ad837c4ba3afbe5.png

配置系统时钟为168mhz。

2b52bfecc2f98ed0828bdff483b1e022.png

下面才是重点,配置具体定时器的参数:

选择的encoderMode是 TI1和TI2模式。这种模式下,AB两相的上升沿和下降沿都会计数,所以计数值是实际值的4倍,需要做分频。也就是第一个参数,分频值设为3,实际上是3+1=4分频。

还有个地方需要解释一下,我刚开始的时候就是把这里的设置没搞清楚,看Polarity参数设置的是Rising Edge。这个参数的意思是在检测到上升沿的时候就触发encoder捕获AB相的值,而并不是这里设置的是上升沿就只检测AB相的上升沿,下降沿还是同样会计数的。

Input Filter滤波值是从1-15,看情况设定,是用来滤除一些杂波的。

1162bb019ab3fb115293496955b5ed3c.png

这样基本就配置好了,生成mdk工程。

然后就是添加应用代码了。

在初始化中添加打开定时器的encoder模式:

HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);

然后定期调用下面这一句函数就可以获取到encoder编码器的计数值:

enc1 = (uint32_t)(__HAL_TIM_GET_COUNTER(&htim2));//获取定时器的值
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值