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 功能优先级与冲突处理
功能多了,难免打架。比如:
- 用户正在手动升降车窗,突然收到防夹信号,谁优先?
- 后视镜正在折叠,又收到展开指令,怎么办?
我的处理原则很简单:安全功能 > 用户操作 > 自动功能。
举个例子:
- 防夹信号来了,不管用户按没按按钮,车窗必须反转。
- 后视镜折叠过程中,如果检测到障碍物(比如有人用手挡住),立即停止并反转。
这些优先级,在状态机设计阶段就要定好。我习惯用一张表格来记录:
| 功能 | 优先级 | 冲突处理策略 |
|---|---|---|
| 碰撞自动解锁 | 最高 | 强制解锁,忽略所有其他指令 |
| 防夹 | 高 | 立即反转,用户操作暂停 |
| 用户手动操作 | 中 | 正常执行,但可被高优先级打断 |
| 自动折叠/展开 | 低 | 可被用户操作覆盖 |
好了,功能需求梳理到这儿。下一章,我们会把这些需求转化成具体的硬件选型和接口定义。到时候,我会拿一个实际项目中的原理图出来,咱们一起分析。
记住一句话:需求梳理得越细,后面写代码越顺。别急着动手,先把场景想清楚。