热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

排除法和替代法在工程开发中的妙用

今天分享一个刚刚解决好的硬件产品问题,这个问题的解决过程中用到的思维方法其实是很值得学习的。工厂拿回来了好几片刚刚贴好的板子,每一片板子上电后

今天分享一个刚刚解决好的硬件产品问题,这个问题的解决过程中用到的思维方法其实是很值得学习的。

工厂拿回来了好几片刚刚贴好的板子,每一片板子上电后(电池供电)都有固定频率的中频噪声。

该板子的背景情况介绍:

该产品之前早已大量出货,并且已经出货的板子声音很干净,没有任何的噪声,这次只是更换了相关的音频接口、还有一些元器件更换了供应商。

问题排查过程:

先附上系统参考图

1、从源头开始分析,进入耳机的信号来自三处:音频源1、音频源2以及DAC输出。这里我依次断开这三处音频源,发现噪音来自于DAC输出。

2、接着开始用示波器测量DSP发给DAC的数字信号,发现如下波形,很显然,噪声来自于DSP。为了确定噪声信号是否真正由DSP产生,这里我继续追踪ADC进入DSP的信号,发现数字信号并不是一条低电平直线(如果没有信号则应该是低电平),而是如下波形。到这里,发现噪声信号很有可能来自于ADC。于是我将ADC输入直接接地,再测量ADC进入DSP的信号,发现这个时候就是一条低电平的静止的直线了,再听听耳机,噪声已经消失。所以至此,可以很明确的说,噪声是来自于ADC,并且准确的说是来自于ADC的输入信号。

3、接着继续向信号的来源的上游探,设备上面有一个转盘式电位器,这个是一个比较大的嫌疑,因为曾经确实出现过由转盘式电位器带来噪声的案例。于是我开始把目标转移到这个上面,我用镊子将电位器旁路掉,发现噪声依然存在,说明噪声并不是来自于转盘式电位器。

4、继续往前探,这个时候到了运放的输出了,我将运放输出切断,噪声消失,难道噪声由运放产生吗?为了明确这一点,我把运放输出与后面的信号通路恢复连接,把输入信号切断,发现噪声依然存在,说明噪声肯定不是来自于音频接口,这次我可以肯定噪声确确实实来自于运放。

5、难道问题来源于运放芯片本身或者它的周边参数?为了验证这个,我拿回来正常的板子(就是大量出货过的产品),将上面的运放和运放周边的参数一一更换到问题板上,噪声依旧。说明并不是这个问题,为了保险起见,我再用万用表测量了问题板上运放的各个管脚电平,与正常板上的运放各管脚电平完全一致,这进一步说明运放是好的,运放周边的参数也是对的。

6、到这个时候,好像山穷水尽了。没思路了。为了进一步确定噪声来自于这一块的运放及周边电路,我将有问题的PCBA的运放输出线路统统割掉,把正常的PCBA的运放输出飞线到问题板的后端电路,发现并没有噪声,话筒说话也正常。说明问题确确实实来自于这一块电路。这一块电路可以怀疑的对象无非就是运放的正相输入脚、反向输入脚、运放输出脚、运放的供电脚、运放的GND脚,既然电路原理并没有问题(如果原理有问题,那么之前的PCBA也必定有噪声),那么噪声无非就是来自于上面的这些怀疑对象了。

7、为了确定噪声是来自于运放的具体哪个管脚,我首先将问题板的运放的反向输入端管脚翘起来(就是脱离PCB焊盘),然后将正常板的对应管脚信号拉过去,发现噪声消失,而且接上话筒,声音一切正常。到这里,我隐隐约约感觉问题就来自PCB,为了验证这个猜想,我将问题板的运放周边参数统统去掉,把那个翘起来的脚又重新焊到PCB上,把正常板的对应管脚信号拉过去,噪声又出现,于是我确定噪声肯定来源于PCB。

8、但是这解释不通啊,PCB没有改过,而且之前还大量生产过,未曾出现过任何问题。怎么办,到了这个时候,思维再一次山穷水尽了。此时,我决定打开PCB文件一探究竟,终于发现重大问题,PCB为四层板,我发现中间层有两条信号信号的倒影直接与上面那个运放的两组信号输入脚的倒影重叠,我用万用表测了中间层的信号线与输入管脚之间的阻抗,∞,说明没有短路。但是这也不能排除就不是这个中间层信号线造成的,接着我追踪该信号线的源端,发现它是LED灯扫描芯片的输出脚,会产生固定频率的扫描信号,到此时,我基本断定噪声一定就是来源于它,为了验证我的想法,我先将运放部分的一切电路和参数恢复,然后将LED灯扫描芯片的这两个管脚翘起来,噪声消失。到此为止,噪声源彻底被找到。下图是中间层信号线与运放两组管脚的位置关系:

 

【总结】

1、其实上面用到了两种思维方法:排除法和替代法。信号逐级追踪的过程其实就是排除法,先排除了音频源1和音频2,接着排除了ADC、DSP和DAC芯片,再接着排除了转盘电位器,之后才将问题范围缩小在运放这一块。到了这里用排除法已经没用了,开始采用替代法,通过飞线方法用正常板的参数替代问题板的才最终将问题锁定在PCB上。这两种思维方法在排查硬件问题中非常常用,几乎是终极办法。甚至,排查软件问题也照样算得上是终极办法。也许,你可以通过其他办法解决这个问题,也许你首先就会想到噪声可能根本就来自于LED灯扫描芯片,因为噪声频率与扫描频率比较接近,但是这并不是一种系统思维方法,遇到稍微复杂一点的问题时往往会找不到方向。

2、山穷水尽疑无路,柳暗花明又一村。上面用排除法往前探,第一次遇到山穷水尽,此时开始采用替代法,于是柳暗花明又一村。当把问题锁定在PCB上的时候,再一次遇到山穷水尽,因为PCB已经大量出货过,而且没有更换制版商。这个时候就要有思维上的突破了,PCB本身设计存在极大的缺陷,加上纸板商两次制版加工材料不同以及其他环节不同,就造成了中间层信号线的信号以另一种形式传入运放输入脚,于是噪声被后级不断的放大,这个思考就是一种思维上的突破,于是再一次柳暗花明又一村。

【感悟】

物理学大师杨振宁在他的《美与物理学》一文中,把物理学分为四种内涵:实验、唯象理论、理论架构和数学。不同的科学家分别专注于不同的内涵,布拉赫(T. Brahe , 1546 - 1601)是实验天文物理学家, 活 动领域是(1)。 他做了关于行星轨道的精密观测。 后来开普勒 (J. Kepler , 1571 - 1630)仔细分析布拉赫的数据, 发现了有名 的开普勒三大定律。 这是唯象理论(2)。最后牛顿创建了牛顿力学 与万有引力理论, 其基础就是开普勒的三大定律。 这是理论 架 构 (3)。 海森伯的灵感来自他对实验结 果 ( 1 ) 与 唯象理论(2)的认识, 进而在摸索中达到了方程式 (H)。狄拉克的灵感来自他对数学(4)的美的直觉欣赏,进而天才 地写出他的方程(D)。 他们二人喜好的,注意的方向不同,所以他 们的工作的领域也不一样。

事物的发展总是存在阶段性,但是从一个阶段到另外一个阶段总是应该有一些突破性的东西来推进。

 

 


推荐阅读
  • 高效产品原型设计:技巧、经验和注意事项
    本文由PMTalk社区资深作者AllenDan撰写,分享了如何在日常产品工作中快速有效地设计产品原型,并确保设计易于理解,减少评审时的质疑。文章不仅提供了实用的技巧和经验,还强调了设计过程中的注意事项。 ... [详细]
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • 微服务自动化.dockercompose
    目录一、docker-compose二、docker-compose安装与配置1、修改docker.service2、下载文件3、将刚才下载的docker-compose文 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 分布式计算助力链力实现毫秒级安全响应,确保100%数据准确性
    随着分布式计算技术的发展,其在数据存储、文件传输、在线视频、社交平台及去中心化金融等多个领域的应用日益广泛。国际知名企业如Firefox、Google、Opera、Netflix、OpenBazaar等均已采用该技术,推动了技术创新和服务升级。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 将XML数据迁移至Oracle Autonomous Data Warehouse (ADW)
    随着Oracle ADW的推出,数据迁移至ADW成为业界关注的焦点。特别是XML和JSON这类结构化数据的迁移需求日益增长。本文将通过一个实际案例,探讨如何高效地将XML数据迁移至ADW。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文将详细介绍Fuel CMS如何基于CodeIgniter框架构建,包括其单入口模式的实现方式及关键配置文件的作用。通过分析本地环境中的index.php和.htaccess文件,我们将更好地理解Fuel CMS的核心架构。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 本文深入探讨了领域驱动设计(DDD)中的聚合概念及其在事件溯源架构中的应用。聚合是一组紧密相关的类,这些类作为一个整体运作,形成一个有明确边界的组织。只有通过聚合根才能与聚合内的对象进行交互。 ... [详细]
  • 对于非计算机专业背景的开发者而言,如何快速掌握.NET基础知识以应对技术面试是一个挑战。本文将提供一系列实用建议,帮助读者在短时间内提高.NET基础水平。 ... [详细]
author-avatar
xda6962962
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有