前言:
本文将使用定时器实现PWM波,我们使用重装载值可实现输出一定频率的波形,通过设置比较寄存器的值,将高电平与低电平信号按照一定频率交替输出,输出信号便称为PWM波形。
例如,对于一个高电平10V和低电平0V的方波,占空比为50%时,就是一个DC 5V的信号输出。而占空比为10%时,输出电压将只有1V。
产生一个PWM波有两张方式,本文将简绍PWM模式
具体实现方法如下:
(1)Cubemx中选定需要使用的GPIO口,并将其配置为定时器的PWM输出模式。
(2)按需要选择定时器的模式,并设置所需的预分频系数、自动重载寄存器值、计数器模式等参数。
(3)根据需要设置定时器的比较寄存器值,从而实现对PWM波形的输出控制。
(4)Cubemx中生成代码并导出,通过修改CCR,PSC实现不同频率,不同占空比的PWM波
值得注意的是,PWM模式,在同时输出多路PWM波时,频率是相同的,占空比可以不同,想要同时输出多路不同频率占空比的PWM波,可使用输出比较模式,具体实现可参考下一篇文章。
CUBEMX配置:
本次实验使用TIM2的通道1输出频率1KHZ,占空比10%的PWM波,CUBEMX中更改时钟源为内部时钟,通道一选择PWM Genneration CH1,修改预分频系数80-1,重装载值1000-1,比较寄存器100。
计算公式如下: 频率=80M/(80)/(1000) 占空比=100/1000
代码实现如下:
(1)开启PWM波
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
(2)修改频率(及修改重装载值)
__HAL_TIM_SetAutoreload(&htim2,99);
__HAL_TIM_SET_AUTORELOAD(&htim2,99);
这两个函数作用是一样的,参数有两个,第一个是定时器选择,第二个是写入的ARR值。
频率=80M/80/ARR,这俩函数原型如下:
(3)修改占空比
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,10);
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,10);
这两个函数作用是一样的,参数有三个,第一个是定时器选择,第二个是选择通道,第三是CCR值。
占空比=CCR/ARR,这俩函数原型如下:
最后:
PWM波形的频率和占空比是关联的。一般情况下,PWM波形的频率越大,其在电路中的平均功率也会越大,因此在实际应用中需要根据具体情况选择合适的频率和占空比值,以达到最佳效果。
一定记得,使用过程中CCR值不能比ARR值高!!!