
电驱动汽车的最佳动力性和最佳经济性换挡曲线的绘制电驱动变速箱换挡点选择是个挺有意思的活。咱们今天不扯那些高深理论直接上手玩玩数据。拿某款双电机电驱系统来说先搞到它的扭矩特性曲线——这事儿得实测不过咱们先用多项式拟合凑合着用。import numpy as np import matplotlib.pyplot as plt rpm np.linspace(0, 12000, 100) torque 300 - 0.002*(rpm-4000)**2 # 峰值在4000转 plt.figure(figsize(10,4)) plt.plot(rpm, torque) plt.title(电机扭矩特性曲线) plt.xlabel(转速 (rpm)) plt.ylabel(扭矩 (Nm)) plt.grid(True)这曲线看起来像个抛物线对吧其实真实电机的扭矩衰减可能更复杂但咱们先拿这个说事儿。重点是这个扭矩平台区直接决定车辆加速能力。电驱动汽车的最佳动力性和最佳经济性换挡曲线的绘制接下来要算不同挡位下的轮边驱动力。假设咱们变速箱有三个挡位gear_ratios [3.8, 2.4, 1.6] # 减速比 wheel_radius 0.35 # 轮胎半径 def wheel_force(torque, gear): return torque * gear_ratios[gear] / wheel_radius # 计算各挡位轮边力 force_gear0 wheel_force(torque, 0) force_gear1 wheel_force(torque, 1) force_gear2 wheel_force(torque, 2)这时候画个驱动力-车速图就能看出门道了。注意车速要和转速换算# 转速转车速m/s speed rpm * 2 * np.pi * wheel_radius / (gear_ratios[0]*60) # 按一挡换算 plt.figure(figsize(10,4)) plt.plot(speed, force_gear0, label1挡) plt.plot(speed*gear_ratios[0]/gear_ratios[1], force_gear1, label2挡) # 挡位换算 plt.plot(speed*gear_ratios[0]/gear_ratios[2], force_gear2, label3挡) plt.legend() plt.title(各挡位驱动力曲线) plt.xlabel(车速 (m/s)) plt.ylabel(驱动力 (N))这时候驱动力曲线的交叉点就是潜在换挡点。但别急着下结论动力性换挡要保证换挡前后加速度不下降。咱们得算加速度vehicle_mass 1800 # 整车质量 acceleration force_gear0 / vehicle_mass # 仅算一挡示例经济性那边更复杂得考虑电机效率MAP。咱们造个伪效率矩阵# 创建效率MAP转速 vs 扭矩 eff_rpm np.linspace(1000, 12000, 13) eff_torque np.linspace(50, 300, 6) efficiency np.random.rand(13,6)*0.3 0.7 # 70%-100%效率 # 插值函数 from scipy.interpolate import interp2d eff_func interp2d(eff_torque, eff_rpm, efficiency, kindlinear)这时候要找每个车速下的最小能耗点。上循环暴力搜索def find_optimal_gear(speed): min_power float(inf) best_gear 0 for gear in range(3): rpm speed * gear_ratios[gear] / (2*np.pi*wheel_radius) * 60 req_torque ... # 根据行驶阻力计算 eff eff_func(req_torque, rpm) power req_torque * rpm * (1/eff) # 考虑效率的功率消耗 if power min_power: min_power power best_gear gear return best_gear最后把两种换挡曲线画在一起能看到动力型换挡点普遍比经济型晚。实际工程中还要做大量平滑处理毕竟不能让变速箱来回跳挡。有个取巧的办法是给经济性曲线加个滞后量hysteresis 3 # km/h滞后量 current_gear 0 shift_speed [] for speed in np.arange(0, 160, 0.5): suggested_gear find_optimal_gear(speed/3.6) if suggested_gear current_gear and speed shift_speed[-1]hysteresis: current_gear 1 elif suggested_gear current_gear and speed shift_speed[-1]-hysteresis: current_gear -1 shift_speed.append(current_gear)这法子虽然简单粗暴但实测能避免大部分不必要的换挡。最后提醒一句实际标定得在转鼓试验台上反复验证毕竟仿真和实车之间差着十几个版本的软件呢。