本帖最后由 dffzh 于 2025-7-18 10:07 编辑
在日常的嵌入式软件开发中,我们会经常使用MCU硬件定时器的PWM(脉冲宽度调制)模式来输出PWM脉冲,用于电机控制、LED调光和比例阀调节等等,那怎么样计算PWM输出频率以及占空比的值呢?看完本文以后,你就知道怎么操作了。 1、PWM频率的计算方法 PWM频率主要由定时器的时钟和分频系数决定,公式如下: 各个参数的说明如下: fCLK:定时器的时钟频率,由MCU主时钟频率经过分频得到,比如STM32上的分频值就是由下面这个TIM_ClockDivision参数进行配置: TIM_TimeBaseInitStructure.TIM_ClockDivision= TIM_CKD_DIV1; Prescaler:预分频系数,一般是用PSC来命名,比如STM32上的预分频系数值就是由下面这个TIM_Prescaler参数进行配置: TIM_TimeBaseInitStructure.TIM_Prescaler =23999+1 - 1; TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler; ARR(Auto-Reload Register):自动重装载值,决定PWM周期,比如STM32上的ARR值就是由下面这个TIM_Period参数进行配置: TIM_TimeBaseInitStructure.TIM_Period = 1; TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ; 以上的参数在很多MCU上的命名基本相似。
2、PWM占空比的计算方法 PWM占空比主要由比较寄存器CCR的值决定,公式如下: 各个参数的说明如下: CCR(Capture/Compare Register):比较寄存器的值,决定PWM脉冲宽度,也就是高电平时间,比如STM32上的CCR值就是由下面这个TIM_Pulse参数进行配置: TIM_OCInitStructure.TIM_Pulse =48000*10/100; TIMx->CCR1 = TIM_OCInitStruct->TIM_Pulse; ARR:同上,决定周期。
通过动态调整CCR,Prescaler和ARR,可灵活控制PWM频率与占空比,输出你需要的PWM数据。 |