🕐 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 一天的薪资来看……两博两硕围着一个双非本科生拷打了半小时,开出来的价码还不如去奶茶店打工。我只能认为他们不是在招实习生,是在找黑奴。