第5章制作与调试实践 5.1电路板的设计与制作 5.1.1印制电路板简介 在绝缘基板的敷铜板上,按预定设计用印制的方法制成印制线路、印制元件或两者组合而成的电路,称为印制电路板(Printed Circuit Board,PCB)。不断发展的PCB技术使电子产品设计和装配走向标准化、规模化、机械化和自动化,还使电子产品体积减小,成本降低,可靠性、稳定性提高,装配、维修变得简单等。 PCB是电子设备设计的基础,是电子工业重要的电子部件之一。它在电子设备中有以下功能。 (1) 提供集成电路等各种元器件固定、装配的机械支撑。 (2) 实现集成电路等各种元器件之间的布线和电气连接或电绝缘,提供所要求的电气特性、特性阻抗、电磁屏蔽及电磁兼容性等。 (3) 为自动锡焊提供阻焊图形,为元器件插装、检查、维修提供识别字符和图形。 由于PCB不断地向提高精度、布线密度和可靠性方向发展,并相应缩小体积、减小质量,因此它在未来电子设备向大规模集成化和微小型化的发展中,仍将保持强大的生命力。 PCB的设计是整机工艺设计中的重要一环。设计质量不仅关系到元件在焊接装配、调试中是否方便,而且直接影响整机技术性能。一般地,PCB的设计不像电路原理设计那样需要严谨的理论和精确的计算,而只有一些基本设计原则和技巧,因此,在设计中具有很大的灵活性和离散性。同一张复杂的电路原理图,不同的设计人员会设计出不同的方案,但是一个好的设计必须在保证电气性能指标的前提下,使布局更合理,由布线引入的电容、电感、电阻最小,更利于散热,并且使布线面积更小。 5.1.2印制电路板 1. 基本概念 印制电路板是由导电的印制电路和绝缘基板构成的。 (1) 印制。采用某种方法,在一个表面上再现图形和符号的工艺,是传统意义中“印刷”概念的拓展。 (2) 印制线路。采用印制法在绝缘基板上制成的导电图形,包括印制导线、焊盘等。 (3) 印制元件。采用印制法在基板上制成的元件,如电感、电容等。 (4) 印制电路。印制线路与印制元件的合称。 (5) 敷铜板。由绝缘基板和粘敷在上面的铜箔组成,是用减成法制造印制板的主要原料。 (6) 印制电路板。完成了印制电路或印制线路加工的板子,不包括安装在板上的元器件和进一步加工,简称印制板。 (7) 印制电路板组件。安装了元器件及其他部件的电子部件。 2. 分类 按印制电路的分布可将PCB划分为单面板、双面板和多层板。单面板是只在一面上有导电图形的印制板。双面板是两面都有导电图形的印制板,与单面板生产的主要区别在于增加了孔金属化工艺,即实现了两面印制电路的电气连接。多层板是有3层或3层以上导电图形和绝缘材料层压合成的印制板。 按力学性能可将PCB分为刚性和柔性两种。柔性印制电路板和刚性印制电路板一样,也分为单面、双面和多层。其突出特点是能弯曲、卷缩、折叠,能连接刚性板及活动部件,从而能立体布线,实现三维空间互连,它的体积和质量小、装配方便,适用于空间小、组装密度高的电子设备。 按适用范围,PCB可分为低频和高频印制电路。高频印制电路主要用于解决高频部件小型化问题。其敷箔基材可由聚四氟乙烯、聚乙烯、聚苯乙烯、聚四氟乙烯玻璃布等介质损耗及介电常数小的材料构成。 目前,也出现了金属芯印制板、表面安装印制板、碳膜印制板等一些特殊印制板。金属芯印制板就是以一块厚度相当的金属板代替环氧玻璃布板,经过特殊处理后,使金属板两面的导体电路相互连通,而和金属部分高度绝缘。金属芯印制板的优点是散热性及尺寸稳定性好,这是因为铝、铁等磁性材料有屏蔽作用,可防止互相干扰。表面安装印制板是为满足电子设备“轻、薄、短、小”的需要,配合管脚密度高、成本低的表面贴装器件的安装工艺(Surface Mounted Technology,SMT)而开发的印制板。 5.1.3印制电路板设计基础 成功的印制板设计不仅应保证元器件准确无误地连接,工作中无自身的干扰,满足生产与维护中的经济指标,而且还要尽量做到装焊方便、整齐美观、牢固可靠。印制板的排版设计虽无一套固定模式,每个设计者都可以有自己的风格与习惯,但在众多的作品中,通过比较可以发现,尽管它们都能达到一定的电性能要求,然而,总可以选出更美观、更易安装、更可靠的印制板。这说明,虽然没有统一的模式,但也应遵循一定原则进行设计,使得具体应用中有最佳效果。 1. 布线 1) 印制导线宽度 导线的工作电流决定了导线的宽度。常温下印制导线的电阻率一般为0.5Ω/(mm2·m)。印制导线最大允许电流一般可按20A/mm2考虑,当铜箔厚度为0.05mm时,1mm宽的印制导线允许通过1A电流。此时线宽的毫米数即是载流量的安培数。 提供布线参考数据如下。 (1) 在板面允许的条件下电源及地线应尽量宽一些,一般布线宽度不要小于1mm。即使地线不允许整体加宽,也应该在可能的地方加宽以降低整个地线系统的电阻。 电源、功率电路部分必须考虑最不利条件,如印制导线局部毛刺、划伤及加工中的允许偏差等。 (2) 对于长度超过100mm的导线,即使电流不大,也应加宽以减小导线压降对电路的影响。 (3) 一般信号获取和处理电路,包括常用TTL、CMOS、非功率运放、RAM、ROM、微处理器等电路部分,可不考虑导线宽度。 (4) 一般安装密度不大的印制板的导线宽度以不小于0.5mm为宜,手工制作的板子的导线宽度以不小于0.8mm为宜。 2) 导线图形间距 相邻导线图形的间距(包括印制导线、焊盘、印制元件)由它们之间的电位差决定。印制板基板的种类、制造质量及表面涂覆都影响导线图形间的安全工作电压。一般印制导线间距最大允许工作电压可按200V/mm考虑,最小间隙不要小于0.3mm,以消除相邻导线之间的电压击穿或飞弧。 3) 印制导线走向与形状 对于印制电路板布线,“走通”是最低要求,“走好”是经验和技巧的表现。图51所示是导线走向与形状的部分实例。实际设计时可根据具体条件选择,通用准则如下。 (1) 以短为佳,能走捷径就不要绕远。 (2) 走线平滑自然为佳,避免急拐弯和尖角。 (3) 公共地线要尽可能多地保留铜箔。 (4) 印制板上大面积铜箔镂空成栅状,导线宽度超过3mm时中间留槽,以利于印制板涂覆铅锡及波峰焊。 图51印制导线走向与形状 2. 焊盘 1) 焊盘形状 (1) 岛形焊盘。如图52(a)所示,焊盘与焊盘间的连线合为一体,形状为岛形,故称为岛形焊盘。这种焊盘有利于元器件密集固定,并可大量减少导线的长度和条数,能在一定程度上抑制分布参数的影响。同时,焊盘与印制线合为一体,铜箔面积大,使印制线路的抗剥离程度增加,能降低选用敷铜板的档次,从而降低产品成本。 (2) 圆形焊盘。如图52(b)所示,焊盘与过线穿孔为同心圆。其外径为孔径的2~3倍。在布线密度允许时应尽量增大焊盘以提高印制线路的抗剥离性。 (3) 方形焊盘。如图52(c)所示,印制板上元件大而少,印制导线时常采用这种方式。在手工制作印制板时,采用这种方式只需要用刀刻断或刻掉一部分即可。在一些大电流的印制板上也多用此形式,以增大线路的载流量。 (4) 椭圆形焊盘。如图52(d)所示,这种焊盘既有足够的面积增强抗剥离能力,又在一个方向尺寸较小,有利于中间走线。常用于双列直插式器件或插座类器件。 (5) 泪滴式焊盘。如图52(e)所示,这种焊盘与印制导线过渡圆滑,在高频电路中有利于减少传输损耗,提高传输效率。 (6) 开口焊盘。如图52(f)所示,开口的目的是为了保证在波峰焊后,手工补焊的焊孔不被焊锡封死。 (7) 其他焊盘。图52(g)所示的矩形(常用正方形)和图52(h)所示的多边形(常用八边形)焊盘一般适用于某些外观相似而序号或孔径不同的焊盘,便于加工和装配。图52(i)所示的异形空焊盘主要用于安装片状的元器件或单元电路板。 图52焊盘形状 2) 焊盘外径 对于单面板来说,焊盘抗剥离能力较差,焊盘环宽应大于1.5mm,即如果焊盘外径为D,引线孔径为d,则应有D≥(d+1.5)mm。对于双面板应有D≥(d+1.0)mm。在高密度精密板上,由于制作要求高,焊盘环宽可为0.7mm或更小。 5.1.4印制电路板设计过程与方法 印制电路板设计也称为印制板排版设计,通常包括设计准备、外形及结构草图设计、绘制不交叉图、设计布局、设计布线、提出加工工艺图及技术要求等过程。 1. 设计准备 了解电路工作原理和组成,各功能电路的相互关系及信号流向等内容,对电路工作时对能发热、可能产生干扰等情况做好准备。了解印制板工作环境(是否密封、工作环境温度变化、是否有腐蚀性气体等)和工作机制(连续工作还是断续工作等)。熟悉主要电路参数(最高工作电压、最大电流及工作频率等)。了解主要元器件和部件的型号、外形尺寸、封装,必要时取得样品或产品样本。 2. 外形及结构草图设计 (1) 对外连接草图。它是根据整机结构和分板要求确定的,一般包括电源线、地线板外元器件的引线、板与板之间连接线等,绘制草图时应大致确定其位置和排列顺序。若采用接插件引出,要确定接插件位置和方向。 (2) 印制板外形尺寸草图。印制板外形尺寸受各种因素制约,一般在设计时已大致确定,从经济性和工艺性出发,优先考虑矩形。印制板的安装、固定也是必须考虑的内容,印制板与机壳或其他结构件连接的螺孔位置及孔径应明确标出。 3. 绘制不交叉图 对较简单的电路(一般指元件数少于30个)可采用绘单线不交叉图的手工方法设计印制板。具体步骤如下。 (1) 将原理图中应放置于板上的电路图根据信号流向或排版方向依次画到板面上,集成电路要画封装引脚图。 (2) 按原理图将各元器件引脚连接,遇到有导线交叉的情况,可以利用元器件中间位置或跨接线跨越。 (3) 调整元器件位置和方向,使跨接线最少、连线最简洁。 (4) 重新画不交叉图。 设计中可能会需要重复进行上述4个步骤方能获得较好的设计结果。在应用CAD技术时,该步骤可由设计人员与计算机协同完成。 4. 设计布局 布局就是将电路元器件放在印制板有线区内,布局是否合理不仅影响布线工作,而且对整个电路板的性能也有重要作用。下面对布局要求、原则、布放顺序作简要介绍。 1) 布局要求 首先要保证电路功能和性能指标。在此基础上满足工艺性以及检测、维修方面的要求。同时,要适当兼顾美观,元器件排列应该整齐、疏密得当。相同结构电路部分应尽可能采取对称布局。同类型的元器件应该在X或Y方向上一致。同一类型的有极性分立元件也要力争在X或Y方向上一致,以便于生产和调试。使用同一电源的元器件应考虑尽量放在一起,以便于将来的电源分割。 2) 布局原则 (1) 就近原则。相关电路部分应就近安放,避免走远路、绕弯子。 (2) 信号流原则。按电路信号流向布放,避免输入输出、高低电平、模拟数字电路部分交叉。 (3) 调试和维修原则。大元器件边上不能放置小元器件,需要调试的元器件周围应有足够的空间。双列直插元器件相互的距离要大于2mm。球栅阵列(Ball Grid Array,BGA)结构的PCB与相邻元器件距离应大于5mm。阻容等贴片小元器件相互距离大于0.7mm。贴片元件焊盘外侧与相邻插装元器件焊盘外侧要大于2mm。压接元器件周围5mm不可以放置插装元器件。焊接面周围5mm内不可以放置贴装元器件。 (4) 散热原则,有利于发热元器件散热。 (5) 抗干扰原则,集成电路的去耦电容应尽量靠近芯片的电源脚,使之与电源和地之间形成回路最短。旁路电容应均匀分布在集成电路周围。匹配电容电阻的布局要分清其用法,对于多负载的终端匹配一定要放在信号的最远端进行匹配。 3) 布放顺序 (1) 先大后小,先安放占面积较大的元器件。 (2) 先集成后分立。 (3) 先主后次,多块集成电路先放置主电路。 4) 布局方法 (1) 实物法,将元器件和部件样品在1∶1的草图上排列,寻找最优布局。实际应用中一般是将关键的元器件或部件实物作为布局依据。 (2) 模板法,实物摆放不方便或没有实物,可按样本或有关资料制作主要元器件和部件的图样模板,以代替实物进行布局。 (3) 经验对比法,这种方法是根据经验参照有可对比的印制电路板对新设计布局。 5. 设计布线 布线是按照原理图要求将元器件和部件通过印制导线连接成电路,是制板设计中的关键步骤,具体布线要把握以下要点。 (1) 连接要正确。在纵横交错的导电图形中很难保证所有的连接正确。较复杂的电路可以利用CAD手段再加上必要的校对检查将失误尽可能减少。 (2) 走线要简捷。除某些兼有印制元件作用的连线外,所有印制板走线都要尽量简捷,尽可能使走线短、平滑。 (3) 粗细要适当。电源线(包括地线)和大电流线必须保证足够宽度。特别是地线,在版面允许的条件下尽可能宽一些。 5.1.5印制板检验 印制板制成后必须通过必要的检验,才能进入装配工序。尤其是批量生产中对印制板进行检验是产品质量和后面工序顺利进行的重要保证。 1. 目视检验 目视检验简单易行,借助简单工具,如直尺、卡尺、放大镜等,对要求不高的印制板可进行质量把关。主要检验内容如下。 (1) 外形尺寸与厚度是否在要求的范围内,特别是与插座配合的尺寸。 (2) 导电图形的完整和清晰,有无短路、断路、毛刺等。 (3) 表面质量,有无凹痕、划伤、针孔及表面粗糙等。 (4) 焊盘孔及其他孔的位置和孔径,有无漏打或打偏。 (5) 焊层质量,红层平整光亮,无凸起缺损。 (6) 涂层质量,阻焊剂均匀牢固,位置准确,阻焊剂均匀。 (7) 板面平直无明显翘曲。 (8) 字符标记清晰、干净、无渗透、划伤。 2. 连通性检查 使用万用表对导电图形连通性能进行检测,重点是双面板的金属化孔和多层板的连通性能。批量生产中应配专门设备和仪器。 3. 绝缘性能 检测同一层不同导线之间或不同层导线之间的绝缘电阻以确认印制板的绝缘性能。检测时应在一定温度和湿度下按印制板标准进行。 4. 可焊件 检验焊料对导电图形的浸润性能。 5. 镀层附着力 检验镀层附着力可采用胶带试验法。将质量好的透明胶带粘到要测试的镀层上,按压均匀后快速掀起胶带一端扯下,镀层无脱落为合格。 此外,还有抗剥强度、镀层成分、金属化孔抗拉强度等多种指标,根据印制板的要求选择检测内容。 5.2电子制作中的抗干扰措施 在电子系统设计和实现的过程中,一个必须面对的问题是如何在各种各样的电磁干扰源作用下仍使系统能正常工作,同时系统对其他电子设备的影响可以小到什么程度才可以接受,这一般称为电磁兼容性(ElectroMagnetic Compatibility,EMC),我国对电磁干扰和电磁兼容问题也予以了高度重视,并强制性地规定各类电器的EMC检测,具有EMC检测合格证书的产品才准许销售。因此,作为电子电路设计人员,必须掌握电子电路的抗干扰和电磁兼容技术。 5.2.1电磁干扰三要素 要形成电磁干扰必须具备3个基本要素,即干扰源、耦合通道和敏感设备,如图53所示。 图53电磁干扰框图 干扰源指产生电磁干扰的任何元件、器件、设备、系统或自然现象。耦合通道指将电磁干扰能量传输到受干扰设备的通路或媒介。敏感设备指受到电磁干扰影响(即对电磁干扰响应)的设备。 1. 干扰源 电磁干扰可分为人为干扰和自然干扰。自然干扰指大气干扰、雷电干扰、宇宙干扰和热噪声等。人为干扰包括其他电器或系统中电路工作时所产生的有用能量对电路造成的干扰; 无用的电磁能量产生的干扰,这些无用的电磁能量一般为其他电器或系统中电路正常工作时产生的副产品,如汽车点火系统产生的干扰。根据干扰源的频率不同,电磁干扰大致可分为表51所示的几类。 表51各种电磁干扰频率范围 干扰源输电线、电力牵引系统、有线广播雷电等高压直流输电高次谐波、交流输电线、电气铁道高次谐波工业科学医疗设备、内燃机车、电动机、照明电器微波炉、微波接力通信、卫星通信发射机 干扰频段工频及音频基频干扰载频干扰射频、视频微波干扰 频率范围50Hz及其谐波30kHz以下10~300kHz300kHz~300MHz300MHz~100GHz 2. 耦合通道 电磁干扰耦合通道通常分为传导耦合和辐射耦合两类。 传导耦合根据途径的不同又可分为电路性传导耦合、电容性传导耦合和电感性传导耦合。传导耦合的特点是干扰源与敏感设备之间干扰的路径必须为闭合回路,往返通路可以是另一根导线或是公共接地线回路。 辐射耦合根据干扰源与敏感设备之间的距离可分为近场耦合模式(系统内部)和远场耦合模式(系统之间)。辐射耦合的范围很广,在设备的机壳、机壳的孔洞、传输线及元件之间等都可能存在。 3. 敏感设备 敏感设备是一个广义的名称,实际上所有对电磁干扰有响应的设备、系统、电路、元器件等都属于敏感设备。 5.2.2电子电路中抗干扰的常用措施 抗干扰的基本思想,是分析研究并确定形成干扰的三要素,然后通过抑制干扰源、削弱干扰耦合途径、降低敏感设备对干扰源的响应等措施,来抵制干扰效应的形成。 1. 抑制干扰源 抑制干扰源就是尽可能地减小干扰源的du/dt、di/dt。这是抗干扰设计中最优先考虑和最重要的原则,常常会起到事半功倍的效果。减小干扰源的du/dt主要是通过在干扰源两端并联电容来实现。减小干扰源的di/dt则是在干扰源回路串联电感或电阻以及增加续流二极管来实现。 抑制干扰源的常用措施如下。 (1) 继电器线圈增加续流二极管,消除断开线圈时产生的反电动势干扰。仅加续流二极管会使继电器的断开时间滞后,增加稳压二极管后继电器在单位时间内可动作更多的次数。 (2) 在继电器接点两端并接火花抑制电路(一般是RC串联电路,电阻一般选1~99kΩ,电容选0.01μF),减小电火花影响。 (3) 给电机加滤波电路,注意电容、电感引线要尽量短。 (4) 电路板上每个IC要并接一个0.01~0.1μF高频电容,以减小IC对电源的影响。注意高频电容的布线,连线应靠近电源端并尽量粗短; 否则,等于增大了电容的等效串联电阻,会影响滤波效果。 (5) 布线时避免90°折线,减少高频噪声发射。 (6) 可控硅两端并接RC抑制电路,减小可控硅产生的噪声(这个噪声严重时可能会把可控硅击穿)。 2. 抗干扰传播分类 按干扰的传播路径可分为传导干扰和辐射干扰两类。 传导干扰是指通过导线传播到敏感器件的干扰。高频干扰噪声和有用信号的频带不同,可以通过在导线上增加滤波器的方法切断高频干扰噪声的传播,有时也可加隔离光耦来解决。电源噪声的危害最大,要特别注意处理。辐射干扰是指通过空间辐射传播到敏感器件的干扰。一般的解决方法是增加干扰源与敏感器件的距离,用地线把它们隔离和在敏感器件上加屏蔽罩。 切断干扰传播路径的常用措施如下。 (1) 充分考虑电源对单片机的影响。电源做得好,整个电路的抗干扰就解决了一大半。许多单片机对电源噪声很敏感,要给单片机电源加滤波电路或稳压器,以减小电源噪声对单片机的干扰。例如,可以利用磁珠和电容组成π形滤波电路,当然条件要求不高时也可用100Ω电阻代替磁珠。 (2) 如果单片机的I/O口用来控制电机等噪声器件,在I/O口与噪声源之间应加隔离,即增加π形滤波电路。 (3) 注意晶振布线。晶振与单片机引脚尽量靠近,用地线把时钟区隔离起来,晶振外壳接地并固定。此措施可解决许多疑难问题。 (4) 电路板合理分区,如强、弱信号以及数字、模拟信号。尽可能把干扰源(如电机、继电器)与敏感元件(如单片机)远离。 (5) 用地线把数字区与模拟区隔离,数字地与模拟地要分离,最后在一点接于电源地。A/D、D/A芯片布线也以此为原则,厂家分配A/D、D/A芯片引脚排列时已考虑此要求。 (6) 单片机和大功率器件的地线要单独接地,以减小相互干扰。大功率器件尽可能放在电路板边缘。 (7) 在单片机I/O口、电源线、电路板连接线等关键地方使用抗干扰元件,如磁珠、磁环、电源滤波器、屏蔽罩,可显著提高电路的抗干扰性能。 3. 提高敏感器件的抗干扰性能 提高敏感器件的抗干扰性能是指从敏感器件考虑尽量减少对干扰噪声的拾取,以及从不正常状态尽快恢复的方法。 提高敏感器件抗干扰性能的常用措施如下。 (1) 布线时尽量减少回路环的面积,以降低感应噪声。 (2) 布线时,电源线和地线要尽量粗。除减小压降外,更重要的是降低耦合噪声。 (3) 对于单片机闲置的I/O口,不要悬空,要接地或接电源。其他IC的闲置端在不改变系统逻辑的情况下接地或接电源。 (4) 对单片机使用电源监控及看门狗电路,如IMP809、IMP706、IMP813、X25043、X25045等,可大幅度提高整个电路的抗干扰性能。 (5) 在速度能满足要求的前提下,尽量降低单片机的晶振和选用低速数字电路。 (6) IC器件尽量直接焊在电路板上,少用IC座。 5.2.3电子电路中抗干扰的基本技术 1. 布线 设计PCB板时,除了遵循前面讲的设计布局的要求外,从抗干扰的角度考虑,布线要遵循以下原则和技巧; 否则系统工作有可能不稳定,甚至无法正常工作。 (1) 交直流要分开,强弱信号要分开,高低电压要分开。 (2) 低频电路切忌印制铜箔线构成环路。 (3) 减小单级电路布线的环路面积,减小多级电路布线的交链面积。 (4) 利用地线作隔离线。布线中若不得已要平行布线时,可在两平行线之间布一条铜箔线构成隔离线,以消除两平行线间因电容性传导耦合造成的干扰。 (5) 利用地线作屏蔽线。对高频、弱信号线可用地线将其包围起来,以达到屏蔽的目的。 (6) 利用“跳线”(也称“飞线”)。在布线中如遇到只有绕大圈子才能走通的线路,要利用“跳线”,即直接用短路线连接,以减小长距离走线途中带来的干扰。 (7) 利用屏蔽线或屏蔽板。利用金属编织的屏蔽线将输入或输出的信号线屏蔽起来,利用金属屏蔽板将信号回路或振荡电路隔离起来,以达到抗干扰的目的。 (8) 利用电源线和地线作集成电路的隔离线。 2. 屏蔽 屏蔽是电子电路抗干扰技术中一项重要的措施。 屏蔽采用一定手段将空间的电力线和磁力线限制在一定范围内,防止电、磁场电磁感应形成的干扰。屏蔽可以有效地对电场、磁场和电磁场3种干扰进行屏蔽。 1) 电场屏蔽 电场屏蔽是针对电容性耦合的。电容性耦合干扰是由于两导体(或电路)间的分布电容所形成的电场相互作用造成的干扰。已知一个带电体旁放置一个导体时,这个导体将感应出相应的电荷; 如果带电体的电压是交变的,则导体也将感应出交变的电压,这就是电容性耦合干扰形成的基本原理。 电场屏蔽的基本原理是利用接地的导体包围以电场形式耦合的噪声干扰源,切断电力线的延伸; 同样也可利用接地的导体包围需要防护的电路,以防止电力线的进入。 电场屏蔽的主要方法如下。 (1) 用屏蔽保护线免受干扰电场的影响。 (2) 用屏蔽罩或金属外壳保护内部电路。 (3) 在两导线之间加一条接地导线或两导体之间加一块接地的金属薄板,可在有效的空间内使电场耦合明显减小。 (4) 有源屏蔽。有源屏蔽抗干扰是使屏蔽体带有和被屏蔽的导体同等的电位,两者间无空间电力线,这样外部的干扰电场只能作用于屏蔽体的外侧,而对内部电路无影响。 2) 磁场屏蔽 磁场屏蔽是针对电感性耦合干扰的。电感性耦合干扰是由于两导体(或电路)间的磁场相互作用造成的干扰。磁场屏蔽的基本原理是利用屏蔽体旁路以磁场形式耦合的噪声干扰源,防止磁力线的延伸; 同样也可以利用屏蔽体包围需要防护的电路,以防止磁力线的进入。磁场屏蔽的主要方法如下。 (1) 用高导磁材料制作屏蔽体,屏蔽体可以是容器,将需保护的电路置于其中。 (2) 尽可能减小接收回路的环路面积,即减小流经接收回路的电流所包围的总面积,减小环路面积就可以减小磁通交链的机会,以减小磁场形式耦合的干扰。 (3) 使屏蔽层流过一个与中心导线电流大小相等、方向相反的电流,该电流将产生一个大小相等、方向相反的外部磁场,抵消中心导线电流产生的磁场,使负载电流经由屏蔽体注入地,则屏蔽体外部没有干扰磁场的存在。 3) 电磁场屏蔽 电磁场屏蔽是针对电磁波辐射干扰而采取的屏蔽措施。电磁波干扰又称为辐射干扰,是由高频电流所产生的电磁波在空间传播形成的干扰。电磁场屏蔽的基本原理是利用导电性能良好的金属材料(铜或铝)制作屏蔽体,利用高频电磁场在屏蔽体中产生的涡流作用,使电磁波得到极大的衰减,同时涡流产生的反电磁场形成对原干扰电磁场的抵消,达到屏蔽的目的。电磁波干扰的程度与其工作频率关系极大,频率越高工作电流越大,干扰的程度也就越严重,因此对屏蔽罩严密性的要求也越高。 3. 接地 大量的电磁干扰是在两个系统用导线连接在一起时发生的。而有用信号的耦合,必须要通过导线来连通,并且要提供公共的参考电位来正确地表达信号。接地是在解决连通信号和提供参考电位的过程中出现的一个基本问题。接地的根本目的是提供一个公共的参考电位。通常实现这个目标的基本方法是用导线把电路中需要参考电位的点连接在一起,把这种连接导线称为地线。这种做法的依据是认为导体上各个位置都是等电位的。而由于多种原因使得在实际电路中上述依据是不能成立的。如存在导线电阻,地线回路电流必然会在该电阻上形成压降,地线电阻和地线电流的分布与电路的连接方式和各部分电路的工作状态有关,因而导致地线上各点电位不同,并在不断变化中; 对于频率很高的交流信号,由于地线本身分布参数的影响,会存在传输线效应,信号在地线上以波的形式传播,地线上不同点处的信号不可能相同; 在地线较长或环境干扰场强较大的情况下,地线上会耦合出干扰信号,导致同一导线连接的各个点间可能存在很大的电位差。 讨论到接地问题时,必须正确理解大地电位(安全地)的概念。安全地是以人类活动的基本参考电位——大地电位为参考,保证电气设备在存在漏电或强电击干扰的情况下能够将电能量通过良好的接地通道释放到地球大地电容上去,而不对人体产生危害。在设计地线电路时必须重点考虑地线上的电流情况,特别是射频信号(或频率较高的数字信号)的地线电流。流入信号端口的电流,必然要以相同的频率从地线端口流出去,如果选用的地线不适合射频电流通过,实际上起不到与参考地电平有效连接的作用,必然会带来干扰。 接地的基本方式有单点接地、多点接地和混合接地3种形式。 1) 单点接地 系统中各单元电路的地线分别单独连接到一个公共的参考,称为单点接地。这种方式避免了形成多个地回路造成的干扰,使得电路间的相互干扰减小。缺点是地线的布线复杂、走线长,不容易实施,且有可能引进其他噪声电压。单点接地系统如图54所示。 2) 多点接地 系统中各单元电路的地线通过不同的连接点连接到地线平面上,称为多点接地。多点接地方式一般都存在一个面积较大的地线导体,各单元电路的地线就近与地平面连接,连线可以很短,这样可以大大减小由于空间耦合造成的串扰信号。多点接地存在接地环路问题,应当予以重视。多点接地系统如图55所示。 图54单点接地系统示意图 图55多点接地系统示意图 接地环路是指距离较远的两个设备之间非平衡信号地线和设备地线之间构成的环路,如图56所示,由A、B点之间的信号地线和C、D点之间的外壳地线构成的环路就是一个接地环路。在这个环路中,接地点C、D间的共模干扰电压UCM和环路ABCDA所围成的面积中的空间电磁场感应出来的干扰电压会形成接地环路电流IG,导致A、B间连线上出现干扰电压降,从而使设备B的输入端被干扰。 图56接地环路干扰原理示意图 解决接地环路问题的措施有以下几种。 (1) 单点接地。 (2) 地线隔离。采用变压器、光耦合器等器件在传输信号的同时阻断地线的连接。 (3) 采用共模信号扼流圈。信号线穿过铁氧体磁管或在铁氧体磁环上并绕均可实现共模扼流作用,阻断高频共模电流,减小地线环路的影响。扼流圈对低频干扰信号的抑制作用不明显。 (4) 采用平衡传输方式工作。在平衡传输方式下,两根信号线对地是平衡对称的(信号大小相等、方向相反),耦合出的共模干扰会相互抵消,但实际上很难做到这一点。 3) 混合接地 混合接地综合了一点接地和多点接地。混合接地系统如图57所示。电路图57(a)对于低频信号而言,各单元电路采用的是单点接地方式; 对于高频而言,则通过电容实现多点接地。电路图57(b)则刚好相反。采用这种方式可以实现对地线电流流向的控制,可以用来优化系统性能。 图57混合接地系统示意图 另外,在使用测试仪器时,接地应遵循以下几条基本原则。 (1) 处理各种不同接地端时。如电源地、屏蔽接地、信号地等要避免彼此间有交互作用,引导它们走各自该走的路。 (2) 接地线的阻抗要低,路径要短。 (3) 避免多重地回路。 (4) 将电流大的地电流回路与小信号回路分开。 4. 滤波 在电子电路抗干扰技术中,滤波是一项很有效的措施。常用滤波对噪声、干扰等进行抑制或衰减,特别是对导线传导耦合到电路中而具有一定频率特征的干扰信号,具有十分明显的效果。滤波是指根据信号本身的特征对信号进行选择性通过或阻止通过的处理方法。常见的滤波方法是根据信号的频率进行选通。采用具有不同频率特性的电抗电路,可以让有用信号通过,把干扰信号衰减或隔绝开,从而达到减小干扰的目的。 在电子系统中,干扰滤波技术主要分为电源线滤波和信号线滤波。 图58电源线滤波电路 1) 电源线滤波 典型的电源线滤波器电路如图58所示。该电路基本上是一个低通滤波电路,但在设计上兼顾了共模干扰信号和差模干扰信号,具有比较好的抗干扰滤波性能。 交流电源电压从左侧接入,从右侧送出,右侧的地线与屏蔽接地端相接。该电路对于输入的共模干扰信号被L形滤波器中电感L阻隔,C1、C2旁路,减小高频干扰的影响; 对于输入的差模干扰信号被π形滤波C3、C4旁路,L阻隔,同样减小高频干扰的影响。 由于电源功率较大,滤波器的元件选择必须考虑到功率和耐压、磁饱和的要求。L采用把导线穿绕在高磁导率磁环上的方式实现,电容采用高耐压的陶瓷电容或丙纶电容。滤波器的安装位置要尽量靠近屏蔽层开口处,并与屏蔽层良好接触连线。 2) 信号线滤波 信号线滤波器采用滤除通过信号线,特别是信号线的屏蔽层引入的干扰信号。 信号线滤波器按安装方式和外形分为线路板安装滤波器、贯通滤波器和连接器滤波器3种。 线路板安装滤波器适合于安装在线路板上,具有成本低、安装方便等优点。但线路板安装滤波器的高频效果不是很理想。 贯通滤波器适合于安装在屏蔽壳体上,具有较好的高频滤波效果,适用于单根导线穿过屏蔽体。 连接器滤波器适合于安装在屏蔽机箱上,具有较好的高频滤波效果,用于多根导线(电缆)穿过屏蔽体。 最常见的信号线滤波器是铁氧体磁管或磁环套在信号线上的形式,如各种监视器的信号线上串接在两端附近的精圆柱体,其内部就是由纵剖开的两个半圆铁氧体磁管扣在一起,包围在信号线外部构成的一个滤波器。其作用相当于在信号线屏蔽体上串接了一个电感,可以阻断高频干扰信号。 5.3模拟电路系统调试 实践表明,一个电子装置,尤其是模拟电路,即使按照设计的电路参数进行安装,往往也难以达到预期的效果。这是因为人们在设计时,不可能周全地考虑各种复杂的客观因素(如元件值的误差、器件参数的分散性、分布参数的影响等),必须通过安装后的测试和调整来发现和纠正设计方案的不足,然后采取措施加以改进,使装置达到预定的技术指标。因此,调试电子电路的技能对从事电子技术及其相关领域工作的人员来说是不可缺少的。 调试的常用仪器有稳压电源、万用表、示波器、频谱分析仪和信号发生器等。 电子电路调试包括测试和调整两个方面。调试的意义有二: 一是通过调试使电子电路达到规定的指标; 二是通过调试发现设计中存在的缺陷并予以纠正。 5.3.1电子电路调试的步骤 传统中医看病讲究“望、闻、问、切”,其实调试电路也是如此。首先“望”,即观察电路板的焊接如何,成熟的电子产品一般都是焊接出的问题; 第二“闻”,这个不是说先把电路板闻一下,而是说通电后听电路板是否有异常响动,不该叫的叫了,该叫的不叫; 第三“问”,如果是自己第一次调试,不是自己设计的要问电源是多少,别人调试是否调过,或在调试过程中有什么问题; 第四“切”,元器件是否焊全,芯片焊接是否正确,不易观察的焊点是否焊好,一般调试前做好这几步就可发现不少问题。 根据电子电路的复杂程度,调试可分步进行: 对于较简单系统,调试步骤是: 电源调试→单板调试→联调。对于较复杂的系统,调试步骤是: 电源调试→单板调试→分机调试→主机调试→联调。由此可明确3点: 一是不论简单系统还是复杂系统,调试都是从电源开始入手的; 二是调试方法一般是先局部(单元电路)后整体,先静态后动态; 三是一般要经过测量→调整→再测量→再调整的反复过程。对于复杂的电子系统,调试也是一个“系统集成”的过程。 在单元电路调试完成的基础上,可进行系统联调。例如,数据采集系统和控制系统,一般由模拟电路、数字电路和微处理器电路构成,调试时常把这3部分电路分开调试,分别达到设计指标后,再加进接口电路进行联调。联调是对总电路的性能指标进行测试和调整,若不符合设计要求,应仔细分析原因,找出相应的单元进行调整。不排除要调整多个单元的参数或调整多次,甚至有修正方案的可能。 调试的具体步骤如下。 1. 通电前检查 电路安装完毕,通常不宜急于通电,应该先认真检查一下。检查内容如下。 (1) 连线是否正确。检查电路连线是否正确,包括错线(连线一端正确,另一端错误)、少线(安装时完全漏掉的线)和多线(连线的两端在电路图上都是不存在的)。 查线的方法通常有两种: 一是按照电路图检查安装的线路,这种方法的特点是,根据电路图连线,按一定顺序逐一检查安装好的线路,由此可比较容易地查出错线和少线; 二是按照实际线路来对照原理电路进行查线,这是一种以元件为中心进行查线的方法。把每个元件(包括器件)引脚的连线一次查清,检查每个去处在电路图上是否存在,这种方法不但可以查出错线和少线,还容易查出多线。 为了防止出错,对于已查过的线通常应在电路图上做出标记,最好用指针式万用表“Ω×1”挡,或数字式万用表“Ω挡”的蜂鸣器测量,而且应直接测量元器件引脚,这样可以同时发现接触不良的地方。 (2) 元器件安装情况。 检查元器件引脚之间有无短路; 连接处有无接触不良; 二极管、三极管、集成器件和电解电容极性等是否连接有误。 (3) 电源供电(包括极性)、信号源连线是否正确。 (4) 电源端对地是否存在短路。 若电路经过上述检查,并确认无误后,就可转入调试。 2. 通电观察 通电后不要急于测量电气指标,而要观察电路有无异常现象,如有无冒烟现象、有无异常气味、手摸集成电路外封装是否发烫等。如果出现异常现象,应立即关断电源,待排除故障后再通电。 3. 静态调试 静态调试一般是指在不加输入信号,或只加固定的电平信号的条件下所进行的直流测试,可用万用表测出电路中各点的电位,通过与理论估算值的比较,结合电路原理的分析,判断电路直流工作状态是否正常,及时发现电路中已损坏或处于临界工作状态的元器件。通过更换器件或调整电路参数,使电路直流工作状态符合设计要求。 4. 动态调试 动态调试是在静态调试的基础上进行的,在电路的输入端加入合适的信号,按信号的流向,顺序检测各测试点的输出信号,若发现有不正常现象,应分析其原因,并排除故障,再进行调试,直到满足要求。 测试过程中不能仅凭感觉或印象,要始终借助仪器观察。使用示波器时,最好把示波器的信号输入方式置于DC挡,通过直流耦合方式,可同时观察被测信号的交、直流成分。 通过调试,最后检查功能块和整机的各种指标(如信号的幅值、波形形状、相位关系、增益、输入阻抗和输出阻抗、灵敏度等)是否满足设计要求,如有必要,再进一步对电路参数提出合理的修正。 5.3.2调试时出现故障的解决方法 要认真查找故障原因,切不可一遇故障解决不了就拆掉线路重新安装。因为重新安装的线路仍可能存在各种问题,如果是原理上的问题,即使重新安装也解决不了问题。应当把查找故障、分析故障原因看成一次学习机会,通过它来不断提高自己分析问题和解决问题的能力。 1. 检查故障的一般方法 故障是不期望但又不可避免的电路异常工作状况。分析、寻找和排除故障是电气工程人员必备的实际技能。对于一个复杂的系统来说,要在大量的元器件和线路中迅速、准确地找出故障是不容易的。一般故障诊断过程,就是从故障现象出发,通过反复测试,做出分析判断,逐步找出故障原因的过程。 2. 故障现象和产生故障的原因 1) 常见的故障现象 放大电路没有输入信号,而有输出波形。放大电路有输入信号,但没有输出波形,或者波形异常。串联稳压电源无电压输出,或输出电压过高且不能调整,或输出稳压性能变坏、输出电压不稳定等。振荡电路不产生振荡。计数器输出波形不稳,或不能正确计数。收音机中出现“嗡嗡”交流声和“啪啪”的汽船声等。以上是最常见的一些故障现象,还有很多奇怪的现象,这里就不一一列举了。 2) 产生故障的原因 故障产生的原因很多,情况也很复杂,有的是一种原因引起的简单故障,有的是多种原因相互作用引起的复杂故障。因此,引起故障的原因很难简单分类。这里只能进行一些粗略的分析。 对于定型产品使用一段时间后出现故障,故障原因可能是元器件损坏,连线发生短路或断路(如焊点虚焊,接插件接触不良,可变电阻器、电位器、半可变电阻等接触不良,接触面表面镀层氧化等),或使用条件发生变化(如电网电压波动,过冷或过热的工作环境等)影响电子设备的正常运行。 对于新设计安装的电路来说,故障原因可能是实际电路与设计的原理图不符; 元器件焊接错误,元器件使用不当或损坏; 设计的电路本身就存在某些严重缺点,不满足技术要求; 连线发生短路或断路等。 仪器使用不正确引起的故障,如示波器使用不正确而造成的波形异常或无波形、接地问题处理不当而引入干扰等。 各种干扰引起的故障。 3. 检查故障的一般方法 查找故障的顺序可以从输入到输出,也可以从输出到输入。查找故障的一般方法如下。 1) 直接观察法 直接观察法是指不用任何仪器,利用人的视、听、嗅、触等行为手段来发现问题,寻找和分析故障。直接观察包括不通电检查和通电观察。 检查仪器的选用和使用是否正确; 电源电压的等级和极性是否符合要求; 电解电容的极性、二极管和三极管的管脚、集成电路的引脚有无错接、漏接、互碰等情况; 布线是否合理; 印制板有无断线; 电阻、电容有无烧焦和炸裂等。 通电观察元器件有无发烫、冒烟,变压器有无焦味,电子管、示波管灯丝是否亮,有无高压打火等。 此法简单,也很有效,可作初步检查时用,但对比较隐蔽的故障无能为力。 2) 用万用表检查静态工作点 电子电路的供电系统,半导体三极管、集成块的直流工作状态(包括元器件引脚、电源电压)、线路中的电阻值等都可用万用表测定。当测量值与正常值相差较大时,经过分析可找到故障。 顺便指出,静态工作点也可以用示波器DC输入方式测定。用示波器的优点是,内阻高,能同时看到直流工作状态和被测点上的信号波形以及可能存在的干扰信号及噪声电压等,更有利于分析故障。 3) 信号寻迹法 对于各种较复杂的电路,可在输入端接入一个一定幅值、适当频率的信号(如对于多级放大器,可在其输入端接入f=1000Hz的正弦信号),用示波器由前级到后级(或相反),逐级观察波形及幅值的变化情况,如哪一级异常,则故障就在该级。这是深入检查电路的方法。 4) 对比法 怀疑某一电路存在问题时,可将此电路的参数与工作状态相同的正常电路的参数(或理论分析的电流、电压、波形等)进行一一对比,从中找出电路中的不正常情况,进而分析故障原因,判断故障点。 5) 部件替换法 有时故障比较隐蔽,不能一眼看出,如这时有与故障仪器同型号的仪器时,可以将仪器中的部件、元器件、插件板等替换有故障仪器中的相应部件,以便于缩小故障范围,进一步查找故障。 6) 旁路法 当有寄生振荡现象时,可以利用适当容量的电容器,选择适当的检查点,将电容临时跨接在检查点与参考接地点之间,如果振荡消失,就表明振荡是产生在此附近或前级电路中; 否则就在后面,再移动检查点寻找。应该指出的是,旁路电容要适当,不宜过大,只要能较好地消除有害信号即可。 7) 短路法 短路法是采取临时性短接一部分电路来寻找故障的方法。短路法对检查断路性故障最有效。但要注意对电源(电路)是不能采用短路法的。 8) 断路法 断路法用于检查短路故障最有效。断路法也是一种使故障怀疑点逐步缩小范围的方法。例如,某稳压电源因接入一带有故障的电路,使输出电流过大,可采取依次断开电路的某一支路的办法来检查故障。如果断开该支路后,电流恢复正常,则故障就发生在此支路。 实际调试时,寻找故障原因的方法多种多样,以上仅列举了几种常用的方法。这些方法的使用可根据设备条件、故障情况灵活掌握,对于简单的故障用一种方法即可查找出故障点,但对于较复杂的故障则需采取多种方法互相补充、互相配合,才能找出故障点。在一般情况下,寻找故障的常规做法是: 先用直接观察法,排除明显的故障; 再用万用表(或示波器)检查静态工作点。信号寻迹法是对各种电路普遍适用而且简单直观的方法,在动态调试中广为应用。 应当指出,对于反馈环内的故障诊断是比较困难的,在这个闭环回路中,只要有一个元器件(或功能块)出故障,则往往整个回路中处处都存在故障现象。寻找故障的方法是先把反馈回路断开,使系统成为一个开环系统,然后再接入一适当的输入信号,利用信号寻迹法逐一寻找发生故障的元器件(或功能块)。 5.3.3电子电路调试中的注意事项 调试结果是否正确,很大程度上受测量正确与否和测量精度的影响。为了保证调试的效果,必须减小测量误差,提高测量精度。为此,需注意以下几点。 1. 正确使用测量仪器的接地端 凡是使用地端接机壳的电子仪器进行测量时,仪器的接地端应和放大器的接地端连接在一起,否则仪器机壳引入的干扰不仅会使放大器的工作状态发生变化,而且将使测量结果出现误差。根据这一原则,调试发射极偏置电路时,若需测量UCE,不应把仪器的两端直接接在集电极和发射极上,而应分别对地测出UC、UE,然后将二者相减得UCE。若使用干电池供电的万用表进行测量,由于电表的两个输入端是浮动的,所以允许直接跨接到测量点之间。 2. 正确选择测量仪表 图59被测电路 对于硬件电路,应为被调试系统选择测量仪表,测量仪表的精度应优于被测系统,测量电压所用仪器的输入阻抗必须远大于被测处的等效阻抗,否则在测量时会引起分流,给测量结果带来很大误差。测量仪器的带宽必须大于被测电路的带宽; 否则,测试结果就不能反映放大器的真实情况。 3. 要正确选择测量点 根据待调试系统的工作原理(原理图和PCB)拟定调试步骤和测量方法,确定测试点,测试点可以按照信号的流向来确定,并在图纸上和板子上标出位置,画出调试数据记录表格等。用同一台测量仪器进行测量时,测量点不同,仪器内阻引进的误差大小将不同。例如,对于图59所示电路,测C1点电压UC1时,若选择E2为测量点,测得UE2,根据UC1=UE2+UBE2求得的结果,可能比直接测C1点得到的UC1的误差要小得多。所以出现这种情况,是因为Re2较小,仪器内阻引进的测量误差小。 4. 测量方法要方便可行 需要测量某电路的电流时,一般尽可能测电压而不测电流,因为测电压不必改动被测电路,测量方便。若需知道某一支路的电流值,可以通过测取该支路上电阻两端的电压,经过换算得到。 5. 记录 调试过程中,不但要善于观察和测量,还要认真记录。 记录的内容包括实验条件、观察的现象、测量的数据、波形和相位关系等。只有有了大量可靠的实验记录并与理论结果加以比较,才能发现电路设计上的问题,完善设计方案。 5.4数字电路系统调试 数字电路的调试与模拟电路的调试有许多相似之处,这里着重说明数字电路调试的特点。数字电路工作时,其信号电平相对较高,因此数字电路的抗干扰能力比模拟电路强,数字电路中混入噪声电压时,只要噪声电压不超过噪声裕量,就不会影响其正常工作。对于TTL电路,噪声裕量的典型值为0.4~0.6V; 对于CMOS电路,噪声裕量典型值为电源电压UDD的0.3倍。 5.4.1注重电路的时序图 时序图是时序电路很重要的信息之一,对于一个时序电路的器件(ADC0809、74LS160等),一般只有知道它的时序图,并且要严格按照它的时序控制要求,才能实现其功能。这里举一个简单的例子,利用计数器74LS160构成一个一百进制的计数器。74LS160是一个十进制计数器,因此只要两个相串,即将低位的进位作为高位的时钟输入端或高位的控制输入端(EP、ET),就可以构成一个一百进制计数器,电路如图510所示。 图510直接相串构成的异步计数器 但直接连接后,计数过程是错乱的,其计数规律是: 08以前是按正常顺序进行计数的,后面将出现08→19→10,10→18也是正常的,后面将出现18→29→20等。其结果可由仿真波形得到进一步说明,如图511所示。 图511仿真波形 每次在个位计到9时,十位先完成了进位,这点可以在时序图中清楚地看出。图512所示为74LS160的时序图,时序图最下面一行是进位,发现进位是在刚计到9时,即产生了一个正脉冲输出,这个输出端无论是作为高位计数器的时钟输入还是控制输入,高位计数器在这个脉冲的作用下,都会自动加1,这才出现了上面不正常的计数规律。 图51274LS160的时序 解决这个问题的办法很简单,只要在低位进位输出端加一个反相器再接到后一级电路,100进制计数器就可正常计数了。其原理为: 低位每计到1001时C/B端输出变为高电平,经反相器后使高位片的CP端为低电平,下一个计数脉冲到达后,低位计成0000,C/B端跳回到低电平,经反相器使高位的CP端产生一个正跳变,于是高位计数器计入1。其电路图如图513所示。 图513一百进制计数器 计数器的时序图相对来讲还是比较简单,复杂的是一些控制或具有特定功能的芯片,这往往要结合CPU(如单片机)才能实现,如ADC0809。这一点将在单片机系统设计和调试中叙述。 5.4.2数字电路的抗干扰措施 数字电路输出信号电平转换过程中会产生很大的冲击电流,在供电线和电源内阻上产生较大的压降,使供电电压跳变,产生阻抗噪声(也称开关噪声),形成干扰源。在电子系统设计中,为了少走弯路和节省时间,应充分考虑并满足抗干扰性的要求,避免在设计完成后再去进行抗干扰的补救措施。前面对电子电路的干扰源及抗干扰措施作了说明,这里就数字电路再作具体的说明。 1. 冲击电流的产生 电路中的冲击电流对电路的正常工作状态会产生很大的影响,在数字电路中会出现致命的逻辑状态错误,因此要设法阻止冲击电流的出现。电路中会产生冲击电流的情况有以下两种。 (1) 输出级控制正负逻辑输出的管子短时间同时导通,产生瞬态尖峰电流。 (2) 受负载电容影响,输出逻辑由0转换至1时,由于对负载电容的充电而产生瞬态尖峰电流。瞬态尖峰电流可达50mA,动作时间为1~99ns。 2. 降低冲击电流影响的措施 针对上述两种情况产生的冲击电流,可以用下面两种方法来有效地降低冲击电流的影响。 (1) 降低供电电源内阻和供电线阻抗。 (2) 匹配去耦电容。 3. 何为去耦电容 在IC(或电路)电源线端和地线端加接的电容称为去耦电容。 4. 去耦电容的取值 去耦电容取值一般为0.01~0.1μF,频率越高,去耦电容值越小。 5. 去耦电容的种类 可用作去耦电容的种类很多,常用的有以下几种。 (1) 独石。 (2) 玻璃釉。 (3) 瓷片。 (4) 钽。 去耦电容在要求较高时不用瓷片电容和电解电容,因为它们的容值精度差、分布电感大,要选用比较精确的钽电容或者聚酯电容等。 6. 去耦电容的放置 去耦电容应放置于电源入口处,连线应尽可能短。对于噪声能力弱、关断时电流变化的器件和ROM、 RAM等存储器件,应在芯片的电源线和地线之间直接接入去耦电容。 5.5单片机系统调试 单片机系统开发调试应注意的问题。 1. 使用总线不外引的单片机 这种应用是最正统的单片机使用模式,符合小型、简单、可靠、廉价的单片机设计初衷。总线封闭的产品最可靠。 2. 使用C语言编程 C语言是简洁、高效又最贴近硬件的高级编程语言。20世纪90年代初,C语言就已成为专业水平的高级语言。当前厂商在推出新的单片机产品时纷纷配套C语言编译器。 3. 使用中、高档的单片机仿真工具 只有中、高档仿真工具才能仿真总线封闭式的单片机,仿真器必须使用bandout chip或hooks chip,应支持高级语言的调试,提供全数据类型的查看和修改,支持多家软件公司汇编和编译产生的目标代码格式,中档仿真器的起步要求是解决上述前3个难点和部分地解决第4个难点。高档仿真器则还有更高的要求。 中、高档仿真器的人机界面有4个档次: DOS下的简单命令行及批处理文件; DOS下的窗口命令行; Borland风格的DOS窗口菜单; Microsoft风格的Windows/Windows 95窗口菜单。 4. 集成开发平台 编辑、汇编/编译、连接/定位、调试、装入目标系统一条龙。 (1) 全屏幕编辑,就地修改,所见即所得; 跨文件整块剪贴技术; 彩色辨词正文等。 (2) 使用工程技术:一次将工程的全部源文件、头文件、用户库文件送入工程管理器,统一管理汇编/编译和连接/定位。 (3) 使用Make技术: 自动辨用汇编器/编译器; 每次调试循环仅做增量汇编/编译和连接/定位。 (4) 当有的文件被破坏,使用Build技术跳出Make循环,重新全面地进行汇编/编译和连接/定位。 (5) 错误和警告自动定位、明朗的错误自动修正。 (6) 扩展的运行类型(放开运行、动画式运行,遇光标终止、出函数前终止、出函数后终止)。 (7) 扩展的单步类型(指令单步、语句单步、函数单步)。 (8) 扩展的断点类型(指令断点、语句断点、循环断点、内容断点、条件断点)。 (9) 模拟器代替仿真器进行无目标机的虚拟调试。 本书所举例子尽量从以上4个方面考虑,但是考虑到初学者的条件限制,本书没有使用中、高档的仿真工具。 5.5.1单片机最小系统调试 基于单片机C8051F021最小系统见图44。读者可以自行制作此硬件,并在此硬件平台上做调试。制作时要注意以下几点。 (1) 晶振频率要选择11.0592MHz。 (2) 晶振边上电容器的容量要是30pF左右的高频电容。 (3) 因为应用于不用总线的结构,EA端要接高电平。 (4) 复位电路参数要满足C8051F021单片机的要求。 在本系统中,可外接L1~L4四个发光二极管。其中,L2发光二极管是电源指示作用,L3/L4是用户测试用的,L1是串口通信时指示用的。 建议在不能确定硬件是否正常时,用一块烧好测试程序的单片机测试本最小系统。测试程序如下。 ORG 0000H AJMPSTART ORG 0030H START:CLR P3.2 CLR P3.3 LCALL YS1S SETB P3.2 SETB P3.3 LCALL YS1S AJMPSTART YS1S:MOVR7,#80H YS12:MOVR6,#80H YS11:MOVR5,#0FFH YS10:NOP DJNZR5,YS10 DJNZR6,YS11 DJNZR7,YS12 RET END 5.5.2LCD显示屏调试 LCD选择金鹏电子的OCMJ4X8C中文模块,此模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供3种控制接口,分别是8位微处理器接口、4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。引脚说明见表52。所有的功能,包含显示RAM、字型产生器,都在一个芯片中,只要一个最小的微处理系统,就可以方便操作模块。内置2Mb中文字型ROM(CGROM)总共提供8192个中文字型(16×16点阵),16Kb半宽字型ROM(HCGROM) 总共提供126个符号字型(16×8点阵),64×16位字型产生RAM(CGRAM)。另外,绘图显示画面提供一个64×256点的绘图区域(RAMGDRAM),可以和文字画面混合显示。提供多功能指令: 画面清除(Display Clear)、光标归位(Return Home)、显示打开/关闭(Display on/off)、光标显示/隐藏(Cursor on/off)、显示字符闪烁 (Display Character Blink)、光标移位(Cursor Shift)、显示移位(Display Shift)、垂直画面卷动(Vertical Line Scroll)、反白显示(By_line Reverse Display)、待命模式(Standby Mode)。主要参数如下。 表52OCMJ4X8C引脚说明 引脚名称方向说明引脚名称方向说明 ①VSS—GND(0V)DB4I/O数据4 ②VDD—Supply Voltage For Logic(+5V)DB5I/O数据5 ③VO—Supply Voltage For LCD(悬空)DB6I/O数据6 ④RS(CS)IH:Data L:Instruction Code(chip enable for serial mode)DB7I/O数据7 ⑤R/W(STD)IH:Read L:Write(serial data for serial mode)PSBIH:Parallel Mode L:Serial Mode ⑥E(SCLK)IEnable Signal,高电平有效(serial clock)NC—空脚 ⑦DB0I/O数据0RSTIReset Signal,低电平有效 ⑧DB1I/O数据1NC—空脚 ⑨DB2I/O数据2LEDA—背光源正极(+5V) ⑩DB3I/O数据3LEDK—背光源负极(0V) (1) 工作电压(UDD): 4.5~5.5V。 (2) 逻辑电平: 2.7~5.5V。 (3) LCD驱动电压(Uo): 0~7V。 详细资料可以到金鹏电子网站http://www.gptlcm.cn 下载手册。按照图43连接的电路(注意将PSB接低电平,此时LCD屏为串行模式),测试程序如下。 建立一个新的空的工程,将下列代码输入到main.c文件并添加到工程中。此工程将作为今后的模板工作,这部分代码在后续工程中就不重复了。 #includereg51.h #includestring.h #includeintrins.h #define uintunsigned int #define uchar unsigned char unsigned char Lcd_Comm=0; unsigned char Lcd_Data=1; //函数声明 void Delay_Us(uint us);//延时子程序 void Delay_Ms(uint ms);//延时子程序 void W_1byte(uchar RW, uchar RS, uchar W_data); void Write_8bits(uint W_bits); void LCD_Init(void); //添加函数 sbit Lcd_Cs_Out =P1^0; //CS=RS sbit Data_Out =P1^1; //RW=SID sbit Sclk_Out =P1^2; //E=SCLK //============================================================= // 函数名: void Lcd_Write(uchar dat_comm,uchar content) // 输入参数: 1.命令字,2.将要写入的数据 // 输出参数: No // // 命令字格式: [5]-[XX0]---[4]---[4]---[4]---[4] //高4位 4个0低4位 4个0 //一共发送3B //============================================================= void Lcd_Write(unsigned char data_comm,unsigned char content) { unsigned char a,i,j,Del_us; a=content; Del_us=2; //根据不同的MCU延时间要调整 Lcd_Cs_Out=0; Sclk_Out=1; Data_Out=0; Delay_Us(Del_us); for(i=0;i5;i++)//发5个1 { Delay_Us(Del_us); Sclk_Out=0;//上升沿打入数据 Delay_Us(Del_us); Sclk_Out=1; } Data_Out=1; //打入RW位 RW=0 Delay_Us(Del_us); Sclk_Out=0;//上升沿打入数据 Delay_Us(Del_us); Sclk_Out=1; if(data_comm)Data_Out=0; //数据操作 RS=1 else Data_Out=1; //命令操作 RS=0 Delay_Us(Del_us); Sclk_Out=0;//上升沿打入数据 Delay_Us(Del_us); Sclk_Out=1; Data_Out=1;//打入一位0 补全为一个字节 Delay_Us(Del_us); Sclk_Out=0;//上升沿打入数据 Delay_Us(Del_us); Sclk_Out=1; for(j=0;j2;j++)//送两次,送2B(高4位有效) { for(i=0;i4;i++)//送高4位 { if(a0x7f) Data_Out=0; else Data_Out=1; a=a1; Delay_Us(Del_us); Sclk_Out=0;//上升沿打入数据 Delay_Us(Del_us); Sclk_Out=1; } Data_Out=1; //送低4位(4个0) for(i=0;i4;i++) { Delay_Us(Del_us); Sclk_Out=0;//上升沿打入数据 Delay_Us(Del_us); Sclk_Out=1; } Lcd_Cs_Out=1; Delay_Us(Del_us); } } //=================================================== // 函 数 名: voidLcd_Clr(void) // 函数功能: LCD清屏 // 输入参数: No // 输出参数: No //=================================================== void Lcd_Clr(void) { Lcd_Write(Lcd_Comm,0x30); Lcd_Write(Lcd_Comm,0x01); //清屏 Delay_Ms(1); } //=================================================== // 函 数 名: voidLcd_Clr(void) // 函数功能: LCD初始化 // 输入参数: No // 输出参数: No //=================================================== void Lcd_Init(void) { Lcd_Write(Lcd_Comm,0x30); /*30:基本指令动作*/ Lcd_Clr(); /*清屏,地址指针指向00H*/ Lcd_Write(Lcd_Comm,0x06); /*光标的移动方向*/ Lcd_Write(Lcd_Comm,0x0c); /*开显示,关游标*/ } //==================================================================== // 函 数 名: voidPrintf(uchar H1,uchar V1,uchar *chn,uchar Num) // 函数功能: 在指定的位置显示字符 // 输入参数: 1.开始行号,2.开始列号(单位为字即双字节), // 3.字串,4.显示字串中开始个数 // 输出参数: No //==================================================================== void Printf(unsigned char H1,unsigned char V1,unsigned char *chn,unsigned char Num) { unsigned char Pr[16]; unsigned char i; Lcd_Write(Lcd_Comm,0x30); //8位数据接口 for(i=0;iNum;i++) Pr[i]=chn[i]; if(H1==0) V1=V1+0x80; //第1行 else if(H1==1) V1=V1+0x90; //第2行 else if(H1==2) V1=V1+0x88; //第3行 else if(H1==3) V1=V1+0x98; //第4行 Lcd_Write(Lcd_Comm,V1); //设置DDRAM地址 for (i=0;iNum;i++) Lcd_Write(Lcd_Data,chn[i]); //本行显示 } void Delay_Us(uint us) {uint i; while(us--){ for(i=1;i5;i++) ; } } //==================================================================== //延时 //==================================================================== voidDelay_Ms(unsigned int ms) {unsigned int i; while(ms--) {for(i=0;i200;i++) ; } } //=======主函数======= void main() { SP = 0x60; LCD_Init(); Printf(0,2,"测试程序",8); Printf(3,0,"程序设计: 周云龙",16); while(1) { Delay_Ms(100); } } 程序运行后LCD显示屏上显示以下信息: 测试程序程序设计: 周云龙 5.5.3键盘调试 按图43将设计好的硬件与最小系统连接,用行扫描法编写软件。测试程序如下。 /**************************************** P1--0,1,2,3行 P1--4,5,6,7列 有键返回1,无键返回0 *****************************************/ unsigned char Key_Scan(void) { unsigned char Key; P1=0xf0 Key=P1; if(Key==0xf0)return 0;//无键 返回0 Delay(20); //消抖 Key=P1; if(Key==0xf0)return 0;//无键 返回0 return 1;//有键返回1 } /**************************************** 读键值返回键值0~15 xxx0,000x *****************************************/ unsigned charKey_Read(void) { uchar temp,Key=16; Delay_Us(20); if(Key_Scan()==0x00) P1=0xfe;//1111,1110 temp=P1; temp=(temp & 0xf0); if (temp==0xe0) Key=1; if (temp==0xd0) Key=2; if (temp==0xb0) Key=3; if (temp==0x70) Key=4; P1=0xfd; //1111,1101 temp=P1; temp=(temp & 0xf0); temp=(temp & 0x1e); if (temp==0xe0) Key=5; if (temp==0xd0) Key=6; if (temp==0xb0) Key=7; if (temp==0x70) Key=8; P1=0xfb; //1111,1011 temp=P1; temp=(temp & 0xf0); if (temp==0xe0) Key=9; if (temp==0xd0) Key=10; if (temp==0xb0) Key=11; if (temp==0x70) Key=12; P1=0xf7; //1111,0111 temp=P1; temp=(temp & 0xf0); if (temp==0xe0) Key=13; if (temp==0xd0) Key=14; if (temp==0xb0) Key=15; if (temp==0x70) Key=16; while(Key_Scan()==0x00); return Key ; } 在前面建立的工程中加入Key_Scan()和Key_Read()函数,并修改main()函数即可调试,main()函数修改如下。 //=======主函数======= void main() { uchar Disp[20]; SP = 0x60; LCD_Init(); Printf(0,2,"测试程序",8); Printf(3,0,"程序设计: 周云龙",16); Printf(1,0,"键值= ",6); while(1) { if(Key_Scan()) { Disp[18]=Key_Read(); Disp[0]=Disp[18]/16+0x30; Disp[1]=Disp[18]%16+0x30; Printf(1,3,Disp,2); } } } 程序运行后,LCD显示屏上显示以下信息。 测试程序; 键值= 01; 程序设计: 周云龙 5.5.4A/D转换接口调试 编写驱动TLC1549的程序,就是通过软件的方法控制P10、P11和P12,产生图4.12中的操作时序,完成一次A/D转换。使用C编写的采样函数如下。 1. 在C51模板中加入位变量声明 sbit AD_CS = P1^0; //TLC1549 片选信号 sbit AD_IOCLOCK = P1^1; //TLC1549 时钟信号 sbit AD_DATAOUT = P1^2; //TLC1549 数据输出信号 2. A/D转换函数 先添加TLC1549的函数声明。 uint Ad_Convert(void); 再编写相应的代码。 /************************************************************* AD转换函数 函数原型: uint Ad_convert(void); 功能: 驱动TLC1549完成一次A/D采样 返回值为AD转换结果,使用16b的uint型数据表示,低10位有效 *************************************************************/ uint Ad_Convert(void) { uchar i; uint AD_DATA = 0; AD_CS = 0; for(i=0;i=9;i++) { AD_IOCLOCK = 0; if(AD_DATAOUT == 1) { AD_DATA = AD_DATA * 2 + 1; } else { AD_DATA = AD_DATA * 2; } AD_IOCLOCK = 1; } AD_IOCLOCK = 0; AD_CS = 0; return(AD_DATA); } 3. 修改主函数 //=======主函数======= voidmain(void) { uchar Disp[20]; uint Adc1549; SP = 0x60; LCD_Init(); Printf(0,2,"测试程序",8); Printf(3,0,"程序设计: 周云龙",16); Printf(1,0,"AD转换值= ",10); while(1) { Adc1549= Ad_Convert() ;//读ADC Disp[0]=Adc1549/1000+0x30; Disp[1]=(Adc1549%1000)/100+0x30; Disp[2]=(Adc1549%100)/10+0x30; Disp[3]=Adc1549%10+0x30; Printf(1,6,Disp,4); Delay_Ms(10);//完成一次采样后要延时,等待下一次采样结果转换完成 } } 程序运行后,LCD显示屏上显示以下信息。 测试程序; AD转换值= 0000; 程序设计: 周云龙 5.5.5I2C总线接口的日历时钟芯片PCF8563接口 PCF8563 是 PHILIPS 公司推出的一款工业级内含I2C总线接口功能的具有极低功耗的多功能时钟/日历芯片,PCF8563的多种报警功能、定时器功能、时钟输出功能以及中断输出功能能完成各种复杂的定时服务,甚至可为单片机提供看门狗功能、内部时钟电路、内部振荡电路、内部低电压检测电路1.0V以及两线制I2C总线通信方式,不但使外围电路极其简洁,而且也增加了芯片的可靠性,同时每次读写数据后,内嵌的字地址寄存器会自动产生增量。作为时钟芯片 PCF8563也解决了2000年问题(千年虫问题),因而PCF8563是一款性价比较高的时钟芯片,已被广泛用于电表、水表、气表、电话、传真机、便携式仪器以及电池供电的仪器仪表等产品领域。 I2C总线是一双线串行总线,提供一小型网络系统,为总线上的电路共享公共总线上的器件、LCD驱动器及E2PROM等。两根双向线中,一根是串行数据线SDA,另一根是串行时钟线SCL,总线和器件间的数据传送均由这根线完成,每一个器件都有一个唯一的地址以区别总线上的其他器件。当执行数据传送时,主器件和从器件如表53所示,主器件是启动数据发送并产生时钟信号的器件,被寻址的任何器件都可看作从器件,I2C总线是多主机总线,意思是可以两个或更多地控制总线的器件与总线连接。 表53I2C总线名词解释 术语说明 发送器发送数据到总线上的器件 接收器从总线上接收数据的器件 主器件启动数据传送,并产生时钟信号的器件 从器件被主器件寻址的器件 多主器件一个以上的主器件能同时控制总线而不破坏信息 仲裁 一个以上的主器件同时控制总线时,只允许一个有效,从而保证数据不被破坏的过程 同步使两个或更多的器件的时钟信号同步的过程 图514开始/停止时序 总线上每一次数据传送都是由主器件发送起始信号开始,停止信号结束,其时序图如图514所示。对E2PROM而言从器件地址的前4位是固定的1010,接下来的3位标定器件的组合地址,以便知道哪一个2KB存储器被寻址,最后一位是读写位,1表示读命令,0表示写命令,如图515所示。 1010A2A1A0R/W 图515器件从地址 下面将介绍80C51微控制器对E2PROM进行字节写/任意地址读、页面写/连续地址读等模式的示例程序,本书以PCF8563为例说明I2C接口器件的调试方法。其接口电路如图516所示。读者可在万能板上焊接电路,用杜邦线连接最小系统进行调试。 图516PCF8563应用电路原理图 (C3=1~20pF) 1. 头文件编写 本例中接口配置为SCL接P1.6,SDA接P1.7,将PCF8563的代码编写到文件PCF8563.H,并在模块文件中包含此文件。 //================================================================= //PCF8563驱动程序 //作者: 周云龙 //时间: 2010年8月 //================================================================= sbitIIC_Scl=P1^6; sbitIIC_Sda=P1^7; unsigned char hou,min,sec; unsigned char bdata Zhou_B; sbit Err=Zhou_B^0; //================================================================== //开启PCF8563I2C // // SDA | // // SCL | // //================================================================== void Start_IIC() { IIC_Sda=1; IIC_Scl=1; IIC_Sda=0;//SCL为低,SDA执行一个上跳 IIC_Scl=0;//SCL为低,钳住数据线 } //================================================================= //关闭PCF8563I2C // // SDA |/----/ // // SCL/----/ //================================================================== void Stop_IIC() { IIC_Sda=0; IIC_Scl=1; IIC_Sda=1;//SCL为高,SDA执行一个上跳 IIC_Scl=0;//SCL为低,钳住数据线 } //=================================================================== //函数功能: 从I2C从器件接收一个字节 //作者: 周云龙 //时间: 2010年8月 //================================================================== unsigned char Receive_IIC_byte() { unsigned char cc; unsigned char number=0; IIC_Sda=1; for(cc=0;cc8;cc++) { number=1; IIC_Scl=0; _nop_(); IIC_Scl=1; //高电平后读数据 _nop_(); number= number|IIC_Sda; } return number; } //================================================================= //向I2C从器件发送1B (有应答-返回0无应答-返回0) //作者: 周云龙 //时间: 2010年8月 //================================================================ unsigned char Send_IIC_byte(unsigned char bb) { unsigned char aa,busy; IIC_Scl=0; for(aa=0;aa8;aa++) { if((bb&0x80)==0x80) { IIC_Sda=1;} //高位发给I2C器件 else { IIC_Sda=0; } IIC_Scl=1; IIC_Scl=0; bb=bb1; } _nop_(); _nop_(); IIC_Sda=1; IIC_Scl=1; if(IIC_Sda) { busy=1;} //没有应答信号,置忙 else //有应答信号,置正常 { _nop_(); _nop_(); IIC_Scl=0; busy=0; } return busy; } //以上是I2C共用部分 //============================================================= // 向PCF8563对应地址写数据 //作者: 周云龙 //时间: 2010年8月 //============================================================== void Pcf8563_Write(unsigned char Address,unsigned char Dat) { Err=0; Start_IIC();//I2C开始 if(Send_IIC_byte(0xa2))Err=1; if(Send_IIC_byte(Address)) Err=1; if(Send_IIC_byte(Dat)) Err=1; Stop_IIC(); //I2C停止 } //================================================================== //功能: 从指定的地址读数据 //作者: 周云龙 //时间: 2010年8月 //================================================================= unsigned charPcf8563_Read(unsigned char Address) { unsigned char Num; Err=0;//清错误信息标志 Start_IIC(); //I2C开始 if(Send_IIC_byte(0xa2)) Err=1; if(Send_IIC_byte(Address))Err=1; //发一个字节(字地址) Start_IIC(); //I2C开始 if(Send_IIC_byte(0xa3)) Err=1;//发从“从地址”读 Num=Receive_IIC_byte(); Stop_IIC(); //I2C停止 return Num; } 2. 主函数编写 (1) 添加包含文件。 #include "pcf8563.h"//PCF8563相关代码 (2) 主函数修改。 //=======主函数======= voidmain(void) { uchar Disp[20]; uchar Sec; SP = 0x60; LCD_Init(); Printf(0,2,"测试程序",8); Printf(3,0,"程序设计: 周云龙",16); Printf(1,0,"秒",8); while(1) { Sec=Pcf8563_Read(0x02); //从PCF8563读秒 Disp[0]=Sec/10+0x30; Disp[1]=Sec%/10+0x30; Printf(1,3,Disp,2); Delay_Ms(10);//延时 } } 程序运行后LCD显示屏上显示以下信息。 测试程序; 程序设计: 周云龙; 10秒