How do I change the mechanical properties of the cable in a belt-pulley system in Simscape Multibody?

20 views (last 30 days)
Hi guys, sorry to bother you, but I am not able to solve this system: I need to simulate a transmission with a belt-pulley system, where I can change the mechanical properties of the belt. Multibody is not able to make me do these changes, thus I built the pulley system using the Foundation Library. As you can see in the image, now I am trying to connect the Multibody part with the Foundation one, but I cannot understand how to connect these ports. Am I missing something? Can you help me please? I put some notes in the image to a better understanding of what I did
PS how the transmission works: The system consists of a tube with two perfectly equal revolute joints at each end, connected by a cross pulley system. If I apply a torque to one of the joints, this opens by a number of degrees and in the simulation I would see that the other joint also opens by the same amount.
  1 Comment
Yifeng Tang
Yifeng Tang on 20 Nov 2024 at 15:00
Try connect the two C ports to a rotational reference.
I also wonder whether you will need some mass in your "pulley line". See this "Cable" block from the Driveline library:
Maybe you can use that directly? Sounds like it's easier to parameterize. Physics the same as what you have.

Sign in to comment.

Answers (1)

Pavl M.
Pavl M. on 13 Nov 2024 at 10:21
These are codes produced by blend of Matlab AI helper and Copilot AI by up to 1/2 hour of training / tuning it from prompt (my work as prompt engineer + AI work, only in this scope experiment).
% Example setup for connecting Multibody and Foundation Library components
% Define the Multibody revolute joint
revoluteJoint = simscape.multibody.RevoluteJoint;
% Define the Foundation Library component (e.g., a rotational spring-damper)
rotationalSpringDamper = simscape.foundation.mechanical.rotational.springdamper;
% Connect the rotational port of the revolute joint to the rotational port of the spring-damper
revoluteJoint.R = rotationalSpringDamper.R;
% Set the mechanical properties of the spring-damper
rotationalSpringDamper.Stiffness = 100; % Example stiffness value
rotationalSpringDamper.Damping = 10; % Example damping value
% Add the components to the model and connect them
model = simscape.multibody.Model;
model.addComponent(revoluteJoint);
model.addComponent(rotationalSpringDamper);
model.connect(revoluteJoint.R, rotationalSpringDamper.R);
% Define the rotational spring-damper component
rotationalSpringDamper = simscape.foundation.mechanical.rotational.springdamper;
% Set the mechanical properties
rotationalSpringDamper.Stiffness = 100; % Example stiffness value (N*m/rad)
rotationalSpringDamper.Damping = 10; % Example damping value (N*m*s/rad)
% Define the pulley component with inertia
pulley = simscape.foundation.mechanical.rotational.inertia;
pulley.Inertia = 0.01; % Example inertia value (kg*m^2)
% Define the belt component with friction
belt = simscape.foundation.mechanical.translational.friction;
belt.FrictionCoefficient = 0.5; % Example friction coefficient
% Add the components to the model and connect them
model = simscape.multibody.Model;
model.addComponent(rotationalSpringDamper);
model.addComponent(pulley);
model.addComponent(belt);
model.connect(rotationalSpringDamper.R, pulley.R);
model.connect(belt.T, pulley.T);
% Define the model parameters
stiffness_values = linspace(50, 150, 10); % Example range for stiffness
damping_values = linspace(5, 15, 10); % Example range for damping
% Initialize arrays to store results
output_variation = zeros(length(stiffness_values), length(damping_values));
% Loop over all combinations of stiffness and damping values
for i = 1:length(stiffness_values)
for j = 1:length(damping_values)
% Set the current parameter values
stiffness = stiffness_values(i);
damping = damping_values(j);
% Run the simulation with the current parameters
% (Assume simulate_system is a function that runs your model and returns the output)
output = simulate_system(stiffness, damping);
% Store the output variation
output_variation(i, j) = output;
end
end
% Analyze the results (e.g., using a heatmap)
figure;
heatmap(damping_values, stiffness_values, output_variation);
xlabel('Damping');
ylabel('Stiffness');
title('Sensitivity Analysis of CNC Machinery System');
% Define the dynamics of the Multibody part
% State variables: x1, x2, x3, x4, x5
% Non-linear dynamics: x_dot = f(x, t)
% Define the state-space representation of the Multibody part
A = [0.1 -0.2 0.3 0 0; 0 0.2 -0.1 0 0; 0.2 0 0 -0.1 0; 0 0 0.1 0 -0.2; 0 0 0 0.1 0.2];
B = [1; 0; 0; 0; 0];
C = [1 0 0 0 0];
D = 0;
% Define the dynamics of the Foundation part
% State variables: y1, y2, y3, y4, y5
% Non-linear dynamics: y_dot = g(y, t)
% Define the state-space representation of the Foundation part
A_foundation = [0.3 -0.1 0.2 0 0; 0.1 0 -0.2 0 0; 0.2 0.1 0 -0.1 0; 0 0 0.1 0 -0.2; 0 0 0 0.1 0.2];
B_foundation = [1; 0; 0; 0; 0];
C_foundation = [1 0 0 0 0];
D_foundation = 0;
% Connect the output of the Multibody part to the input of the Foundation part
output_multibody = x5; % Output port of the Multibody part
input_foundation = y3; % Input port of the Foundation part
% Simulate the connected system
t = 0:0.1:10; % Time vector
x0 = [1; 2; 3; 0; 0]; % Initial state of the Multibody part
y0 = [0; 0; 0; 0; 0]; % Initial state of the Foundation part
% Define the differential equations for the connected system dynamics
dxdt = @(t, x) A*x + B*output_multibody; % Dynamics of the Multibody part
dydt = @(t, y) A_foundation*y + B_foundation*input_foundation; % Dynamics of the Foundation part
% Solve the differential equations for the connected system
[~, x] = ode45(dxdt, t, x0);
[~, y] = ode45(dydt, t, y0);
% Visualize the simulation results or perform further analysis as needed
Let me know which AI produced the solution path more optimal.

Products


Release

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!