TB6612FNG PWM电机驱动:控制电机驱动模块驱动电机。(使用库函数实现代码)
首先看到我们的模块的电路:
电机驱动模块使用过的是TB6612FNG,具体资料可以到我们STM32平衡小车的资料获取。
首先我们先看一下,
1.IO口的设置:(与LED闪烁实验一样的IO口配置,只是多了几个IO口同时配置)
2.PWM口设置:脉冲宽度调制模式
普及STM32 PWM知识:Pwm输出最基本的调节就是频率和占空比。频率当然又和时钟信号扯上了关系。高级定时器是挂接到APB2上,而通用定时器是挂接到APB1上的。APB1和APB2的区别就要在于时钟频率不同。APB2最高频率允许72MH,而APB1最高频率为36MHZ。这样是不是通用定时器只最高36MHZ频率呢?不是的,通用定时器时钟信号完整的路线应该是下面这样的:AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→PSC倍频器(*2倍)→通用定时器时钟信号(72mhz)。在APB1和定时器中间的倍频器起到了巨大的作用,“APB1分频器”假如不为1(默认是2),倍频器会自动将APB1时钟频率扩大2倍后作为定时器信号源,这个它内部自动控制的不用配置。设置这个倍频器的目的很简单就是在APB1是36mhz的情况下通用定时器的频率同样能达到72mhz。我用的库函数直接调用函数SystemInit(); 之后时钟配置好了:通用定时器和高级定时器的时钟现在都是72mhz(你也可以自己再配置一下RCC让他的频率更低,但是不能再高了)。定时器接下来还有一个分频寄存器:TIMX_PSC经过他的分频后,才是定时器计数的频率。
3.定时时钟设置:向上计数就是等于设定的定时arr值从0向上计算到设定值x以后产生中断。定时时钟的计算方法,中断时间T=arr*((psc-1)/芯片内部时钟频率)
本实例计算:T=500*((7201-1)/72000000)=500ms
4.当定时时间到达500ms后,进入中断函数,运行驱动函数。
注意:中断函数的一般步骤是先要清除中断标志位,不然中断不会停止,一直运行,这样会导致程序跑死了。
5.中断函数中调用的电机函数,最后的PWM输出方式为pwm1输出模式。在中断函数中plase的变量值与在TIM2中的arr值(1000)中的比例是多少,就是pwm的占空比,例如 plase=200时,在PWM中的占空比为20%,这是的车速为全速的20%。这样就设定了我们的车速了。