首页 > 汽车技术 > 正文

汽车电子中的debounce防抖机制

2025-06-07 12:05:57·  来源:汽车电子与软件  
 

01、debounce防抖机制介绍


debounce防抖机制既出现在车辆电子领域,也出现在互联网领域,是一种基本的信号平滑机制。

车辆电控的防抖机制旨在确保传感器信号稳定,避免因信号抖动引发系统误判,特别是故障诊断系统的误判。车辆行驶时,油门、刹车、方向盘、液位、振动NVH等传感器会产生高频信号,若直接传输至电控单元(ECU),可能导致执行器异常动作。为此,车辆采用硬件和软件双重防抖。硬件上,通过 RC 滤波电路等器件,衰减信号中的高频噪声;软件层面,则利用阈值判定、延时采样、滑动平均滤波等算法,设定信号有效范围,只有当信号变化超过阈值,或多次采样值一致时,才被认定为有效信号,从而保障 ESPABS 等关键系统接收到稳定可靠的信息,提升驾驶安全性与舒适性。

图片

图  matlab/simulink表达的一个防抖模块,来自mathwork文档


网页的防抖机制则是为优化高频事件触发而设计的前端技术。在网页交互中,窗口 Resize、输入框输入、按钮点击等操作可能短时间内多次触发函数,造成页面卡顿或服务器压力过大。网页防抖基于 Javascript 定时器(setTimeout)实现,当事件触发后,设置延迟时间,若延迟期内事件再次触发,便清除旧定时器并重新计时,直至延迟结束且无新触发时,才执行函数。其分为非立即执行和立即执行两种模式,适用于搜索框实时搜索、表单验证、按钮防重复提交等场景,有效减少资源消耗,提升用户体验。

所以在网络不佳或者计算机性能不佳时的暴力连击并无作用,只会执行一次。

虽然在不同领域都有涉及,但共同点是一样的,就是短时间内针对特定类型事件的一连串类似信号到达,每一个的信号强度或者持续时间又不足以构成足够强烈或者明确的判定阈值。debounce防抖机制就是做一个判官,根据规则来判断该类型的事件是否实际发生。


02、车辆电控中的防抖机制


车辆电控的防抖就是来一串信号忽明忽暗似有似无,判断到底是有还是没有。而这种判断规则相当的人为化,有的是根据强度,有的是根据时延(比如上一节),有的是强度和时间二者结合。

下面一个图判断规则就是信号强度和时延二者的结合。

图片

图 抖动的信号影响事件判断,图片来自网络


上图形象的说明了信号的若有若无忽明忽暗。在最上面一栏,信号除了两次(绿线)以外,都在在预失败prefailedprepassed预通过之间上下跳动,信号强度不够,可谓若有如无。

那么怎么判断事件到底是passed还是failed呢?从图中观察,是时延+强度的混合规则,具体规则如下:

如果预失败,且在t_failed时延内没有反方向转变,就认为是正式失败failed

如果预通过,但在t_passed时延没有转正成passed强度,还保持正式失败状态failed

如果预通过,但在t_passed时延没有出现预失败或者失败,也就是预通过持续的时间够长,超过t_passed时延,则转为正式通过状态passed

如果强度达到passed(图中第一栏从左往右第一条绿线),直接就是正式通过passed

如果强度达到failed((图中第一栏从左往右第二条绿线)),直接就是正式失败failed


比较正式地表述,在车辆电控系统中,防抖机制对于保障信号的稳定性与系统的可靠性运行起着至关重要的作用。信号抖动,通常是指在信号传输过程中出现的不稳定、不规则的波动现象,这种抖动如果不加以处理,可能会导致系统误判、执行错误指令等问题,严重影响车辆的性能与安全性。

目前,车辆电控中主要采用软件防抖、硬件防抖以及Autosa 的模块内置防抖这三种方式,各自有着独特的原理与应用场景。 

1、软件防抖 

软件防抖是通过编写特定的程序代码来实现信号防抖功能的一种方式。

其核心原理是利用软件算法对输入信号进行时间上的判断与处理。常见的软件防抖算法包括延时防抖和滤波防抖(根据强度防抖)。

延时防抖,顾名思义,是在检测到信号变化后,并不立即响应,而是先进行一段短暂的延时。在这段延时时间内,如果信号保持稳定,不再出现抖动,则认为该信号是有效信号,系统才会做出相应的处理;如果在延时期间信号再次发生变化,说明信号仍处于抖动状态,此时会重新开始计时,直到信号稳定下来。例如,在车辆的按键控制信号处理中,当驾驶员按下一个按键时,可能会由于按键的机械结构等原因产生短暂的抖动。通过延时防抖算法,设定一个合适的延时时间(如 10 - 20 毫秒),可以有效过滤掉这些抖动信号,确保系统只对稳定的按键按下操作做出响应。 

滤波防抖则是借鉴信号处理中的滤波原理,通过对连续多个信号采样值进行处理,来平滑信号,去除抖动成分。常见的滤波算法有均值滤波、中值滤波等。以均值滤波为例,它会在一定时间窗口内对多个信号采样值进行平均计算,将计算结果作为最终的有效信号。在车辆的传感器信号处理中,如车速传感器,由于路面颠簸等因素可能会导致传感器输出信号产生抖动,采用均值滤波算法,可以使车速信号更加平滑稳定,为车辆的动力控制系统、巡航控制系统等提供准确可靠的车速信息。

软件防抖的优势在于灵活性高,可以根据不同的应用场景和需求,方便地调整防抖算法和参数。同时,不需要额外增加硬件成本,只需在软件层面进行开发和优化。

当然,软件防抖也存在一定的局限性,由于需要执行算法和延时操作,可能会导致信号处理存在一定的延迟,对于一些对实时性要求极高的信号处理场景,可能不太适用。


2、硬件防抖 

硬件防抖是通过在电路中添加特定的硬件电路或器件来实现信号防抖功能的方式。常见的硬件防抖电路包括RC滤波电路、LC滤波电路,施密特触发器等。 

RC 滤波电路由电阻(R)和电容(C)组成,其原理是利用电容的充放电特性对信号进行平滑处理。电阻和电容类似于缓冲海绵,当输入信号发生变化时,电容会根据信号的变化进行充电或放电,由于电容的充放电需要一定时间,这就使得输出信号的变化变得相对缓慢,从而过滤掉信号中的高频抖动成分。在车辆的电子控制系统中,对于一些模拟信号,如温度传感器输出的模拟电压信号,可能会受到电磁干扰等因素产生抖动,通过在传感器与信号处理电路之间接入 RC 滤波电路,可以有效去除这些抖动,使输入到控制系统的信号更加稳定。 

图片

  πRC滤波电路,来自网络


LC 滤波电路是由电感(L)和电容(C)组合构成的滤波电路,属于无源滤波器 ,可对信号频率进行选择性筛选和衰减,广泛用于电源系统、通信设备、无线电接收机等领域。信号中的抖动往往表现为高频噪声或杂波。LC 滤波电路基于电感和电容对不同频率信号呈现不同阻抗的特性 。电感电流不能突变、电容电压不能突变。当信号受外界干扰瞬间,电感抑制电流突变,电容抑制电压突变 。以电机控制电路为例,电机启停产生电流冲击会造成信号抖动,LC 滤波电路能缓冲能量变化,稳定电路信号状态,起到防抖效果。

图片

图  LLC滤波电路,来自网络


施密特触发器是一种具有特殊电压传输特性的数字电路器件,它具有回差特性,即输入信号上升和下降时的触发阈值不同。当输入信号上升到一定阈值时,施密特触发器输出高电平;当输入信号下降到另一个较低的阈值时,施密特触发器输出低电平。这种回差特性使得施密特触发器能够有效抑制信号在阈值附近的抖动。在车辆的数字信号处理中,如车门开关信号、发动机点火信号等,利用施密特触发器可以将不规则的抖动信号转换为稳定的数字信号,便于后续的逻辑处理。

图片

图  斯密特触发器,来自网络


硬件防抖的优点是能够在信号进入系统之前就对抖动进行处理,实时性好,不会引入软件防抖可能带来的计算延迟。而且,硬件防抖电路一旦设计完成,其性能相对稳定可靠。但硬件防抖也存在一些缺点,例如需要额外增加硬件成本,占用电路板空间,并且硬件电路的设计和调整相对复杂,灵活性不如软件防抖。

最关键的,对车辆OEM,硬件防抖主要在于硬件选型,一般而言不会自己去修改硬件防抖,也就是改不动,除非OEM自身同时也是tier1供应商。


3Autosar的模块内置防抖 

AutosarAutomotive Open System Architecture,汽车开放系统架构)作为一种应用于汽车电子领域的开放式标准架构,旨在提高汽车电子系统的开发效率和软件的可重用性。它的介绍已经非常多。

图片

   ECU有无Autosar的直观对比,图片来自网络


Autosar的防抖机制本身也属于软件防抖,但太重要了,所以单独列出一栏。

Autosar中不少模块涉及防抖功能,为车辆电控系统的信号处理提供了标准化的解决方案。 

DEMDiagnostic Event Manager,诊断事件管理器)是被举例最多的带有防抖机制的模块,因为抖动的信号需要确认是否真的是故障。

DEM模块的防抖功能基于事件触发机制,它可以对各种诊断相关的信号或事件进行监控和防抖处理。在DEM 模块中,可以通过配置参数来定义防抖策略,例如设置防抖时间窗口、防抖计数器等。当信号发生变化时,DEM模块会根据预设的参数进行判断。如果在防抖时间窗口内信号状态多次改变,说明信号存在抖动,DEM模块不会立即触发相关的诊断事件;只有当信号在设定的时间窗口内保持稳定状态时,DEM模块才会确认该信号变化为有效事件,并触发相应的诊断动作。 

例如,在车辆的故障诊断系统中,当某个传感器检测到异常信号时,该信号会输入到 DEM模块。DEM模块利用其内置的防抖功能,对信号进行处理,避免因信号抖动而误触发故障诊断报警。通过合理配置DEM模块的防抖参数,可以有效提高故障诊断的准确性和可靠性。 

AutosarDEM模块内置防抖的优势在于它符合汽车电子行业的标准规范,便于不同汽车电子系统之间的集成和交互。同时,通过参数化配置的方式,既具有一定的灵活性,又能够保证在不同项目中的可重用性。此外,它与整个Autosar架构紧密结合,能够更好地与其他模块协同工作,实现对车辆电控系统的全面管理和诊断。在一些车辆发动机传感器故障检测场景中,通过合理配置DEM模块防抖参数,将误报率降低了30% - 40%

有好处也有成本,使用DEM模块内置防抖功能需要遵循Autosar的开发流程和规范,对于开发人员的技术要求相对较高,招人不容易,成本也高,开发和调试过程也相对复杂。

 Autosar 架构中,除了广为人知的DEM模块带有防抖机制外,还有其他一些模块在特定功能实现中涉及防抖相关处理,列举如下:

EthTSynEthernet Time Synchronization,以太网时间同步)模块:该模块用于确保分布式汽车系统中的精确时间同步。在同步过程中,它实现了消息防抖(也就是连续到达的同类消息只取一次有效)功能,避免高优先级消息阻塞低优先级消息。在汽车的高级驾驶辅助系统(ADAS)中,多个传感器数据需要精确时间同步,EthTSyn 模块的消息防抖功能可以优化网络带宽使用,确保时间同步消息稳定传输,进而保证摄像头、雷达等传感器数据时间一致性。在实际应用中,搭载该模块且启用消息防抖功能的车辆,ADAS 系统传感器数据融合错误率降低了 20% 左右,有效提升了系统性能。


图片

  Ethernet Time Synchronization以太网时间同步模块,图片来自网络

消息防抖的主要原理是消息过滤:可能采用时间窗口时延或计数器机制,在设定时间窗口内仅处理首次或最后一次有效时间同步消息,忽略中间冗余消息。

次要原理通过优先级队列动态调整消息处理顺序,结合超时机制释放阻塞资源。

复杂驱动(CDDComplex Device Driver)模块:当处理一些复杂硬件设备信号时,CDD 模块可能会采用防抖机制。例如在处理特殊传感器或执行器信号时,由于其工作环境复杂,信号易受干扰产生抖动。CDD 模块可通过设置采样窗口、进行状态比较、采用滑动平均或延时处理等方式来实现防抖。在某些高端车型的悬挂系统中,用于检测悬挂位置的特殊传感器信号经 CDD 模块防抖处理后,悬挂控制的稳定性得到显著提升,车辆行驶舒适性和操控性也得以改善。

DCMDiagnostic Communication Manager,诊断通信管理)模块

DEM 是数据生产者,生成并存储诊断事件数据(故障码、状态、环境信息)。

DCM 是数据传输通道,通过诊断通信协议(如 ISO-15765-2)将 DEM 的数据传递给外部诊断工具,或接收外部工具对 DEM 的操作指令(如清除故障码)。

其主要职责是处理诊断通信,在与外部诊断仪交互提供诊断通信服务(如 10、22 等服务),但在诊断数据流通过 CAN 驱动、CANIF 层、CANTP、PDUR 到达 DCM 模块的过程中,可能会受到各种干扰导致信号抖动。DCM 模块在某些情况下需要确保诊断数据的准确性和稳定性,也会采用一些防抖策略 。比如,在处理多帧诊断数据传输时,DCM 模块会对数据帧的连续性和稳定性进行检查,若出现信号抖动导致数据帧丢失或错误,它可能通过重传机制等方式来保障数据准确传输,一定程度上起到类似防抖的效果,确保诊断通信的可靠进行。


Autosar的资料浩如烟海,而且还在不断进化,涉及防抖机制的模块包括但不限于以上,其实几乎所有涉及判断和通信的模块都会涉及防抖。


03、基于AI的防抖的探究


介绍一种笔者团队正在探索的、基于神经网络的debounce新思路。

现在的debounce防抖规则,一般都是人为规则,比较硬性。

比如一个实际问题,PCU(动力域ECU)的供电不稳定,频繁出现电流过大或者过小,导致一晚上报几百次错误码,无论怎样调整强度阈值和时延阈值都是顾此失彼。最后为了减少报错次数,干脆把强度预置调高到安全范围以上,这样绝大多数电流抖动都不会报错,但是这是以烧坏器件风险为代价的。

类似的问题还有很多,仅仅是对debounce最优参数调参本身就构成一个现实的算法问题。而且人为调参尝试大量参数组合,这件事情就占用大量人力成本和试验成本。

所以我们希望并尝试引入一些软性的”debounce方法,类似于某种模式识别,识别信号序列的时间和强度模式,决定是否判定事件发生。

这种软性的模式识别是神经网络的长项。

考虑到信号序列是时空数据,也就是有至少时间和强度两个维度,有些情况下还有更多维度。我们采用了CNN卷积神经网络的形式来处理这种二维时空数据。

具体的,将时间和强度映射为二维矩阵(如时间为横轴,强度为纵轴),形状为 (时间步长, 1, 1)(单通道)。

考虑到嵌入式ECU宝贵的算力,我们目前采用了最简单的结构:

卷积层→ 池化层 → 全连接层 → 输出层。

也就是只有一个卷积+池化层,马上就是全连接层,而输出层只有两个神经元,用于输出判断结果yes或者no。目的是希望用卷积层提取局二维部特征(如强度随时间的变化趋势,信号前后的间隔长度等等)。

图片

图  卷积层示意图,右边表现的是卷积核权重共享,图片来自网络


图片


图  池化层示意图,包括最大池化和平均池化,图片来自网络


实际做法中,对于时间戳,我们进行了离散化。离散化是指对指定时间长度,比如3s,划分成100个均匀细密的时段(每个30ms),看每个时段内发生的信号强度是多少。

敏感的读者会问,如果30ms内接连发生两次信号,不止一次,怎么办?这是我们做了一个简化,就认为只发生了一次,取强度最大的信号作为代表,这也可以算是一种最大池化max pooling。当然,这里熟悉机器学习的人也可以做average pooling平均池化,取一个时段内多次信号(如果有的话)的平均值。两种做法都没有问题。

而且我们对划分时段的宽度是根据经验值,使得时段的宽度足够小,多数情况只会发生一次信号。


另外所有数据都经过归一化。

归一化是让时间戳的数量级和强度的数量级差不多,避免二者数量级相差太远效果不好。

训练数据来源是多专家打分,对每条训练数据,是把一定时间长度内的连续信号(时间和强度)给多个人看,人为根据经验判定passed或者failed,取意见占多数者作为train_label的取值。

后面我们会引入一些简单的注意力机制或者试着增加两层卷积+池化层,在不太增加算力需求的情况下看看能否进一步提高算法效果。


04、总  结

信号防抖debounce虽然不如车辆电子中各种高端技术那么显眼,比如自动驾驶,端到端大模型等等。但防抖属于底层原理,其重要性在于保证各类信号的正确判断,或者消除信道阻塞,或者消除不必要的重复执行。

对于从基础的故障诊断到目前最火的端到端并且结合大语言模型的自动驾驶技术方案,信号防抖debounce都起着底层支撑作用,属于基本功。

分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026917号-25