找回密码
 立即注册
查看: 681|回复: 9

关闭PWM输出后,电压不会立刻下降的问题。

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2024-09-24 09:38:07

7

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2024-6-4 10:30:33 | 显示全部楼层 |阅读模式
我使用的芯片是STC8H1K08,用pwm2p脚输出38k的pwm波形来调节灯的亮度。外面有接RC滤波电路。
1.现在的问题是,我用
PWMA_CC2E_Disable();                //关闭输入捕获/比较输出
PWMA_ENO &= ~ENO2P;
关闭pwm输出后,电压是缓慢下降而不是立刻下降0v。

2.去掉滤波电路后,关闭pwm输出后,电压可以立刻下降到0v,没有问题。但是这个滤波电路以前后使用过,接其它的pwm发生器验证没有问题。
3.附件是滤波电路截图及关闭pwm后的波形图。请帮忙看看是什么问题。


pwm-close

pwm-close

滤波电路

滤波电路
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2024-09-24 09:38:07

7

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2024-6-4 11:38:20 | 显示全部楼层
关闭pwm2p后,软件上如何将该脚强制拉低?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-6-4 12:09:43 | 显示全部楼层
这是因为你的IO没有设置正确导致。
使用ENO禁止PWM输出,引脚就变成普通IO,你用普通IO的操作方式,将IO输出0,可以初始化时先将IO输出0,设置为推挽输出模式。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-4 13:42:54 | 显示全部楼层
或者 如果你只是想要这个引脚为低电平,可以设置强制输出无效电平?(如果你设置有效电平为高电平)

这样虽然不是关闭PWM,但是也能让引脚输入0V,
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-4 13:45:48 | 显示全部楼层
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2024-09-24 09:38:07

7

主题

16

回帖

109

积分

注册会员

积分
109
发表于 2024-6-4 14:35:30 | 显示全部楼层
谢谢,刚才验证了一下。强制输出无效电平是可行的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-4 14:46:22 | 显示全部楼层
du*** 发表于 2024-6-4 14:35
谢谢,刚才验证了一下。强制输出无效电平是可行的。

或者你直接让CCR寄存器的值赋个0试一试。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2024-10-22 11:16:23 | 显示全部楼层
du*** 发表于 2024-6-4 14:35
谢谢,刚才验证了一下。强制输出无效电平是可行的。

您好,我想问一下,我关闭PWM(用的语句是TIM_CCxChannelCmd(TIM15, TIM_CHANNEL_1, TIM_CCx_DISABLE);)也出现了这样的问题,看您强制输出无效电平解决了,请问具体的语句或者方式是什么呢

点评

STC8H系列的高级PWM,连续输出0或1有2种方法(以PWM1P为例): 1、使用PWMx_ENO禁止输出PWM,对应IO成为普通IO(要设置IO为输出模式),禁止PWM输出后,由这个IO直接输出高或低电平。 PWMA_ENO |= 0x01; // 允许P  详情 回复 发表于 2024-10-22 12:34
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-10-22 12:34:41 | 显示全部楼层
星辰*** 发表于 2024-10-22 11:16
您好,我想问一下,我关闭PWM(用的语句是TIM_CCxChannelCmd(TIM15, TIM_CHANNEL_1, TIM_CCx_DISABLE);) ...

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

1、使用PWMx_ENO禁止输出PWM,对应IO成为普通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
回复 支持 反对

使用道具 举报 送花

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2024-10-22 17:05:19 | 显示全部楼层
梁*** 发表于 2024-10-22 12:34
STC8H系列的高级PWM,连续输出0或1有2种方法(以PWM1P为例):

1、使用PWMx_ENO禁止输出PWM,对应IO成为 ...

非常感谢博主,学到了。我是使用的第二种办法,原来它是通过控制CCMR寄存器的OC1M的三位去强制拉低或者拉高,开启PWM时再通过这三位产生PWM模式。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:16 , Processed in 0.135600 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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