搞电机标定的兄弟看过来,今天给大家盘一盘这个MTPA+弱磁标定数据处理脚本。别看它就是个.m文件,实战中能省下你至少三天加班时间
新能源汽车电机标定数据处理脚本 mtpa,弱磁 电机标定数据处理脚本,可用matlab2021打开,用于处理电机台架标定数据,将台架标定的转矩、转速、id、iq数据根据线性插值的方法,制作两个三维表,根据转速和转矩查询id、iq的值。 并绘制id、iq曲线。 资料包含: (1)一份台架标定数据excel文件 (2)数据处理脚本文件id_iq_data_map.m,脚本带注释易于理解 (3)电机标定数据处理脚本说明文件 (4)处理后的数据保存为id_map.txt,iq_map.txt 脚本适当修改可直接应用于实际项目
先看原始数据长啥样——Excel里密密麻麻的转速、转矩、id、iq四列数据,像极了被台风刮过的停车场。我们的任务是把这些散点数据变成规整的三维查找表,让控制器能通过查表快速获取目标电流。
脚本第一关就是数据导入:
raw_data = xlsread('标定数据.xlsx'); % 这个路径建议改成绝对路径 rpm = raw_data(:,1); % 第1列是转速 trq = raw_data(:,2); % 第2列转矩 id = raw_data(:,3); % 你懂的 iq = raw_data(:,4); % 懂的都懂注意这里很多新手会踩的坑:原始数据单位不统一。遇到过转速用rpm和rad/s混搭的,直接导致三维表变成抽象派画作。所以拿到数据先Ctrl+F搜索单位符号。
接下来是重头戏——三维插值:
% 生成网格坐标 [grid_rpm, grid_trq] = meshgrid(1000:100:6000, 0:5:400); % 双线性插值 id_map = griddata(rpm, trq, id, grid_rpm, grid_trq, 'linear'); iq_map = griddata(rpm, trq, iq, grid_rpm, grid_trq, 'linear');这坨代码用meshgrid生成规整的转速-转矩网格,然后像拼乐高一样把原始数据填充进去。重点在griddata的'linear'参数,试过用'natural'插值,结果电流曲线直接表演杂技,还是线性插值最靠谱。
新能源汽车电机标定数据处理脚本 mtpa,弱磁 电机标定数据处理脚本,可用matlab2021打开,用于处理电机台架标定数据,将台架标定的转矩、转速、id、iq数据根据线性插值的方法,制作两个三维表,根据转速和转矩查询id、iq的值。 并绘制id、iq曲线。 资料包含: (1)一份台架标定数据excel文件 (2)数据处理脚本文件id_iq_data_map.m,脚本带注释易于理解 (3)电机标定数据处理脚本说明文件 (4)处理后的数据保存为id_map.txt,iq_map.txt 脚本适当修改可直接应用于实际项目
处理完别急着收工,可视化检查才是保命符:
figure('Name','id_map三维曲面') surf(grid_rpm, grid_trq, id_map); title('Id Map 三维分布'); xlabel('转速(rpm)'); ylabel('转矩(Nm)'); figure('Name','iq_map三维曲面') surf(grid_rpm, grid_trq, iq_map); title('Iq Map 三维分布'); xlabel('转速(rpm)'); ylabel('转矩(Nm)');运行后一定要360度旋转看看曲面有没有突刺或者塌陷。去年有个项目因为一个转速点数据异常,导致整个MAP出现断层,差点背锅。
最后导出txt给控制器用:
writematrix(id_map, 'id_map.txt'); writematrix(iq_map, 'iq_map.txt');注意这两个txt文件要用UTF-8编码,遇到过BOM头导致DSP解析异常的情况。建议导出后用Notepad++检查一下编码格式。
实际项目中有几个优化点:
- 原始数据量大的话,建议分区块处理防止内存爆炸
- 边缘数据用外插值补齐,但要做好安全限制
- 加入数据有效性校验,自动过滤异常点
这个脚本在Matlab2021上实测通过,但要注意有的老版本可能不支持writematrix函数,这时候可以改用dlmwrite代替。最后说句大实话——标定数据质量决定最终效果,脚本只是帮你省时间,该做的台架测试一个都不能少。
完整工程已上传GitHub(假装有链接),需要自取。遇到报错别慌,八成是文件路径没改对。有更好的实现思路欢迎来杠,反正我也不一定会改(狗头保命)。
