前面我们说了定时器以及PWM,那我们就不得不提及Tb6612电机驱动模块了,主要参考了这位大佬的Stm32-使用TB6612驱动电机及编码器测速-CSDN博客

一、编码器电机

一般的比赛中,我们常用编码器电机,其里面带有编码器进行测速,实现电机的闭环控制。

主要分为电机驱动编码器测速两部分

 下列是列举电机的参数与编码器的参数

关注电机的额定电压12v,电机减速比30

关注编码器参数线数11线(也就是说电机转一圈会产生11个脉冲)

编码器电机的介绍

一般这种编码器都有六根线

两边靠外的两根线是电机电源线

往里两根是编码器的电源线

中间两根是编码器的A,B相

 工作过程

电机转动的时候编码器会通过编码电机的A相和B相输出两个正交的方波(需要TIM输入捕获通道)

通过输出的两个方波就可以对电机进行测速识别电机的方向

二、TB6612(电机驱动)

模块原理图

 TB6612是双驱动,也就是可以驱动两个电机 ,如下图所示

驱动逻辑 

由下图看出,IN引脚控制正反转,PWM引脚控制速度

更加清晰的理解,如下图

VM:一般和电机额定电压保持一致

VCC:和控制器电压保持一致(使用的STM32是3.3V供电,这里就接3.3V),功率不大可以和控制器共电源

GND:图中三个GND都是一样的,随便一个接地都行

STBY:待机控制引脚,接VCC则正常工作,接GND则处于待机状态不工作

其中PWMA、AIN1、AIN2控制AO1、AO2PWMB、BIN1、BIN2控制BO1、BO2,AIN1和2随便接一个GPIO口就行,PWMA、PWMB要接PWM信号输出端

AIN1、AIN2的输出相当于H桥电路中的上下管的导通和关闭,可以决定电机旋转方向,也可以控制电机转或不转,因为一旦两个输出端输出相同的电压,就不会存在电压差就没有电流流过电机,电机自然不会转

PWMA输出PWM信号,PWM输出高电平电机就转,低电平就不转,相当于一个可变化的使能引脚。(必须接定时器输出引脚)

 使用定时器的PWM模式驱动电机

使用 定时器的PWM模式 生成一个需要的占空比可调的 频率 符合要求 的方波信号。

大家也可以看此连接:

三、编码器测速

编码器一般应用于电机控制,使用PWM驱动电机,然后再使用编码器测量速度,再使用PID算法进行闭环控制

在一定的时间内,电机转动一圈,通过霍尔传感器的A、B两相输出一定数量的脉冲,我们可以根据一定时间内的脉冲数计算出电机的瞬时速度。

采用定时器的编码器接口模式

采用的是定时器的编码器接口模式,Stm32中的定时器只有TIM1-5TIM8才有编码器接口功能,而且只有CH1通道和CH2通道有用。

定时器编码器模式测速原理

接收编码器的A、B相产生的正交信号,根据编码器产生的正交信号脉冲,自动控制CNT自增或自减,根据计数方向和编码器的信号关系来指示编码器的位置、旋转方向和旋转速度利用脉冲值来计算电机的转动位移

编码器模式的配置

时钟–>GPIO–>时基单元配置–>编码器接口配置–>开启定时器–>读取一个时间段内的脉冲–>计算电机旋转轴转速

使用这个函数把定时器设置为编码器接口模式

TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);

采用的是编码器3,在TI1和TI2边沿都计数,也就是在一个周期内对A相和B相的上升沿下降沿都计数一个周期内计4次,所以采用这种模式后,相应的计数值(CNT)就会变成4倍,这就是很多资料里说的四倍频计数

 

测速方法

在一个时间周期T0内,定时的读取编码器产生的脉冲,以我的编码器为例(11线,减速比30),转一圈会产生1320个脉冲(因为采用的是编码模式3)

这个1320 = 11 * 30 *  4

通过在固定的周期T0内,产生的脉冲就相当于路程,而这个固定的周期就相当于时间

所以速度就等于 在T0这段时间获取到的脉冲总数/(编码器单圈产生的总脉冲数*T0)

对于电机就是

T0这段时间获取到的脉冲总数/(1320*T0)

三、硬件

主控芯片:stm32c8t6 + TB6612 + 编码器电机

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐