在脉冲宽度调制(PWM)控制中,实现频率调整时保持固定脉宽时间(即高电平持续时间不变)是一个典型的技术需求。该问题本质上是要求在改变周期(T)的同时,保持导通时间(Ton)恒定。以下从原理分析、实现方法及注意事项三方面展开专业阐述。
一、原理分析
PWM波形由周期(T)和占空比(D)共同定义,二者满足关系:
导通时间:Ton = D × T
关断时间:Toff = T – Ton
若需在调整频率(f = 1/T)时保持Ton恒定,则需满足:
Ton = D × T = 常数
当T变化时,占空比D必须动态调整,使得D与T成反比。例如:
当频率加倍(T减半),占空比需加倍以维持Ton不变;
当频率减半(T加倍),占空比需减半以维持Ton不变。
因此,实现的核心在于动态解耦周期与占空比的耦合关系,通过独立控制二者实现目标。
二、实现方法
1. 基于定时器的硬件方案
大多数微控制器通过定时器生成PWM信号,需配置两个关键寄存器:
自动重载寄存器(ARR):决定PWM周期(T = (ARR+1) × 定时器时钟周期);
捕获/比较寄存器(CCR):决定导通时间(Ton = (CCR+1) × 定时器时钟周期)。
实现步骤:
1. 固定Ton:根据目标Ton计算CCR值,公式为:
\[
\text{CCR} = \frac{Ton}{T{\text{clk}}}} - 1
\]
其中,\( T{\text{clk}} \)为定时器时钟周期(由预分频器设置)。
2. 动态调整ARR:根据目标频率计算ARR值,公式为:
\[
\text{ARR} = \frac{1}{f \times T{\text{clk}}}} - 1
\]
需确保ARR ≥ CCR,否则无法输出有效脉宽。
3. 更新寄存器:在运行时修改ARR以改变频率,同时保持CCR不变。
代码示例(通用伪代码):
- c
- void SetPWMFrequency(float freq) {
- // 计算ARR值
- uint32t arr = (uint32t)(SystemCoreClock / (prescaler freq)) - 1;
- TIMx->ARR = arr; // 更新自动重载寄存器
- // 保持CCR值不变(CCR已在初始化时根据Ton设定)
- // TIMx->CCR1 = fixedccr;
- }
复制代码
2. 动态占空比补偿算法
若硬件不支持ARR独立调整(如某些简化PWM模块),需通过软件动态计算占空比:
\[
D = \frac{Ton}{T} = Ton \times f
\]
每次频率变化时,重新计算D并更新CCR值:
\[
\text{CCR} = D \times (ARR + 1) - 1
\]
此方法需保证计算精度,避免因量化误差导致Ton波动。
三、注意事项
1. 定时器分辨率限制
定时器时钟频率和预分频器决定了最小时间分辨率。若目标Ton接近定时器分辨率极限,可能导致实际Ton存在误差。需通过公式验证:
\[
\text{最小Ton} = T{\text{clk}} = \frac{\text{定时器时钟源频率}}{\text{预分频系数}}
\]
2. 频率范围约束
频率上限受限于定时器最大计数速度(ARR最小值),下限受ARR寄存器位数限制。例如,16位ARR最大值为65535,若预分频为1且时钟为72MHz,最低频率为:
\[
f{\text{min}} = \frac{72 \times 10^6}{65536} \approx 1098.9 \text{Hz}
\]
3. 实时性与同步更新
修改ARR或CCR时需注意寄存器更新时机。部分定时器支持影子寄存器或缓冲写入,可避免PWM周期内突变更改导致的输出异常。
4. 占空比有效性校验
动态调整频率时,需确保CCR ≤ ARR。若目标频率过低(ARR过小),可能导致CCR > ARR,此时应限制频率或提示错误。
四、典型应用场景
1. 电机控制:在转速调节时维持恒定扭矩脉宽;
2. 电源拓扑:LLC谐振变换器中固定开关管导通时间;
3. 通信调制:脉宽编码信号(如红外遥控)的频率自适应传输。
总结
通过独立配置定时器的ARR与CCR寄存器,可实现PWM频率调整时脉宽时间恒定。设计时需综合考虑定时器分辨率、频率范围及实时性要求,必要时引入动态补偿算法。此方案适用于多数具备标准定时器外设的微控制器,具有较高的工程实用价值。
[本文内容由国芯人工智能辅助生成,仅供参考] |