Этот пример анализирует температурное распределение дискового тормоза. Дисковые тормоза поглощают поступательную механическую энергию посредством трения и преобразовывают его в тепловую энергию, которая затем рассеивается. Переходный тепловой анализ дискового тормоза очень важен, потому что трение и тормозная характеристика уменьшаются при высоких температурах. Поэтому дисковые тормоза не должны превышать данный температурный предел во время операции.
Этот пример симулирует поведение диска на двух шагах:
Выполните очень подробную симуляцию тормозной колодки, перемещающей диск. Поскольку вычислительная стоимость высока, эта часть примера только симулирует одну половину оборота (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 имеет больше чем 130 000 узлов (степени свободы).
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
функционируйте, смотрите раздел Heat Source Functions в нижней части этой страницы.
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);
Постройте температурное распределение на уровне 25 мс.
figure('units','normalized','outerposition',[0 0 1 1]) pdeplot3D(model,'ColorMapData',R1.Temperature(:,end))
animation
функция визуализирует решение, навсегда продвигается. Чтобы проигрывать анимацию, используйте эту команду:
animation(model,R1)
Поскольку время диффузии тепла намного более длительно, чем период оборота, можно упростить источник тепла для долгой симуляции.
Теперь найдите температуры диска в течение более длительного промежутка времени. Поскольку тепло не имеет времени, чтобы рассеяться во время оборота, разумно аппроксимировать источник тепла статическим источником тепла в форме пути тормозной колодки.
Вычислите тепловой поток, применился к диску в зависимости от времени. Для этого используйте модель Simscape Driveline™ четырехколесного, 2 000-килограммового транспортного средства, которое тормозит от 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
функционируйте, смотрите раздел Heat Source Functions в нижней части этой страницы.
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))
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 % Braking power in watts power = interp1(driveline.tout,driveline.heatFlow,state.time); 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