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

8A8K64S 10位PCA出波形 PWM0_OUT_0() 不能一直输出低电平

[复制链接]
已绑定手机

2

主题

2

回帖

22

积分

新手上路

积分
22
发表于 2025-3-6 12:08:59 | 显示全部楼层 |阅读模式
#define                PWM0_NORMAL()        PCA_PWM0 &= ~2                                        /* PWM0正常输出(默认)        */
#define                PWM0_OUT_0()        PCA_PWM0 |=  2, CCAP0H = 0xff        /* PWM0一直输出0                */
#define                PWM0_OUT_1()        PCA_PWM0 &= ~2, CCAP0H = 0                /* PWM0一直输出1                */

#define                PWM1_NORMAL()        PCA_PWM1 &= ~2                                        /* PWM1正常输出(默认)        */
#define                PWM1_OUT_0()        PCA_PWM1 |=  2, CCAP1H = 0xff        /* PWM1一直输出0                */
#define                PWM1_OUT_1()        PCA_PWM1 &= ~2, CCAP1H = 0                /* PWM1一直输出1                */

#define                PWM2_NORMAL()        PCA_PWM2 &= ~2                                        /* PWM2正常输出(默认)        */
#define                PWM2_OUT_0()        PCA_PWM2 |=  2, CCAP2H = 0xff        /* PWM2一直输出0                */
#define                PWM2_OUT_1()        PCA_PWM2 &= ~2, CCAP2H = 0                /* PWM2一直输出1                */

#define                PWM3_NORMAL()        PCA_PWM3 &= ~2                                        /* PWM3正常输出(默认)        */
#define                PWM3_OUT_0()        PCA_PWM3 |=  2, CCAP3H = 0xff        /* PWM3一直输出0                */
#define                PWM3_OUT_1()        PCA_PWM3 &= ~2, CCAP3H = 0                /* PWM3一直输出1                */

问题: pca初始化后波形输出正常可以调节  这时需要一直输出低电平 调用PWM0_OUT_0()使PCA0 一直输出低电平 不起作用。

回复

使用道具 举报 送花

3

主题

535

回帖

-219

积分

等待验证会员

积分
-219
发表于 2025-3-6 12:12:00 | 显示全部楼层
在STC8A8K64S微控制器中,PCA模块的10位PWM输出功能通过配置PCA_PWMx寄存器和CCAPxH寄存器实现。`PWM0_OUT_0()`宏定义为将PCA_PWM0的第1位置1,并将CCAP0H设置为0xFF,理论上应使PWM0输出持续低电平。然而,若实际输出不符合预期,可能原因如下:

1. **寄存器配置冲突**:PCA_PWM0和CCAP0H的配置可能与其他寄存器设置冲突,建议检查相关寄存器的完整配置。
2. **硬件限制**:某些情况下,PCA模块的硬件特性可能导致输出无法完全拉低,需参考数据手册确认是否存在此类限制。
3. **代码执行顺序**:确保在调用`PWM0_OUT_0()`前,PCA模块已正确初始化,且未在其他地方修改相关寄存器。

建议通过调试工具实时监控寄存器状态,验证配置是否生效,并结合数据手册深入排查问题。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

535

回帖

-219

积分

等待验证会员

积分
-219
发表于 2025-3-6 12:18:00 | 显示全部楼层
在STC8A8K64S微控制器中,PCA模块的PWM输出模式通过`PCA_PWMx`寄存器进行配置。根据您的代码,`PWM0_OUT_0()`宏旨在实现PWM0输出持续低电平。然而,`PCA_PWM0 |= 2`将PWM0设置为“强制输出低电平”模式,而`CCAP0H = 0xff`则设置了比较寄存器的高字节,这可能导致PWM输出不完全符合预期。建议检查以下几点:

1. **寄存器配置**:确保`PCA_PWM0`和`CCAP0H`的配置与预期的输出模式一致。
2. **时钟源和计数器**:确认PCA模块的时钟源和计数器配置正确,以确保PWM波形生成正常。
3. **硬件连接**:验证PWM输出引脚是否正确连接,并排除硬件干扰。

若问题仍未解决,建议查阅STC8A8K64S的技术手册,确认寄存器配置细节,或联系技术支持进一步调试。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:480
  • 最近打卡:2025-06-28 00:00:59
已绑定手机

80

主题

5214

回帖

9305

积分

超级版主

DebugLab

积分
9305
发表于 2025-3-6 12:36:57 | 显示全部楼层
以下程序供参考:
  1. void PWM_Out(unsigned int pwm_0,pwm_1,pwm_2)
  2. {
  3.         unsigned char temp_l,temp_h,temp;
  4.        
  5.         temp_l=pwm_0&0x00ff;                //读pwm_0低8位赋值给temp_l
  6.         temp_h=(pwm_0&0x0300)>>4;        //读pwm_0高2位,移动到XCCAP0H(PCA_PWM0[5:4])位置,赋值给temp_h
  7.         temp=PCA_PWM0&0xcd;                        //读PCA_PWM0,XCCAP2H(PCA_PWM0[5:4])、EPC0H(PCA_PWM0[1])清零后赋值给temp
  8.         temp_h|=temp;                                //写其他位到temph
  9.         if(pwm_0==0x03ff)                        //如果pwm_0最大
  10.                 temp_h|=0x02;                        //设置EPC0H(PCA_PWM0[1])为1
  11.         PCA_PWM0=temp_h;                        //写PCA_PWM0(先写高2位)
  12.         CCAP0H=temp_l;                                //写CCAP0H(再写低8位)
  13.        
  14.         temp_l=pwm_1&0x00ff;                //读pwm_1低8位赋值给temp_l
  15.         temp_h=(pwm_1&0x0300)>>4;        //读pwm_1高2位,移动到XCCAP1H(PCA_PWM1[5:4])位置,赋值给temp_h
  16.         temp=PCA_PWM1&0xcd;                        //读PCA_PWM1,XCCAP1H(PCA_PWM2[5:4])、EPC1H(PCA_PWM1[1])清零后赋值给temp
  17.         temp_h|=temp;                                //写其他位到temph
  18.         if(pwm_1==0x03ff)                        //如果pwm_1最大
  19.                 temp_h|=0x02;                        //设置EPC1H(PCA_PWM1[1])为1
  20.         PCA_PWM1=temp_h;                        //写PCA_PWM1(先写高2位)
  21.         CCAP1H=temp_l;                                //写CCAP1H(再写低8位)
  22.        
  23.         temp_l=pwm_2&0x00ff;                //读pwm_2低8位赋值给temp_l
  24.         temp_h=(pwm_2&0x0300)>>4;        //读pwm_2高2位,移动到XCCAP2H(PCA_PWM2[5:4])位置,赋值给temp_h
  25.         temp=PCA_PWM2&0xcd;                        //读PCA_PWM2,XCCAP2H(PCA_PWM2[5:4])、EPC2H(PCA_PWM2[1])清零后赋值给temp
  26.         temp_h|=temp;                                //写其他位到temph
  27.         if(pwm_2==0x03ff)                        //如果pwm_2最大
  28.                 temp_h|=0x02;                        //设置EPC2H(PCA_PWM2[1])为1
  29.         PCA_PWM2=temp_h;                        //写PCA_PWM2(先写高2位)
  30.         CCAP2H=temp_l;                                //写CCAP2H(再写低8位)
  31. }
复制代码


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-06-28 00:08:16

75

主题

6163

回帖

1万

积分

超级版主

积分
12930
发表于 2025-3-6 13:09:15 | 显示全部楼层
没有问题的,用得多了。

请先别修改程序,直接下载“01-PCA-4路PWM-C语言”里的“PCA.hex”测试,主频24MHz,PCA3-->P2.6输出间歇的PWM,示波器观察,想输出连续高低电平也是随心所欲!
程序:
截图202503061307596847.jpg

PCA---P2.6波形:
截图202503061308366335.jpg


STC8A8K64D4-PCA相关程序.rar (464.93 KB, 下载次数: 20)

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-28 21:36 , Processed in 0.254709 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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