В этом примере анализируется распределение температур дискового тормоза. Дисковые тормоза поглощают поступательную механическую энергию посредством трения и преобразуют ее в тепловую энергию, которая затем рассеивается. Переходный тепловой анализ дискового тормоза является критическим, потому что эффективность трения и торможения уменьшается при высоких температурах. Поэтому дисковые тормоза не должны превышать заданный предел температуры во время работы.
Этот пример моделирует поведение диска в два этапа:
Выполните высокодетальную симуляцию тормозной колодки, перемещающейся вокруг диска. Поскольку вычислительная стоимость высока, эта часть примера симулирует только один половину вращения (25 мс).
Моделируйте полное торможение, когда машина едет со 100 км/ч до 0 км/ч за 2,75 секунды, а затем остается остановленной еще 2,25 секунды в порядок, чтобы позволить теплу в диске рассеяться.
Пример использует модель транспортного средства в Simscape Driveline™, чтобы получить временную зависимость рассеянной степени.
Симулируйте круговую тормозную колодку, перемещающуюся вокруг диска. Эта детальная симуляция за короткий временной шкала моделирует источник тепла как точку, перемещающуюся вокруг диска.
Во-первых, создайте тепловую переходную модель.
model = createpde('thermal','transient');
Импортируйте геометрию диска.
importGeometry(model,'brake_disc.stl');
Постройте график геометрии с метками граней.
figure pdegplot(model,'FaceLabels','on'); view([-5 -47])
Сгенерируйте мелкий mesh с малой целевой максимальной длиной ребра элемента. Получившийся mesh имеет более 130000 узлов (степеней свободы).
generateMesh(model,'Hmax',0.005);
Постройте график mesh.
figure pdemesh(model) view([0,90])
Задайте тепловые свойства материала.
thermalProperties(model,'ThermalConductivity',100, ... 'MassDensity',8000, ... 'SpecificHeat',500);
Задайте граничные условия. Все лица подвергаются воздействию воздуха, поэтому будет свободная конвекция.
thermalBC(model,'Face',1:model.Geometry.NumFaces, ... 'ConvectionCoefficient',10, ... 'AmbientTemperature',30);
Моделируйте движущийся источник тепла с помощью указателя на функцию, который определяет тепловую нагрузку как функцию пространства и времени. Для определения movingHeatSource
см. раздел «Функции теплового источника» в нижней части этой страницы.
thermalBC(model,'Face',11,'HeatFlux',@movingHeatSource); thermalBC(model,'Face',4,'HeatFlux',@movingHeatSource);
Задайте начальную температуру.
thermalIC(model,30);
Решить модель для временных шагов от 0 до 25 мс.
tlist = linspace(0,0.025,100); % Half revolution
R1 = solve(model,tlist)
R1 = TransientThermalResults with properties: Temperature: [132015×100 double] SolutionTimes: [1×100 double] XGradients: [132015×100 double] YGradients: [132015×100 double] ZGradients: [132015×100 double] Mesh: [1×1 FEMesh]
Постройте график распределения температуры на уровне 25 мс.
figure('units','normalized','outerposition',[0 0 1 1]) pdeplot3D(model,'ColorMapData',R1.Temperature(:,end))
The animation
функция визуализирует решение для всех временных шагов. Чтобы воспроизвести анимацию, используйте эту команду:
animation(model,R1)
Поскольку время диффузии тепла намного больше, чем период вращения, можно упростить источник тепла для долгой симуляции.
Теперь найдите температуру диска на более длительный период времени. Поскольку тепло не успевает диффундировать во время вращения, разумно аппроксимировать источник тепла со статическим источником тепла в форме пути тормозной колодки.
Вычислите тепловой поток, приложенный к диску, как функцию времени. Для этого используйте Simscape Driveline™ модель четырёхколёсного транспортного средства весом 2000 кг, которая тормозит от 100 км/ч до 0 км/ч примерно за 2,75 с.
driveline_model = 'DrivelineVehicle_isothermal';
open_system(driveline_model);
M = 2000; % kg V0 = 27.8; % m/s, which is around 100 km/h P = 277; % bar simOut = sim(driveline_model); heatFlow = simOut.simlog.Heat_Flow_Rate_Sensor.Q.series.values; tout = simOut.tout;
Получите зависящий от времени тепловой поток с помощью результатов модели Simscape Driveline.
drvln = struct(); drvln.tout = tout; drvln.heatFlow = heatFlow;
Сгенерируйте mesh.
generateMesh(model);
Задайте граничное условие как указатель на функцию. Для определения ringHeatSource
см. раздел «Функции теплового источника» в нижней части этой страницы.
thermalBC(model,'Face',11,'HeatFlux', @(r,s) ringHeatSource(r,s,drvln)); thermalBC(model,'Face',4 ,'HeatFlux', @(r,s) ringHeatSource(r,s,drvln));
Решить модель для времени от 0 до 5 секунд.
tlist = linspace(0,5,250); R2 = solve(model,tlist);
Постройте график распределения температуры на конечном временном шаге t = 5 секунд.
figure('units','normalized','outerposition',[0 0 1 1]) pdeplot3D(model,'ColorMapData',R2.Temperature(:,end))
The animation
функция визуализирует решение для всех временных шагов. Для воспроизведения анимации используйте следующую команду:
animation(model,R2)
Найдите максимальную температуру диска. Максимальная температура достаточно низкая, чтобы убедиться, что тормозная колодка работает должным образом.
Tmax = max(max(R2.Temperature))
Tmax = 52.2895
function F = movingHeatSource(region,state) % Parameters --------- R = 0.115; % Distance from center of disc to center of braking pad r = 0.025; % Radius of braking pad xc = 0.15; % x-coordinate of center of disc yc = 0.15; % y-coordinate of center of disc T = 0.05; % Period of 1 revolution of disc power = 35000; % Braking power in watts Tambient = 30; % Ambient temperature (for convection) h = 10; % Convection heat transfer coefficient in W/m^2*K %-------------------- theta = 2*pi/T*state.time; xs = xc + R*cos(theta); ys = yc + R*sin(theta); x = region.x; y = region.y; F = h*(Tambient - state.u); % Convection if isnan(state.time) F = nan(1,numel(x)); end idx = (x - xs).^2 + (y - ys).^2 <= r^2; F(1,idx) = 0.5*power/(pi*r.^2); % 0.5 because there are 2 faces end
function F = ringHeatSource(region,state,driveline) % Parameters --------- R = 0.115; % Distance from center of disc to center of braking pad r = 0.025; % Radius of braking pad xc = 0.15; % x-coordinate of center of disc yc = 0.15; % y-coordinate of center of disc power = interp1(driveline.tout,driveline.heatFlow,state.time); % Braking power in watts Tambient = 30; % Ambient temperature (for convection) h = 10; % Convection heat transfer coefficient in W/m^2*K Tf = 2.5; % Time in seconds %-------------------- x = region.x; y = region.y; F = h*(Tambient - state.u); % Convection if isnan(state.time) F = nan(1,numel(x)); end if state.time < Tf rad = sqrt((x - xc).^2 + (y - yc).^2); idx = rad >= R-r & rad <= R+r; area = pi*( (R+r)^2 - (R-r)^2 ); F(1,idx) = 0.5*power/area; % 0.5 because there are 2 faces end end