✅博主简介:本人擅长数据处理、建模仿真、论文写作与指导,科研项目与课题交流。项目合作可私信或扫描文章底部二维码。
- 随着汽车电子技术的快速发展,汽车电动化与自动化程度不断提升,用户对汽车安全性和舒适性的要求日益增高。国内汽车电动天窗配备占比逐年增加,中高档车型多为全景天窗且有一键开闭功能,国家强制标准要求有自动升窗必须带防夹功能。
- 国内对轿车车窗与天窗防夹控制研究起步晚,技术不成熟,国产汽车生产商多使用国外供应商产品。自研车窗与天窗防夹控制算法,既能打破国外垄断,又具巨大市场价值。虽车窗与天窗防夹控制类似,但因天窗装配方式不同及受汽车行驶和系统结构影响,控制算法需额外考虑。
(2)天窗防夹控制算法的设计过程
- 基于分治法算法将复杂问题简单化,分析系统结构影响与用户使用场景,进行控制决策树划分,得到冲击力防夹场景和缓增力防夹场景。
- 基于贪心法算法进行近似求解。针对汽车颠簸路面行驶易产生误防夹问题,深入研究天窗系统结构,分析天窗系统物理特性模态,构建天窗驱动拉索 KC 模型,得到系统瞬态与稳态控制模型,确立控制目标与约束条件。
- 针对冲击力防夹场景,求解电机瞬态特性状态方程,设计基于双路霍尔转速差的冲击力防夹算法;针对缓增力防夹场景,求解电机稳态特性状态方程,设计基于电流积分和单路霍尔转速差的缓增力防夹算法。
- 在系统结构层面,对天窗启动阶段、接触挡风杆、下倾段等区域基于整车控制分治法做防夹控制修正或屏蔽防夹控制。同时,为提高防夹算法对环境温度、供电电压、不同路面和天窗位置结构的适应性,进行防扰设计,增加系统控制鲁棒性。
(3)天窗防夹算法的实现与验证
- 基于域控制器集成设计要求,对天窗硬件电路和软件系统进行设计确认。采用比亚迪某车型天窗系统搭建测试台架,通过台架静态测试、台架耐久测试和实车动态路试对设计的天窗防夹控制算法进行验证。
- 试验结果表明,在天窗电机供电电压 9~16V 区间,环境温度从 -20~85℃,在天窗任意测试位置和任意测试路面工况下,测试的天窗防夹力均小于 100N,误防夹率为 0%,满足法规要求。说明基于冲击力防夹算法和缓增力防夹算法的天窗防夹算法能很好适应目前已知工况下的天窗防夹控制。
% 汽车行驶模拟
% 模拟时间序列
timePoints = linspace(0, 100, 1000); % 1000 个时间点从 0 到 100
% 初始速度
initialSpeed = 50; % 假设初始速度为 50 km/h
% 加速度变化函数(模拟加速和减速过程)
accelerationFunction = @(t) 2*sin(t/10) + 0.5; % 自定义加速度函数
% 速度计算
speed = initialSpeed;
speedHistory = zeros(size(timePoints));
for i = 1:length(timePoints)
speed = speed + accelerationFunction(timePoints(i)) * (timePoints(2)-timePoints(1));
speedHistory(i) = speed;
end
% 行驶距离计算
distance = cumtrapz(timePoints, speedHistory);
% 绘制速度随时间变化曲线
figure;
plot(timePoints, speedHistory);
xlabel('时间');
ylabel('速度(km/h)');
title('汽车速度随时间变化');
% 绘制行驶距离随时间变化曲线
figure;
plot(timePoints, distance);
xlabel('时间');
ylabel('行驶距离(km)');
title('汽车行驶距离随时间变化');
% 计算平均速度
averageSpeed = mean(speedHistory);
disp(['平均速度为:', num2str(averageSpeed), ' km/h']);
% 查找最大速度
maxSpeed = max(speedHistory);
disp(['最大速度为:', num2str(maxSpeed), ' km/h']);
% 确定速度超过特定值的时间点
targetSpeed = 80; % 假设目标速度为 80 km/h
exceedIndices = find(speedHistory > targetSpeed);
if ~isempty(exceedIndices)
firstExceedTime = timePoints(exceedIndices(1));
disp(['速度首次超过 ', num2str(targetSpeed), ' km/h 的时间为:', num2str(firstExceedTime), ' 秒']);
else
disp('速度未超过目标值。');
end