STM32定时器编码器模式

定时器编码器模式: Timer -mode


Cubemx配置项:

在这里插入图片描述

定时器编码模式选择:

Encode:

  • mode:

    • TI1: 通道1上升沿使计数器+1

    • TI2: 通道2上升沿使计数器+1

    • TI1 and TI2: 12 都会+1

EX:

在这里插入图片描述


获取 编码器正反转数值 数值demo:
int Read_Speed(TIM_HandleTypeDef *htim)
{
    int temp;
/*获取计数值*/
    temp=(short)__HAL_TIM_GetCounter(htim);
/*清0计数寄存器*/
    __HAL_TIM_SetCounter(htim,0);
    return temp;
}

使用 short 做强制类型转换:正反转问题

  STM32的正交解码使用的是一个**16bit寄存器**储存解码值,当正转时数字上升,反转时下降,当低于0时会向下溢出变为0xFFFF。

0x0000-1=0xFFFF,同样是0xFFFF,对于32位来说,最高位为0,表示为正数,对于16位来说最高位为1,表示为负数,且刚好为-1

idea :

    16 的无符号寄存器转换为 *short* 类型的16位有符号类型

EX:

把寄存器的值读出来了之后,转换成了short型(2字节,32位系统下),范围为(-32768-32767),此时当我们把计数器的初始值设置为0之后,如果出现反转,它就会从0开始向下计数(0,65535,65534,…)但是经过强制类型转换之后就变成了(0,-1,-2,…)。

short的表示范围(-32768-32767),也就是说当读出来的值为(32767, 32768, 32769,…,65535,65536,65537…)的时候会因为溢出而转换为(32767,-32768,-32767,…, -1, ,0, , 1)就这样不断地循环下去。所以我们的电机反转的时候读出的数就是反方向的速度值。而不必用65535去减去读出的值再加上负号才可以的到方便观察的值。只需要一个强制类型转换就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想和我重名?

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

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

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

打赏作者

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

抵扣说明:

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

余额充值