找回密码
 立即注册
查看: 79|回复: 6

PWM 两通道同时用有冲突

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2026-02-19 09:16:27
已绑定手机

12

主题

14

回帖

90

积分

注册会员

积分
90
发表于 2026-2-17 17:32:25 | 显示全部楼层 |阅读模式
STC12C5A60S2
void PCA_Init(void)               
{        CL = 0;                        
        CH = 0;
        CCON = 0;                       //Initial PCA control register
        CL = 0;                         //Reset PCA base timer
        CH = 0;
        CMOD = 0x02;                    //Set PCA timer clock source as Fosc/2
//        CCAP0H = CCAP0L = 0x3F;         //PWM0 port output 50% duty cycle square wave
//        CCAPM0 = 0x42;                  //PCA module-0 work in 8-bit PWM mode and no PCA interrupt
//        PCA_PWM1 = 0x03;


        CCAP1H = CCAP1L = 0x80;         //PWM0 port output 50% duty cycle square wave
        CCAPM1 = 0x42;                  //PCA module-0 work in 8-bit PWM mode and no PCA interrupt
        PCA_PWM0 = 0x03;

////        AUXR1=


        CR = 1;                                                                         //PCA计数器启动  CCON.6
//        CMOD|=1<<0;                            //PCA溢出中断使能   
}



这两个PWM通道不能同时使用。只能用一个,如两个同时都用就没有输出
这是怎么回事。资料上也没有说两PWM不能同时用。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:347
  • 最近打卡:2026-03-07 12:55:14

842

主题

1万

回帖

2万

积分

管理员

积分
22606
发表于 2026-2-17 20:01:38 | 显示全部楼层
可以同时用,只是共享 【CH,CL】 计数器而已
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:719
  • 最近打卡:2026-03-07 07:41:42
已绑定手机

97

主题

7247

回帖

1万

积分

超级版主

积分
13780
发表于 2026-2-17 20:50:55 | 显示全部楼层
PCA有3个通道,共用计数器,作为PWM输出,频率相同,占空比可以不同
3通道10位PWM程序供参考:

  1. void Init(void)
  2. {
  3.         P_SW2|=EAXFR;
  4.        
  5.         CCON=0x00;                                //设置PCA控制寄存器
  6.         CMOD=0x80;                                //设置空闲模式下PCA停止计数,禁止PCA计数器溢出中断,设置PCA时钟为系统时钟/12(900Hz)
  7.         CL=0x00;                                //设置PCA计数器
  8.         CH=0x00;                                //设置PCA计数器
  9.         CCAPM0=PWM0;                        //使能PCA模块0PWM功能
  10.         PCA_PWM0=0xc0;                        //设置PCA模块0输出10位PWM
  11.         CCAPM1=PWM1;                        //使能PCA模块1PWM功能
  12.         PCA_PWM1=0xc0;                        //设置PCA模块1输出10位PWM
  13.         CCAPM2=PWM2;                        //使能PCA模块2PWM功能
  14.         PCA_PWM2=0xc0;                        //设置PCA模块2输出10位PWM
  15.         CR=1;                                        //启动PCA
  16.        
  17.         EA=1;                                        //使能总中断
  18. }
  19. void PWM_Out(unsigned int pwm_0,pwm_1,pwm_2)
  20. {
  21.         unsigned char temp_l,temp_h,temp;
  22.        
  23.         temp_l=pwm_0&0x00ff;                //读pwm_0低8位赋值给temp_l
  24.         temp_h=(pwm_0&0x0300)>>4;        //读pwm_0高2位,移动到XCCAP0H(PCA_PWM0[5:4])位置,赋值给temp_h
  25.         temp=PCA_PWM0&0xcd;                        //读PCA_PWM0,XCCAP2H(PCA_PWM0[5:4])、EPC0H(PCA_PWM0[1])清零后赋值给temp
  26.         temp_h|=temp;                                //写其他位到temph
  27.         if(pwm_0==0x03ff)                        //如果pwm_0最大
  28.                 temp_h|=0x02;                        //设置EPC0H(PCA_PWM0[1])为1
  29.         PCA_PWM0=temp_h;                        //写PCA_PWM0(先写高2位)
  30.         CCAP0H=temp_l;                                //写CCAP0H(再写低8位)
  31.        
  32.         temp_l=pwm_1&0x00ff;                //读pwm_1低8位赋值给temp_l
  33.         temp_h=(pwm_1&0x0300)>>4;        //读pwm_1高2位,移动到XCCAP1H(PCA_PWM1[5:4])位置,赋值给temp_h
  34.         temp=PCA_PWM1&0xcd;                        //读PCA_PWM1,XCCAP1H(PCA_PWM2[5:4])、EPC1H(PCA_PWM1[1])清零后赋值给temp
  35.         temp_h|=temp;                                //写其他位到temph
  36.         if(pwm_1==0x03ff)                        //如果pwm_1最大
  37.                 temp_h|=0x02;                        //设置EPC1H(PCA_PWM1[1])为1
  38.         PCA_PWM1=temp_h;                        //写PCA_PWM1(先写高2位)
  39.         CCAP1H=temp_l;                                //写CCAP1H(再写低8位)
  40.        
  41.         temp_l=pwm_2&0x00ff;                //读pwm_2低8位赋值给temp_l
  42.         temp_h=(pwm_2&0x0300)>>4;        //读pwm_2高2位,移动到XCCAP2H(PCA_PWM2[5:4])位置,赋值给temp_h
  43.         temp=PCA_PWM2&0xcd;                        //读PCA_PWM2,XCCAP2H(PCA_PWM2[5:4])、EPC2H(PCA_PWM2[1])清零后赋值给temp
  44.         temp_h|=temp;                                //写其他位到temph
  45.         if(pwm_2==0x03ff)                        //如果pwm_2最大
  46.                 temp_h|=0x02;                        //设置EPC2H(PCA_PWM2[1])为1
  47.         PCA_PWM2=temp_h;                        //写PCA_PWM2(先写高2位)
  48.         CCAP2H=temp_l;                                //写CCAP2H(再写低8位)
  49. }
复制代码


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2026-02-19 09:16:27
已绑定手机

12

主题

14

回帖

90

积分

注册会员

积分
90
发表于 2026-2-17 21:50:02 | 显示全部楼层
Debu*** 发表于 2026-2-17 20:50
PCA有3个通道,共用计数器,作为PWM输出,频率相同,占空比可以不同
3通道10位PWM程序供参考:

芯片型号?

点评

支持任意具有PCA功能的型号  详情 回复 发表于 2026-2-18 12:35
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:719
  • 最近打卡:2026-03-07 07:41:42
已绑定手机

97

主题

7247

回帖

1万

积分

超级版主

积分
13780
发表于 2026-2-18 12:35:28 | 显示全部楼层

支持任意具有PCA功能的型号
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2026-02-19 09:16:27
已绑定手机

12

主题

14

回帖

90

积分

注册会员

积分
90
发表于 2026-2-19 09:16:27 | 显示全部楼层
Debu*** 发表于 2026-2-18 12:35
支持任意具有PCA功能的型号

STC12C5A60S2只有两个通道 9位的
别的不清楚
你这个作为个模块没有通用性  
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:299
  • 最近打卡:2026-03-06 09:14:52

84

主题

7283

回帖

1万

积分

超级版主

积分
15618
发表于 2026-2-24 18:48:51 | 显示全部楼层
共用计数器CH、CL,占空比是各自独立设置的。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-7 15:31 , Processed in 0.117975 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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