打印

STC PWM

[复制链接]
3120|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianxiongweitxw|  楼主 | 2022-12-28 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC PWM输出设置到最小,还是有一个窄脉冲输出,因为是电池供电,这样会造成电池待机时间变短,这个怎么解决?请教高手。

使用特权

评论回复
评论
ningling_21 2022-12-29 13:26 回复TA
设置为GPIO输出低电平 

相关帖子

沙发
lyjian| | 2022-12-28 19:49 | 只看该作者
什么型号总得说清楚吧?
规格书都会描述清楚告诉你怎么实现0输出。

使用特权

评论回复
板凳
linxi6414| | 2022-12-28 22:27 | 只看该作者
STC8的数据手册第17.2.4.5小节说的明明白白。

使用特权

评论回复
地板
ayb_ice| | 2022-12-29 13:08 | 只看该作者
切换成GPIO输出高或低

使用特权

评论回复
5
coody| | 2022-12-30 15:10 | 只看该作者
STC官方给的:

PCA-PWM连续输出0或1的方法,以PCA0(PWM0-CCP0)为例:

PCA_PWM0 &= ~0x02;        // PWM0正常输出
PCA_PWM0 |= 0x3f, CCAP0H = 0xff, CCAP0L = 0xff;        // PWM0一直输出0
PCA_PWM0 &= 0xc0, CCAP0H = 0,    CCAP0L = 0;        // PWM0一直输出1

STC8G2K64S4的45路15位增强型PWM,连续输出0或1有3种方法(以PWM00为例):

1、禁止输出PWM,对应IO成为普通IO,禁止PWM输出后,由这个IO直接输出高或低电平。
  PWM00CR |= 0x80;   // ENO=1:允许PWM输出
  delay_ms(5);       // PWM输出5ms
  P00 = 1;           // 连续输出高电平
  PWM00CR &= ~0x80;  // ENO=0:禁止PWM输出
  delay_ms(5);       // P0.0输出高电平5ms
               
  PWM00CR |= 0x80;   // ENO=1:允许PWM输出
  delay_ms(5);       // PWM输出5ms
  P00 = 0;           // 连续输出低电平
  PWM00CR &= ~0x80;  // ENO=0:禁止PWM输出
  delay_ms(5);       // P0.0输出低电平5ms

2、PWM00T2设置输出高电平时刻,PWM00T1设置输出低电平时刻,PWM00T1-PWM00T2就是输出高电平时间。
   如果将PWM00T1设置的数值比周期值大,则连续输出高电平,输出100%占空比。
   如果将PWM00T2设置的数值比周期值大,则连续输出低电平,输出0%占空比。

3、使用“PWM通道电平保持控制寄存器 PWMnHLD”直接设置输出高或低,
   这个寄存器就是专门用于设置连续输出高或低的。
   PWM00HLD = 0x00;  //PWM正常输出
   PWM00HLD = 0x01;  //PWM输出连续低电平
   PWM00HLD = 0x02;  //PWM输出连续高电平


STC8H系列的高级PWM,连续输出0或1有2种方法(以PWM1P为例):

1、使用PWMx_ENO禁止输出PWM,对应IO成为普通IO,禁止PWM输出后,由这个IO直接输出高或低电平。
  PWMA_ENO |= 0x01;   // 允许PWM1P输出
  delay_ms(5);        // P1.0输出PWM 5ms
  P10 = 1;            // P1.0输出高电平
  PWMA_ENO &= ~0x01;  // 关闭PWM输出
  delay_ms(5);        // P1.0输出高电平5ms
               
  PWMA_ENO |= 0x01;   // 允许PWM1P输出
  delay_ms(5);        // P1.0输出PWM 5ms
  P10 = 0;            // P1.0输出低电平
  PWMA_ENO &= ~0x01;  // 关闭PWM输出
  delay_ms(5);        // P1.0输出高电平5ms

2、设置PWMx_CCMRn,强制PWM输出有效(高)电平/无效(低)电平。
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60;  // PWM正常输出
  delay_ms(5);                               // PWM输出5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x40;  // 强制PWM输出无效(低)电平
  delay_ms(5);                               // PWM输出低电平5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60;  // PWM正常输出
  delay_ms(5);                               // PWM输出5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x50;  //强制PWM输出有效(高)电平
  delay_ms(5);                               // PWM输出高电平5ms

使用特权

评论回复
6
tianxiongweitxw|  楼主 | 2022-12-30 16:38 | 只看该作者
关闭pca.,再输出0,解决了

使用特权

评论回复
7
tianxiongweitxw|  楼主 | 2024-4-29 19:40 | 只看该作者
谢谢各位扫热心回答,按照说明书操作了。单独这一条是不行:CCAP0H = CCAP0L = 0xff;需要加一条就OK了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

0

粉丝