目录
一、PWM介绍
1、概念
PWM 全称是 Pulse WidthModulation,也就是脉冲宽度调制。通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。
2、基本原理
PWM实现的原理是通过锯齿波/三角波(载波)所需要合成的波形(调制波)进行比较,然后确定PWM所需要输出的极性,通常是ON或者是OFF,因为一般都是作用到开关元器件上
二、STM32配置PWM
1、硬件说明
STM32F103C8T6(普通开发板)
2、STM32上PWM
(1)PWM产生
STM32的定时器除了TIM6和7,其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出。
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。通用定时器产生PWM 的定时器框图如下:(其他定时器框图类似)
(2)相关寄存器
- 捕获/比较模式寄存器(TIMx_CCMR1/2)
- 捕获/比较使能寄存器(TIMx_CCER)
- 捕获/比较寄存器(TIMx_CCR1~4)
设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。在TIMx_CCMRx寄存器中的OCxM位写入110(PWM模式1)或111(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。
三、STM32CubeMX创建项目
1、基本配置
基本配置RCC,SYS
基本配置时钟
RCC、SYS、时钟已多次配置,此处不再赘述
2、TIM3配置
3、TIM4配置
TIM4配置于TIM3相同
TIM3_CH1由PA6输出,TIM4_CH2由PB6输出
4、生成项目
一、配置好PROJECT
二、配置好CODE
三、与之前配置相同、不再赘述
四、KEIL代码编写
1、定义变量
定义在main.c中,为全局变量
uint16_t pwm=0; //占空比
2、开启PWM
代码放置在主函数
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);
3、调用代码
在while中编写代码
while (pwm< 500)
{
pwm++;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);
HAL_Delay(1);
}
while (pwm)
{
pwm--;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);
HAL_Delay(1);
}
HAL_Delay(200);
4、编译烧录代码
五、运行效果
1、KEIL上PWM输出仿真
2、开发板运行效果
六、实验总结
(1)了解PWM基本概念及原理,以及STM32上相关的PWM寄存器
(2)通过对PWM机制的了解,明白了呼吸灯的实现过程
七、实验参考
https://blog.csdn.net/jynyyhd/article/details/127655245?spm=1001.2014.3001.5502
https://blog.csdn.net/qq_45237293/article/details/111997424