Loading

什么是PWM?

PWM(脉宽调制)的详细解释与系统设计应用


1. 基本概念与信号形式

PWM(Pulse Width Modulation) 是一种通过数字信号控制模拟量输出的技术,其核心是周期性开关信号。通过调整信号的脉冲宽度(占空比)和频率,可以模拟出不同幅度的模拟电压或电流。

  • 信号形式:PWM信号是方波,包含高电平(On-Time)和低电平(Off-Time)交替的周期性脉冲。
  • 关键参数
    • 周期(Period):单个脉冲完整循环的时间(T = 1/frequency)。
    • 频率(Frequency):单位时间内脉冲的重复次数(Hz)。
    • 占空比(Duty Cycle):高电平持续时间占总周期的比例(例如50%占空比表示高电平和低电平各占周期的一半)。
    • 脉冲宽度(Pulse Width):高电平持续时间(=占空比 × 周期)。

动态特性

  • 占空比决定平均电压值。例如,5V电源下,PWM信号的平均电压 = 占空比 × 5V
  • 波形描述
    • 占空比0%:信号始终为低电平,平均电压为0V。
    • 占空比50%:高、低电平各占周期的一半,平均电压为2.5V。
    • 占空比100%:信号始终为高电平,平均电压等于电源电压。
    • 不同频率下表现:高频PWM(如20kHz)更适合模拟平滑信号(如LED调光),低频PWM(如1kHz)在电机控制中更易观察到脉冲变化。

2. PWM 如何控制模拟量输出?

PWM 通过数字开关(0或1)生成离散脉冲,配合低通滤波器(如RC电路)将脉冲转换为模拟电压。例如:

  • LED调光:占空比50%时,LED亮度约为最大值的一半。
  • 电机速度控制:占空比越低,电机的平均驱动电压越小,转速越慢。

数学表达

\[平均电压 \ V_{avg} = V_{CC} \times \frac{Duty}{100\%} ,其中 \ V_{CC} \ 是电源电压。 \]


3. 典型应用场景与硬件平台配置

场景1:电机速度控制(如直流电机、舵机)
  • 原理:通过PWM信号的占空比调节电机的平均驱动电压,控制转速或角度。
  • 硬件平台示例
    • STM32:使用定时器(如TIM1、TIM2)配置PWM模式,通过改变CCR(捕获/比较寄存器)值调整占空比。
      // STM32代码示例(基于HAL库)
      TIM_HandleTypeDef htim;
      htim.Instance = TIM2;
      htim.Init.Prescaler = 83;      // 预分频器(假设时钟源为72MHz)
      htim.Init.Period = 999;        // 自动重载值(周期为 (Prescaler+1)*(Period+1)/时钟源 = 1ms,频率1kHz)
      HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_1);
      __HAL_TIM_SetCompare(&htim, TIM_CHANNEL_1, 500);  // 50%占空比
      
    • Arduino:使用analogWrite()函数,直接指定占空比(0-255)。例如:
      analogWrite(3, 128);  // 在引脚3输出50%占空比的PWM信号(频率默认为490Hz)
      
场景2:LED调光
  • 原理:占空比控制亮度,需搭配滤波电容或电阻消除闪烁。
  • 硬件平台示例
    • ESP32:通过ledcSetup()ledcAttachPin()配置PWM通道,支持高分辨率(如8-16位)和多通道同步。
      // ESP32代码示例(使用LED Control库)
      ledcSetup(0, 5000, 8);         // 通道0,5kHz频率,8位分辨率(0-255)
      ledcAttachPin(2, 0);           // 将GPIO2连接到通道0
      ledcWrite(0, 128);              // 50%占空比
      
场景3:音频信号输出
  • 原理:高频PWM(如50kHz以上)经低通滤波后可生成模拟音频信号。
  • 硬件平台示例
    • STM32:利用DAC外设结合PWM实现音频输出,或使用定时器的高速PWM通道(如TIM8)。
      // 高频PWM配置示例(假设时钟源为24MHz)
      htim.Init.Prescaler = 0;        // 无预分频
      htim.Init.Period = 239;         // 周期240个时钟周期 → 1MHz频率
      

4. PWM 的核心配置步骤(以 STM32 为例)

  1. 选择定时器:根据引脚映射和功能需求选择(如通用定时器TIM2或高级定时器TIM1)。
  2. 设置时钟源与预分频器
    • 时钟源(如APB1或APB2)决定定时器的最大频率。
    • 预分频器(Prescaler)将时钟源分频至合理范围。
  3. 配置自动重载寄存器(ARR)
    • 决定周期值:Period = ARR + 1
    • 频率计算:

\[ \ f = \frac{f_{\text{时钟源}}}{(Prescaler+1) \times (ARR+1)} \ \]

  1. 设置比较寄存器(CCR)
    • 占空比 = $\ \frac{CCR}{ARR+1} \times 100% \ $。
  2. 启用PWM输出模式
    • 配置PWM模式(如PWM模式1或PWM模式2),并启动定时器。

5. 不同硬件平台的 PWM 能力对比

平台 最大频率 分辨率(位) 通道数 典型应用
STM32F4系列 1MHz+ 16位 每定时器3-4通道 高精度电机控制、伺服驱动
Arduino Uno 490Hz-~10kHz 8位(0-255) 6个PWM引脚 基础LED调光、小电机控制
ESP32 1MHz+ 8-16位可配置 16个PWM通道 精密控制(如无人机舵机)

6. PWM 的局限性与设计注意事项

  • 局限性

    • 滤波需求:模拟输出需外接低通滤波器,否则高频开关可能引入噪声。
    • 频率选择
      • 高频(如20kHz)适合LED调光(人眼无法感知闪烁),但会增加电磁干扰(EMI);
      • 低频(如1kHz)适合电机控制,但可能产生可听噪音或机械振动。
    • 驱动能力:直接PWM输出通常需外接晶体管或MOSFET(如电机驱动),以放大电流和电压。
  • 设计技巧

    • 死区时间(Dead Time):在电机控制中,为避免上下桥臂直通,需在PWM信号中插入死区时间(例如STM32的互补输出PWM模式)。
    • 占空比与负载匹配:高占空比可能导致驱动电路过热,需结合散热设计。

7. 波形描述与动态特性

波形示例
  • 占空比 50%
    High: ----    ----    ----  
    Low:    ----    ----    ----  
    
  • 占空比 25%
    High: --        --        --  
    Low:    ------    ------    ------  
    
动态特性
  • 低占空比(如20%):设备(如电机)平均功率低,转速慢或亮度暗。
  • 高占空比(如80%):设备平均功率高,转速快或亮度亮。
  • 高频PWM(如20kHz):减少可见闪烁或音频噪声,提升控制精度。

8. 实际应用案例

  • 案例1:Arduino控制LED亮度

    • 硬件:Arduino Uno + 220Ω电阻 + LED。
    • 代码:analogWrite(9, 128) → 50%亮度。
    • 观察:占空比从0%到100%时,LED亮度线性变化。
  • 案例2:STM32控制直流电机

    • 硬件:STM32F4 + L298N电机驱动模块。
    • 配置:定时器TIM3输出PWM信号至L298N的IN1/IN2引脚,通过调整CCR实现速度调节。
    • 优势:支持可变频率(如1-20kHz),避免电机共振。
  • 案例3:ESP32生成音频信号

    • 硬件:ESP32 + 低通滤波器(如RC电路)+ 扬声器。
    • 配置:使用RMT模块生成高频PWM(如50kHz),经滤波后输出音频。
    • 注意:需确保PWM频率高于音频最高频率的两倍(奈奎斯特采样定理)。

9. 总结

PWM 是嵌入式系统中数字控制模拟设备的核心技术,其优势包括:

  • 高效节能:通过开关信号直接驱动负载,减少线性放大器的功率损耗。
  • 灵活性:占空比可编程调整,适用于多种控制场景(如速度、亮度、音频)。
  • 低成本:无需复杂模拟电路,仅需数字定时器和简单滤波。

局限性

  • 需外接滤波或驱动电路以适配负载;
  • 高频可能增加EMI,影响系统稳定性。

通过合理选择硬件平台(如STM32的高精度定时器、ESP32的多通道PWM),并优化频率和占空比参数,PWM 可在嵌入式控制系统中实现高效的模拟量输出控制。

posted @ 2025-04-15 17:33  Christopher_James  阅读(777)  评论(0)    收藏  举报