STM32编码器模式
一、编码器简介
1.编码器概述
编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感 器,我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。
从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是霍尔编码器(上图)和光电编码器(下图)。
2.编码器参数
分辨率:指编码器能够分辨的最小单位。对于增量式编码器,其分辨率表示为编码器转轴旋转一圈所产生的脉冲数, 即脉冲数/转(Pulse Per Revolution或PPR)。码盘上透光线槽的数目其实就等于分辨率,也叫多少线,较为常见的有5-6000线。 对于绝对式编码器,内部码盘所用的位数就是它的分辨率,单位是位(bit),具体还分单圈分辨率和多圈分辨率
精度:首先明确一点,精度与分辨率是两个不同的概念。精度是指编码器每个读数与转轴实际位置间的最大误差,通常用角度、角分或角秒来表示。 例如有些绝对式编码器参数表里会写±20′′,这个就表示编码器输出的读数与转轴实际位置之间存在正负20角秒的误差,精度由码盘刻线加工精度、 转轴同心度、材料的温度特性、电路的响应时间等各方面因素共同决定。
3.分辨率倍频
STM32编码器模式
如果选择仅在TI1计数或者仅在TI2计数,则计数器只会在A相(或B相)的上升沿和下降沿时加1,从而实现2倍频
如果选择在TI1和TI2上计数,则计数器会在A相与B相的上升沿和下降沿都计数,从而实现4倍频,提高编码器的精度
4.测速方法
常用的编码器测速方法一般有三种:M法、T法和M/T法,这里只介绍M法
设编码器单圈总脉冲数为C,在时间T0内,统计到的编码器脉冲数为M0,则转轴转速n(r/s)为:
若是减速电机,则输出轴的转速 = 转轴转速 / 减速比
二、CubeMx配置
选择定时器的计数器模式
选择在TI1和TI2上都计数
打开定时器中断
三、keil代码编写
HAL_TIM_Encoder_Start_IT(&htim2,TIM_CHANNEL_ALL); //开启编码器
//读取编码器的值
int Read_Speed(uint8_t wheel)
{
int speed_temp;
speed_temp = (short)__HAL_TIM_GET_COUNTER(&htim2); //读取计数器的值
__HAL_TIM_SET_COUNTER(&htim2,0); //清零计数器
return speed_temp;
}
//若要计算转速
#define Encoder_PCS 333 //编码器线数
#define Encoder_PCS_Total Encoder_PCS * 4 //倍频后的总线数
#define Encoder_Time 0.01 //编码器读取周期,10ms
n = speed_temp / Encoder_PCS_Total / Encoder_Time;
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2401_84167576/article/details/141250028
|