电机过流的一次bug排查记录

news/2025/3/13 22:30:27/

一、bug现象描述如下:

有一天,某员工给自己的组件换一个语音模块,其中电机和主板是通过单总线连接,据该员工回忆曾经在换语音芯片时曾将电源线不小心短路过。

在这里插入图片描述
电机已经DVT试产,功能和硬件测试已经通过,但是自从该员工操作过后,电机只是有时正常工作,有时工作不正常,通过Freemaster仿真也不报错

在这里插入图片描述
不存存在报错,而且更诡异的是电机有时候可以通讯正常工作,有时通讯无法正常工作。

二、解决问题过程如下:

第一步、不要下载新程序,保证原来的现场,排查硬件的供电电源5V 和 12V,通过测试发现供电正常,通过读取存在Flash的故障记录,发现故障记录里面没有任何故障,因此该机器没有发生常见的故障:过流,过压,过温等

第二步 、测试不正常工作时的通讯电路波形,发现不能正常工作时,通讯波形是异常的,高电平被拉低,同时通过Freemaster手动启动电机,电机还是无法启动。

第三步、仿真看程序是如何运行的,发现不能正常工作时,程序死在系统默认的一个中断里面

在这里插入图片描述

HardFaultHandler 一直进入该系统中断,导致其他比它优先级更低的程序无法得到执行,因此这样也就解释了当我们手动在Freemaster启动电机时,电机也无法启动的原因。

通过询问原厂,如果死在该中断一般的可能的原因,原厂回复如下:

在这里插入图片描述
因此初步断定不是软件的原因,那么硬件是哪块出现了问题呢? 由于该硬件部分已经量产上十万台,因此硬件的layout初步断定应该是不存在问题的,否则这个问题前期早就暴露出来了

因此只有元器件损坏这个选项了,那么哪个元器件损坏了呢? 回到问题造成的原点,造成这个问题的发生的原因是什么?原因是某员工换系统的模块造成的,那么首先第一怀疑对象就是接耦的部分,

连接的部分就是一个串口电路:
在这里插入图片描述
因此怀疑该部分存在问题,首先我们的同事去掉了TVS管D14,发现电机工作正常了。因此初步怀疑TVS管被损坏了,但是诡异的是当我们把TVS管重新安装上去,电机又能正常工作,因此我们怀疑又转向了:是不是该板子的焊接存在问题,因为该板子这个电路存在过返工? 通过先后对比发现一般来说,TVS管焊接错误的可能性比较小,因为该TVS管不焊接时也能正常工作。这个时候某人突然想到了一个点:TVS是一个双向PN结管,是不是存在这样一种可能,TVS的一个方向的PN结是正常的另外一个PN结是坏的。

在这里插入图片描述

我们之所以重新焊接上去能够工作正常只是因为我们正好用了它正常的一个PN结。

想通了这点,我们马上把TVS管调一个头重新焊接一下验证,发现果然出现了电机有时候能正常启动工作有时不能正常启动工作的一模一样的现象。说明我们的判断是合理的,因此这个时候我们应该回到理论上来

为什么TVS管坏,会影响电机MCU的工作呢?回到前面的电路:
初步解释如下: 我们TVS管如果遭到损坏了以后,就无法正常的稳压,会存在错误的导通,导致我们的整个MCU的地不干净,因此会频繁出发MCU的系统硬件中断,同时我们的通讯波形也会被拉低。


http://www.ppmy.cn/news/23789.html

相关文章

爬虫JS逆向思路 - - 扣JS(data解密)

网络上几千块都学不到的JS逆向思路这里全都有👏🏻👏🏻👏🏻 本系列持续更新中,三连关注不迷路👌🏻 干货满满不看后悔👍👍👍 ❌注意…

这是从零在独自开开发,将是副业赚钱最好的平台!

文章目录最重要的事情放前面1.前言2.简单介绍一下3.【独自开】介绍3.1 分层标准化平台架构3.2 集成第三方数字接口3.3 支持各个行业的系统定制开发4.如何在【独自开】赚钱获取收益?4.1 如何称为【独自开】开发者?最重要的事情放前面 通过平台的审核也可以得到相应的奖金&…

【MyBatis】第八篇:一级,二级缓存

其实缓存字面的意思就是将一些内容缓存下来,等下次使用的时候可以直接调用,通过数据库得到数据,有时候会使用相同的数据,所以mybatis自然也支持缓存。 而mybatis按照缓存的效果可以分两大类:一级缓存和二级缓存。 一…

2023互联网相关岗位转行与就业选择的简单分析

文章目录1、城市2、岗位3、薪水1、城市 能找得到工作的城市,可能主要也就这些base了 2、岗位 主要技术岗位 Python 侧重人工智能,人工智能门槛高大家心知肚明。如果学python 不走人工智能,只走单纯的后端开发,不管从薪资还是…

C语言进阶——自定义类型:结构体

🌇个人主页:_麦麦_ 📚今日名言:生活不可能像你想象的那么好,也不会像你想象的那么糟。——莫泊桑《羊脂球》 目录 一、前言 二、正文 1结构体 1.1结构体的基础知识 1.2结构的声明 1.3特殊的声明 1.4结构体变量的…

C++:类和对象(上)

文章目录1 面向过程与面向对象的初步认识2 类的引入3 类的定义4 类的访问限定符及封装4.1 访问限定符4.2 封装5 类的实例化6 类对象模型6.1 如何计算类的大小6.2 类对象的存储方式猜测7 this指针7.1 this指针的引出7.2 this指针的特性8 C语言和C栈(Stack&#xff09…

扫雷——C语言【详解+全部码源】

前言:今天我们学习的是C语言中另一个比较熟知的小游戏——扫雷 下面开始我们的学习吧! 文章目录游戏整体思路游戏流程游戏菜单的打印创建数组并初始化布置雷排查雷完整代码game.hgame.ctest.c游戏整体思路 我们先来看一下网上的扫雷游戏怎么玩 需要打印…

js一数组按照另一数组进行排序

有时我们需要一个数组按另一数组的顺序来进行排序,总结一下方法,同时某些场景也会用到。 首先一个数组相对简单的情况: var arr1 [52,23,36,11,09]; var arr2 [23,09,11,36,52]; // 要求arr1按照arr2的顺序来排序,可以看到两个…