STM32CubeMX配置TIM1(高级定时器)输出互补两路PWM

前言:

STM32CubeMX是一款强大的工具,它通过直观的图形界面帮助用户快速创建STM32项目。不仅能生成初始化代码,还提供了丰富的代码模板和硬件抽象层库,简化了代码编写和设备配置的过程。用户可以根据需求选择不同的STM32型号,并进行外设和引脚分配。此外,STM32CubeMX还提供了性能和功耗优化的选项,并通过仿真器验证项目的配置和操作。使用STM32CubeMX可以大大提高开发效率,让开发者更专注于应用程序的开发。

STM32Pwm是STM32微控制器系列中提供的强大的脉冲宽度调制(PWM)输出功能。通过配置定时器和PWM通道的参数,用户可以精确地控制PWM信号的频率、分辨率、占空比等,实现对外围设备如电机、LED灯等的精准控制。STM32Pwm还支持多种高级功能,如死区时间控制、相位补偿、互补输出等,进一步提升PWM信号的稳定性和效率。无论是简单的亮度调节还是复杂的电机驱动,STM32Pwm都能满足各种应用需求,为开发者提供了灵活、可靠的PWM输出解决方案。

以下以STM32F334C6T6为例,使用STM32CubeMX生成输出互补PWM波(带死区和刹车)底层驱动代码

1、选择产生PWM的定时器

PWM只有通用定时器或者高级定时器才有产生PWM的复用功能,要输出互补的PWM波一般只有高级定时器才有(高级一点的F7系列的统一定时器也有),这种PWM的输出方式不是简单的定时器中断里改变IO状态的低效方式。

在此文章中我们采用定时器1通道1输出1KHz互补的PWM波(带死区和刹车)。现在CubeMX左侧找到Timers,选中TIM1。

此时TIM1 Mode and Configuration中有很多选项栏可以配置,我们只需要配置定时器的时钟源就行了,Clock Soure配置为内部时钟(Internal Clock)。这里PWM的互补输出要占用TIM1的两个通道,通道1选择PWM Generation CH1 CH1N(CH1为PWM的输出通道,CH1N为PWM互补输出的通道)。此时引脚分配图上也会有相关显示。

 

2、配置分频系数和计数周期

在时钟树中我配置了定时器的时钟为72MHz,所以我们以PSC=71,所以在1KHz下ARR=499,通过以下公式计算可得

图中

Tout是定时器溢出时间(PWM周期)

Ft是定时器的时钟源频率

ARR是自动重装载寄存器的值

PSC是预分频器寄存器的值

3、刹车与死区设置

将以下这个Activate-Break-Input勾选上,即为开启刹车。

在配置完成后右侧IO图上会出现刹车信号输入口,TIM1_BKIN就是刹车信号输入口

 

在以下Break And Dead Time Menegement - BRK Configuration配置刹车有效电平

 

在以下Break And Dead Time Menegement - Output Configuration配置运行或者空闲模式下刹车状态和死区时间

 

4、主函数调用

/* 定时器通道1输出PWM */

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);

/* 定时器通道1互补输出PWM */

HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);

//占空比百分之30

__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,300);

即可输出带(刹车和死区)的PWM波