zhang1314hong 发表于 2024-11-10 12:47:47

在互补pwm输出的下降沿产生一个短脉冲问题

在互补pwm输出的下降沿产生一个短脉冲几个us,但是总是有延时,不知道为什莫,是不是实现方式不对,希望大家帮忙



以下是程序   用的是P10和P13 生成互补带死区波形   然后外部中断0检测P10的下降沿,在中断里控制P20产生短脉冲



#include "STC8H.h"
#include "intrins.h"

void main(void)
{
        P_SW2 = 0x80;

    P0M1 = 0x00;
    P0M0 = 0xFF;
    P1M1 = 0x00;
    P1M0 = 0xFF;
        P2M1 = 0x00;
    P2M0 = 0x00;
        P3M1 = 0x00;
    P3M0 = 0x00;
       
        IT0 = 1;                                    //使能INT0下降沿中断
    EX0 = 1;                                    //使能INT0中断
       
       
    PWMA_ENO = 0xFF;                            //IO输出PWM
    PWMA_PS = 0x00;                           //00:PWM at P1
                        //00:PWM at P1
/**********************************************************
PWMx_duty = *100
***********************************************************/
    PWMA_PSCRH = 0x00;                        //预分频寄存器
    PWMA_PSCRL = 0x00;
    PWMA_DTR = 24;                        //死区时间配置

    PWMA_CCMR1 = 0x68;                        //通道模式配置
    PWMA_CCMR2 = 0x68;

    PWMA_ARR = 1200;                         //自动重装载寄存器,计数器overflow点

        PWMA_CCR1 = 100;                        //计数器比较值
    PWMA_CCR2 = 1100;


        PWMA_CCER1 = 0x55;                        //配置通道输出使能和极性

    PWMA_BKR = 0x80;                        //主输出使能 相当于总开关
    PWMA_IER = 0x02;                        //使能中断
    PWMA_CR1 = 0x01;                        //使能计数器
        P20 = 0;
        EA = 1;
    while (1);
}

void PWMA_ISR() interrupt 26
{
    if(PWMA_SR1 & 0X02)
    {
      PWMA_SR1 &=~0X02;
    }
}

void INT0_Isr() interrupt 0
{
        P20 = 1;
        _nop_();
        _nop_();
        P20 = 0;

}

用逻辑分析仪看,检测到下降沿,到产生短脉冲,有延时,怎末才能没有延时,有什莫解决办法

神农鼎 发表于 2024-11-10 12:59:36

已发梁工帮忙看下,今周末,可能要等

社区闲人 发表于 2024-11-10 14:21:40

外部中断0检测P10的下降沿, 响应中断,在中断里控制P20产生跳变,需要6---10个时钟的时间,莫得办法消除。
如果是用ARM的F3, 这个延时要40---70个时钟的时间。

梁工 发表于 2024-11-10 14:27:28

互补输出是硬件自动的,
P1.0与P1.1、P1.2与P1.3是两对互补输出的PWM,
但是P1.0和P1.3不是互补关系。可以下载我的例程参考:

STC8H系列-高级PWM范例程序下载,2024/1/3 更新
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1779
(出处: 国芯技术交流网站)


VCC 发表于 2024-11-10 15:52:07

梁工 发表于 2024-11-10 14:27
互补输出是硬件自动的,
P1.0与P1.1、P1.2与P1.3是两对互补输出的PWM,
但是P1.0和P1.3不是互补关系。可以 ...

那么短脉冲的成因是?

梁工 发表于 2024-11-10 18:09:02

VCC 发表于 2024-11-10 15:52
那么短脉冲的成因是?

短脉冲有多短?用示波器观察,不要用逻辑分析仪。

VCC 发表于 2024-11-10 18:40:57

本帖最后由 VCC 于 2024-11-10 18:42 编辑

梁工 发表于 2024-11-10 18:09
短脉冲有多短?用示波器观察,不要用逻辑分析仪。
复现了波形,并且弄清楚了楼主究竟在讲什么



应该是个误会


片外将P32(INT0输入)和P10(PWM输出)短接起来

然后在INT0的中断ISR里做如下操作:


楼主问:

为什么P21隔了这么久才产生短脉冲?




VCC 发表于 2024-11-10 18:44:33

VCC 发表于 2024-11-10 18:40
复现了波形,并且弄清楚了楼主究竟在讲什么




答案是显然的

因为外部中断要由CPU处理,中断触发 到 进入ISR函数 这个过程需要一些时间

zhang1314hong 发表于 2024-11-10 19:22:31

VCC 发表于 2024-11-10 18:40
复现了波形,并且弄清楚了楼主究竟在讲什么




是的就是这个意思,是P20,这个短脉冲我想周期还是1200,占空比大概2个us吧,就是在两个脉冲的下降沿产生,这个用外部中断是我想的办法,我也觉得不太可靠,我想用本身pwm口产生这个脉冲信号,因为对这个16位的pwm不太熟悉,请大家帮忙给个思路

网老四 发表于 2024-11-10 19:51:58

需要瞬时响应的信号不要用中断,简单的硬件电路就实现了,
页: [1] 2
查看完整版本: 在互补pwm输出的下降沿产生一个短脉冲问题