2.2 STM32电机测速(正交或者霍尔编码器)
我们这里提供左右电机测速代码,在公众号:小白学移动机器人,发送:电机测速,即可获得源码工程下载链接。
2.2.1 实现工具
STM32单片机、带编码器的直流减速电机、Keil5、(蓝牙、串口助手)调试用
2.2.2 编码器原理
(1)编码器是什么?
编码器是一种将角位移或者角速度转换成一串电数字脉冲的旋转式传感器。编码器又分为光电编码器和霍尔编码器。
(2)编码器工作原理是什么?
霍尔编码器是有霍尔马盘和霍尔元件组成。霍尔马盘是在一定直径的圆板上等分的布置有不同的磁极。霍尔马盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。示意图如下:
(3)带霍尔编码器的直流减速电机接线图
(4)测速原理:
单位时间内,根据脉冲走过的距离计算电机实际速度,这里采用5ms定时器中断。
(5)采集数据方式:
通常有两种方式,第一种软件技术直接采用外部中断进行采集,根据AB相位差的不同可以判断正负。第二种硬件技术直接使用定时器的编码器模式,这里采用第二种。也是大家常说的四倍频,提高测量精度的方法。其实就是把AB相的上升沿和下降沿都采集而已,所以1变4。自己使用外部中断方式实现就比较占用资源了,所以不建议使用。
(6)速度计算方法:
这里计算的是真实的电机轮子的物理转速
电机转动一圈的脉冲数:num1 单位:个
单位时间:t 单位:秒
单位时间内捕获的脉冲变化数:num2 单位:个 (反应电机正反转)
电机轮子半径:r 单位:m
圆周率:pi 单位:无
速度:speed 单位: mm/s
speed = 1000 x num2 x ( 2 x pi x r\num1)\t
2.2.3 部分代码分享
主要流程:
将编码器AB相使用的引脚设置成定时器的编码器模式,我们根据TIMx->CNT寄存器数据的变化,计算出单位时间内,脉冲的变化值。然后在定时器中断服务函数中进行速度计算,然后将速度数据通过蓝牙发送到PC的串口助手,验证数据是否正确。
(1)编码器引脚配置以及测速代码
#include "encoder.h"
/**************************************************************************函数功能:把TIM2初始化为编码器接口模式入口参数:无返回 值:无**************************************************************************/
void Encoder_Init_TIM2(void)
{
TIM_TimeBaseInitTypeDef TIM