第三章 EPS系统硬件在环(HIL)测试基础
3.1 HIL测试系统架构
硬件在环测试,说白了就是把真实的EPS控制器(ECU)放到一个模拟的车辆环境里跑。你想想看,我们总不能每次改个参数就真去路上开一圈吧?那太危险了,也太费时间。
HIL系统的核心架构,我习惯把它分成三层:
- 实时处理器层:运行车辆模型,比如整车动力学、轮胎模型、电机模型。这一层决定了仿真跑得真不真。
- 信号调理与负载层:把处理器的数字信号转成EPS能识别的真实电气信号,比如扭矩传感器信号、电机电流、CAN/LIN总线信号。
- 故障注入层:模拟各种电气故障,比如短路、断路、电源跌落。嗯,这里要注意,故障注入是HIL测试的灵魂。
我记得有一次,我们在做某款SUV的EPS HIL测试。一开始模型跑得挺好,但一加上转向柱的摩擦力模型,系统就开始抖。后来发现是实时处理器的步长设得太大了,导致模型更新跟不上真实控制器的响应。所以,架构设计时一定要算好实时性预算。
关键点:HIL测试不是简单的“把ECU接上电脑”,而是构建一个闭环的、实时的、可重复的虚拟驾驶环境。
3.2 HIL测试设备选型
选设备这件事,我踩过不少坑。先说几个核心部件:
3.2.1 实时仿真平台
目前主流的有dSPACE、NI PXI、ETAS LABCAR。我个人习惯选dSPACE,因为它的模型库对EPS支持得比较好。但如果你预算有限,NI PXI配合VeriStand也是个不错的选择。
选型时主要看三点:
- 处理器性能:EPS模型通常需要1ms以内的步长,最好选多核处理器。
- I/O通道数:EPS系统至少需要:2路扭矩传感器模拟输入、1路电机电流模拟输入、2路CAN通道、6路数字I/O。
- 扩展性:我建议预留30%的通道余量,因为后期总会加测试项。
3.2.2 负载模拟单元
EPS的负载模拟是个难点。你需要模拟:
- 转向柱扭矩:用伺服电机模拟驾驶员手力
- 齿条力:用液压或电动缸模拟轮胎回正力矩
- 电机负载:用可编程电子负载模拟EPS电机的工作电流
我曾经在一个项目里,因为负载模拟单元的响应带宽不够,导致EPS的主动回正功能怎么调都调不好。后来换了高带宽的伺服电机,问题一下就解决了。所以,负载模拟器的带宽至少要达到100Hz以上。
3.2.3 故障注入单元
这个不能省。好的故障注入单元应该能:
- 模拟电源短路到地、短路到电池
- 模拟信号线对地短路、对电源短路
- 模拟CAN总线断线、CANH/CANL短路
- 模拟传感器信号漂移或卡滞
我的经验:选故障注入单元时,注意看它的切换速度。有些便宜的继电器切换时间要几十毫秒,根本模拟不了瞬态故障。我建议选固态继电器,切换时间在微秒级。
3.3 HIL测试环境搭建
环境搭建这件事,说起来简单,做起来全是细节。我按步骤来讲:
3.3.1 硬件连接
先把所有设备摆好。我习惯的布局是:
- 最上层放实时仿真机箱
- 中间层放信号调理板和故障注入板
- 最下层放负载模拟单元和电源
为什么要这样?因为信号线越短越好,干扰越小。我曾经见过一个团队,把仿真机箱和负载模拟器放得太远,结果信号线长了2米,扭矩传感器信号噪声大了整整一倍。
3.3.2 模型集成
把车辆模型下载到实时处理器里。这里有个坑:模型里不要用连续积分器,要用离散积分器,步长要和实时处理器匹配。
举个例子,一个简单的EPS电机模型:
// 离散化后的EPS电机模型
// 步长 T = 0.001s
float current = (voltage - back_emf) / R_motor;
float torque = Kt * current;
float speed = speed_prev + (torque - load_torque) / J_motor * T;
speed_prev = speed;
你看,这里用了前向欧拉法离散,简单够用。但如果你用连续积分器,实时处理器会报错,因为它在固定步长下没法精确积分。
3.3.3 信号标定与验证
模型跑起来后,第一步不是测功能,而是标定信号。我一般会:
- 用示波器看扭矩传感器信号,确认电压范围正确
- 用CANoe看CAN报文,确认ID和周期正确
- 用万用表测电源电压,确认没有压降
嗯,这里有个小技巧:在正式测试前,先跑一个开环的“信号回环测试”。就是让HIL发一个已知信号,然后看ECU返回的信号对不对。如果这一步都过不了,后面的测试全是白做。
警告:千万不要在没确认信号正确的情况下直接跑EPS的助力测试。我曾经见过一个案例,因为扭矩传感器信号极性接反了,HIL给ECU发的是“向左转”的信号,但ECU以为驾驶员在“向右转”,结果电机瞬间反向助力,差点把转向柱打坏。
3.3.4 自动化测试脚本
环境搭好后,最后一步是写自动化测试脚本。我习惯用Python配合HIL厂商的API:
# 一个简单的EPS助力测试脚本片段
import hil_api
# 初始化HIL
hil = hil_api.connect('PXI_Chassis_1')
# 设置车辆速度 60km/h
hil.set_signal('VehicleSpeed', 60)
# 设置驾驶员手力 5Nm
hil.set_signal('HandTorque', 5)
# 等待100ms让系统稳定
hil.wait(100)
# 读取EPS输出的助力扭矩
assist_torque = hil.get_signal('AssistTorque')
# 判断是否在范围内
if 4.5 < assist_torque < 5.5:
print("测试通过")
else:
print("测试失败,助力扭矩为:", assist_torque)
这个脚本虽然简单,但它是所有自动化测试的基础。我建议把每个测试用例都写成独立的函数,方便后期维护和复用。
3.4 小结
HIL测试环境搭建,说白了就是三件事:选对设备、连对线、跑对模型。但每一件事里都有无数细节。我做了这么多年,每次搭新环境还是会遇到新问题。所以,别怕犯错,但一定要把每次踩坑的经验记下来。
下一章我们会讲具体的EPS功能测试用例设计,到时候会用到今天搭的这个环境。嗯,先把基础打牢吧。