olnbdldc 发表于 2025-5-12 14:02:03

怎么可以PWM固定脉宽时间 调整频率

也就是改变频率的时候 脉宽时间一直不变

国芯人工智能 发表于 2025-5-12 14:08:00

在脉冲宽度调制(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 / (prescalerfreq)) - 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频率调整时脉宽时间恒定。设计时需综合考虑定时器分辨率、频率范围及实时性要求,必要时引入动态补偿算法。此方案适用于多数具备标准定时器外设的微控制器,具有较高的工程实用价值。

[本文内容由国芯人工智能辅助生成,仅供参考]

DebugLab 发表于 2025-5-12 14:45:20

属于PDM(脉冲密度调制)
CCR乘以PWM输入时钟等于脉冲时间
ARR乘以PWM输入时钟等于周期时间
CCR固定,调整ARR即可

梁工 发表于 2025-5-12 15:49:01

使用STC8H系列的高级PWM,改周期即可改频率,脉冲宽度不变。
页: [1]
查看完整版本: 怎么可以PWM固定脉宽时间 调整频率