第1章:系统需求分析——功能需求与非功能需求
各位同学,咱们开始做车窗控制器。说实话,这个项目看着简单,但坑不少。我做了十几年嵌入式,见过太多人一上来就画原理图、写代码,结果做到一半发现需求没理清,推倒重来。嗯,今天咱们先把需求分析这块啃透。
1.1 功能需求:车窗到底要干什么?
车窗控制器,说白了就是让用户能控制玻璃升降。但你别小看这个功能,我当年在车厂做项目时,光升降逻辑就改了四版。咱们先拆解核心功能。
1.1.1 手动升降功能
这是最基础的功能。用户按住上升键,玻璃上升;松开,停止。下降同理。听起来简单?我在项目中遇到过一个问题:按键抖动导致玻璃一抖一抖的。后来加了20ms的消抖滤波才搞定。
- 上升控制:按键按下→电机正转→玻璃上升
- 下降控制:按键按下→电机反转→玻璃下降
- 停止控制:按键松开或到达极限位置→电机停转
1.1.2 一键升降功能
这个功能用户很喜欢。短按一下,玻璃自动升到底或降到底。你想想看,如果每次都要按住不放,多累啊。
实现逻辑其实不复杂:检测到按键按下时间超过300ms,就进入一键模式。但要注意,一键升降过程中,如果再次按下按键,要能立即停止。我习惯把这个叫「中断优先级」——用户操作永远最高。
// 伪代码示例:一键升降逻辑
if (key_press_time > 300ms) {
auto_mode = TRUE;
while (auto_mode) {
motor_run(target_direction);
if (key_press_again || position_limit || current_overload) {
auto_mode = FALSE;
motor_stop();
}
}
}
1.1.3 防夹功能
这是安全红线。国标GB 11552-2009规定,防夹力不能超过100N。我建议你设计时留余量,按80N做阈值。为什么?因为橡胶密封条老化后阻力会变大,你懂的。
防夹检测有两种主流方案:
- 电流检测法:电机电流与负载成正比。当电流超过阈值,判断为夹到物体。
- 霍尔传感器法:通过脉冲频率计算转速。转速骤降说明遇到阻力。
1.2 非功能需求:看不见但决定成败
功能需求是「做什么」,非功能需求是「做多好」。很多工程师只关注功能,结果产品出来要么反应慢半拍,要么几天就没电了。咱们一个个说。
1.2.1 实时性要求
车窗控制是实时系统。按键按下到电机响应,延迟不能超过50ms。为什么?人是有感知的,超过100ms就会觉得「卡」。我习惯用RTOS,任务优先级这样分配:
| 任务 | 优先级 | 最大响应时间 |
|---|---|---|
| 防夹检测 | 最高 | 10ms |
| 按键扫描 | 高 | 20ms |
| 电机控制 | 中 | 50ms |
| CAN通信 | 低 | 100ms |
你看,防夹检测必须最快。因为夹到小孩手指,0.5秒就可能造成伤害。这不是开玩笑的。
1.2.2 可靠性要求
车窗控制器要能扛住10万次升降测试。我见过最离谱的案例:某供应商的继电器在第3万次就卡死了。后来我们全换成MOS管驱动,寿命直接翻倍。
可靠性设计要点:
- 电源保护:加TVS管防浪涌,汽车电瓶电压波动范围是9V-16V
- ESD防护:人体接触按键,静电可能达到15kV,接口必须加ESD二极管
- 看门狗:MCU死机时,1秒内自动复位
1.2.3 功耗要求
汽车熄火后,车窗控制器进入休眠模式。静态电流不能超过100μA。为什么?因为车停一个月,电瓶不能亏电。我有个血的教训:某次设计忘了关掉LED指示灯,静态电流多了2mA,结果客户投诉「车停一周就打不着火」。
低功耗设计技巧:
- MCU进入Stop模式,用外部中断唤醒
- MOS管驱动电路,不工作时完全关断
- CAN收发器进入休眠模式,电流从30mA降到5μA
1.3 需求文档撰写:把话说清楚
需求文档是团队沟通的桥梁。我见过最烂的文档就一句话:「实现车窗升降功能」。这等于没说。好的需求文档要可测试、可验证。
我习惯用这个模板:
需求编号:REQ-WIN-001
需求名称:手动上升功能
描述:用户按下上升键时,车窗玻璃以100mm/s的速度匀速上升
验收标准:
1. 按键按下后50ms内电机启动
2. 玻璃上升速度误差不超过±10%
3. 到达顶部后自动停止,堵转时间不超过200ms
优先级:P0(必须实现)
你看,每个需求都有明确的验收标准。测试工程师拿到文档就能写测试用例。我曾经因为需求模糊,导致开发和测试扯皮了两个月。从那以后,我要求所有需求必须带「验收标准」这一项。
1.4 本章小结
咱们这一章把车窗控制器的需求拆得很细了。功能上,升降、防夹、一键升降一个不能少。非功能上,实时性、可靠性、功耗是硬指标。最后,文档要写得像法律条文一样清晰。
下一章,咱们开始选型——MCU用什么?电机驱动芯片选哪家?到时候我会分享一些选型时的踩坑经历。嗯,今天就到这里,有问题随时问我。