I am having trouble getting the engine speed to 0 rpm when simulating a series hybrid vehicle controller.

1 次查看(过去 30 天)
Hi, I am having trouble controlling the motor block speed to 0 when the motor start signal is 0. It works fine when I give the motor speed 800rpm when the start signal is 0
However when I give the speed 0 rpm when the signal is 0, the result is that the motor speed decreases.
I have attached the simulink model and the driving cycle I built with this question. It's built on matlab r2022a and based on the model in the following link: https://www.mathworks.com/help/sdl/ug/series-hybrid-transmission.html
If someone have any idea about a solution to my problem, I will be very grateful.
Thanks in advance to anybody that awnser to this post ! :)

回答(1 个)

Sam Chak
Sam Chak 2025-4-29
编辑:Sam Chak 2025-4-29
The Simulink file contains many components, including blocks from Stateflow and Simscape. Could you provide the same mathematical representation of the entire system that you intend to describe in a journal article, technical report, or your thesis? The requirement must be 100% the same!
We typically do not attempt to design everything or control multiple components within a single file. Instead, we divide a large system into manageable subsystems. Once all subsystems are controllable and their performances are satisfactory, we can integrate them into a single Simulink file.
My suggestion:
If the nominal model of the subsystem is available, either derived from first principles or estimated using system identification tools, then one should attempt to design a set of linear or nonlinear input signals that stabilize the subsystem and ensure that the subsystem's output behaves like the reference signal, .
Assume that the nominal model can be expressed in this simple form:
.
If the model is in transfer function, then convert it to state-space.
Design the input signal
,
such that all subsystem states in the state vector are measurable. <-- This is the initial assumption!
The model's dynamics is then forcefully transformed to
which can be rearranged to
.
If the error signal is properly defined, then
guarantees that subsystem's output tracks the reference signal.
  3 个评论
Sam Chak
Sam Chak 2025-4-29
Do you have the mathematical model of the motor to which you would like to apply the controller? Generally, it is 90% easier to work on the mathematical model first before integrating the controller into the Simulink model.
For example, ...
%% if the motor's model is available
Gp = tf(2, [1 2 3]);
%% then we can design a controller based on the model.
opt = pidtuneOptions('PhaseMargin', 65, 'DesignFocus', 'reference-tracking');
Gc = pidtune(Gp, 'PIDF', opt)
Gc = 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 with Kp = 3.14, Ki = 3.36, Kd = 0.73, Tf = 0.00336 Continuous-time PIDF controller in parallel form.
%% closed-loop subsystem
Gcl = feedback(Gc*Gp, 1)
Gcl = 441.2 s^2 + 1878 s + 1998 ------------------------------------------ s^4 + 299.7 s^3 + 1040 s^2 + 2772 s + 1998 Continuous-time transfer function.
%% step response
step(Gp, 10), hold on
step(Gcl, 10), grid on
legend('Open-loop', 'Closed-loop')
Sam Chak
Sam Chak 2025-4-29
The pulse wave with 50% duty cycle can be mathematically constructed in MATLAB.
Before you design the Simscape system based on a derived mathematical model, do you recall where you have stored the differential equation or transfer function of the motor? Perhaps in a personal notebook or in a piece of paper that you sandwiched in a textbook?
t = (0:0.001:200)';
amp = 4000; % amplitude
P = 50; % period
y = amp*(1 + sign(sin(2*pi/P*t)))/2;
plot(t, y), grid on, ylim([-1e3, 5e3])
xlabel('t')
ylabel('R(t)')
title('Reference Pulse signal')

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Specialized Power Systems 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by