找回密码
 立即注册
查看: 210|回复: 4

无法输出两路PWM

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-18 09:09:37

3

主题

1

回帖

59

积分

注册会员

积分
59
发表于 2024-12-5 10:48:44 | 显示全部楼层 |阅读模式

//测试工作频率为11.0592MHz

//#include "stc8h.h"

include "stc32g.h" //头文件见下载软件

include "intrins.h"

void main() { EAXFR = 1; //使能访问XFR,没有冲突不用关闭 CKCON = 0x00; //设置外部数据总线速度为最快 WTST = 0x00; //设置程序代码等待参数, //赋值为0可将CPU执行程序的速度设置为最快

P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00;

 // PWMA_PS=0x55;//端口选择

PWMA_CCER1 = 0x00; //写CCMRx前必须先清零CCERx关闭通道 PWMA_CCMR1 = 0x60; //设置CC1为PWMA输出模式 PWMA_CCER1 = 0x01; //使能CC1通道 PWMA_CCR1H = 0x01; //设置占空比时间 PWMA_CCR1L = 0x00; PWMA_ARRH = 0x02; //设置周期时间 PWMA_ARRL = 0x00; PWMA_ENO = 0x01; //使能PWM1P端口输出 PWMA_BKR = 0x80; //使能主输出 PWMA_CR1 = 0x01; //开始计时

while (1) {}; }

如果我想输出PWM1P和PWM1N相同的PWM是否只要修改PWMA_ENO = 0x03; 就可以了,但是我接上示波器,只有PWM1P有波形(1脚),PWM1N没有波形输出(2脚)。请问怎么才可以所有让所有PWM脚输出相同的波形?

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-04-23 20:59:03
已绑定手机

36

主题

560

回帖

1885

积分

荣誉版主

积分
1885
发表于 2024-12-5 11:21:46 | 显示全部楼层
如果我想输出PWM1P和PWM1N相同的PWM是否只要修改PWMA_ENO = 0x03; 就可以了,但是我接上示波器,只有PWM1P有波形(1脚),PWM1N没有波形输出(2脚)。请问怎么才可以所有让所有PWM脚输出相同的波形?
你这个想法是好的,但不对啊!

两路PWM的描述:
截图202412051118377489.jpg
专门与你问题描述相关的内容:
截图202412051119273196.jpg

所以正确的选择是:
PWMA中的全部P或全部N,
PWMB中的全部。

表面看,PWM的使用很简单,但每家的片子对于PWM的使用方式都会有不同。
手册一定要看的,示例代码也不太可能把手册描述搬上去。
回复 支持 反对

使用道具 举报 送花

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

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-12-5 12:01:51 | 显示全部楼层
如果是完全相同的话,直接将两个端口并一块也可以吧?
如果是需要死区,那么代码里还需要更改PWMA_CCER1 ,使能CC1N通道
回复 支持 反对

使用道具 举报 送花

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

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-12-5 18:15:39 | 显示全部楼层
请下载参考下面的例子,直接下载HEX文件即可观察PWM波形

STC32G-高级PWM范例程序下载
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1778
(出处: 国芯技术交流网站)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-18 09:09:37

3

主题

1

回帖

59

积分

注册会员

积分
59
发表于 2024-12-29 11:12:34 | 显示全部楼层
问题已经解决,下面代码可以输出多路相同频率PWM,之前代码没有配置好端口
         PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    PWMA_CCER2 = 0x00;
    PWMA_CCMR1 = 0x60; //通道模式配置
    PWMA_CCMR2 = 0x60;
    PWMA_CCMR3 = 0x60;
    PWMA_CCMR4 = 0x60;
    PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    PWMA_CCER2 = 0x55;
                PWMA_CCMR1 |= 0x08; //开启PWMA_CCRx预转载功能(需要CCxE=1才可写)
    PWMA_CCMR2 |= 0x08;
    PWMA_CCMR3 |= 0x08;
    PWMA_CCMR4 |= 0x08;
                PWMA_CCR1H = 0x01; //设置占空比时间  0X03 -12V   0x00-0V
    PWMA_CCR1L = 0x00; //0X70-8V   
          PWMA_CCR2H = 0x01; //设置占空比时间
    PWMA_CCR2L = 0x00;
                PWMA_CCR3H = 0x01; //设置占空比时间
    PWMA_CCR3L = 0x00;
                PWMA_CCR4H = 0x01; //设置占空比时间
    PWMA_CCR4L = 0x00;
    PWMA_ARRH = 0x02; //设置周期时间
    PWMA_ARRL = 0x00;
    PWMA_ENO = 0xFF;
                PWMA_PS = 0x15;  //高级 PWM 通道输出脚选择位 15
                PWMA_BKR = 0x80;  //使能主输出
    PWMA_CR1 |= 0x81; //使能ARR预装载,开始计时

    PWMB_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    PWMB_CCMR1 = 0x60; //通道模式配置
    PWMB_CCMR2 = 0x60;
    PWMB_CCER1 = 0x55; //配置通道输出使能和极性
                PWMB_CCMR1 |= 0x08; //开启PWMA_CCRx预转载功能(需要CCxE=1才可写)
    PWMB_CCMR2 |= 0x08;
                PWMB_CCR5H = 0x01; //设置占空比时间  0X03 -12V   0x00-0V
    PWMB_CCR5L = 0x00; //0X70-8V   
          PWMB_CCR6H = 0x01; //设置占空比时间
    PWMB_CCR6L = 0x00;
    PWMB_ARRH = 0x02; //设置周期时间
    PWMB_ARRL = 0x00;
    PWMB_ENO = 0xFF;
                PWMB_PS = 0x0A;  //高级 PWM 通道输出脚选择位 0A
                PWMB_BKR = 0x80;  //使能主输出
    PWMB_CR1 |= 0x81; //使能ARR预装载,开始计时

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:21 , Processed in 0.128230 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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