STM32单片机 定时器 编码器接口

编码器接口测速,用于电机控制

Encoder Interface 编码器接口

编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增自减,从而指示编码器的位置、旋转方向和旋转速度

每个高级定时器和通用定时器都拥有1个编码器接口,基本定时器没有编码器接口

编码器的两个输入引脚借用了输入捕获的通道1和通道2(CH1、CH2),CH3和CH4不能接编码器

通用定时器编码器结构框图

编码器接口基本结构

编码器接口根据编码器的旋转方向,控制CNT的计数方向,编码器正转,CNT自增;编码器反转,CNT自减

ARR:一般设置ARR为65535最大量程,利用补码的特性,可以得到负数,将65535,16位无符号数转换为16位的有符号数,65535 = -1,65534 = -2  等等

正交编码器

用于测量位置带有方向的速度值,有两个信号输出引脚,A相、B相

正转A相提前B相90°

反转A相滞后B相90°

CNT计数方向与编码器信号的关系

仅在TI1计数(接收A相信号),我们忽略TI2FP2信号(相当于B相信号),这样精度低了点

编码器模式下的计数器操作实例

TI1反相,即TI1信号通过极性选择时选择的参数是下降沿,高低电平反转了。

TI1在经过极性选择时,可以选择是上升沿有效还是下降沿有效,而编码器接口上、下升沿始终有效,都需要计次,那么在编码器模式下,极性选择就不再是边沿的极性选择,而是高低电平的极性选择。如果选择上升沿的参数,那么信号直通过来,高低电平极性不反转。如果选择下降沿的参数,那么信号通过非门过来,高低电平极性反转

编码器接口测速 代码书写思路

  • 1 RCC开启时钟,开启GPIO和定时器的时钟
    • GPIO模式可以选择上拉、下拉、浮空
    • 如何选择上拉、下拉:看接在该引脚的外部模块输出的默认电平?

    • 如果外部模块空闲默认输出高电平,就选择上拉输入,默认输入高电平,如果外部模块默认输入低电平,那就选择下拉输入,默认输入低电平,和外部模块保持一致,防止电平打架。默认高电平是习惯状态
    • 如何判断GPIO模式是否需要配置为浮空输入

    • 不确定外部模块输出的默认状态或者外部信号输出功率非常小,就尽量选择浮空输入
    • 浮空输入没有上拉电阻和下拉电阻影响外部信号
    • 浮空输入缺点:引脚悬空,没有默认电平,输入受噪声干扰,来回不断跳变
  • 2 配置GPIO,将要用的接口配置为输入模式
  • 不需要定时器内部时钟配置,编码器接口会托管时钟,编码器接口就是一个带方向控制的外部时钟
  • 3 配置时基单元。计数器模式参数没有用,因为计数方向也是被编码器接口托管的。预分频器一般选择不分频。自动重装一般给最大65535-1,只需要CNT执行计数就行
  • 4 配置输入捕获单元,只需要配置滤波器和极性,后两个参数没用,可以删掉,结构体配置不完整,为防止结构体中出现不确定值可能造成的问题,最好用StructInit给结构体赋初始值,加StructInit也是提醒我们结构体没有配置完整。
    • 结构体中极性设置为上升沿不是代表上升沿有效,因为编码器接口上升沿、下降沿始终有效,这里设置的上升沿表示高低电平极性不反转。这里的极性配置会和后面TIM_EncoderInterfaceConfig函数重复配置极性,可以删掉。
//初始化结构体,给结构体赋初始值,说明结构体没有完整赋值,参数为结构体地址
TIM_ICStructInit(&TIM_ICInitStructure);
  • 5 配置编码器接口模式
/**
定时器编码器接口配置
参数1:选择定时器
参数2:选择编码器模式
TIM_EncoderMode_TI1    仅在TI1计数
TIM_EncoderMode_TI2    仅在TI2计数
TIM_EncoderMode_TI12    TI1和TI2都计数
参数3、4:分别选择CH1和CH2的电平极性
**/
void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);

参数2对应的3个模式

  • 6 最后调用TIM_Cmd启动定时器

CNT会随编码器位置自增自减,如果想要测量编码器位置,直接获取CNT值即可。

如果想测量编码器的速度和方向,需要每隔一段固定的闸门时间,取出CNT,再将CNT清零。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值