我怎样才能找出你必须转向哪个直接以最短的方式达到新的设定点?
我有一段控制steppermotor的Arduino代码。使用编码器,我得到steppermotor的位置值为0..2048。
现在我有一个设定点200,我移动到200这应该是顺时针。现在我在200,我想要点2000,这应该逆时针发生,因为这是最短路。
如何有效地计算出应该转向的方式?
答案 0 :(得分:3)
试试这个:
delta = (setpoint << 5) - (current_position << 5);
delta = delta >> 5;
这假设所有变量都是16位的符号。您的步进器在2048处有一个“翻转”的计数,这与处理器的数学运算方式相似但不同。通过向左移动五位,您可以将CPU翻转与步进翻转对齐,一切正常。通过移回结果,您可以获得移动步进器所需的计数数量 - 以有符号值表示,因此正向是一种方式而另一种是负向。
答案 1 :(得分:1)
从新的
中减去旧的设定值如果该差值的绝对值大于1024,则加上或减去2048的倍数,使得结果的绝对值不大于1024.
完成此操作后,如果上述计算结果为正,则按顺时针方向移动该数量。如果结果为负,则逆时针移动该量的绝对值。