Archived OpenModelica forums. Posting is disabled.

Alternative forums include GitHub discussions or StackOverflow (make sure to read the Stack Overflow rules; you need to have well-formed questions)


Forgot password? | Forgot username? | Register

Une simple boucle fermée donne des résultats étonnants

Une simple boucle fermée donne des résultats étonnants

Bonjour,
voulant faire un cours (lycée) sur les asservissements, je voudrais savoir pourquoi la courbe de vitesse de ce modèle présente une discontinuité et semble saturée à la valeur de consigne.
Merci d'avance.
Sylvain.

Code:


model b_BF_CdeEnVitesse
  Modelica.Electrical.Analog.Basic.Ground ground annotation(
    Placement(visible = true, transformation(origin = {0, 10}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Electrical.Analog.Basic.EMF Machine(k = 0.004)  annotation(
    Placement(visible = true, transformation(origin = {20, 40}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Electrical.Analog.Basic.Resistor R_BatEtMot(R = 0.34) annotation(
    Placement(visible = true, transformation(origin = {20, 70}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
  Modelica.Mechanics.Rotational.Components.Inertia Inertie_Totale(J = 26e-6)  annotation(
    Placement(visible = true, transformation(origin = {50, 40}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.Rotational.Sensors.SpeedSensor VitesseMot annotation(
    Placement(visible = true, transformation(origin = {90, 40}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Mechanics.Rotational.Sources.ConstantTorque EffortNecessaire(tau_constant = -0.006) annotation(
    Placement(visible = true, transformation(origin = {60, 70}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Blocks.Sources.Step Consigne(height = 1500, startTime = 0) annotation(
    Placement(visible = true, transformation(origin = {-130, 40}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Electrical.Analog.Sources.SignalVoltage Commande annotation(
    Placement(visible = true, transformation(origin = {-10, 40}, extent = {{-10, 10}, {10, -10}}, rotation = -90)));
  Modelica.Blocks.Math.Feedback feedback annotation(
    Placement(visible = true, transformation(origin = {-100, 40}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Blocks.Math.Gain Proportionnel(k = 10)  annotation(
    Placement(visible = true, transformation(origin = {-70, 40}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Blocks.Nonlinear.Limiter Saturation(limitsAtInit = true, uMax = 7)  annotation(
    Placement(visible = true, transformation(origin = {-40, 40}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
  connect(Machine.flange, Inertie_Totale.flange_a) annotation(
    Line(points = {{30, 40}, {40, 40}}));
  connect(Inertie_Totale.flange_b, VitesseMot.flange) annotation(
    Line(points = {{60, 40}, {81, 40}, {81, 40}, {80, 40}}));
  connect(EffortNecessaire.flange, Inertie_Totale.flange_b) annotation(
    Line(points = {{70, 70}, {70, 70}, {70, 40}, {60, 40}, {60, 40}}));
  connect(R_BatEtMot.n, Machine.p) annotation(
    Line(points = {{20, 60}, {20, 50}}, color = {0, 0, 255}));
  connect(ground.p, Machine.n) annotation(
    Line(points = {{0, 20}, {20, 20}, {20, 30}}, color = {0, 0, 255}));
  connect(ground.p, Commande.n) annotation(
    Line(points = {{0, 20}, {-10, 20}, {-10, 30}, {-10, 30}, {-10, 30}}, color = {0, 0, 255}));
  connect(Commande.p, R_BatEtMot.p) annotation(
    Line(points = {{-10, 50}, {-10, 50}, {-10, 90}, {20, 90}, {20, 80}, {20, 80}}, color = {0, 0, 255}));
  connect(Consigne.y, feedback.u1) annotation(
    Line(points = {{-119, 40}, {-109, 40}, {-109, 40}, {-108, 40}}, color = {0, 0, 127}));
  connect(feedback.y, Proportionnel.u) annotation(
    Line(points = {{-91, 40}, {-82, 40}, {-82, 40}, {-82, 40}}, color = {0, 0, 127}));
  connect(VitesseMot.w, feedback.u2) annotation(
    Line(points = {{101, 40}, {110, 40}, {110, 0}, {-100, 0}, {-100, 32}}, color = {0, 0, 127}));
  connect(Saturation.y, Commande.v) annotation(
    Line(points = {{-29, 40}, {-22, 40}}, color = {0, 0, 127}));
  connect(Proportionnel.y, Saturation.u) annotation(
    Line(points = {{-59, 40}, {-52, 40}}, color = {0, 0, 127}));
  annotation(
    Icon(coordinateSystem(extent = {{-200, -50}, {120, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {1, 1})),
    Diagram(coordinateSystem(extent = {{-200, -50}, {120, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {1, 1})),
    uses(Modelica(version = "3.2.3")),
  version = "");
end b_BF_CdeEnVitesse;

Hello,
Wanting to do a course (high school) on enslavements, I would like to know why the speed curve of this model presents a discontinuity and seems saturated to the set value.
Thank you in advance.

Re: Une simple boucle fermée donne des résultats étonnants

What result do you expect?
You have used a speed controller with a P-characteristic. The simulation result is OK.

BR

Re: Une simple boucle fermée donne des résultats étonnants

Bonjour et merci,
difficile de l'expliquer car je n'arrive pas à joindre l'image (file:///home/sylvain/Documents/CourbeVitesseReperee.png) de la courbe vitesse avec le repérage de la partie que je ne comprend pas. Je vais donc essayer de la décrire le mieux possible :
La vitesse augmente normalement pendant 1,2s où elle atteind la consigne de 1500 t/mn. Là elle s'arrête brutalement au lieu de la dépasser.

Sylvain.

Re: Une simple boucle fermée donne des résultats étonnants

Reverso traduction :
Hello and thank you, difficult to explain because I can not join the image (file:///home/sylvain/Documents/CourbeVitesseReperee.png) of the speed curve with the registration of the part I do not understand. So I’ll try to describe it as best I can:
The speed normally increases during 1.2s where it reaches the guideline of 1500 t/min. There it stops abruptly instead of passing it.

Re: Une simple boucle fermée donne des résultats étonnants

Hi,

Once again.
With your suggested speed control setup, the speed cannot exceed the setpoint of 1500 RPM.
If the actual speed is equal to the setpoint, the output of the controller (with proportional characteristic) is zero. That means your motor is not producing any torque. Therefore, the actual speed CANNOT be higher than the reference value.

==> MODELICA implementation if the problem is correct.
==> OM works perfect.

When your are expecting overshooting of the speed, change the structure of your controller. (e.g. from P to PI). But be carefully with the limiter you installed (to avoid wind-up problems).

Je vous souhaite beaucoup de succès
BR: your google translator

Re: Une simple boucle fermée donne des résultats étonnants

Bonjour,


Therefore, the actual speed CANNOT be higher than the reference value.

Je suis d'accord avec cela et il est bien dommage que je ne sois pas capable de joindre l'image de la courbe de vitesse obtenue. Il y a une forte accélération et quand la vitesse atteint la consigne la courbe fait un angle droit alors que l'inertie devrait l'arrondir.
Connaissez-vous un document avec des valeurs des coefficients PID pour que je puisse montrer qualitativement leur rôle respectif à mes jeunes élèves.

Merci encore
Sylvain.

I agree with that, and it’s too bad I’m not able to attach the image of the velocity curve. There is a high acceleration and when the speed reaches the set the curve makes a right angle while inertia should round it.
Know-you a document with values of PID coefficients so that I can qualitatively show their respective role to my young students.

There are 0 guests and 0 other users also viewing this topic
You are here: