新奥集团 EHL-2 嵌入式硬件开发 面经
🕐 2026.08 | 新奥集团 EHL-2 嵌入式硬件开发(控制工程师实习生) | 视频面试
面试刚开始,视频那头一口气进来了五个人,HR 介绍说两个博士、两个硕士,一起面我一个双非本科。当时心里就一个念头——这阵仗,是来面试的还是来组会拷打的……
这场面试的形式比较特殊:提前自己选一个项目做成 PPT,面试当天屏幕共享讲解 + 技术追问。我选了实习期间做的 BMS 项目,从硬件架构一路讲到双 Bank OTA,中间面试官随时打断追问细节。
下面根据录音整理(录音只有自己的声音,面试官的问题是根据回答反推的)。
📋 面试结构
整场面试大约 25 分钟,分三个环节:
| 环节 | 时长 | 内容 |
|---|---|---|
| 自我介绍 + PPT 讲解 | 约 12~15 分钟 | 围绕 BMS 项目完整讲解 |
| 技术追问 | 约 8~10 分钟 | 针对讲解中的细节深挖 |
| 反问 | 约 3 分钟 | 两个问题 |
🎙️ PPT 讲解回顾
开场
郑州轻工业大学物联网工程大四学生,2027 年 6 月毕业。目前在浙江迈睿机器人有限公司实习,下周二离职。主要负责磷酸铁锂电池 BMS 固件开发。
硬件架构
- 48V 磷酸铁锂电池,15 串
- 主控:STM32G473RET6,利用双 Bank 模式做远程 OTA
- AFE:TI BQ76952,最大 16 串,采样精度 ±5mV
- 通信链路:BQ76952 → MCU(I2C),对上位机走双通道 485
- 存储:SPI Flash BY25Q32
SOC 估算
磷酸铁锂在 10%~90% 区间的电压平台几乎平坦,OCV 查表基本失效,所以以安时积分法(库仑计数)为主。
方法很简单:定时采样电流 × 时间间隔 → 累积电荷量 → 总容量减去已放电荷量 = 当前 SOC。静置超过 12 小时触发一次 OCV 查表校准。
在此基础上引入了扩展卡尔曼滤波(EKF):二阶等效模型由研究生同事搭建,我负责将实时电流/电压输入模型,结果纳入卡尔曼滤波计算。
还有一个多算法权重自适应的策略:安时积分和卡尔曼滤波各算一个结果,比对谁更接近真实值,动态提高准确方的权重、降低偏差方的权重。
最终 SOC 误差做到了 0.37%(PPT 上脑子一抽写了 5%,被问到的时候赶紧纠正了)。测试方式是新电芯充满 → 电子负载恒功率放电,只跑了 5 个完整循环。
SOH 估算
方法比较直接:充满电记录电荷量 → 放空 → 对比实际放出量与标称容量。
设了 97% 阈值:电池出厂就有衰减,低于阈值才触发 SOH 更新。这个阈值是参考网上资料定的。
保护系统(两级)
- 硬件级(BQ76952 内置):单体过/欠压、三级放电过流、短路、6 路温度过温/欠温 → 直接关断 MOSFET
- 软件级(MCU):检测 BQ 保护标志位并记录到 Flash;外加预保护机制——硬件欠压阈值 2.8V,软件设 2.9V 预警,发上位机无响应则 MCU 抢先保护
- 故障日志:维护 5 秒滚动缓冲区,故障时保存前 5 秒 + 故障瞬间 + 后 5 秒 = 共 11 秒数据
低功耗
MCU 选了 STOP2。不选 Standby(会重启丢失状态),不选 Sleep(功耗太高)。
三种唤醒源:RTC 3 分钟定时唤醒(唤醒后只开 I2C,检测到 >1A 电流则退出休眠)、485 比较器触发外部中断唤醒、按键唤醒。
BQ 深度休眠:单体 < 2.9V 且上位机无响应时,关闭 BQ 所有输出和 DC-DC。
双 Bank OTA
串口接收固件 → 写入备用 Flash Bank → 整体校验 → 校验通过切换 Bank 启动。
远程升级从 23 分钟压缩到 6 分钟,200+ 次现场升级无一变砖。
🔍 技术追问实录
FreeRTOS 任务优先级怎么排的?
从高到低:电池保护 → 串口通信(3 秒一次,频率低)→ SOC 数据采样 → SOC 计算 → 深度休眠。
为什么用互斥锁?考虑过死锁吗?
BQ76952 有密钥机制,要求 4 秒内连续两次写,期间不允许其他 I2C 操作。不加锁的话其他任务会插入 I2C 读操作,导致解锁失败。
目前没遇到死锁,但知道处理方式:获取锁时设超时自动放弃,以及优先级继承 / 可抢占机制。
NT Linux 和 ARM Linux 的区别?
这个不会。我只用过 ARM Linux,NT Linux 不了解。
卡尔曼滤波是你自己搭的吗?
如实说了:模型搭建是另一位研究生同事做的(实际上是AI),我负责数据输入和结果融合部分。
Linux 内核是自己裁剪的吗?
内核是公司其他人裁剪的,我只负责应用层驱动开发——在电池管理框架里分出一个类,写好接口给主控调用。设备树有了解,但目前电池不是直接挂主控的,是通过串口通信,没用到设备树。
设备树的概念讲解一下?
这个也不会。
参考答案
设备树(Device Tree)是一种描述硬件拓扑的数据结构,用于将硬件信息从内核源码中分离出来。它用 .dts(Device Tree Source)文件描述板级硬件信息(如外设地址、中断号、GPIO 等),编译为 .dtb(Device Tree Blob)后由 Bootloader 传递给内核。内核在启动时解析设备树,自动加载对应的驱动。这样同一套内核镜像可以适配不同的硬件板卡,只需更换设备树文件即可。
上位机有没有对数据做处理?
通过现场测试确定各项数据的合理区间和变化区间,采集值与历史值对比,超出合理变化区间的直接丢弃。
用过 C++ 吗?上位机用的什么数据结构存储数据?
上位机用 C++ 写应用层接口,主要是为了用 class 类来组织代码。数据存储方面直接用数组,没用链表或 STL 容器——电池数据从程序启动到结束一直存在不释放,数组最简单,也不会有内存泄漏的风险。
讲一下你最得意的一个功能
我选了参数配置模块。
所有电池配置参数写在一个 .h 头文件里:电芯容量、串数、温度传感器数量、化学体系(预留三元锂)等。MCU 初始化时读取配置同步到全局变量。换电池型号时改配置参数就行,不用动代码。
SOC 0.37% 的误差是怎么得到的?
电子负载恒功率放电测试,只跑了 5 个完整循环。单次耗时太久,加上还有其他任务,没来得及多测。
硬件是自己画的吗?
入职时硬件主板已经画好了,自己只做软件开发。
↩️ 反问环节
| 我的提问 | 面试官反馈 |
|---|---|
| 入职后能接触哪些方向?目前只做 Linux 应用层,很想学内核但没机会 | 以后可能会往内核方向发展,那时候能接触到 |
| 有导师带吗?现在公司基本没有导师,只有我和一个硕士生单干 | 每个人都有任务要做,很难有人带,只能自驱 |
🩹 暴露的问题
当场翻车
- PPT 数据写错:脑子一抽写了 5%,实际是 0.37%,被问到时赶紧纠正。数据本身没问题,PPT 上犯这种低级错误实在不应该。
- 测试样本太少:仅 5 个充放电循环,追问下去底气明显不足。
能力短板
| 维度 | 表现 |
|---|---|
| 算法理论 | 卡尔曼滤波模型是别人搭的,只会用不会推导 |
| 硬件设计 | 完全没参与原理图 / PCB |
| Linux | 仅应用层,内核裁剪和设备树不熟 |
| C++ | 回避 STL,只用 C 数组 |
| 测试 | 只做恒功率放电,没做过 HPPC、工况循环 |
💭 一点感受
这场面试整体还算顺利——PPT 讲解是自己做过的项目,讲起来比较有底气。技术追问环节,知道的都答上来了,不知道的也没有硬编,直接说不会或者如实说明”这部分是别人做的”。
比较明显的扣分点有两个:一个是 Linux 内核裁剪和驱动开发完全不会,另一个是测试循环太少,数据不够硬。都是硬伤,没什么好辩解的。
反问环节面试官说”每个人都有任务要做,很难有人带,只能自驱”。结合这个岗位 100~150 一天的薪资来看……两博两硕围着一个双非本科生拷打了半小时,开出来的价码还不如去奶茶店打工。我只能认为他们不是在招实习生,是在找黑奴。
