计算圆周运动的 Angular 变化
Calculate Angular Change in Circular Motion
我正在尝试推导一种算法,使我能够计算圆周运动中的 angular 位移。这是我正在编程的物理设备,所以我确实从 0 得到了当前 angular 位置的反馈 - 2pi.I 附上了一张照片,可以帮助您了解我正在努力实现的目标(见下文) .每次处理器扫描程序时都会更新标签,然后通过获取 Theta2-Theta1 来计算 delta theta,然后将其存储到 DeltaTheta 标签中。问题是,当我完成一次旋转时,Theta 2 变为 0 而 Theta 1 仍然是 3pi/2 左右,因此我得到了一个比我应该得到的更大的 Delta Theta。每次角度达到 2 pi 标记时,它都会重置为零。我正在使用该程序在 Rockwell CompactLogix PLC 上实施傅里叶分析算法。对于那些足够关心的人,我正在使用 "Structured Text" 语言在 RSLogix5000 中编程。如果需要,请参阅此站点以获取有关该语言的手册。 Structured Text
请参阅下面的示例代码。
ThetaOld = Theta;
Theta = SpindleActPosition; //This is feedback from the motor 0-2*pi
DeltaTheta = Theta2 - Theta1; //This is the "algorithm" I need help with
我也尝试过这个算法,但发现其中存在漏洞,无法正常工作。
DeltaTheta = [(Theta2 - Theta1) + 2*pi] MOD(2*pi)
我相信 MOD 操作员会成为我们的朋友,但我找不到解决问题的方法。
其余代码确实与解决此问题无关。不幸的是,由于这台机器的性质,角度从 12 点钟的位置开始,然后顺时针旋转。我无法改变这个。
您只需添加:
IF DeltaTheta < 0 THEN
DeltaTheta = DeltaTheta + 2*pi;
END_IF;
我正在尝试推导一种算法,使我能够计算圆周运动中的 angular 位移。这是我正在编程的物理设备,所以我确实从 0 得到了当前 angular 位置的反馈 - 2pi.I 附上了一张照片,可以帮助您了解我正在努力实现的目标(见下文) .每次处理器扫描程序时都会更新标签,然后通过获取 Theta2-Theta1 来计算 delta theta,然后将其存储到 DeltaTheta 标签中。问题是,当我完成一次旋转时,Theta 2 变为 0 而 Theta 1 仍然是 3pi/2 左右,因此我得到了一个比我应该得到的更大的 Delta Theta。每次角度达到 2 pi 标记时,它都会重置为零。我正在使用该程序在 Rockwell CompactLogix PLC 上实施傅里叶分析算法。对于那些足够关心的人,我正在使用 "Structured Text" 语言在 RSLogix5000 中编程。如果需要,请参阅此站点以获取有关该语言的手册。 Structured Text 请参阅下面的示例代码。
ThetaOld = Theta;
Theta = SpindleActPosition; //This is feedback from the motor 0-2*pi
DeltaTheta = Theta2 - Theta1; //This is the "algorithm" I need help with
我也尝试过这个算法,但发现其中存在漏洞,无法正常工作。
DeltaTheta = [(Theta2 - Theta1) + 2*pi] MOD(2*pi)
我相信 MOD 操作员会成为我们的朋友,但我找不到解决问题的方法。
其余代码确实与解决此问题无关。不幸的是,由于这台机器的性质,角度从 12 点钟的位置开始,然后顺时针旋转。我无法改变这个。
您只需添加:
IF DeltaTheta < 0 THEN
DeltaTheta = DeltaTheta + 2*pi;
END_IF;