aerror 发表于 2025-6-18 10:16:07

aerror 发表于 2025-6-18 09:32
你好,我使用STC8G08A 8pin测试PCA T0这个触发源, 它是基本可以工作的,但是有一个很奇怪问题,这个PCA频 ...
啊,根据公式是对的,7位的PCA的频率= 输入频率/128,即100000 /128 = 781 , {:ciya:}{:touxiao:}

梁工 发表于 2025-6-18 10:41:10

aerror 发表于 2025-6-18 10:16
啊,根据公式是对的,7位的PCA的频率= 输入频率/128,即100000 /128 = 781 ,

你的设置:T0L = (0xffff-20)&0xff, T0H= ((0xffff-20)>>8 ) & 0xff。
这个设置其实是 24M/2/21,不是/20。
你的PWM频率应该是 24000000/12/21/128=744Hz。

要得到100KHz的时钟,应该是:
TL0 = (u8)(65536UL-20);
TH0 = (u8)((65536UL-20) >>8);

aerror 发表于 2025-6-18 18:56:46

梁工 发表于 2025-6-18 10:41
你的设置:T0L = (0xffff-20)&0xff, T0H= ((0xffff-20)>>8 ) & 0xff。
这个设置其实是 24M/2/21,不是/20 ...

对,我错了,谢谢指正!

aerror 发表于 2025-6-20 15:01:27

梁工 发表于 2025-6-18 10:41
你的设置:T0L = (0xffff-20)&0xff, T0H= ((0xffff-20)>>8 ) & 0xff。
这个设置其实是 24M/2/21,不是/20 ...
对了,请教一下,在7位pwm输出这里, 文档说:
PCA_PWMn 寄存器中的EBSn[1:0]设置为01时,PCA模块n工作于7位PWM 模式,此时将10,CL[6:01}与捕获寄存器{EPCnL,CCAPnL[6:0]}进行比较。当PCA 模块工作于7位PWM 模式时,由于所有模块共用一个PCA计数器,所有它们的输出频率相同。各个模块的输出占空比使用寄存器{EPCnL,CCAPnL[6:0]}进行设置。当{0,CL[6:0]}的值小于{EPCnL,CCAPnL[6:0]}时,输出为低电平;当{0,CL[6:0]}的值等于或大于{EPCnL,CCAPnL[6:0]}时,输出为高电平。当CL[6:0]的值由 7F变为00溢出时,{EPCnH,CCAPnH[6:0]}的内容重新装载到{EPCnL,CCAPnL[6:0]}中。这样就可实现无干扰地更新 PWM。

   我这里有点晕,不明白, {EPCnL,CCAPnL[6:0]} 这个 不是一共8位了,而不是7位, 我现在是设置是EPCnH 是0 , CCAPnH 是设置了7位,目前工作的是正常的。
我理解为 即是:
{EPCnL,CCAPnL[6:0]} =={0,CCAPnL[6:0]},

因为EPCnH为0.

    但是我有点不解的是,
如果我设置 EPCnH 为1, 那么,
EPCnL 也会给重载成1, 即 :
    {EPCnL,CCAPnL[6:0]} =={1,CCAPnL[6:0]},
那么,
{0,CL[6:0]} 和 {EPCnL,CCAPnL[6:0]} 比较, 等效于 {0,CL[6:0]} 和 {1,CCAPnL[6:0]},


那么,无论CCAPnH 设置任何值,
       {0,CL[6:0]} 不是永远比 {1,CCAPnL[6:0]} 小? !!!!


即是,如果EPCnH 为1 , 那么这个pwm 输出 ,无论你如何调 CCAPnH , 这个输出永远低电平? !!!

感觉不对劲, 我是有什么地方理解错了吧?请指教一下!!谢谢!


关于 EPCnH和EPCnL,文档是这样说的:
EPCnH:PWM 模式下,重载值的最高位(8位PWM 的第9位,7位PWM 的第8位,6位PWM 的第7
位,10位PWM 的第11位)EPCnL:PWM模式下,比较值的最高位(8位PWM的第9位,7位PWM的第8位,6位PWM的第7位,10位PWM的第11位)

17.3.4.5如何控制PWM 固定输出高电平/低电平当PCA_PWMn &=OxCO,CCAPnH=0x00时,PWM固定输出高电平当 PCA_PWMn|= Ox3F,CCAPnH= OxFF 时,PWM固定输出低电

梁工 发表于 2025-6-20 15:11:11

aerror 发表于 2025-6-20 15:01
对了,请教一下,在7位pwm输出这里, 文档说:PCA_PWMn 寄存器中的EBSn[1:0]设置为01时,PCA模块n工 ...

有什么问题吗?

aerror 发表于 2025-6-20 15:13:03

梁工 发表于 2025-6-20 15:11
有什么问题吗?

你好,我刚刚小心发出了,重新编辑了一下: 在7位pwm输出这里, 文档说:
PCA_PWMn 寄存器中的EBSn[1:0]设置为01时,PCA模块n工作于7位PWM 模式,此时将10,CL[6:01}与捕获寄存器{EPCnL,CCAPnL[6:0]}进行比较。当PCA 模块工作于7位PWM 模式时,由于所有模块共用一个PCA计数器,所有它们的输出频率相同。各个模块的输出占空比使用寄存器{EPCnL,CCAPnL[6:0]}进行设置。当{0,CL[6:0]}的值小于{EPCnL,CCAPnL[6:0]}时,输出为低电平;当{0,CL[6:0]}的值等于或大于{EPCnL,CCAPnL[6:0]}时,输出为高电平。当CL[6:0]的值由 7F变为00溢出时,{EPCnH,CCAPnH[6:0]}的内容重新装载到{EPCnL,CCAPnL[6:0]}中。这样就可实现无干扰地更新 PWM。

   我这里有点晕,不明白, {EPCnL,CCAPnL[6:0]} 这个 不是一共8位了,而不是7位, 我现在是设置是EPCnH 是0 , CCAPnH 是设置了7位,目前工作的是正常的。
我理解为 即是:
{EPCnL,CCAPnL[6:0]} =={0,CCAPnL[6:0]},

因为EPCnH为0.

    但是我有点不解的是,
如果我设置 EPCnH 为1, 那么,
EPCnL 也会给重载成1, 即 :
    {EPCnL,CCAPnL[6:0]} =={1,CCAPnL[6:0]},
那么,
    {0,CL[6:0]} 和 {EPCnL,CCAPnL[6:0]} 比较, 等效于 {0,CL[6:0]} 和 {1,CCAPnL[6:0]},


那么,无论CCAPnH 设置任何值,
       {0,CL[6:0]} 不是永远比 {1,CCAPnL[6:0]} 小? !!!!


即是,如果EPCnH 为1 , 那么这个pwm 输出 ,无论你如何调 CCAPnH , 这个输出永远低电平? !!!

感觉不对劲, 我是有什么地方理解错了吧?请指教一下!!谢谢!

aerror 发表于 2025-6-20 15:34:16

问题这个问题之前,我是想生成一对这样的波形,
PCA0:-------|___|-------|___|--
PCA1:___|-------|___|-------|__

上面是示意的两个周期,假设 周期时长为 10,   pca0的EPC0H 设置为6,那么小<6是pc0输出高电平, >=6时输出低电平,

因为所有的PCA都是共用CL的,所以PCA1的周期时长也是10,   我计划是pca1在小于<4时输出低电平,大于等于4输出高电平。   
我以为EPCnH可以解决问题,但是看了一下文档,好像我没有理解,现在是非常不确认可以怎么做。 在stm32可以使用极性来设置。

梁工 发表于 2025-6-21 00:07:26

aerror 发表于 2025-6-20 15:13
你好,我刚刚小心发出了,重新编辑了一下: 在7位pwm输出这里, 文档说:
PCA_PWMn 寄存器中的EBSn[1:0 ...

手册有说明的:



aerror 发表于 2025-6-21 23:22:27

梁工 发表于 2025-6-21 00:07
手册有说明的:

嗯,我正是看了这个文档,所以我很困惑。我得出的结论是:
如果EPCnH 为1 , 那么这个pwm 输出 ,无论你如何调 CCAPnH , 这个PCAn输出永远低电平?

aerror 发表于 2025-6-21 23:55:04

梁工 发表于 2025-6-21 00:07
手册有说明的:

确实是EPCnH 为1, 无论如何都是输出零电平
页: 1 [2]
查看完整版本: 关于8G1K08的PCA时钟源为T0溢出脉冲