LinuxCNCはバージョン2.7のLiveCDからインストールしました。LinuxCNCにはそのPCが向いているかどうかの指標としてレイテンシ・テストがあります。LinuxCNCはステッパーの回転パルスをリアルタイムに生成する為、一定間隔で処理を実行する必要があるのですが、レイテンシが大きいと間に合わなくなるのです。LinuxCNC付属のレイテンシ・テストを実行するとMAXジッターという値が表示されます。ドキュメントによるとこの値が50μSあたりまでならまあまあ良し、100μSを超えるマシンは制御には向かない様な事が書いてあります。このPCで実行したところ直ぐに200μSを超えてしまいました。現用のPentium4-2.8GHzが最大でも55μS程度なので不安視していなかったのですが、ビデオカードを交換してみたりBIOSの設定を変えたりとやっても改善しません。PC代¥2900円が無駄になるは悔しいので何とかしたいところです。そこで次善の策として考えてたのがこのPCでGrblのコントローラーを動かすという方法です。Grblならリアルタイムの部分はArduinoがやってくれるのでPC側はジッターを気にする必要がありません。BlackIIの制御基板(TRIO)にはサンケン電気のステッパードライバが載っておりこれは活用したいので、Arduino+CNCシールドではなく、ArduinoをTRIOにつないで制御してみたいと思います。ステッピングモーターの制御信号がDIRとSTEPという基本は変わらないので何とかなると思っています。D-SUB25ピンのコネクタはジャンクのマザーから取り外した物です(なので紫色)。TRIOをイネーブル状態にする信号はSN74HC00を使った非安定マルチバイブレータでチャージポンプ信号を入れて動作させましたが、これではGrblが準備できたらONになるという本来の動きはできないので、最終的にはTRIOのJP1をオープンにする事で、単にLに下がればイネーブルとなる制御にしようと思います。この段階で色々とマニュアルに記載が見当たらない細かいところも試してみました。以下ここまでで分かった事の備忘録TRIOのSPINDLE入力はLが回転、Hが停止。BlackIIのリミットスイッチ(フォトインタラプタ)は普段はLでセンサーをさえぎるとHになる。ArduinoのA0ピン(GrblではReset/Abort端子。内部プルアップされている。)は動作中にLに落とすと動作がキャンセルされて停止する。続きの動作はできず、HOMINGからやり直す必要あり。CNCシールドのE-STOP端子は回路図を辿るとArduinoのリセットに繋がっている。A0端子で止めてもReset端子で止めても動作は変わらないように見える。内部プルアップされている。)はLに落とすとスピンドルは回ったままステッピングモーターだけが停止する。コントロールソフト(Candleを使用)のステータスにはHOLDと表示され、Pauseボタンを押すと動作が再開する。ArduinoのA2ピンはGrblではCycleStart/Resume端子であるが、これをLに落としても特に何事も起こらなかった。GrblではZ-probe/Heightmap)もプルアップされていて、高さ検出の際にこれがLになったら刃物がワークに接触したと認識する。Z-probeはCandle右上ボタン群の下向き矢印みたいなボタンを押すと始まる。Height-mapはCandle右部分のheightmapメニューからCreateを押すと採取用設定が現れる。TRIOにはEMG信号という出力があり、スピンドルに過電流が流れたりするとL→Hに変化する。「TRIOのSPINDLE制御入力はLだと回転」というのがGrblの標準とは異なるのでconfig.hの下の行のコメント記号を外しました。INVERT_SPINDLE_ENABLE_PINまたスピンドルの回転数をPWMで制御する事はTRIOのマニュアルを見る限り書かれておらず、当面はON/OFFだけで実行します。この為以下をコメントアウト。VARIABLE_SPINDLEなおこのコメントをを外すとGrblは旧版との互換性の為、スピンドルイネーブル端子とZ-LIMIT端子の機能が入替わる(HかLかを切り替えるだけでなく、端子の割り当てまで一緒に変更してしまう)。入替わる前提で使ってもいいが将来的な互換性を考えると端子割り当ては標準のままにしたかったので、cpu_map.hの以下を変更しました。3ところでGrblのヘッダ類を書き換える場合は~/Arduino/libraries/grblの下にあるファイルを変更しなければなりません。最初普通に~/Arduino/grbl-master下のファイルを変更してコンパイルしても変更が反映されなかったので要注意です。次に非常停止をスイッチをどうするか、以下を候補に考えています。ArduinoのReset端子をLに下げる。ArduinoのA0端子(Reset/Abort)をLに下げる。TRIOのイネーブル信号(チャージポンプ又はH/L)を使ってOFFにする。非常停止は極力ノーマリONのスイッチにすべきです。ノーマリOFFを使ってしまうと接点が劣化していた場合に非常停止を押しても止まらないという事態が予想されます。Grbl標準はReset端子を使うにしてもA0端子を使うにしてもノーマリOFFが標準なのでA0端子の機能を逆転させる事にします。一つ、TRIOからEMG(エマージェンシー)信号というのが出てきます。これはスピンドルモーターに過電流が流れた場合等にHになる信号なので、何とかGrblに伝えたいと思います。いう事でTRIOのEMG信号と非常停止スイッチを両方生かす為、次の様に配線する事にしました。Grblの設定でA0信号はHとLの意味を反転させ、正常時がL、異常時がHと認識する様に変更しています。これでTRIOから出るEMG信号も非常停止スイッチも反映させる事ができます。A0信号のHとLの意味を反転させるにはconfig.hに以下を追加します。((1<<CONTROL_RESET_BIT))以上で回路が決まりました。次に基板を作っていくのですが、折角なのでこのCNCを用いて基板を切削してみようと思っています。その為にはスピンドルに基板切削用刃物を取付ける方法を考えねばなりません。・・・という事で次に続きます。admin2前回まででLinxCNCによるレーザーラスター加工が可能になりましたが課題もあります。今の所ONとOFFのみで写真等は綺麗に描画できません。細かい点の密度で階調を表現する様にgmaskファイルを生成すれば出るかもしれません。PWMでレーザーパワーを調整する様にHALを書き換えるとか・・・いずれ試したいと思います。TouchOffボタンにより座標系原点を機械原点と異なる値にすると正常動作しない。HAL内でX軸の位置を取得している「axis.0.joint-pos-fb」は機械座標での位置を返す様です。TouchOffボタンでワーク座標系を機械原点と異なる値にすると*.gmaskに書かれたX位置と一致せず、正しい位置でレーザーが出ません。何か方法がありそうな気がしてマニュアルを読んでいるのですが・・・わかったら報告します。そんなこんなで色々とありますが最低限の動作はした、という感じです。LinuxCNC自体についてはhttp://linuxcnc.org/が、またドキュメントの一部を日本語化されているシマリス技研さんのサイトも大変参考になりました。RSSWordPress.orgこちらも見てちょ~だい。