热门标签 | 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)。 他们二人喜好的,注意的方向不同,所以他 们的工作的领域也不一样。

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

 

 


推荐阅读
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文深入探讨了一家企业的制度体系重构与升级过程,通过具体案例展示了如何在战略意图和管理理念指导下,系统性地提升企业管理制度的有效性和可操作性。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 深入解析 HDFS Federation:多命名空间架构详解
    HDFS Federation 是一种扩展 HDFS 架构的方式,通过引入多个独立的 NameNode 来解决单点故障和性能瓶颈问题。本文将详细探讨 HDFS Federation 的工作原理、优势以及潜在挑战。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 如何优化2060显卡设置以提升《Apex英雄》游戏体验
    《Apex英雄》作为一款热门的战术竞技游戏,吸引了大量玩家。本文将探讨如何通过优化GeForce RTX 2060显卡设置,确保在《Apex英雄》中获得最佳性能和流畅的游戏体验。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细探讨了Netty中Future及其子类的设计与实现,包括其在并发编程中的作用和具体应用场景。我们将介绍Future的继承体系、关键方法的实现细节,并讨论如何通过监听器和回调机制来处理异步任务的结果。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
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社区 版权所有