找回密码
 立即注册
查看: 217|回复: 8

有关HSPWM什么条件下应该使用

[复制链接]
已绑定手机

307

主题

584

回帖

2961

积分

金牌会员

积分
2961
发表于 2026-10-12 08:08:41 | 显示全部楼层 |阅读模式
截图202610120807175591.jpg

手册上也没提到较低的工作频率是多少,到底cpu频率和PWM频率相差多少要使用HSPWM,也没有表格列出数据,用户也不知道怎么选择
最近在FOC中断里面使用HSPWM发现根本来不及处理,正在优化中,所有HSPWM尽可能的不使用它
就想知道PWM模块和CPU时钟相差多少或者说临界点是多少


回复

使用道具 举报 送花

25

主题

252

回帖

2375

积分

版主

积分
2375
发表于 2026-10-12 09:02:14 | 显示全部楼层
回复

使用道具 举报 送花

25

主题

252

回帖

2375

积分

版主

积分
2375
发表于 2026-10-12 09:02:51 | 显示全部楼层

我已获取了足够的依据。现在我已经清楚了解 HSPWM 的技术细节,可以针对论坛用户的问题给出专业、准确的解答。


关于 STC8H 系列 HSPWM(高速高级 PWM)使用条件的解答

您好!针对论坛帖子中提出的 "HSPWM 什么条件下应该使用?CPU 频率和 PWM 频率相差多少要使用 HSPWM?临界点是多少?" 这个问题,我依据《STC8H 系列手册》相关章节为您梳理如下。


一、HSPWM 的本质:不是"频率差决定",而是"PWM 时钟源选择"

首先需要纠正一个常见理解误区:

HSPWM 并不是根据"CPU 频率和 PWM 频率相差多少"来切换的,它的核心是——是否把 PWM 的时钟源从"系统工作频率(MCLK)"切换为" PLL 时钟(独立高频源)"。

手册「27 高速高级PWM」章节原文说明:

当关闭异步控制时,高级PWMA/高级PWMB为传统模式,此时高级PWM会自动选择系统工作频率,PWM工作频率与系统工作频率相同;若需要时PWM工作在高速模式,则需要使能异步控制模式,此时PWM时钟可选择主时钟(MCLK)或者PLL输出时钟。

也就是说,选择 HSPWM 的判据是:

场景 应选择的模式 时钟源
PWM 输出频率 ≤ 系统工作频率能够满足 传统模式(ASYNCEN=0) 系统工作频率 SYSclk(MCLK)
系统跑在较低频率、但需要很高的 PWM 载波频率 高速模式(ASYNCEN=1) PLL 输出时钟(96MHz 或 144MHz)

二、手册明确的"适用条件"

手册「27 高速高级PWM」章节对使用场景的原文描述是:

当系统运行在较低工作频率时,高速高级PWM可工作在高达 144M~192M 的频率下。从而达到降低内核功耗,提升外设性能的目的。

这就是手册给出的"临界条件"逻辑:

  • HSPWM 的典型设计目标是——让 MCU 内核跑低频(省功耗),而 PWM 外设跑高频(保性能)。
  • 因此,判断是否需要 HSPWM 的决定性因素不是"两个频率差多少",而是:在传统模式下,用当前系统频率 SYSclk 无法产生你所需的 PWM 载波频率时,就应该启用 HSPWM。

三、用公式定量说明"临界点"

手册「25 16位高级PWM定时器」给出了 PWM 输出频率公式(边沿对齐):

PWM输出频率 = \frac{PWM时钟源频率}{(PWMx\_PSCR + 1) \times (PWMx\_ARR + 1)}

传统模式下,PWM 时钟源 = 系统工作频率 SYSclk,因此:

PWM_{max} = \frac{SYSclk}{1 \times 1} = SYSclk

(PSCR、ARR 最小取 0,即不分频、不计数分频)

👉 所以传统模式能输出的最高 PWM 频率,理论上就等于系统工作频率 SYSclk。

例如:

  • 系统跑 24MHz,传统模式 PWM 最高约 24MHz;
  • 但若你用的是 FOC 电机控制,常常需要 几十 kHz 甚至上百 kHz 的载波,且要求高分辨率(ARR 值大),此时 24MHz 的 SYSclk 会分辨率严重不足——这就是手册所说"系统运行在较低工作频率时"的困境。

此时启用 HSPWM,把 PWM 时钟源切到 PLL 的 96MHz / 144MHz:

  • PWM 时钟源从 24MHz 提升到 144MHz,相同的载波频率下,ARR 可大 6 倍,分辨率显著提高;
  • 或者相同分辨率下,载波频率可高 6 倍。

四、PLL 时钟源与配置要点

手册「7 时钟、复位、看门狗与电源管理」明确:

部分支持使用高速PLL时钟作为时钟源的外设包括:高速PWM、高速SPI

PLL 输出时钟由 CLKSEL 寄存器 CKMS 位选择:

CKMS PLL 输出
0 PLL 输出96MHz
1 PLL 输出144MHz

时钟源切换由 CLKSEL 寄存器的 HSIOCK 位控制:

HSIOCK 高速 I/O 时钟源
0 主时钟 MCLK
1 PLL 输出 96MHz/144MHz(PLLCLK)

配置步骤(手册「27 高速高级PWM」范例程序):

/* 1. 使能 PLL 倍频,选择 PLL 输出频率 */
PLLCR |= 0x80;              /* ENCKM=1 使能 PLL 倍频 */
CLKSEL |= 0x80;             /* CKMS=1 → PLL 输出 144MHz */

/* 2. 选择 HSPWM 时钟源为 PLL 输出 */
CLKSEL |= 0x40;             /* HSIOCK=1 → HSPWM/HSSPI 选择 PLL 输出时钟 */
HSCLKDIV = 0;               /* HSPWM/HSSPI 时钟源不分频 */

/* 3. 使能 PWMA 异步访问功能(进入高速模式) */
HSPWMA_CFG = 0x03;          /* INTEN=1, ASYNCEN=1 */

⚠️ 重要提醒(手册原文特别注意):PWMA_PS 和 PWMB_PS 属于端口控制寄存器,不属于 PWMA/PWMB 寄存器组,所以无论是否启动异步控制模式,这两个寄存器都只能使用普通同步模式读写。


五、关于您提到的"FOC 中断里用 HSPWM 根本来不及处理"

这是一个非常典型且真实的问题,需要从两个层面看:

  1. HSPWM 本身不会让中断"变慢"——它只是提高了 PWM 的时钟源频率。异步模式下若要响应 PWMA/PWMB 中断,手册明确要求:

    异步模式下,若需要响应高级PWMA/高级PWMB的中断,则必须使能 INTEN 位。

    如果 INTEN=0,你在异步模式下是收不到 PWM 中断的,容易误判为"来不及处理"。

  2. PWM 载波频率越高 → 中断触发越频繁 → CPU 负担越重。FOC 中如果载波选到很高(如 100kHz+),中断间隔只有 10μs,若中断服务程序不够精简(或主频偏低),确实会处理不过来。这与是否用 HSPWM 无直接关系,取决于载波频率设置与中断代码效率。

建议:

  • FOC 载波频率先按电机和算法需求确定(通常 10~20kHz 已足够);
  • 在满足分辨率的前提下,能用传统模式就不必上 HSPWM,避免无谓增加外设时钟与中断压力;
  • 若必须高频载波且要省内核功耗,再启用 HSPWM,并确保 ISR 足够精简。

六、结论:什么条件下应该使用 HSPWM?

综合手册原文,符合以下情形时才建议使用 HSPWM:

  1. ✅ 系统主频较低(如 24MHz 或更低),但需要较高的 PWM 载波频率或高分辨率;
  2. ✅ 希望内核跑低频省功耗、同时 PWM 外设跑高频保性能(这是 HSPWM 的设计初衷);
  3. ✅ 需要把 PWM 时钟源从 MCLK 切换到 PLL 的 96M/144M 独立高频时钟。

反之,以下情况无需 HSPWM:

  • ❌ 系统频率已经足够高、传统模式即可满足载波频率与分辨率;
  • ❌ 对 PWM 分辨率、载波频率要求不高;
  • ❌ 想省事、避免异步模式带来的配置复杂度(如 PWMA_PS 仍需同步访问等)。

关于手册未提供的"临界点数值表格": 经查询,《STC8H 系列手册》「27 高速高级PWM」及「25 16位高级PWM定时器」章节中,确实未给出"CPU 频率与 PWM 频率相差多少必须切 HSPWM"的固定数值表格。判断依据是上面第三节的公式——当 SYSclk 无法满足你所需的 PWM 频率/分辨率时,即为切换临界点,这是一个由需求反推的工程判断,而非手册固定的阈值。

(以上依据章节:《STC8H系列手册》「27 高速高级PWM」「25 16位高级PWM定时器,支持正交编码器」「7 时钟、复位、看门狗与电源管理」)


如果您能提供 FOC 具体的载波频率需求、期望的死区/分辨率、以及当前系统主频,我可以帮您具体计算应选传统模式还是 HSPWM,并给出推荐的 PSCR/ARR 参数。需要的话请告诉我。


🔍 搜索 "STC 单片机 论坛 帖子"

⏱️ 查找用时 9.0s | 总回答用时 21.7s

回复

使用道具 举报 送花

已绑定手机

1

主题

3

回帖

49

积分

新手上路

积分
49
发表于 2026-10-12 09:25:17 | 显示全部楼层
HSPWM的输入频率可以与CPU频率解耦合,它们之间是异步关系。比如CPU工作在24MHz、HSPWM频率144MHz。使用普通高级定时器而非HSPWM时,由于CPU频率与定时器频率绑定,且CPU无法运行在很高的频率,导致定时器频率会连带地受到限制
回复

使用道具 举报 送花

已绑定手机

307

主题

584

回帖

2961

积分

金牌会员

积分
2961
 楼主| 发表于 2026-10-12 10:14:25 | 显示全部楼层

AI回答的不靠谱,我要官方的回答
回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17932
发表于 2026-10-12 10:31:58 | 显示全部楼层
当 PWM频率*PWM步数 >FOSC时,就要使用HSPWM。
比如,我使用PWM接H桥直接驱动音箱播放声音,使用12位的PWM,步数为4096,要求100KHz的PWM频率,则要求PWM时钟频率=4096*100KHz=409.6MHz,远比主频高,所以要使用HSPWM才行。
这就是HSPWM实现D类功放的方法,使用48V供电,4欧姆负载,可以输出250W的正弦有效值(RMS)功率。
回复

使用道具 举报 送花

已绑定手机

307

主题

584

回帖

2961

积分

金牌会员

积分
2961
 楼主| 发表于 2026-10-12 10:43:21 | 显示全部楼层
梁*** 发表于 2026-10-12 10:31
当 PWM频率*PWM步数 >FOSC时,就要使用HSPWM。
比如,我使用PWM接H桥直接驱动音箱播放声音,使用12位的PWM ...

把这个公式写进数据手册里吧,否则没有参考方向
回复

使用道具 举报 送花

已绑定手机

1

主题

3

回帖

49

积分

新手上路

积分
49
发表于 2026-10-12 11:50:16 | 显示全部楼层
梁*** 发表于 2026-10-12 10:31
当 PWM频率*PWM步数 >FOSC时,就要使用HSPWM。
比如,我使用PWM接H桥直接驱动音箱播放声音,使用12位的PWM ...

梁工,这个问题现在有官方答复吗https://www.stcaimcu.com/thread-25718-1-2.html

点评

还没有,有的话就贴出来了  详情 回复 发表于 2026-10-12 14:35
回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17932
发表于 2026-10-12 14:35:54 | 显示全部楼层
zrni*** 发表于 2026-10-12 11:50
梁工,这个问题现在有官方答复吗https://www.stcaimcu.com/thread-25718-1-2.html

还没有,有的话就贴出来了
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-8 02:40 , Processed in 0.078173 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表