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

8H8K PWMA 输出互补(PWM1P,PWM1N)当占空比为50%时候两路输出波形相同的疑问

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-04 09:20:07
已绑定手机

5

主题

13

回帖

125

积分

注册会员

积分
125
发表于 2025-1-6 18:37:27 | 显示全部楼层 |阅读模式
测试STC8H系列-高级PWM相关程序-20240103.rar的STC8H系列-高级PWM相关程序-20240103\高级PWM相关程序\01B-PWMA-4对互补PWM输出P2口例程


1.部分源码:

void PWMA_config(void)
{
        P_SW2 |= 0x80;                //SFR enable   

        PWMA_PSCR = 0x0000;        // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMA_DTR  = 24;                // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,  
                                                //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
        PWMA_ARR = 2400;        // 自动重装载寄存器,  控制PWM周期
        PWMA_CCER1  = 0;
        PWMA_CCER2  = 0;
        PWMA_SR1    = 0;
        PWMA_SR2    = 0;
        PWMA_ENO    = 0;
        PWMA_PS     = 0;
        PWMA_IER    = 0;
//        PWMA_ISR_En = 0;PWMA_CCMR1  = 0x68;                // 通道模式配置, PWM模式1, 预装载允许
        PWMA_CCR1   = 400;                // 比较值, 控制占空比(高电平时钟数)
        PWMA_CCER1 |= 0x05;                // 开启比较输出, 高电平有效
        PWMA_PS    |= 1;                // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
        PWMA_ENO   |= 0x03;                // IO输出允许,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P
//        PWMA_IER   |= 0x02;                // 使能中断



输出波形 PWM1P-->P2.0,PWM1N-->P2.1,没有使用死区
400.jpg


2. 修改的地方 PWMA_CCR1   =400 改为PWMA_CCR1   =1200


void PWMA_config(void)
{
        P_SW2 |= 0x80;                //SFR enable   

        PWMA_PSCR = 0x0000;        // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMA_DTR  = 24;                // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,  
                                                //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
        PWMA_ARR = 2400;        // 自动重装载寄存器,  控制PWM周期
        PWMA_CCER1  = 0;
        PWMA_CCER2  = 0;
        PWMA_SR1    = 0;
        PWMA_SR2    = 0;
        PWMA_ENO    = 0;
        PWMA_PS     = 0;
        PWMA_IER    = 0;
//        PWMA_ISR_En = 0;PWMA_CCMR1  = 0x68;                // 通道模式配置, PWM模式1, 预装载允许
        PWMA_CCR1   =1200;                // 比较值, 控制占空比(高电平时钟数)
        PWMA_CCER1 |= 0x05;                // 开启比较输出, 高电平有效
        PWMA_PS    |= 1;                // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
        PWMA_ENO   |= 0x03;                // IO输出允许,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P
//        PWMA_IER   |= 0x02;                // 使能中断



PWMA_CCR1 输出波形 PWM1P-->P2.0,PWM1N-->P2.1,没有使用死区

周期2400 占空比1200

周期2400 占空比1200


梁工你好,帮忙看看 我想得到的波形是这样的该怎么设置
AB.jpg

芯片STC8H8K64U-45I-LQPF32  2426A539249.HD

Screenshot_2024-10-17-10-17-29-208_com.tencent.mobileqq.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-04-28 08:49:07
已绑定手机

90

主题

961

回帖

2318

积分

超级版主

积分
2318
QQ
发表于 2025-1-7 08:43:40 | 显示全部楼层
我去帮你喊梁工
热线19952583534
www.STCAI.com
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-1-7 09:11:31 | 显示全部楼层
可以参阅以下程序:

以下程序是50%互补输出,24Mhz下输出频率为2.5Khz
  1. void Pwm_Init(void)
  2. {
  3.         EAXFR = 1; //扩展寄存器(XFR)访问使能
  4.         PWMA_PS = 0x01;//设置PWMA的引脚切换
  5.         PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
  6.         PWMA_CCMR1 = 0x60;
  7.         PWMA_CCER1 = 0x05;
  8.         PWMA_CCMR1 = 0x68;
  9.         PWMA_ARRH = 0x25;
  10.         PWMA_ARRL = 0x80;
  11.         PWMA_CCR1H = 0x12;
  12.         PWMA_CCR1L = 0xc0;
  13.         PWMA_ENO = 0x03;//设置PWMA的输出使能
  14.         PWMA_BKR = 0x80;  //使能主输出
  15.         PWMA_CR1 = 0x81; //使能ARR预装载,开始计时
  16. }
  17. void UpdatePwm(unsigned char num, unsigned int duty)
  18. {
  19.         if(num<=3&&duty>9600)return;// dutya不可以超过9600
  20.         if(num>=4&&duty>0)return;// dutyb不可以超过0
  21.         switch (num)
  22.         {
  23.         case 1:
  24.                 PWMA_CCR1H = (unsigned char)(duty >> 8); // 设置占空比时间
  25.                 PWMA_CCR1L = (unsigned char)(duty);
  26.                 break;
  27.         default:
  28.                 break;
  29.         }
  30. }
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-04 09:20:07
已绑定手机

5

主题

13

回帖

125

积分

注册会员

积分
125
发表于 2025-1-7 11:26:07 | 显示全部楼层
我测试了一下,2.5khz2路相位相同的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-04 09:20:07
已绑定手机

5

主题

13

回帖

125

积分

注册会员

积分
125
发表于 2025-1-7 11:27:07 | 显示全部楼层

非常感谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2025-1-7 21:14:29 | 显示全部楼层
下面这句你注释掉了?
PWMA_CCMR1  = 0x68;    // 通道模式配置, PWM模式1, 预装载允许
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-04 09:20:07
已绑定手机

5

主题

13

回帖

125

积分

注册会员

积分
125
发表于 2025-1-8 11:43:22 | 显示全部楼层
梁工你好,是粘贴的时候,系统给变成这样的。
下面的配置 输出波形 PWM1P-->P2.0,PWM1N-->P2.1,就是互补的吧,测试也不是互补的
       PWMA_ARR = 2400;        // 自动重装载寄存器,  控制PWM周期
        PWMA_CCER1  = 0;
        PWMA_CCER2  = 0;
        PWMA_SR1    = 0;
        PWMA_SR2    = 0;
        PWMA_ENO    = 0;
        PWMA_PS     = 0;
        PWMA_IER    = 0;
//        PWMA_ISR_En = 0;

        PWMA_CCMR1  = 0x68;                // 通道模式配置, PWM模式1, 预装载允许
        PWMA_CCR1   = 1200;                // 比较值, 控制占空比(高电平时钟数)
        PWMA_CCER1 |= 0x05;                // 开启比较输出, 高电平有效
        PWMA_PS    |= 1;                // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
        PWMA_ENO   |= 0x03;                // IO输出允许,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P
//        PWMA_IER   |= 0x02;                // 使能中断

点评

我有现成的例子,你可以测试一下。直接下载“01B-PWMA-4对互补PWM输出P2口”里的HEX测试。 STC8H系列-高级PWM范例程序下载,2024/1/3 更新 https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1779 (出处: 国  详情 回复 发表于 2025-1-8 11:47
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2025-1-8 11:47:02 | 显示全部楼层
泥*** 发表于 2025-1-8 11:43
梁工你好,是粘贴的时候,系统给变成这样的。
下面的配置 输出波形 PWM1P-->P2.0,PWM1N-->P2.1,就是互补的 ...

我有现成的例子,你可以测试一下。直接下载“01B-PWMA-4对互补PWM输出P2口”里的HEX测试。

STC8H系列-高级PWM范例程序下载,2024/1/3 更新
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1779
(出处: 国芯技术交流网站)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-04 09:20:07
已绑定手机

5

主题

13

回帖

125

积分

注册会员

积分
125
发表于 2025-1-9 10:37:15 | 显示全部楼层
非常感谢大家,已经弄正常了。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:40 , Processed in 0.542959 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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