Main Content

Thermal Analysis of Disc Brake

This example analyses the temperature distribution of a disc brake. Disc brakes absorb the translational mechanical energy through friction and transform it into the thermal energy, which then dissipates. The transient thermal analysis of a disc brake is critical because the friction and braking performance decreases at high temperatures. Therefore, disc brakes must not exceed a given temperature limit during operation.

This example simulates the disc behavior in two steps:

  • Perform a highly detailed simulation of the brake pad moving around the disc. Because the computational cost is high, this part of the example only simulates one half revolution (25 ms).

  • Simulate full braking when the car goes from 100 km/h to 0 km/h in 2.75 seconds, and then remains stopped for 2.25 more seconds in order to allow the heat in the disc to dissipate.

The example uses a vehicle model in Simscape™ Driveline™ to obtain the time dependency of the dissipated power.

Point Heat Source Moving Around the Disc

Simulate a circular brake pad moving around the disc. This detailed simulation over a short timescale models the heat source as a point moving around the disc.

Create an femodel object for transient thermal analysis and include the disc geometry into the model.

model = femodel(AnalysisType="thermalTransient", ...
                Geometry="brake_disc.stl");

Plot the geometry with the face labels.

figure
pdegplot(model,FaceLabels="on");
view([-5 -47])

Figure contains an axes object. The axes object contains 6 objects of type quiver, text, patch, line.

Generate a fine mesh with a small target maximum element edge length. The resulting mesh has more than 130000 nodes (degrees of freedom).

model = generateMesh(model,Hmax=0.005);

Plot the mesh.

pdemesh(model)
view([0,90])

Figure contains an axes object. The hidden axes object contains 5 objects of type quiver, text, patch.

Specify the thermal properties of the material.

model.MaterialProperties = ...
    materialProperties(ThermalConductivity=100, ...
                       MassDensity=8000, ...
                       SpecificHeat=500);

Specify the boundary conditions. All the faces are exposed to air, so there will be free convection.

model.FaceLoad(1:model.Geometry.NumFaces) = ...
    faceLoad(ConvectionCoefficient=10,AmbientTemperature=30);

Model the moving heat source by using a function handle that defines the thermal load as a function of space and time. For the definition of the movingHeatSource function, see the Heat Source Functions section at the bottom of this page.

model.FaceLoad(11) = faceLoad(Heat=@movingHeatSource); 
model.FaceLoad(4) = faceLoad(Heat=@movingHeatSource); 

Specify the initial temperature.

model.CellIC = cellIC(Temperature=30);

Solve the model for the time steps from 0 to 25 ms.

tlist = linspace(0,0.025,100); % Half revolution
R1 = solve(model,tlist);

Plot the temperature distribution at 25 ms.

figure("units","normalized","outerposition",[0 0 1 1])
pdeplot3D(R1.Mesh,ColorMapData=R1.Temperature(:,end))

Figure contains an axes object. The hidden axes object contains 5 objects of type patch, quiver, text.

The animation function visualizes the solution for all time steps. To play the animation, use this command:

animation(model,R1)

Because the heat diffusion time is much longer than the period of a revolution, you can simplify the heat source for the long simulation.

Static Ring Heat Source

Now find the disc temperatures for a longer period of time. Because the heat does not have time to diffuse during a revolution, it is reasonable to approximate the heat source with a static heat source in the shape of the path of the brake pad.

Compute the heat flow applied to the disc as a function of time. To do this, use a Simscape Driveline™ model of a four-wheeled, 2000 kg vehicle that brakes from 100 km/h to 0 km/h in approximately 2.75 s.

driveline_model = "DrivelineVehicle_isothermal";
open_system(driveline_model);
Warning: Unrecognized function or variable 'CloneDetectionUI.internal.CloneDetectionPerspective.register'.

Simscape Driveline model of a four-wheeled vehicle

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;

Obtain the time-dependent heat flow by using the results from the Simscape Driveline model.

drvln = struct();
drvln.tout = tout;
drvln.heatFlow = heatFlow;

Generate a mesh.

model = generateMesh(model);

Specify the boundary condition as a function handle. For the definition of the ringHeatSource function, see the Heat Source Functions section at the bottom of this page.

model.FaceLoad(11) = faceLoad(Heat=@(r,s)ringHeatSource(r,s,drvln)); 
model.FaceLoad(4) = faceLoad(Heat=@(r,s)ringHeatSource(r,s,drvln)); 

Solve the model for times from 0 to 5 seconds.

tlist = linspace(0,5,250);
R2 = solve(model,tlist);

Plot the temperature distribution at the final time step t = 5 seconds.

figure("units","normalized","outerposition",[0 0 1 1])
pdeplot3D(R2.Mesh,ColorMapData=R2.Temperature(:,end))

Figure contains an axes object. The hidden axes object contains 5 objects of type patch, quiver, text.

The animation function visualizes the solution for all time steps. To play the animation, use the following command:

animation(model,R2)

Find the maximum temperature of the disc. The maximum temperature is low enough to ensure that the braking pad performs as expected.

Tmax = max(max(R2.Temperature))
Tmax = 
52.2678

Heat Source Functions for Moving and Static Heat Sources

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