找回密码
 立即注册
查看: 437|回复: 7

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-02 14:37:49

3

主题

7

回帖

85

积分

注册会员

积分
85
发表于 2024-9-6 08:50:04 | 显示全部楼层 |阅读模式
截图202409060842377181.jpg

思路是,通过引脚的切换,检测两个风机的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[3] = ccr;
                }
                else
                {
                        Cycles[0] = ccr;
                }
        }

}
截图202408041641297168.jpg
截图202409060843421320.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-02 14:37:49

3

主题

7

回帖

85

积分

注册会员

积分
85
发表于 2024-9-6 08:50:47 | 显示全部楼层
中间NTC的图是无关的图
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-9-6 09:23:51 | 显示全部楼层

这里用=,不能用|=
截图202409060923282724.jpg

点评

或者修改之前相关位先清零  详情 回复 发表于 2024-9-6 09:25
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-9-6 09:25:54 | 显示全部楼层
Debu*** 发表于 2024-9-6 09:23
这里用=,不能用|=

或者修改之前相关位先清零
DebugLab
回复 支持 反对

使用道具 举报 送花

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

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-9-6 09:39:32 | 显示全部楼层
对于STC8H、STC32系列,每路PWM都可以单独切换的,你可能没切换对。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-02 14:37:49

3

主题

7

回帖

85

积分

注册会员

积分
85
发表于 2024-9-7 15:51:03 | 显示全部楼层
本帖最后由 kookeda 于 2024-9-7 15:57 编辑
Debu*** 发表于 2024-9-6 09:25
或者修改之前相关位先清零
因为前面还要其他PWM的映射,清零或者用=号就修改了其他映射,但是还是疏忽了。看了下切换的定义,现在这么操作,实际上修改了P3.3去了。他俩都不会有结果。
明白了,应该是把那一位改成0,再修改其他位置,现在这样就冲突了。感谢感谢!!!
截图202409071551265090.jpg


应该修修改回去   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
                        }

点评

对的,|=之后全变1了,再也无法变成0  详情 回复 发表于 2024-9-7 15:55
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-9-7 15:55:13 | 显示全部楼层
kook*** 发表于 2024-9-7 15:51
明白了,应该是把那一位改成0,再修改其他位置,现在这样就冲突了。感谢感谢!!! ...

对的,|=之后全变1了,再也无法变成0
DebugLab
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-02 14:37:49

3

主题

7

回帖

85

积分

注册会员

积分
85
发表于 2024-9-7 15:58:28 | 显示全部楼层
Debu*** 发表于 2024-9-7 15:55
对的,|=之后全变1了,再也无法变成0

明白明白,感谢,我太不细心了!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:58 , Processed in 0.126738 second(s), 95 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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