本帖最后由 wuyu40 于 2025-5-21 19:15 编辑
#申请原创#
项目方案
在对直流电机控制时需要产生动态可调占空比的PWM波,所以这个测试就是使用周期性中断去调节占空比。
本文介绍了 Nucleo-STM32C092 开发板通过定时器中断控制LED。
使用 STM32CubeMX 创建工程,配置 TIM1、PC9和NVIC;
STM32CubeIDE 代码编译和工程调试、固件上传;
实现在中断函数中修改占空比。
工程创建
使用 STM32CubeMX 快速创建工程,开启定时器设置。
希望在PC9输出PWM波控制led或者进行电机调速,在窗口设置PC9为tim1_ch2。
为了能使用中断进行周期性修改占空比,还要配置中断,这里使用了比较中断:
生成代码,然后添加代码:
这里要注意有一条语句,HAL_TIMEx_PWMN_Start_IT(&htim1,TIM_CHANNEL_2);使能了定时器通道2,但是始终没有PWM输出,在调试中现象是定时器不断计数,也可以产生中断进一步修改占空比,但是始终没有引脚上的PWM输出;之后参考其他帖子,加上这一条语句:
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);其中有这样的语句: /* Enable the Capture compare channel */ TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);说明这个函数使能了比较输出,所以这两条都要调用,HAL_TIMEx_PWMN_Start_IT函数的注释是Starts the PWM signal generation in interrupt mode也就是说使能PWM引发的中断;接着我们添加代码到中断函数中去:
void TIM1_CC_IRQHandler(void){/* USER CODE BEGIN TIM1_CC_IRQn 0 */if(speed<40000) //为了方便观察可设置为全局变量{__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,speed);//设置占空比CCR2寄存器speed+=240;}else speed=0; /* USER CODE END TIM1_CC_IRQn 0 */ HAL_TIM_IRQHandler(&htim1); } /* USER CODE END TIM1_CC_IRQn 1 */}最后给出调试结果:
|