生成梯形运动轮廓的位置设定点

时间:2015-07-21 20:16:14

标签: pascal freepascal fpc

我正在研究运动控制器的原型,它将电机加速到最大速度,以最大速度滑行,然后在正确的位置开始减速,使电机停在目标位置。 / p>

每个时间步的理论位置将与来自正交编码器的反馈进行比较,产生的误差将受到PID回路的影响,其结果将使用PWM表示。

我目前有以下代码来确定每个时间步的理论位置:

Pos:=0;
Vel:=0;
Acc:=3;
Demand:=300;
Max_Vel:=19;


AccDist := (Max_vel/Acc * Max_vel) / 2;
DecelPoint := Demand - AccDist;
Writeln(AccDist:5:2);
Writeln(DecelPoint:5:2);

Writeln('ACCEL');
While Vel <> Max_vel
Do Begin

Pos := Pos + Vel + Acc/2;

Vel := Vel + Acc;

If Vel >= Max_Vel
Then Begin
Vel := Max_Vel;
Pos := AccDist
End;


Writeln('Position:',Pos:5:2);


End;

Writeln('FLAT');    
While Pos < DecelPoint
Do Begin

Pos := Pos + Vel;

Writeln('Position:',Pos:5:2);

End;

Error := Pos - DecelPoint;

Writeln('DECEL');

While Vel > 0
Do Begin

If Error > 0 
Then Begin 
Pos := Pos - Error;
Error := 0;
End;

Pos := Pos + Vel - Acc/2;
Vel := Vel - Acc;

If Vel <= 0
Then Pos := Demand;

Writeln('Position:',Pos:5:2);


End;


end.

此代码似乎给出了近似结果,但我确实需要确切的结果。加速和平坦部分似乎产生了精确的结果,但是当我们来到减速区时,事情开始表现得很奇怪。

我哪里出错?

1 个答案:

答案 0 :(得分:3)

我认为有两个问题。

问题1:您正在显示位置列表,但不显示车辆到达这些位置的时间。如果假设加速度,速度,位置等都是m / s ^ 2,m / s和m,那么当车辆在加速度之间转换时,数据与1秒间隔除外一致滑行(或滑行和减速)。如果我为速度和时间添加列,那么输出数据将如下所示:

 60,17
 239.83
 ACCEL
 Position: 1.50     Velocity: 3.00     Time:1.00
 Position: 6.00     Velocity: 6.00     Time:2.00
 Position:13.50     Velocity: 9.00     Time:3.00
 Position:24.00     Velocity:12.00     Time:4.00
 Position:37.50     Velocity:15.00     Time:5.00
 Position:54.00     Velocity:18.00     Time:6.00
 Position:60.17     Velocity:19.00     Time:6.33 ...vehicle stops accelerating at this point
 FLAT
 Position:79.17     Velocity:19.00     Time:7.33
 Position:98.17     Velocity:19.00     Time:8.33

...

你可以看到,在54.00米处的6秒测量点之后,车辆停止加速的实际时间仅为0.33秒(而不是一整秒)。

当车辆到达减速点时会出现同样的问题(我估计应该在大约T = 15.79秒(即停止加速后的9.46秒)发生。

问题2 第二个问题是你在FLAT期间之前写了位置你检查车辆是否应该开始减速。

 While Pos < DecelPoint
   Do Begin
     Pos := Pos + Vel;
     Writeln('Position:',Pos:5:2);
   End;

上面的代码可以增加超过减速点的位置,并输出一个错误的数据点,然后再纠正&#39;它以后。你的程序会输出:

 ...
 Position:231.17
 Position:250.17
 DECEL
 Position:257.33
 ...

但DECEL之前的最后位置不正确,因为车辆在达到239.83米时已经开始减速。