STM32 | 外部检测0V 5V电平信号输入的故障检测及排查

本部分的电路设计如图所示,主要是通过3.96插座,接收检测外来的0V或者5V信号,然后做出相应的动作。
在这里插入图片描述

原理图中200欧姆电阻,主要起限流保护作用,同时这里使用了一个器件BAV99,他的作用在这里再复习一下:

当正的静电发生时, D2 工作但D1不工作,因此这个钳位电压是5V加上D2的正向电压。

当负的静电发生时,D1 工作但D2 不工作,因此这个钳位电压是D1的正向电压。

如果放在接口电路部分,是为了抑制传导抗扰。接口电路的共模干扰耦合进来后,会在信号线上产生双向的高电压,使用BAV99,电压幅度会在接口处被箝位。但是,有了外来干扰后,正压箝位用的电源上将会产生较大的噪声。同样,负压箝位在地上也会产生较大的噪声。所以通常建议BAV99和接口阻容滤波一起使用。
https://blog.csdn.net/xiebingsuccess/article/details/91875589

本质就是俩二极管,一个接地,一个接VDD,保护和限幅用的。

因为输入进来的是5V的电压,所以MCU的输入IO口一定要选择可以兼容FT 5V的IO口。

这个部分的使用,下拉输入,初始化,检测外来高电平就可以了,思路很简单,但是却出现了问题,下面细细道来。
在这里插入图片描述

一开始,配置完成,然后在主程序中写好了Fan的判断(就是本次的风机故障检测端口PB15),结果当我输入5V到Fan时,程序始终无法正常的读取到我输入的高电平信号。

起初我以为是程序中的逻辑错误,以及初始化过程中,上拉,下拉,或者初始化电平出现问题,或者读取IO口出现问题,但是改了一圈,发现依然无法正常读取到高电平。

首先作为一个有前科搞坏掉一个MCU的人来说,我把Fan设置成了PBin(15),目的是让Fan可以在内部置高电平,然后通过KEIL进入到这个模式。试试到底能不能进入我的程序逻辑中,判断一下主程序有没有错误。
在这里插入图片描述

这里就是步进式的观察,观察程序时候能够识别Fan = 1的情况,能否进入相应的if判断中。很高兴的是,主程序逻辑没有问题,达到了我的预期效果。那么现在的主要问题就是IO口正常,但是就是不能正确的读取到正确的电平信号。

这个时候就不能再从软件逻辑找问题了,需要上硬件检测——万用表。
在这里插入图片描述

可惜家里条件受限,只有那种比较老式的电表。,不过也就测个5V以内的电压。首先,代码中将IO口上拉,外部悬空,测到P3电压0.6V大小,这是不正常的,然后在代码中编写程序,使得这个IO口循环置高和置低,然后测量,发现电表示数为0V 0.6V跳动。也就说明P3的口和PB15之间的器件出现了问题。
在这里插入图片描述

根据原理图,中间只有一个保护IO口的BAV器件和一个限流电阻,然后开始侧重检测这两个部分的电压。
在这里插入图片描述

设置会下拉输入模式,输入进来5V高电平,测量这个位置,发现R19右侧电压可以达到5V,也就说这部分没问题,正常。
在这里插入图片描述

接下来是R19的两侧电压,结果发现电压达到了4.4V,也就是输入进来的5V电压都被电阻R19分压了,被钳位住了。
在这里插入图片描述

进一步的验证测量,D5和R19的连接处,确实被钳位住了0.6V电压,这也就是为什么IO口检测不到高电平,因为电压被钳位了。

找到原因后,取下来BAV器件,测试通过,这时候可以正常读取到高电平。

随后跟老师交流中,以及焊接那边的确认,大概率是因为D5器件焊接错误,不是设计中要求的BAV器件。
在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值