转弯的方向

时间:2012-10-01 14:23:47

标签: c math arduino

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

我有一段控制steppermotor的Arduino代码。使用编码器,我得到steppermotor的位置值为0..2048。

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

如何有效地计算出应该转向的方式?

2 个答案:

答案 0 :(得分:3)

试试这个:

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

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

答案 1 :(得分:1)

从新的

中减去旧的设定值

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

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