[麦麦茶水间]

【每周分享】MCU定时器PWM输出的计算方法

[复制链接]
420|2
手机看帖
扫描二维码
随时随地手机跟帖
dffzh|  楼主 | 2025-7-18 10:06 | 显示全部楼层 |阅读模式
本帖最后由 dffzh 于 2025-7-18 10:07 编辑

在日常的嵌入式软件开发中,我们会经常使用MCU硬件定时器的PWM(脉冲宽度调制)模式来输出PWM脉冲,用于电机控制、LED调光和比例阀调节等等,那怎么样计算PWM输出频率以及占空比的值呢?看完本文以后,你就知道怎么操作了。
1、PWM频率的计算方法
PWM频率主要由定时器的时钟和分频系数决定,公式如下:
827896879ac0b7f5c5.png
各个参数的说明如下:
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的值决定,公式如下:
991446879ac1cbe67d.png
各个参数的说明如下:
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数据。

使用特权

评论回复
wahahaheihei| | 2025-7-19 18:20 | 显示全部楼层
对于微芯的产品不需要计算啊,MCC自动计算。方便

使用特权

评论回复
评论
dffzh 2025-7-21 09:00 回复TA
知其然知其所以然。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

1018

帖子

16

粉丝