0

最短の方法で新しい設定値に到達するために、どの方向に向かわなければならないかをどのように知ることができますか?

ステッピングモーターを制御するArduinoコードがあります。エンコーダーを使用して、ステッピングモーターの位置を値0..2048で取得します。

これで設定値200が得られ、200に移動します。これは時計回りになります。今私は200にいて、ポイント2000に行きたいのですが、これが最短の方法であるため、これは反時計回りに発生するはずです。

どちらの方向に向けるべきかを効率的に計算するにはどうすればよいですか?

4

2 に答える 2

3

これを試して:

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

これは、すべての変数が16ビットで署名されていることを前提としています。ステッパーのカウントは2048で「ロールオーバー」します。これは、プロセッサーの計算がロールオーバーする方法と似ていますが、異なります。左に5ビットシフトすることで、ステッパーのロールオーバーとCPUのロールオーバーを並べて、すべてが正常に機能します。結果を元に戻すことにより、ステッパーを移動するために必要なカウント数を取得します-符号付きの値であるため、正は一方の方法であり、負はもう一方の方法です。

于 2012-10-01T14:33:05.227 に答える
1

新しいセットポイントから古いセットポイントを引きます。

その差の絶対値が1024より大きい場合は、結果が1024を超えないように、2048の倍数を加算または減算します。

これを行った後、上記の計算の結果が正の場合、その量だけ時計回りに移動します。結果が負の場合は、その量の絶対値だけ反時計回りに移動します。

于 2012-10-01T14:35:55.537 に答える