Stm32-使用TB6612驱动电机及编码器测速r
AIN1、AIN2的输出相当于H桥电路中的上下管的导通和关闭,可以决定电机旋转方向,也可以控制电机转或不转,因为一旦两个输出端输出相同的电压,就不会存在电压差就没有电流流过电机,电机自然不会转。在一个时间周期T0内,定时的读取编码器产生的脉冲,以我的编码器为例(11线,减速比30),转一圈会产生1320个脉冲(因为采用的是编码模式3)在一定的时间内,电机转动一圈,通过霍尔传感器的A、B两相输出一定
前面我们说了定时器以及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、AO2,PWMB、BIN1、BIN2控制BO1、BO2,AIN1和2随便接一个GPIO口就行,PWMA、PWMB要接PWM信号输出端
AIN1、AIN2的输出相当于H桥电路中的上下管的导通和关闭,可以决定电机旋转方向,也可以控制电机转或不转,因为一旦两个输出端输出相同的电压,就不会存在电压差就没有电流流过电机,电机自然不会转
PWMA输出PWM信号,PWM输出高电平电机就转,低电平就不转,相当于一个可变化的使能引脚。(必须接定时器输出引脚)
使用定时器的PWM模式驱动电机
使用 定时器的PWM模式 生成一个需要的占空比可调的 频率 符合要求 的方波信号。
大家也可以看此连接:
三、编码器测速
编码器一般应用于电机控制,使用PWM驱动电机,然后再使用编码器测量速度,再使用PID算法进行闭环控制
在一定的时间内,电机转动一圈,通过霍尔传感器的A、B两相输出一定数量的脉冲,我们可以根据一定时间内的脉冲数计算出电机的瞬时速度。
采用定时器的编码器接口模式
采用的是定时器的编码器接口模式,Stm32中的定时器只有TIM1-5和TIM8才有编码器接口功能,而且只有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 + 编码器电机
更多推荐



所有评论(0)