电子说
学习笔记:
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
实践1-pwm-led闪烁
要求产生周期为200ms,占空比为50%的PWM信号来控制led灯。
1.cubemax配置
由原理图可知,led引脚复用为tim5
周期为200ms,占空比为50%,Tim5挂在APB1总线上,CLK = 84MHZ;假设PSC =8399,根据公式ARR = 1999,CRR = 1000.
生成代码
main.c 添加
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1); //启动定时器5通道1输出周期为200ms,占空比50%得PWM信号。
/* USER CODE END 2 */
将代码下载到开发板中,实验结果led每隔100ms闪烁。
实践2-PWM-呼吸灯
周期改为20ms,因为大于50hz使人眼不会察觉出闪烁现象。
占空比从0%-100%反复,从而实现呼吸灯。
根据公式可得,PSC=8399,ARR=199。
占空比从0%开始,所以CRR 的初值为 0,根据公式计算CCR = 200时,占空比为100%。
生成代码
mian.c 修改
/* USER CODE BEGIN 2 */
uint16_t i =0; //CCR
uint16_t step = 10; //步进值,使呼吸效果明显
HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1);//启动定时器5的通道1产生PWM
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
//知识点:在for/while等循环内部定义的变量属于局部变量,当for循环结束以后,局部变量就会被销毁
for(i=0;i<=200;i = i+step)
{
__HAL_TIM_SET_COMPARE(&htim5,TIM_CHANNEL_1,i);
HAL_Delay(200);
}
/* USER CODE BEGIN 3 */
}
实验现象,出现呼吸灯效果并反复。
全部0条评论
快来发表一下你的评论吧 !