kookeda 发表于 2024-9-6 08:50:04

通过引脚复用检测PWM输入,检测不到信号的问题



思路是,通过引脚的切换,检测两个风机的PWM输入。可以在主程序中没2S切换一次,两个风机都检测不到了,在初始化过程中设定固定一个,都可以检测到脉冲信号。
如果切换,两路都是0 ,单独一路都有用,请前辈指点一下!!!


主程序这样的:

while (1)
        {
                if(SystemTick%2000 == 0)//2S一次
                {
                        if(isPWM4_Moto4 == 0)
                        {
                                isPWM4_Moto4 = 1;
                                //PWMA_PS |= PWM4_2;//风机1
                                PWMA_PS |= PWM4_3;//风机4
                        }
                        else
                        {
                                PWMA_PS |= PWM4_2;//风机1
                                //PWMA_PS |= PWM4_3;//风机4
                        }
                        for(i=0;i<5;i++)
                        {
                                        printf("CH%d: %u ",(int)i,Cycles);
                        }
                }

}


中断中这样处理的:

void PWMA_ISR() interrupt PWMA_VECTOR
{
        u16 ccr;


        if(PWMA_SR1 &0x10)//PWM4风机1或风机4
        {
                PWMA_SR1 &=~0x10;
                ccr = (PWMA_CCR4H<<8)+PWMA_CCR4L;
                if(isPWM4_Moto4 == 1)
                {
                        Cycles = ccr;
                }
                else
                {
                        Cycles = ccr;
                }
        }

}

kookeda 发表于 2024-9-6 08:50:47

中间NTC的图是无关的图

DebugLab 发表于 2024-9-6 09:23:51


这里用=,不能用|=

DebugLab 发表于 2024-9-6 09:25:54

DebugLab 发表于 2024-9-6 09:23
这里用=,不能用|=

或者修改之前相关位先清零

梁工 发表于 2024-9-6 09:39:32

对于STC8H、STC32系列,每路PWM都可以单独切换的,你可能没切换对。

kookeda 发表于 2024-9-7 15:51:03

本帖最后由 kookeda 于 2024-9-7 15:57 编辑

DebugLab 发表于 2024-9-6 09:25
或者修改之前相关位先清零因为前面还要其他PWM的映射,清零或者用=号就修改了其他映射,但是还是疏忽了。看了下切换的定义,现在这么操作,实际上修改了P3.3去了。他俩都不会有结果。
明白了,应该是把那一位改成0,再修改其他位置,现在这样就冲突了。感谢感谢!!!



应该修修改回去   if(isPWM4_Moto4 == 0)
                        {
                              isPWM4_Moto4 = 1;
                              //PWMA_PS |= PWM4_2;//风机1
                              PWMA_PS &=~PWM4_2;
                              PWMA_PS |= PWM4_3;//风机4
                        }
                        else
                        {
                              PWMA_PS &=~PWM4_3;
                              PWMA_PS |= PWM4_2;//风机1
                              //PWMA_PS |= PWM4_3;//风机4
                        }

DebugLab 发表于 2024-9-7 15:55:13

kookeda 发表于 2024-9-7 15:51
明白了,应该是把那一位改成0,再修改其他位置,现在这样就冲突了。感谢感谢!!! ...

对的,|=之后全变1了,再也无法变成0

kookeda 发表于 2024-9-7 15:58:28

DebugLab 发表于 2024-9-7 15:55
对的,|=之后全变1了,再也无法变成0

明白明白,感谢,我太不细心了!
页: [1]
查看完整版本: 通过引脚复用检测PWM输入,检测不到信号的问题