7.5.3 输出比较功能应用:直流电机驱动设计
1.任务要求
利用定时器TIM3产生频率为10 kHz的PWM脉宽调制信号,驱动直流电机运行,并可通过按键实现对转速的调节,设置定时器时钟为8 MHz。请设计程序,并通过Proteus完成仿真和调试。
2.硬件设计
硬件电路如图7.18所示,图中PB10、PB11分别外接个按钮用于调节PWM脉冲宽度,电阻R15、R16接10 kΩ上拉电阻。PB1外接场效应管驱动电动机,MOT为直流电动机。
3.软件设计
要产生频率为10 kHz的信号,那么周期为0.1 ms,TIM3的时钟为8 MHz,经8分频可得到1 MHz。设置定时器向下计数,设计数次数为N,由![]()
可得到N=100,即计数器/定时器初值为100-1。

图7.18 硬件电路
设初始占空比为50%,则比较值为50-1。
定时器TIM3通过通道4输出PWM信号。运行中,占空比通过PWM中断来修改。
设置PB10和PB11两引脚为按键,并采用中断形式修改比较值。
将以上TIM3参数和GPIO引脚参数通过STM32CubeMX建立工程,并生成MDK工程文件,PWM配置如图7.19所示。(https://www.daowen.com)

图7.19 PWM配置
工程文件夹中有“main.c”“gpio.c”“tim.c”这3个文件。
定时器的初始化在“tim.c”文件中,需要在void MX_TIM3_Init(void)函数的末尾或“main.c”文件中定时器初始化部分后面添加HAL_TIM_PWM_Start_IT()函数,以便开启PWM功能,程序如下。
![]()
两个按键PB10、PB11的初始化配置函数在“gpio.c”文件中,该函数自动生成,无须修改。
用户要完成两个按键修改比较值的程序,要设置PWM的回调函数,通过函数
HAL_TIM_SET_COMPARE()完成比较值的修改设置。“main.c”文件中的程序如下。

4.仿真与调试
在Keil-MDK中进行编辑、编译、调试后,生成可执行文件。在Proteus中绘制仿真电路图,并加载编译后的.hex文件到工程中。分别调节按键,用示波器可观察PWM波形占空比变化情况,也可较直观地观察直流电机的转速变化情况。仿真电路图与调试效果如图7.20所示。

图7.20 仿真电路图与调试效果