TB6612使用
VM:12V电池电压输入,给电机供电
VCC:单片机5V,给单片机供电
STBY:一直用5V连接上去,才能正常工作
PWMA:3.3V的IO口,控制两个INPUT
PWMB:3.3V的IO口,控制两个OUTPUT
AIN1和AIN2:一个输入PWM一个输入低电平。(具体是哪个根据你要的正转反转设置)控制A电机
BIN1和BIN2:一个输入PWM一个输入低电平。(具体是哪个根据你要的正转反转设置)控制B电机
一共4个INPUT:AIN1和AIN2,BIN1和BIN2电机控制模式输入
一共4个OUTPUT:AO1和AO2,BO1和BO2电机驱动输出
两种控制电机方法。本篇使用第二种 |
1.可以使用一个PWM输入PWM控制,两个INPUT输入高低电平。 |
2.给PWM接入3.3V,两个INPUT输入PWM控制电机。 |
三极管高电平时导通。既Q1,Q2,Q3,Q4为1时各个三极管才能导通。
注意:Q1,Q2或者Q3,Q4这两组都是不能同时为1导通的会产生短路。
我设置ENABLE始终为1。(接3.3V的高电平)
通过控制IN1和IN2来控制电机。并给它两个PWM高低电平调整转速。
可以自己分别给IN1和IN2值0或1来。自行走一遍电路就能看出。(IN1和IN2接了一个非门和一个与门)
Q1:1 Q4:1 | 电机右转 |
Q3:1 Q2:1 | 电机左转 |
以上是L298N或者TB6612控制一个电机的原理。
(这两个驱动模块可以控制2个电机,两个H桥 )
CubeMx开发:
以开发板RCT6为例
定时器
1.用两个定时器获取编码器脉冲,使用Time3和Time8(设置触发为上升沿下降沿都触发)如下
2.用两个定时器输出PWM,使用Time2的通道3通道4和Time4的通道3通道4.(因为要是输入IN1IN2所以每个定时器两个通道,因为两个电机所以两个定时器)
注:如果遇到与UART等冲突,可以用右下角搜索,找到复用引脚。
参数设置:预分频值,周期,自动使能设置。(都进行-1是因为从0开始计数)
解释:主频72M, 72M/72= 1M/hz 1s内有1M/hz 的节拍,每个单位1微秒,1x1000=1毫秒。 现在计数器会从0计数到1000再回到0(既从低电平到高电平,再到高电平)。这样我们可以假如设置比较值为500,那么就是一半高电平一半电平。(假如正常输入是12V,那么现在就是6V).
3.最后再用两个定时器作为基础定时器Time6和Time7,并打开设置优先级,优先级高的设置为1,低的为3。
TIme7(设置20毫秒一个周期)
72000000➗7200➗200=50 1➗50=0.02 既20毫秒
TIme7(设置1秒的中断)
72000000➗7200➗10000=1
优先级
以上学习参考http://t.csdn.cn/KaZrq博主文章内容。在此感谢作者大大的开源分分享。