メカキネアートシステムで自動演奏装置

どうぞこちらのデータを使ってください

「いいね!」 1

どうもありがとうございます!
とても助かります。

途中経過です。

「いいね!」 1

ソフトウエアについて質問があります。
animator>モーション生成>モーター位置調整>現在のキーフレームにおける位置

で[モーター0]や[モーター1]の次のボックスに任意の数値を打ち込めばその数値まで
モーターが回転するところまでは確認できています。
ただここに打ち込む数値の単位が距離なのか角度なのか分かりません。
きっちり360度回転させるには、どんな値を入力すれば良いのでしょうか?
テストしてみた感じでは「8」で360度になる感じですが合ってますでしょうか?

それと線型移動のパラメーターの範囲についてと、
線型移動と高速移動の違いについても教えていただけると助かります。

どうぞよろしくお願いいたします。

こんにちは。

現時点だとメカキネのソフト上では数値は単位なしになっています。というのも使うユーザーが直動機構で使うのか回転機構で使うのか分からないため、下手に単位設定すると混乱の元になるかなという考えのためです。
ただ入力した数値をそのまま制御基板へと送信するので、機構等に基づいてconfigでstep/mmを設定されていれば直動機構では1表示=1mm、回転機構では1表示=1°となります。

また、制御基板のconfig上ではstep/mmと言っていますが、制御基板側ではmmと度は区別されていないのでmmも度も同じものとして設定します。200 step/mm も 200 step/度も設定としては同じです。単位は人間の解釈次第となっています。

ちょっとこの辺はconfigと機構次第(減速機があるかどうか)ですが、写真のような回転体とモーター直結の場合はモーターの分解能とマイクロステップ、step/mmの設定値だけで決まります。
モーターは 1.8度/step = 200 step / 360度
マイクロステップは 8
configでのstep/mmは 200step/mm
とすると

1周の指令値 = (モーター1周に必要なstep数) * (マイクロステップ) / (step/mmの設定値)

上記の場合だと 200 * 8 / 200 = 8
となり8という数値でモーターは1回転します。
なのでご指摘の通り合っています。

リードスクリューを使った直動機構が200step/mmがデフォルト値で、その値を使っているので8という値でモーター1回転となります。
もし今回のような回転機構において1を指定したら1度動くようにしたい場合は、逆算してstep/mmに4.4444を指定すれば良いです。

線形移動はGコードでいうG1、高速移動はG0となります。
これは高速移動は各軸最速で移動し、各軸が同期するように移動する保証はありません。早く移動が終わった軸から止まります。位置決め用の移動です。
線形移動は前の位置から次の位置まで、全ての軸を指定の速度で直線補間して同期的に動かして移動します。直動機構の場合は次の点を直線でつなぐような動きです。
直動機構におけるイメージとしては以下の感じです。わかりづらいかもしれません、すみません。
image

高速移動の移動速度は制御基板のconfigの最高速度設定M203によって決まります。(多分デフォルトは1000mm/min)
線形移動時には送り速度を指定することで速さが変わります。上限は上記のconfigの最高速度M203になります。
今回の場合8の値でモーター1周なので、M203の最高速度がデフォルト値の場合 1000/8=125rpmが上限の回転速度となる設定になっているかと思います。
線形移動の送り速度として、ほしい回転速度に8掛けした値を送り速度に指定すればその指定スピードで回転するかと思います。

ちょっと冗長な説明になってしまっているかもしれませんが、分からない点あれば聞いてください。

「いいね!」 1

ありがとうございます!

config.gを以下のように書き換えました。
M92 X4.4444 Y4.4444 Z4.4444 A4.4444 B4.4444 C4.4444 ; set steps per mm
;M92 U4.4444 V4.4444 W4.4444 E4.4444:4.4444:4.4444 ; set steps per mm

そうすると1を指定したら1度動くようになったのですが、回転のスピードが
ゆっくりになります。角度を指定できるのはとても使い勝手が良いのですが、
すばやく指定した角度に回転させる方法はありますでしょうか?

最高速度の設定M203を変更したら回転スピードが変わると思います。
いままで指令値8で1回転だったのが、指令値360で1回転になったので、最高速度がおそらく1/45のスピードになったのかと思います。
なのでconfigのM203M203 X45000 Y45000 .....のように45000(度/min)とかにすると前と同じ程度のスピードが出るようになるかと思います。

「いいね!」 1

なるほど!そういう風に数値が対応していたのですね! どうもありがとうございます。

最高速度125rpmに8掛けした
100rpmを送り速度に指定すれば
100rpmで回転するということで
合っていますでしょうか?

これはstep/mmが200の設定のままだった場合の話で、今は座標表示1が1度となるようにstep/mmを変更しているので、送り速度は度/minを意味しています。
つまり、欲しいrpm * 360でrpm基準の送り速度を設定できます。
例: 50rpmで動かしたい場合 50 rpm * 360 = 18000 度/minとなり、18000を送り速度としてセットします。

あと設定変更を忘れていましたが、加速度が元の基準のままで遅いままなので50倍程度して変更したほうが良いです。
M201 X50.00 Y50.00 Z50.00M201 X2500.00 Y2500.00 Z2500.00

実際に移動速度の設定を試してみました。
configの設定変更箇所は以下です。

M92 X4.444 Y4.444 Z4.444        ;step/mm設定
M203 X45000 Y45000 Z45000       ;最大速度設定
M201 X2500.00 Y2500.00 Z2500.00 ;最大加速度設定

この状態でWEBUIでX0とX3600(10回転=3600度)を往復させました。

  • G0(高速移動、位置決め)
    MAXの速度45000度/min = 45000/360 = 125 rpmで回転します。

  • G1 F18000(線形移動、直線補間)
    送り速度をF18000で指定しました。 18000度/min = 18000/360 = 50 rpmで回転します。

  • G1 F3600
    送り速度をF3600で指定しました。 3600度/min = 3600/360 = 10 rpmで回転します。

以上のような結果となりました。想定通りの回転速度となっています。
ただ注意してほしい点としては、G1移動(線形移動、直線補間)では単軸だけ移動は希望通りの回転速度となりますが複数軸での移動の場合は、それぞれの移動距離も加味されそれぞれの軸の速度が決まるため、上記のスピードが必ずでるとは限りません。(それぞれの軸の移動量の合成ベクトルに対して送り速度が適用されるものかと思います)

ご参考まで。

「いいね!」 1

ありがとうございます。こちらでも上と同じ設定で
実行してみたところ、良い感じで回転しました。
例えば-12と入力すれば、マイナス方向に12度回転してくれて
とても使いやすいです。
多分、この設定で自動演奏装置には十分な速度だと思いますが、
仮に最大速度をもっと上げようとなった場合、どのくらいまで速くできるのでしょうか?

もう一つ質問があります。
自動演奏装置は、鉄琴の鍵盤が30枚放射線状に並んでいて、
人形を回転させるモーターXと
鍵盤を叩くモーターYの二つを使います。

仮に、モーターYが鍵盤を0.4秒間隔で叩くとした場合、
モーターXは目標の角度まで
0.1秒で着いたときは0.3秒待機、
0.2秒で着いたときは0.2秒待機、
0.3秒で着いたときは0.1秒待機、
としたいのですが、これを実現するには
どのようにキーフレーム操作をすれば良いでしょうか?

やっていないので分からないですが、現在の設定値の2倍は問題なくいけると思います。(3軸CNCで言うとF2000の回転数なので負荷大きくなければいけるはず)
3倍以降はちょっと分からないですがステッピングモーターの特性として速くするとトルクが落ちるので、そことのトレードオフですね。

残念ながら現在の制御基板のファームウェアでは送り速度の代わりに時間指定をして動かすということができません。
そのため明確に移動に何秒かかるかということがわかりません。
(将来的には制御基板のファームウェアにて移動時間指定がサポートされるようなので、サポートされればメカキネソフトへも反映させることができますが・・・)

現状では
移動のキーフレーム、一時停止のキーフレーム、移動のキーフレーム、一時停止のキーフレーム…
のように一時停止のキーフレームを挟んで一時停止時間を調整するしかないかと思います。

「いいね!」 1

了解しました。ありがとうございます。

移動時間が仮に一回転に0.8秒かかるとして
180度回転なら0.4秒、90度なら0.2秒、45度なら
0.1秒と考えても良いですか?
加速度があるので、そう単純ではなさそうな気もしますが。。。:slight_smile:

あと、一時停止の秒数ですが、小数点何桁まで実際に反映されますか?

↑これが実現すると嬉しいです!

モーターが12度回転するのにかかる時間を計測する方法について
例えば、12度回転して1秒止まるを100回繰り返して、
そこにかかった合計時間から100秒を引いた残りを100で割ると
近似値が出るのかな、と思いました。
もし他に方法があれば教えていただけますか?

ざっくりはそれで良いかと思います。
移動角度が小さいほど等速移動の部分が短く加速の影響がデカくなるので誤差が大きくなるかもしれませんが、大きめの移動角度なら比例と考えて大丈夫な気がします。

これは制御基板側のファームウェア内部でミリ秒換算で管理されているので、ミリ秒以下の数字は切り捨てられます。なので0.001秒以下は反映されません。

それで良いかと思います!

ちなみに、よほど移動角度が短くなければ加速減速にかかる時間はどの移動角度でも同じと考えることができるんじゃないかなと思うので、
(実際に360度回転にかかった時間)- (実際に180度回転にかかった時間)= (計算上加減速なしで等速で180度回転にかかった時間)
(実際に180度回転にかかった時間) - (計算上加減速なしで等速で180度回転にかかった時間)= (計算上加減速のために余分にかかる時間)
こんな感じで加減速でどれくらい時間ロスするかとかも実際の時間から計算することができそうな気がします。
ここまでするなら実際に設定加速度と設定速度から時間を求めたほうが良いのかもしれませんが。。。
移動時間 = 設定速度/設定加速度 + 移動角度 / 設定速度 で求められるかな・・・?計算式間違っているかもしれません

机上の空論なので実際にあっているかはわかりませんが、参考として

「いいね!」 1

ありがとうございます!!1000分の1秒まで
設定が反映されるなら、実用上問題ないレベルまで持っていけそうですね。


実験用の機構が組み上がりました。

「いいね!」 1

現状、機構は2段に分かれていて
下は人形を回転させる機構となっています。

ここのモーターにはこの高トルクタイプの
モーターを使っていますが

上の機構を載せると負荷が大きすぎるようで
指定した角度に動きません。
一応上の機構の重さはコロで支えてはいるのですが十分ではないようです。

モーターの速度は今くらいのほうがよいので、
出来ればトルクを上げるために速度を遅くしたくありません。

上の機構を軽量化するのも難しいので
モーターをさらに高トルクのものに交換するくらいしか思いつかないのですが、何か良い方法があれば教えてください。

「いいね!」 1

config.gの中に記述されている電流値を上げるのは試されてますでしょうか?

M906 X1800 Y1800 Z1800 I100 ; set motor currents (mA)

みたいな記述があるので、ハイトルクのモーターの場合2400くらいまで上げて使うと理論上性能を十分に発揮できるのでトルクが上がると思います。

あとマイクロステップ設定は低い方がトルクが高いとどこかで読んだので、デフォルトの8から1に下げることでトルクが上がる可能性があります。
こっちは先日議論されていた重い道理に回転させるにはモーターをどれだけ動かすのか に影響が出る(動きが8倍になる)のと、試してないので効果があるかは分からないので最終手段でいいと思います。

「いいね!」 2

私も電流を増やしてみてはどうかなと思うのですが、Gymさんのアドバイスに少しだけ補足です。
高トルクモーターのスペック上では3A(3000mA)が最大となっているので、2400で微妙そうであれば3000を入れても良いかもしれません。
普通は8割ぐらいの電流を設定して使うことが多いため2400を使うというのももちろん正しいです。

もしそれでダメそうだったら、機構を変えず、スピードを変えずとなるとモーター変更しか無いかなぁと思います。

「いいね!」 2