破解诊断故障代码(DTC)

时间:2022-07-23 05:41:05

破解诊断故障代码(DTC)

如果您想了解计算机电控车辆的运作模式,也许本文就是一个开始学习的好地方――了解车载计算机是如何做出决定的。事实上,所有发生的一切都来自于神奇的“1”和“0”、打开或关闭、高或低、是或否。很简单,对吗?

三极管,由德・福雷斯特(Lee De Forest)在上个世纪初期发明,是第一个电信号放大器。基于真空管技术,三极管提供了电流的通或断的电路功能。现在,我们不再需要一个机械开关来控制电路,利用电压的作用就可以实现同样的结果啦,这种新的控制策略标志了现代电子技术发展的起始。

三极管是将电压从低电位转换到高电位的应用。曾经是早期电话、收音机和计算器技术发展的重要基础。在上世纪五十年代初期,一种基于半导体结构的新技术应运而生,使我们在需要低功率放大的情况下可用晶体管替换三极管实现这一功能。当该晶体管处于完全饱和状态时,能把一个电路接通或断开,由此可用于控制相关电路的工作或者将信息存储在电路中。

通过晶体管的开/关状态的不同组合,即表示为代表近零电压的低位(O)与代表电压源高电压的高位(1)的组合,可以实现信息在一个电路中的传输或存储。这种使用0和1的数字逻辑关系是采用布尔逻辑完成的。设置这种电路,可以把一个或多个逻辑输入组合为单一的逻辑输出。我们把这种电路称之为逻辑门(图1)。电控单元配置有多种逻辑门,其中包括:与门(AND gate)、与非门(NAND gate)、或门(OR gate)、或非门(NOR gate)、异或门(EXCLUSIVE OR gate)和同或门(EXCLUSIVE NOR gate)。

为了处理数据,要把很多逻辑电路相互结合使用。这些0和1组合可用于建立一个逻辑判定电路,而这个电路可用来以数字的格式传达信息。所有现代微处理器都采用数字逻辑电路处理数据。每个0或1称为一个位的信息,最大信息量的调用和存储只需运用两种可能的状态。这两个状态可能被定义为关或开、否或是、假或真。在计算机中。这两个状态被指定为0和1的二进制数字。使用四位组合传达信息,被称之为半字节;如果八位应用时,它被称为一个字节。

你也许很难理解,为何只使用两个状态的操作便能进行信息的传送及存储,但是你的确已经知道有这种系统。一个早期使用数字二进制位编码的例子就是以电子格式发送信息的电报,它使用的是莫尔斯电码。莫尔斯电码使用短音(0)或长音(1)的二进制的位传递数据。就是依靠操作这两个状态,电码允许传输或存储非常复杂的信息。

计算机使用二进制的代码或基2系统来传递信息。基2系统有时会使用很长的编码信息或位宽度,于是程序员想出了一个缩短此编码的方法,这种方法称之为基十六进制系统(图2)。它代替基于10的计数系统,如十进位制。十六进制的系统使用以16为基的计数规则来传递信息。在十六进制的系统应用中,我们使用数字0~9和字母A~F来对信息进行编码。你可以看到如图2所示的十六进制编码的读取示例,它是从发动机控制单元模块模式6数据中读取的。

无论是选择哪种方式的编码或语言来操作计算机,它都是基于一组由中央处理单元(CPU)执行的指令。CPU包含成千上万个晶体管和逻辑电路,它们被封装在一个很小的设计空间内,我们称之为集成电路(IC)。被封装的晶体管支持决策逻辑电路使用已编码的信息(也可称之为程序)进行操作,这些决策逻辑电路在操作执行该编码信息时,将会产生一个可以预测的输出结果。

由于结果可以预测。我们可以通过写入一个逻辑路径以获得期望的输出结果。CPU的任务是执行一系列存储的指令序列,正如某个程序所表示的那样。该程序将一层层地运行主指令,同时还要一层层地运行多个子程序、循环、条件和异常处理指令。CPU首先获得指令信息(取指令),对他们进行解码并执行批令,所有这一切都基于集成电路(IC)的物理层及程序控制流的进程调度。而计算机的集成电路和程序指令集的运作还要取决于控制器需要对当前的哪种电控系统进行电控管理,例如发动机管理系统、车轮防抱死控制系统、空调控制系统等。

无论何种控制系统类型的应用,程序将会协同CPU工作以帮助CPU去执行任务。第一项任务是启动控制和操作设备的基本程序。在其中一个子程序中。CPU将对其内部电路执行自检。自检的范围取决于程序员的决定,程序员会考虑针对有必要验证的设备运行进行相关的程序设计。而且这也是非常重要的。因为程序员设计电路自检基于一个电路中的有效性分析――什么是好的电路和什么原因可能会导致电路的运行失败。

要做到这一点,程序员可通过写入一组指令,允许设置检测点或阈值在定义的时间段内高于或低于设定的值。如果这些预定义的检测点超过这一范围,程序中的代码将显示状态值为“true”。相应的输出结果就是发出指令激活警告灯,并设置出相应的一个诊断故障代码(DTC)。如果测试程序用来检查CPU。我们可能读取到的DTC信息为“内部的失败”,这时诊断故障树会指导你更换控制单元。这里需要理解的是,系统指令也许并不能对下面所述的类似问题做出正确的解释:如有人将一个额外的保险丝或继电器放在备用的位置,或者由此原因可能引起的电路短路。因为这个额外的电路也许当前正申请使用与CPU相关的电源,由此可以使程序正在监控CPu内部电压产生相应的变化,在这种情况下,程序往往会设置一个虚假的DTC。

一旦该子程序内部电路自测已运行并通过,程序将启动下一个子程序,实现对它所控制系统基本电路的检测。每个子程序对它所要测试电路的特征都进行相应信息标记。这里给出的一个例子是P0122。P0122具有一个指令集,将以检查动力传动系统节气门位置传感器(TPS)持续时间1s的小于0.2V的电压作为程序标签。即如果检测点的电压低于0.2V达到1s,程序会设置状态值等于“true”,标记为P0122的DTC将被存储。

基于检测电路的需要,每个程序员对认为重要的电路编写程序指令集。电路测试根据时间条件设计检测点,而且要把检测点分配到每个单独的电路。这些检测点被编程为电路正常运行电压上方和下方的某个范围值。这些初始化测试的主要目的是找到在系统启动过程中产生严重故障的某个电路。如果一个电路在预定的时间段中检测设置点值与标准值不符,程序将设置状态等于“true”,并会采取通过适当的程序指令去执行应急模式运行。相应的。指令系统可能会在挂起列中设置DTC,或者设置一个真正的DTC,同时激活打开该车辆故障报警灯。

这里需要了解一个重要事项,有的电路在其操作运行范围内可能不能设置出相应的DTC。举个例子:当

TPS接地电阻产生了我们不想发生的电阻后,会导致传感器的电压值上升超过了溢出

模式设置点(图3)。在这种模式下,系统会在发动机启动时控制关闭喷油器的触发脉冲以使火花塞变干。但是,如果发动机当时不处在淹缸状态,这种不想发生的条件将会导致发动机无法启动的故障。相关程序指令控制如下:如果曲轴位置信号为启动状态等于“true”和TPS电压大于4.0V等于“true”,系统程序将设定为关闭燃料喷油器脉冲。此时,CPU将直接管理当前的数据。这时系统无法检查驾驶员的意图,它只检查实际的TPS电压和TPS电压是否在正确范围内。

在编写程序时,程序员并没有做出TPS信号将是无效的假设。也就是说,程序是在假设系统正常工作的前提下编写的。在CPU能够进行正确执行指令时,对于类似的真正故障(问题),DTC将可能不会作为“故障”去设置,一旦该子程序自测已完整地运行。测试进程可能会暂停,直至在下一个关键周期再执行,也可能是以连续循环的方式继续运行。

通过具有程序指令的逻辑电路接收输入信号,车辆行驶过程中,基本的程序将继续运行,用来实现对所控制设备的监控,由于这些指令基于特定的算法,因此可获得正确的输出。在设备的控制过程中,DTC子程序将动态地运行对电路、传感器和执行器工作状态的检查。

启用Arserlal标准

若要获得成功的DTC子程序测试的最高概率,需要应用这一启用标准,这是一种通过控制变量来控制测试结果的方式。正如在实验室里,为获得一致的结果,测试必须控制变量到最低限度范围,同时还要应用一套专门设定的程序。

启用条件为了实现这一目的,允许DTC子程序的运行仅在某些特定的条件下才有效。一旦所有条件都满足,DTC子程序才将被允许运行。例如,在对蒸发排放物控制系统(EVAP)中是否存在微小泄漏的监测上,此项监测是用DTCP0442来表示的。激活P0442故障码运行的启用条件可理解为:燃料箱液面大于15%、低于85%的状态等于“true”,环境温度大于30T(约-1℃)和小于95下(约35℃)的状态等于“true”。进气压力值大于70kPa的状态等于“true”。

既然该测试是关于燃料容器系统中的压力,可能会影响到系统内压力变化的所有条件都必须得到控制。当燃油箱满时,油箱内非液态区域变得很小,可能所感应的压力变化不是一个实际的泄漏,因此会设置一个虚假的DTC。当油箱为空时,油箱内的非液态区域变得非常大,也许所显示压力变化也并不是一个实际的泄漏。在这种情况下产生的DTC也将不按实际反映的故障进行设置。

如果环境温度低于30℃(-1℃),在燃油上方的气体可能缩小,所显示压力变化不是实际的泄漏,因此可能会设置一个虚假的DTC。如果环境温度高于95℃(35℃),燃料上方的气体可能会扩大,掩盖了实际泄漏的可能性。在此情况下,也将不能设置一个反映实际故障状态的DTC。

如果进气压力低于70kPa(高海拔),在泄漏因素存在的前提下,燃油系统和大气之间的压力将不足以改变在油箱内部的传感器压力,为此不可能设置一个DTC实际应用所应设置的内容。正如你所看到的,启用标准对于控制DTC子程序的检测输出结果,无疑是加强控制的一种方法。如此,在测试过程中最好要让所有可能状态条件都符合要求。

在服务于DTC检测故障树的开头仔细分析启用标准是非常重要的,它将显示哪些传感器适用于允许DTC子程序运行的条件。需要说明的是,如果相关传感器感应数值不准确,它可能在错误的时机使DTC测试运行,或者也许根本不可能运行测试。在前面的故障码P0442示例中,燃油箱液面位置、进气空气温度和进气歧管绝对压力传感器将被应用。如果燃油液位传感器运行不正常,在油箱满箱的情况下却表现出四分之三的燃油液面,泄漏监控系统则将允许DTC子程序运行,并会设置一个虚假的P0442故障码。

当一个DTC设置时,你必须检查相关线路。去查看哪些线路出现在控制器所涉及的范围内。若要设置一个DTC,CPU必须能够检查DTC子程序的输出结果。要实现此目的,相关电路必须连接到控制单元,基于此,程序员才可以用来检查测试的结果。这项工作同时适用于直接测试或间接测试。

在一个直接的测试中,被测试电路可以通过一种电子设备进行监视(例如A/D转换器,即模拟/数字转换器)。A/D转换器将一个模拟电压变化转变为用0和1组成的数字代码。cPU可以通过进行编程的方式以理解0和1在并行总线上的顺序。或者这些O和1数字的顺序为串行的转换器所读取识别,转换器可以处理此数据并将数据在串行线路发送给CPU。

CPU然后可以使用此信息确定在电路中的电压是否符合预期和正确地变化。直接测试的一个示倒是某个所要执行命令的变速器电磁阀被激活(图4)。一旦换挡的程序设定点执行,CPU指令将控制打开晶体管电磁阀驱动器使其参与工作。程序指令随即将检查电磁阀控制电路的电压状态是否已更改为所需要的数值。如果在规定的时间段内,电压值未在程序设定标准范围内变化,一个相关的DTC就会存储,此时系统同时会调用适当的指令进行应急处理。为了能够实现直接测试功能。电路板中必须设计具有物理层的A/D转换器,以形成对电路的监控。这就为控制器增加了一个额外的费用,事实上,并不是所有电路都需要这种额外的校验。

在一个间接进行变速器电磁阀激活测试(图5)的例子中,CPU命令晶体管驱动程序打开,然后CPU检查输入的速度传感器信息,并和接收到的输出速度传感器所反馈的信息进行比较。如果电磁阀激活已完成,输入和输出速度传感器之间的比率将转变为一个已知的系数。如果这个系数不在正确的设置标准范围内。则一个相关的DTC会被存储,此时,适当的指令集将会作为补正措施而执行。对于间接测试设计,用于检查输入和输出速度传感器的物理层已设计在电路板上,因此附加控制器的开支是不必要的。对于这样的电路设计,扫描工具将只显示命令执行的状态。而不能显示工作状态真实的发生,了解这一点还是较为重要的。

直接或间接电路测试的另一个例子是P0135氧传感器加热电路故障。如果氧传感器加热电路直接连接到控制单元,依靠与加热线路并联的A/D转换器,监测系统可直接用于检查当前的电路(图6)。此测试电路允许发生电路上的电压降,A/D转换器由此可以直接读取到与当前电流成正比的电压数值。现在,程序员可以编写一个指令集,将此电压从A/D转换器转换为一个用安培数所读取的数值。如果此电压不在程序设定范围内,将会有一个DTC故障的存储。在氧传感器加热电路间接读数的情况下,并没有加热器电路导线连接到控制单元(图7)。加热器电路接地线直接连接到地面,加热器电路电源线也直接由点火开关电路或继电器盒提供。

当你检查线路图,可看出与DTC关联的布线未直接连接到控制单元。但你必须寻找能直接向CPU传达信息的线路。对程序员来讲,编写的DTC子程序指令的前提是相关电路必须连接到可用于获取DTC信息的控制单元。而对于P0135故障码的测试监控,在控制单元内部,CPU需要设计有一个电路用来向氧传感器信号线提供偏置电压。当二氧化锆氧传感器感应头处于冷态时,其电阻阻值大于100MΩ,而当传感器被加热到700℃(约370℃)时,电阻值将下降到不足100Ω。

这种传感头的电阻值变化可用于检查加热器电路的操作,方式为:给电控单元内部的一个非常大的电阻提供一个稳定的电压,而且大电阻要与传感器电路串连。这就意味着创建了一个分压电路。控制单元内部的电阻是固定的,而随着氧传感器的加热,传感头的电阻则是变化的。如果加热电路工作正常,它加热温度传感头,从而改变了传感头的阻值。随着传感头电阻值的下降,相应的在控制单元内部电阻与传感头之间的电压也下降。程序员可以编写一个相关运行DTC子程序的指令集,用以检查内置固定电阻和传感头之间的电压变化是否在设置的时间段内超出范围。基于此,在没有直接将线连接到CPU的状态下,我们也能够实现对氧传感器加热电路进行检查和监控。

综上所述,了解车载计算机控制系统运行背后的数字逻辑是非常重要的,它能帮助我们快速而准确地修复故障车。

上一篇:电子控制节气门系统结构与维修 下一篇:全国掀起空调维修比赛热潮等