HEXAプリンタ製作記録:05 ファームウェアの改造

 今回はファームウェアの改造に関して書きます。ぶっちゃけ、一番苦労したところです。

ファーム調査

 まずは、3Dプリンタのファームに関して調べました。Marlinというものがあると知りました(klipperに気がついておりません!)。このうちMarlinがXYZIJKの6軸に対応していることを知りました。(RepRapは今もよくわかっていません!)

第一ラウンド:Marlinとの激闘

 6軸対応してるし、運動学の実装と原点復帰らへん直せば、いいだけだし、なんとかなるでしょ?って、軽い気持ちで着手しました。
 運動学のとりあえずの実装はあっさり終わりました。どう解いたのかとかはまた後日書きたいと思います。
 原点復帰、お前だよ、やっかいな曲者は!DELTAのソースを読むと全軸一辺に上に行き、どれか一軸がエンドストップ叩いたら、順番に一軸ずつ原点復帰する処理になっています。
 これは、一軸だけ動いても大丈夫(位置がずれるだけなので)なDELTA型だからできる手です。HEXAは全軸が同期して動かないとおかしなことになります。
 そのためにまず全軸同時に動かすことをやりました。この段階で広大なソースに絡め取られ始めました…まぁ、全軸同期して動かせて、エンドストップたたいた軸だけ動かさず、全軸のエンドストップ叩くまであがり続ける処理(HEXAの原点復帰)がなんとかできるようになりました。
 それで、喜んで位置制御、姿勢制御したら多少のトラブル(Z軸周りに回転させて、ロッドをねじ切ろうとしたりとか)ありながらも予定通りに動きました。

第二ラウンド:意味不明なオフセット

 喜んだのもつかの間、何故かZ座標がずれていることに気がつきました。ヘッドがベッドにつく位置まで下げたはずなのに、5mmずれます。原点復帰後に少し動かすと何故か5mmほど移動量が違います。何故かX軸に動かしたのにZも5mmほど動きます。
 ソースの中の5mmなところを片っ端から書き換えても変化しません。どこが原因かわかりません。わからないままかなりの時間無駄に格闘してました。諦めました。心が折れました…

第三ラウンド:klipperとの出会い

 不貞腐れてMarlinを諦めて、他の方法を探し始めました。その結果、6軸に対応してないけど、klipperというpythonで書かれたものがあることを知りました。ちょうど使ってないRaspi3B+も余ってたし、これでやるかってなりました。Marlinのソース捨てました
 klipperは部分的にCで書かれてます。初めて部分的なmakeファイル手書きしてコンパイルしました(だと、思ってるけど違うかも)…その結果、6軸制御も原点復帰もできました。
 ただ、何故かチルト角を7度より大きくすると、パルス列の収束計算でエラーだしてクラッシュします。わかんなかったので、再び捨てました。(先日たまたまバグらしきもの見つけたので直せるかもですが)

第四ラウンド:打倒Marlin

 再びまっさらなMarlinを改造し始めました。どこを直せばいいのかわかってても、ソースの先まで読み込んで丁寧に、かつ慎重に直していきました。その結果、変なオフセットもなく、原点復帰できて、姿勢のソフト的な制限無く動かせるようになりました。良かったです。苦労が報われた瞬間でした。

この記事が気に入ったらサポートをしてみませんか?