找回密码
 立即注册
查看: 168|回复: 7

PCA能否实现任意PWM频率和占空比的输出?

[复制链接]
已绑定手机

5

主题

4

回帖

41

积分

新手上路

积分
41
发表于 2026-10-28 11:40:37 | 显示全部楼层 |阅读模式
MCU型号:STC8G1K08A
需求:输出占空比为50%的PWM,频率为234K/224K/200K/110K.
查看手册发现存在PCA外设可以输出PWM,运行示例代码也成功测出波形。
但是对于频率的调节好像不太自由,PCA外设的PWM是否无法像定时器产生的PWM那样,通过调节时钟的分频和自动重装在值来调节PWM的频率。时钟分频只有固定的4/6/8分频,自动重装载值也只能是63/127/255/1023对应的6/7/8/10位,能相对自由调节的只有占空比,请问是这样吗?
如果想要实现相对精确的频率输出,使用定时器作为时钟源是否可行。



截图202610281138176246.jpg
回复

使用道具 举报 送花

已绑定手机

5

主题

4

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2026-10-28 11:46:27 | 显示全部楼层
将PCA脉冲源选择位,设置成定时器0的溢出脉冲,是否就能实现通过控制定时器0来控制PWM输出的频率。
截图202610281145284755.jpg
回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17932
发表于 2026-10-28 14:01:59 | 显示全部楼层
使用定时器0的溢出做PCA时钟可以调PWM频率,但PWM频率高时频率跳跃较大,建议使用STC8H系列的高级PWM来做。
回复

使用道具 举报 送花

已绑定手机

7

主题

445

回帖

6692

积分

论坛元老

积分
6692
发表于 2026-10-28 15:36:10 | 显示全部楼层
要看具体需求,高速脉冲模式结合匹配中断可以实现较为灵活的频率与占空比调节,且三路PCA可以有独立的频率与占空比。
傲游截图20261028153122.jpg
回复

使用道具 举报 送花

9

主题

772

回帖

5311

积分

论坛元老

积分
5311
发表于 2026-10-28 15:54:20 | 显示全部楼层
如果是固定50%占空比输出,没必要用pwm,直接使用带预分频器的定时器高速脉冲输出模式就行了,频率范围非常宽,频率越高,调节步长越大,
24M系统时钟,240khz输出的话,分频比100,频率调节步长不到3khz,如果要更细的分辨率,可以把系统时钟提高到32Mhz以上
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25432
发表于 2026-10-28 22:50:23 | 显示全部楼层
截图202610282250206761.jpg
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25432
发表于 2026-10-28 22:50:37 | 显示全部楼层

下面基于 STC8G 系列手册(帖子楼主用的是 STC8G1K08A)逐条回答帖中的问题。

一、楼主的核心疑问:PCA 的 PWM 频率能不能像定时器 PWM 那样自由调?

基本属实。 手册「PCA/CCP/PWM应用」章节的 PWM 脉宽调制模式部分原文给出了四种模式的频率公式:

PWM 模式 PCA_PWMn.EBSn[1:0] 频率公式 计数值范围
8 位 00 PCA 时钟输入频率 / 256 CL[7:0]
7 位 01 PCA 时钟输入频率 / 128 CL[6:0]
6 位 10 PCA 时钟输入频率 / 64 CL[5:0]
10 位 11 PCA 时钟输入频率 / 1024 CH[1:0]+CL[7:0]

所以:

  • 分辨率(位数)一选定,分频比就固定(64/128/256/1024),不能任意设;
  • 时钟源只能从 CMOD.CPS[2:0] 的 8 档里选(系统时钟/12、/2、定时器0溢出、ECI 外部时钟、系统时钟、/4、/6、/8);
  • 能自由设的确实只有占空比,即 CCAPnL/CCAPnH(10 位时还要用 XCCAPnL/XCCAPnH 的高 2 位、EPCnL)。

楼主这个理解与手册公式完全吻合。

二、"用定时器0溢出脉冲做 PCA 时钟来调频率"——可行,且原理正确

CMOD.CPS[2:0] = 010 时,PCA 计数脉冲源就是定时器 0 的溢出脉冲(手册 CMOD 表格原文)。此时:

\text{PWM 频率} = \frac{f_{T0溢出}}{64/128/256/1024}

而 T0 溢出频率由 T0 模式0(16 位自动重装载)的重装值决定,手册「定时器/计数器」章节公式:

  • 1T 模式(AUXR.T0x12 = 1):T0周期 = \frac{65536-[TH0,TL0]}{SYSclk}
  • 12T 模式(AUXR.T0x12 = 0):T0周期 = \frac{65536-[TH0,TL0]}{SYSclk} \times 12

所以改重装值就等同于连续调分频系数,确实能"通过控制定时器0来控制 PWM 输出频率"。这条思路成立。

但要提醒楼主的是步长问题:因为 [TH0,TL0] 只能取整数,f_{PWM} 的最小可调步长随频率升高而变大。频率高时 [TH0,TL0] 接近 65536,变化 1 对频率的相对影响变大,所以会出现"跳跃"。这与论坛版主(梁工)的回复"PWM 频率高时频率跳跃较大"是同一结论,也与上面公式推导一致。

三、针对楼主那颗芯片的选型提醒(很重要)

按手册「精度可达 15 位的增强型 PWM」章节开头的型号支持表:

  • STC8G1K08A 系列:增强型 PWM 一栏为空,不支持;
  • STC8G2K64S4、STC8G2K64S2、STC15H2K64S4:支持。

而「PCA/CCP/PWM应用」章节支持表里,STC8G1K08A 系列的 PCA 是 ●(支持)。

也就是说 STC8G1K08A 上没有 15 位增强型 PWM,只有 PCA 这一路硬件 PWM 可用。论坛里"建议改用 STC8H 高级 PWM"的建议,从功能档位看是对的——手册写明 STC8H 的 16 位高级 PWM"可对外输出任意频率以及任意占空比的 PWM 波形",这是能力差异,不是否定哪颗芯片。

四、引脚分布(STC8G1K08A,供实际写代码时参考)

手册「功能脚切换」章节,P_SW1 中的 CCP_S[1:0] 对 STC8G1K08A 系列的映射:

CCP_S[1:0]ECICCP0CCP1CCP2

00P5.5P3.2P3.3P5.4
01P5.5P3.1P3.3P5.4
10P3.1P3.2P3.3P5.5
11----

注意:若选 CPS = 011(ECI 外部输入时钟),手册标注"外部时钟频率不能高于系统频率的 1/2"。选 010(T0 溢出)时无此限制说明。

五、结论与建议

  1. 楼主判断正确:PCA 自身只能离散调频,占空比可自由调。
  2. CPS = 010 借定时器0溢出做时钟调频可行,但高频段步长粗;234K/224K 这种只差 10K 的档位,建议先按实际 SYSclk 算一下 [TH0,TL0] 能否分辨开(把 T0x12 置 1 走 1T 模式能显著提高分辨率)。
  3. 50% 固定占空比:选 8 位(256)或 10 位(1024)模式,使 CCAPnL 置为半量程,即可得到接近 50%。手册还给了两个特例:PCA_PWMn &= 0xC0 且 CCAPnH=0x00 时固定输出高;PCA_PWMn |= 0x3F 且 CCAPnH=0xFF 时固定输出低。
  4. 若频率要长期灵活且精确,STC8G1K08A 只能靠 PCA 或定时器方案;真需要"任意频率任意占空比",需评估 STC8G2K64S4(15 位增强型 PWM)或 STC8H 的 16 位高级 PWM。

如果你把系统时钟频率告诉张工(也就是你同事),我可以直接把 234K/224K/200K/110K 四个频点的 [TH0,TL0] 重装值、T0x12 选择、PCA 位数模式与 CCAPnL/CCAPnH 值全部算好,写成一份可直接编译的 STC8G 初始化函数(注释标明每个寄存器位含义)。


🔍 搜索 "STC8G PCA 资料"

📌 相关论坛讨论

  1. 关于 STC8H手册里的PCA部分
  2. 【AI助手】@AiCube-ISP-V6.97中,【自动生成程序】+【查错高手】
  3. 【已解决】PCA模块关闭后电平如何控制

⏱️ 查找用时 5.0s | 总回答用时 13.6s

回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25432
发表于 2026-10-28 22:52:32 | 显示全部楼层
截图202610282252293936.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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