Arduino UNOにバックラッシュ補正機能を移植し、うまく動作させることができました。
ソフトでバックラッシュの補正をしたいという要望は当然GRBLにもあって、調べたところ数年来にわたって時折質問が上がっているようです。そしてarduino UNOではメモリーが足りないために出来ないというのがお決まりの回答で、よって補正はGRBLの外の世界でやれという意見が100%です。GCODE post processorで検索を掛けると色々と出てきます。やることはGコードを調べてXYの移動方向が変わるときに、バックラッシュ分の下駄を履かせて動かすための別のGコードを挿入します。実例もあって、
こちらの方は挿入するGコードを示しています。直線移動を指示するG1の場合はXYそれぞれを独立にモニターして向きが変わることを調べればよいので簡単です。円を描くG2も同じようにすればできると主張している人はいますが、実例を挙げている人は皆無です。
Gコードを入力にしているわけではありませんが、
こちらの方はfusion360にプラグイン(?)を入れて、バックラッシュ補正をしたGCODEを吐き出すようにしているようです。fusion360に関しては全くの無知ですが、説明では円を4分割して象限の変わり目で補正を行うコードを出力しているようです。
G2コードを同様の手法で4分割すれば円に対してもバックラッシュ補正をすることは可能です。当方のハードではarduinoに送られるデータはすべてTWELITEのMCUを経由するので、TWELITEに円分割、バックラッシュ補正機能を実装すればよい。しかしGRBLにはジョグコマンドもあるのでそれの補正も必要。外部で補正を放り込むとGRBLの認識するマシン座標と現物がずれてしまうため、GRBLの出力する座標値にTWELITEで下駄を履かせてずれを外部に見えなくすることが望ましい。こういったGRBLとTWELITEの状態合わせは可能だけれども、実際に実装するのは結構面倒。
GRBLの本家ではありませんが、
こちらの方はGRBL 1.1hをarduino MEGAに載せてバックラッシュ補正を組みこんでいます。これをarduino UNOに移植できないかを検討してみることにしました。当方のGRBL UNOではプログラムメモリーの使用量は92%なのでうまくすれば入るかもしれないと思ったからです。
MEGAのGRBLはUNOとほとんど同じですが、ソースコードをそのまま置き換えることでは対応できないため、バックラッシュ補正に関するコードを抜き出し、それをUNOのGRBLに組み込みます。手作業のため数時間掛かりましたが、移植することはできました。MEGAのコードには少々課題があって、そこを修正しないと動作しませんでした。移植後のプログラムメモリー使用量は94%です。
完成したソフトの動作を確認してみました。Xテーブルを左に移動してDROを0にセットします。
バックラッシュ補正を組み込んでいないソフトで、Xテーブルを右に10mm移動させます。DROの読みは9.89mmとなり、0.11mmのバックラッシュがあることが分かります。
次にバックラッシュ補正を入れたソフトに変えて、補正量を0.11mmに設定します。テーブルを同様に動かして調べると、DROの読みは10.01mmとなって補正が効いていることが確認できます。Yテーブルも同様です。
バックラッシュ補正時にはマシン座標の更新をしないようにソフトができているため、GRBLの報告するMPosは一貫性を維持しています。
grbl-1.1hとの差分(diff)ファイルを
githubに上げておきました。grbl11h-backlash.txtとbacklash.cとbacklash.hです。backlash.hはMEGAのものと全く同じです。
ブログ一覧 |
機械工作 | その他
Posted at
2022/05/19 08:01:10