[PWM] PWM快速入门

引言

PWM外设是专为先楫HPM67XX HPM62XX HPM63XX HPM5XX HPM64XX系列微控制器(MCU)设计的先进PWM模块,提供了高效、灵活的脉宽调制功能。

本指南旨在帮助开发者快速掌握如何使用 PWM 外设进行编程和应用开发。本文内容注重简洁明了,旨在让读者轻松理解关键概念和基本操作。对于更高级的功能和详细配置,请参阅后续的系列文档以获取深入指导。

PWM系列文章主要从以下几个方向介绍先楫PWM外设的应用方法

主要功能

  • 波形输出

    • 中心对称PWM
    • 边沿对齐PWM(左侧边沿,右侧边沿)
    • 互补PWM输出,带死区控制
    • 故障保护功能,支持同步和异步保护
    • 强制输出功能
    • 输入捕获功能
    • 支持触发adc采样
    • 支持触发sigma-delta adc采样(需芯片支持sigma-delta adc)
    • 支持触发编码器采样
    • 支持PWM同步功能
    • 支持PWM移相功能
    • PWM中断和DMA功能

    特色功能

  • 支持关键寄存器加锁

  • 支持调试模式

    • 使用调试器进行调试时可以设置PWM输出为配置的电平状态
  • 高精度PWM

  • 4个CMP控制一个PWM输出,一个PWM周期内电平可以变化4次

进阶篇

在准备PWM(脉宽调制)系列的高级功能配置文档时,我们重点关注以下几个关键特性:

  1. PWM信号同步
    同步PWM信号确保了多个PWM通道之间或与外部时钟和事件的时间一致性。对于多相系统中的精确相位对齐至关重要。

  2. PWM信号移相
    移相技术允许调整PWM信号相对于参考点或其他PWM信号的相位角。这对于三相电机控制和其他需要精密相位调节的应用尤为重要。通过硬件或软件实现的移相可以提供灵活且精确的控制。

  3. 固定占空比下的频率调整
    有时应用需求保持固定的占空比,同时调整PWM信号的频率。这种配置要求PWM生成器能够精准地维持设定的占空比,即使频率发生变化。

  4. 事件驱动与中断管理
    高效的事件检测和中断触发机制使得PWM控制器能够在特定事件发生时即时响应,如周期结束或比较匹配。良好的事件和中断管理是实现实时操作的关键,提升了系统的响应速度和整体效率。

  5. 斩波功能
    PWM斩波将连续的PWM信号分割成一系列短脉冲,以降低音频噪声或优化电源效率。通过调整PWM信号的开启和关闭时间来实施斩波,为某些应用场景提供了额外的优势。

  6. 故障保护和强制输出功能

    • PWM模块提供了全面的故障保护机制,能够在检测到异常情况时迅速采取措施,防止潜在的硬件损坏或危险发生。主要特性包括同步和异步故障输入,故障响应模式,故障恢复机制。
    • 强制输出功能允许用户在必要时直接控制PWM输出的状态,而不依赖于正常的PWM波形生成逻辑。可提供硬件强制输出和软件强制输出。

时钟配置

先楫PWM的时钟和电机系统共用一个时钟源,因此不需要单独进行PWM系统的时钟分频设置,简化用户的设计。使用如下接口可以获取PWM的频率

freq = clock_get_frequency(clock_mot0);

引脚配置

使用PWM输出,需要配置引脚的功能为PWM,代码如下所示,设置PE08引脚功能为PWM1的P0引脚:

HPM_IOC->PAD[IOC_PAD_PE08].FUNC_CTL = IOC_PE08_FUNC_CTL_PWM1_P_0;

PWM影子寄存器功能介绍

1. 影子寄存器概述

影子寄存器为某些关键寄存器提供了一个临时存储区域。在处理器写入这些寄存器时,实际上是先将数据写入影子寄存器。只有当满足特定条件时,才会将影子寄存器中的值更新到实际寄存器中,从而改变PWM定时器的工作状态。

2. 支持影子寄存器的寄存器组

以下三组寄存器支持影子寄存器机制:

  • 计数器的起始寄存器 (STA) 和重载寄存器 (RLD):包括标准和扩展两部分(如 STA/XSTA, RLD/XRLD)。
  • 比较器 CMPx:当用作输出比较模式时。
  • 控制寄存器中的 FRCMD 位:用于通道0至7的强制输出控制模式。

3. 生效时机选择

用户可以选择不同的生效时机来触发影子寄存器值的更新:

CMPSHDWUPT 配置 枚举类型常量 描述
2'b00 pwm_shadow_register_update_on_shlk 软件控制:通过设置 SHLK[SHLK] 位来手动触发更新。
2'b01 pwm_shadow_register_update_on_modify 实时生效:在寄存器写操作后的一个周期内立即生效。
2'b10 pwm_shadow_register_update_on_hw_event 基于匹配事件:当某个选定的比较器发生匹配事件(输出比较或输入捕获)时触发更新。
2'b11 pwm_shadow_register_update_on_sh_synci 基于硬件信号:当检测到影子寄存器重载触发输入 (SHRLDSYNCI) 上的上升沿时触发更新。

4. 写保护与解锁

为了防止意外修改,影子寄存器支持写保护机制。你可以使用以下两个函数来进行写保护和解锁:

  • 写保护函数: pwm_shadow_register_lock()
  • 解锁函数: pwm_shadow_register_unlock()

调用 pwm_shadow_register_lock() 函数可以启用影子寄存器的写保护,防止意外修改。若需解除保护,可调用 pwm_shadow_register_unlock() 函数。

5. 使用建议

  • 在需要实时调整PWM输出波形占空比的情况下,推荐将 CMPxCMPCFGx[CMPSHDWUPT] 位配置为

    • pwm_shadow_register_update_on_hw_event(对应 2'b10
    • pwm_shadow_register_update_on_sh_synci(对应 2'b11

    这能确保更改在安全且合适的时机生效,避免因不当时间点更新导致输出波形异常。

  • 在更新多个影子寄存器的过程中,为了避免部分更新造成的错误,应确保所有相关影子寄存器都已更新完毕再触发生效时刻。

PWM 生效时机

为了确保信号能在正确的时间点被触发或更新,PWM外设提供了灵活的机制来控制不同事件的生效时机。

1. 影子寄存器更新时机

影子寄存器允许用户在不中断当前操作的情况下准备新的配置值,并在合适的时刻应用这些新值。常见的生效时机包括:

  • 软件触发:由特定的操作指令触发。
  • 实时生效:立即应用新值。
  • 硬件事件触发:当某个特定的硬件事件发生时(如比较器匹配事件),新值会自动应用。
  • 外部信号触发:通过外部输入信号触发更新。

2. 强制输出控制

强制输出功能允许用户在特定情况下临时改变PWM通道的输出状态。生效时机可以是:

  • 即时生效:一旦设置,立即改变输出状态。
  • 重载时生效:在计数器达到预设值并重新加载时改变输出状态。
  • 同步输入触发:当检测到特定的同步输入信号时改变输出状态。
  • 不生效:不进行任何强制输出控制。

3. 故障保护恢复

故障保护机制可以在检测到异常情况时迅速采取措施(如关闭PWM输出)。恢复PWM输出的时机可以根据需要设定为:

  • 立即恢复:一旦故障条件解除,立刻恢复正常操作。
  • 重载后恢复:在计数器重载之后恢复输出。
  • 匹配后恢复:当特定的硬件事件发生时(例如比较器匹配事件)恢复输出。
  • 手动恢复:通过手动操作来恢复PWM输出。

4. 比较器匹配事件

比较器用于生成PWM波形中的关键时间点。比较器匹配事件的生效时机也可以灵活配置,以适应不同的应用需求。通常可以通过选择特定的硬件事件(如比较器匹配事件)来触发更新。

PWM生成

主要介绍PWM生成机制及其相关的计数器功能,帮助用户更好地理解和应用这一技术。

一、PWM生成机制

PWM生成模块主要包括比较器和通道两部分。通过这些组件,可以灵活地生成各种复杂的PWM波形。

  1. 比较器

    • 每个PWM定时器包含24个比较器,每个比较器都可以配置为输出比较模式。
    • 当计数器的值达到设定的目标值时,会产生匹配事件,从而触发相应的输出变化。
    • 比较器不仅支持高精度的主计数值,还支持扩展计数值,以实现更高的时间分辨率。
    • 小数比较位用于进一步细化匹配事件的时间点,确保更精确的控制。
  2. 通道

    • PWM定时器共有24个输出通道,其中前8个通道连接到PWM控制逻辑,如互补控制、死区生成和故障保护等模块,最终输出到芯片管脚。
    • 后续的通道是通用输出通道,可以直接输出参考信号供内部或外部使用。
  3. 分配方式

    • 用户可以根据需要将一个或多个连续的比较器分配给某个通道,从而实现复杂多样的PWM波形。
    • 例如,可以通过设置特定参数选择分配给通道的比较器起始编号和末尾编号。
示例配置:

假设有一个应用需要三个PWM输出和两个控制信号输出:

  • 将比较器0到1分配给通道0,这样通道0会根据这两个比较器的匹配事件生成PWM波形。
  • 将比较器3分配给通道1,通道1仅依赖于比较器3的匹配事件。
  • 将比较器4到7分配给通道5,通道5会根据这四个比较器的匹配事件生成更复杂的PWM波形。
  • 将比较器4到5分配给通道8,通道8依赖于这两个比较器的匹配事件。
  • 将比较器7分配给通道9,通道9仅依赖于比较器7的匹配事件。

二、PWM计数器

PWM计数器是PWM生成的核心,决定了PWM波形的时间基准和周期。

  1. 计数器结构

    • 计数器由一个主要的计数器和一个扩展计数组成,可以组合成一个更高精度的计数器。
    • 计数器支持向上计数模式,并且可以设置起始值和重载值。
  2. 计数器操作

    • 当启动信号激活时,计数器从起始值开始计数。
    • 当计数器达到重载值时,重载标志位置1,并且计数器恢复到起始值继续计数。
    • 如果扩展计数器也达到扩展重载值,扩展重载标志位置1,并且扩展计数器恢复到扩展起始值。
  3. 同步触发

    • 可以通过外部输入信号同步触发计数器的开始或重载操作。
    • 这种外部同步触发机制使得计数器能够与外部设备保持一致,确保精确的时间同步。
  4. 标志位管理

    • 重载标志位:当计数器达到重载值时置1。
    • 扩展重载标志位:当扩展计数器达到扩展重载值时置1。
    • 半程重载标志位:当计数器计数值达到起始值和重载值中间时置1。

    计数器工作示例:

    假设计数器起始值设为0,重载值设为最大值,扩展起始值设为0,扩展重载值设为最大值,则实际定时器的计时周期为非常大的数值。如果使用外部同步信号触发重载,计数器会在接收到同步信号时重置到起始值并重新开始计数。

中心对齐PWM

中心对齐的PWM(脉宽调制)波形因其对称性而被广泛应用于电机控制、音频信号处理等领域。与边缘对齐PWM不同,中心对齐PWM在一个周期内的高电平和低电平时间是关于周期中点对称分布的。

  • 影子寄存器方法

    为了生成中心对齐的PWM波形,可以通过配置PWM模块中的两个比较单元来实现。具体来说,需要设置两个影子寄存器,分别对应于PWM波形的上升沿和下降沿位置。通过将这两个寄存器值设为以下表达式,可以确保PWM波形的中心对齐:

    • 上升沿位置(即PWM波形开始变为高电平的位置):

      \text{CMP0} = \frac{\text{Reload} - \text{Duty}}{2}
    • 下降沿位置(即PWM波形恢复为低电平的位置):

      \text{CMP1} = \frac{\text{Reload} + \text{Duty}}{2}

    其中:

    • Reload 是PWM周期结束时重新加载的计数值,决定了PWM的频率。
    • Duty 是PWM的占空比,表示高电平持续时间对应的计数值。

    上述配置确保了PWM信号在一个周期内的高电平和低电平时间是对称分布的,从而产生精确的中心对齐波形。这种方法不仅提高了PWM输出的精度,而且对于降低电磁干扰(EMI)和提高系统的整体性能具有重要作用。

    此外,当调整Duty值以改变PWM占空比时,CMP0CMP1 会相应地更新,保持波形始终关于周期中点对齐。这使得即使在动态调整占空比的情况下,也能维持波形的对称性和稳定性。

边沿对齐PWM

边沿对齐PWM(脉宽调制)是一种常见的波形生成方式,广泛应用于各种控制和调节系统中。与中心对齐PWM不同,边沿对齐PWM的高电平或低电平时间不是关于周期中点对称分布的,而是相对于一个固定的边沿(上升沿或下降沿)进行调整。这种方式简化了硬件设计,并且在某些应用中提供了更好的灵活性。

  • 左边沿对齐
    左边沿对齐PWM是指PWM波形的每个周期都从同一个固定的时间点开始,即所有周期的上升沿是同步的。在这个模式下,占空比的变化只影响PWM波形的结束位置(下降沿),而起始位置保持不变。
    所以CMP0配置为0,CMP1配置为占空比即可

  • 右边沿对齐

    右边沿对齐PWM则是在每个周期结束时保持同步,即所有周期的下降沿是同步的。在这种模式下,占空比的变化会影响PWM波形的开始位置(上升沿),而结束位置保持不变。

    \text{CMP0} = \text{Reload} - \text{Duty}
    \text{CMP1} = \text{Reload}

    结语

    HPM系列微控制器提供的强大PWM生成机制和计数器功能,使得用户能够轻松应对各种复杂的应用需求。本文详细介绍了PWM生成的基本原理及其相关的计数器操作,旨在帮助读者更好地理解这一技术的核心概念。无论是配置比较器来生成复杂的波形,还是利用计数器实现精准的时间控制,这些功能都为工程师提供了极大的灵活性和便利性。通过合理设置起始值、重载值以及同步触发机制,用户可以确保PWM信号在正确的时间点被触发和更新,从而实现高效可靠的系统控制。

0
0
发表回复 0

Your email address will not be published. Required fields are marked *