0

我怎样才能找出你必须转向哪个方向才能以最短的方式到达新的设定点?

我有一段控制步进电机的 Arduino 代码。使用编码器,我可以将步进电机的位置设为 0..2048。

现在我有一个设定点 200,我移动到 200,这应该是顺时针的。现在我在 200,我想去点 2000,这应该逆时针发生,因为这是最短的方式。

我怎样才能有效地计算我应该转向哪条路?

4

2 回答 2

3

尝试这个:

delta = (setpoint << 5) - (current_position << 5);
delta = delta >> 5;

这假设所有变量都是 16 位有符号的。您的步进器的计数在 2048 处“翻转”,这与处理器的数学翻转方式相似但不同。通过左移五位,您可以将步进翻转与 CPU 翻转对齐,一切正常。通过将结果移回,您可以获得移动步进器所需的计数 - 以有符号值表示,因此正数是一种方式,负数是另一种方式。

于 2012-10-01T14:33:05.227 回答
1

从新设定值中减去旧设定值。

如果该差值的绝对值大于 1024,则添加或减去 2048 的倍数,使得结果的绝对值不大于 1024。

完成此操作后,如果上述计算的结果为正,那么您将沿顺时针方向移动该量。如果结果为负,则逆时针移动该数量的绝对值。

于 2012-10-01T14:35:55.537 回答