6.程序实例-TB6612FNG测试程序(库函数版本)

您当前位置: 首页 > ROS机器人小车底盘 > STM32平衡小车教程

下载

STM32_驱动pwm调速_库函数版本.rar  点击下载

    TB6612FNG PWM电机驱动:控制电机驱动模块驱动电机。(使用库函数实现代码)


首先看到我们的模块的电路:


]5~RVSY6UVY]ED_VP8$%DZW.png1JH2L)Y`5UYRJ6S]PC%4XJY.png

电机驱动模块使用过的是TB6612FNG,具体资料可以到我们STM32平衡小车的资料获取。

首先我们先看一下,

1.IO口的设置:(与LED闪烁实验一样的IO口配置,只是多了几个IO口同时配置)

 8M)%7NM4)LSIUKGZ$SF)G6C.png

2.PWM口设置:脉冲宽度调制模式

普及STM32 PWM知识:Pwm输出最基本的调节就是频率和占空比。频率当然又和时钟信号扯上了关系。高级定时器是挂接到APB2上,而通用定时器是挂接到APB1上的。APB1APB2的区别就要在于时钟频率不同。APB2最高频率允许72MH,而APB1最高频率为36MHZ。这样是不是通用定时器只最高36MHZ频率呢?不是的,通用定时器时钟信号完整的路线应该是下面这样的:AHB72mhzAPB1分频器(默认2APB1时钟信号(36mhzPSC倍频器(*2倍)→通用定时器时钟信号(72mhz)。在APB1和定时器中间的倍频器起到了巨大的作用,APB1分频器”假如不为1(默认是2),倍频器会自动将APB1时钟频率扩大2倍后作为定时器信号源,这个它内部自动控制的不用配置。设置这个倍频器的目的很简单就是在APB136mhz的情况下通用定时器的频率同样能达到72mhz。我用的库函数直接调用函数SystemInit(); 之后时钟配置好了:通用定时器和高级定时器的时钟现在都是72mhz(你也可以自己再配置一下RCC让他的频率更低,但是不能再高了)。定时器接下来还有一个分频寄存器:TIMX_PSC经过他的分频后,才是定时器计数的频率。

%@4J19179R9)IJ6KUCGS[$L.png

3.定时时钟设置:向上计数就是等于设定的定时arr值从0向上计算到设定值x以后产生中断。定时时钟的计算方法,中断时间T=arr*((psc-1/芯片内部时钟频率)

              本实例计算:T=500*((7201-1/72000000=500ms

 

 %PYUZJ@R@BDMQG$K8TJG@0B.png

 

4.当定时时间到达500ms后,进入中断函数,运行驱动函数。

注意:中断函数的一般步骤是先要清除中断标志位,不然中断不会停止,一直运行,这样会导致程序跑死了。



 1R($BL41H[[_WOWL]R(C6$U.png

 

5.中断函数中调用的电机函数,最后的PWM输出方式为pwm1输出模式。在中断函数中plase的变量值与在TIM2中的arr值(1000)中的比例是多少,就是pwm的占空比,例如 plase=200时,在PWM中的占空比为20%,这是的车速为全速的20%。这样就设定了我们的车速了。

 Z[6U[NR6LQ0]UDC_EIV4VC5.png