duam 发表于 2024-6-4 10:30:33

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

我使用的芯片是STC8H1K08,用pwm2p脚输出38k的pwm波形来调节灯的亮度。外面有接RC滤波电路。
1.现在的问题是,我用
PWMA_CC2E_Disable();                //关闭输入捕获/比较输出
PWMA_ENO &= ~ENO2P;
关闭pwm输出后,电压是缓慢下降而不是立刻下降0v。

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


duam 发表于 2024-6-4 11:38:20

关闭pwm2p后,软件上如何将该脚强制拉低?

梁工 发表于 2024-6-4 12:09:43

这是因为你的IO没有设置正确导致。
使用ENO禁止PWM输出,引脚就变成普通IO,你用普通IO的操作方式,将IO输出0,可以初始化时先将IO输出0,设置为推挽输出模式。

_奶咖君_ 发表于 2024-6-4 13:42:54

或者 如果你只是想要这个引脚为低电平,可以设置强制输出无效电平?(如果你设置有效电平为高电平)

这样虽然不是关闭PWM,但是也能让引脚输入0V,

_奶咖君_ 发表于 2024-6-4 13:45:48

https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=8120&pid=76069

可以看看这个,,

duam 发表于 2024-6-4 14:35:30

谢谢,刚才验证了一下。强制输出无效电平是可行的。

_奶咖君_ 发表于 2024-6-4 14:46:22

duam 发表于 2024-6-4 14:35
谢谢,刚才验证了一下。强制输出无效电平是可行的。

或者你直接让CCR寄存器的值赋个0试一试。

星辰0520 发表于 2024-10-22 11:16:23

duam 发表于 2024-6-4 14:35
谢谢,刚才验证了一下。强制输出无效电平是可行的。

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

梁工 发表于 2024-10-22 12:34:41

星辰0520 发表于 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

星辰0520 发表于 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模式。
页: [1]
查看完整版本: 关闭PWM输出后,电压不会立刻下降的问题。