2、功能需求梳理:车门控制的核心功能

好,咱们进入第二讲。上一章我们聊了车门控制系统的整体架构,今天要做的,是把那些抽象的功能需求,一个一个掰开揉碎了看。

说白了,就是搞清楚:用户到底想让车门干什么?

我个人习惯,在写一行代码之前,先画一张用户场景的草图。你想想看,一个司机靠近车门,他脑子里想的是「我要开门」,而不是「我要给CAN总线发个报文」。所以,我们得从人的视角出发,再翻译成机器的语言。

2.1 核心功能一:解锁与闭锁

这是最基础的功能,但坑也最多。

解锁,不只是「啪」一声弹开锁销。它分好几种场景:

  • 遥控解锁:钥匙在3米内,按一下,四门全开。我遇到过一个问题,有些车主喜欢只开驾驶门,其他门保持锁闭——这叫「分级解锁」。
  • 无钥匙进入:手拉门把手,系统检测到钥匙在1.5米内,自动解锁。这里有个细节:拉门把手这个动作,是触发信号,不是机械力。
  • 碰撞自动解锁:发生碰撞后,气囊弹出,车门必须自动解锁。这是法规要求,也是救命的设计。

闭锁相对简单,但要注意防夹。嗯,这里要特别提一下:

避坑指南:我曾经在一个项目中,闭锁信号和车窗防夹信号共用了同一个GPIO中断。结果呢?锁车时车窗刚好在上升,防夹误触发,车窗又降下来了。车主锁车锁了半天锁不上,气得投诉。后来我学乖了,所有信号必须独立引脚,或者用带优先级的中断控制器。

解锁/闭锁的状态机,我一般这么画:

状态:LOCKED → UNLOCKED
触发条件:
  - 遥控钥匙信号(RF接收)
  - 门把手触摸传感器(电容式)
  - BCM(车身控制器)的CAN指令
输出动作:
  - 驱动门锁电机(正反转)
  - 反馈状态给仪表盘(LED指示灯)

2.2 核心功能二:车窗升降

车窗控制,说白了就是控制直流电机的正反转。但真正做起来,你会发现细节多到让人抓狂。

手动模式:按住按钮,车窗动;松开,停。这个简单,用PWM控制速度就行。

自动模式:按一下,车窗一键升到底或降到底。这里需要霍尔传感器来检测位置,或者用电流检测法判断堵转。

防夹功能:这是法规强制要求的(比如美国FMVSS 118)。当车窗上升时,如果检测到阻力超过阈值(比如100N),必须立即反转下降。

我的经验:防夹的阈值设定很讲究。设得太低,冬天车窗结冰,一升就触发防夹,车窗下不来;设得太高,真夹到小孩手指,又起不到保护作用。我一般建议用动态阈值——根据车速、温度、车窗位置自动调整。比如车速高时,阈值可以放宽一点,因为风阻本身就大。

车窗控制的时序,我整理了一个表格:

模式 触发方式 电机动作 反馈信号 注意事项
手动上升 按钮持续按下 正转,PWM调速 位置传感器计数 松开即停
自动下降 按钮短按一次 反转,全速 霍尔脉冲计数 到底后自动停止
防夹反转 电流突变或霍尔脉冲异常 立即反转100ms 故障码记录 反转后需重新校准

2.3 核心功能三:后视镜折叠

后视镜折叠,看起来是个小功能,但它的机械结构决定了——不能硬来

后视镜内部有一个微型直流电机,通过蜗轮蜗杆减速,带动镜片折叠。电机堵转时,电流会飙升。所以控制逻辑很简单:

  • 折叠指令:电机正转,直到堵转(电流超过阈值),停止。
  • 展开指令:电机反转,同样检测堵转。
  • 手动调节:镜片角度调节,用步进电机或微型伺服。

关键点:后视镜折叠的堵转检测,不能靠软件延时。我曾经见过一个方案,用定时器硬等3秒,结果冬天润滑油凝固,电机转不动,3秒内电流一直超标,直接把驱动芯片烧了。正确做法是:实时监测电流,一旦超过阈值(比如1.5A),立即切断电源。

另外,后视镜折叠还有一个「记忆位置」的功能。用户调整好角度后,系统把位置参数存到EEPROM里。下次上车,一键恢复。这个功能在高端车上很常见,但实现起来也不复杂——就是多存几个字节的事。

2.4 用户场景分析

功能列完了,咱们得想想:用户到底在什么情况下会用这些功能?

场景一:日常上下车

  • 靠近车辆 → 无钥匙解锁 → 拉开车门 → 坐进去 → 按启动键
  • 下车 → 关门 → 触摸门把手锁车 → 后视镜自动折叠(可选)

这个场景里,解锁和闭锁是高频操作。我建议把解锁的响应时间控制在200ms以内,不然用户会感觉「卡了一下」。

场景二:高速行驶

  • 车速超过120km/h → 自动闭锁所有车门(安全考虑)
  • 驾驶员想开窗通风 → 只能开一条缝(防夹功能必须启用)

这里有个细节:高速时车窗开太大,风噪会很大,而且影响气动性能。所以有些车会限制车窗下降幅度,比如最多降30%。

场景三:雨天/洗车

  • 下雨天 → 车窗自动关闭(如果检测到雨量传感器信号)
  • 洗车时 → 后视镜必须折叠,不然容易被高压水枪冲坏

嗯,这个场景我踩过坑。有一次,洗车工不小心碰到了车内解锁按钮,车窗降下来了,水直接灌进车门内部,导致升降电机短路。后来我们在软件里加了一个「洗车模式」——锁车状态下,所有车窗按钮失效,只有钥匙遥控才能操作。

场景四:紧急情况

  • 发生碰撞 → 自动解锁 + 车窗自动下降(方便逃生)
  • 车辆落水 → 车窗自动下降(电子系统还能工作时)

这个功能,说实话,平时用不到,但一旦用到就是救命。我建议在BCM里单独留一个「紧急解锁」的硬件通道,不依赖主MCU,直接用逻辑门电路触发。

2.5 功能优先级与冲突处理

功能多了,难免打架。比如:

  • 用户正在手动升降车窗,突然收到防夹信号,谁优先?
  • 后视镜正在折叠,又收到展开指令,怎么办?

我的处理原则很简单:安全功能 > 用户操作 > 自动功能

举个例子:

  • 防夹信号来了,不管用户按没按按钮,车窗必须反转。
  • 后视镜折叠过程中,如果检测到障碍物(比如有人用手挡住),立即停止并反转。

这些优先级,在状态机设计阶段就要定好。我习惯用一张表格来记录:

功能 优先级 冲突处理策略
碰撞自动解锁 最高 强制解锁,忽略所有其他指令
防夹 立即反转,用户操作暂停
用户手动操作 正常执行,但可被高优先级打断
自动折叠/展开 可被用户操作覆盖

好了,功能需求梳理到这儿。下一章,我们会把这些需求转化成具体的硬件选型和接口定义。到时候,我会拿一个实际项目中的原理图出来,咱们一起分析。

记住一句话:需求梳理得越细,后面写代码越顺。别急着动手,先把场景想清楚。