ステッピングモーター制御ライブラリを作りたい(その3)「最大速度」

その1はこちらです。

 前回の記事で、S字と台形を使って滑らかな加減速を行う手法を説明しました。S字も台形も、加速に30ステップ、減速に30ステップを使っています。つまり、今の仕様のままだと最低でも合計60ステップ最低でも必要になるのです。
 例えば、前回と同じ仕様のモーター(1ステップ1.8度)だと、90度動かすのに50ステップですが、加速減速合わせて60ステップ使うのでおかしなことになります。では実際に見てみましょう。

台形型

f:id:takumus:20160911200033g:plain  90度は50ステップですので、最大速度に達する(30ステップ)事が出来ても、減速分のステップ(30ステップ)が足りないので、おかしなグラフになっています。今の仕様のままでは最低でも60ステップ分の移動がないと回転できない事になります。

S字型

f:id:takumus:20160911200034g:plain  S字も同じです。台形をベースに作っているので、同じく減速分が足りていません。

ステップが足りない場合はどうすれば良いか!

 足りないステップを無理やり足らせる方法もあります。傾斜を急にすれば良いのです。しかし、傾斜が急になればなるほど脱調の可能性は上がってしまうので、だめです。
 もう一つの方法は最大速度を下げる方法です。そもそも無理して最大速度に達しなくて良いのです。傾斜はそのままで、加減速分のステップに足りる分の、可能な限りの最大速度を計算します。今回はこの方法で行きたいと思います。

最大速度を下げる

最大速度を下げるように改良したバージョンを作りました。

台形型

f:id:takumus:20160911200035g:plain

S字型

f:id:takumus:20160911200036g:plain  アニメーションの通り、最初180度で回したときは最大速度に達して回りますが、90度で回したときは、最大速度を下げて回ります。こうすることで、加減速の傾斜を変えることなく、どのような角度に対しても緩やかに移行できます。
 どれだけ下げるべきかは、一次関数による簡単な式で導く事が出来ます。本当はもう少し細かい計算をしているのですが、後日ソースコードを公開するつもりです。  まだステッピングモーター現物を扱ったことがないのに色々と書いてしまいましたが、明日届くはずなので試したいです。これらのアニメーションはflashで作っています。アニメーションというか疑似ステッピングモーターを実際に制御するプログラムは書いているので、これをArduino(C++)へ移植してちゃんと動いてくれれば嬉しいです。

その4はこちらです。