スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

LinuxCNCのArduinoでのモーション以外のインターフェース。

かなり前に書いた記事、ArduinoとLinuxCNC内で紹介さしていただいた、ロシアな方のLinuxCNC+Arduinoとゆう記事を実際に試してみました。
この記事の元記事となったImproved Analog & Digital Interface with Arduinoとゆう記事の方は、相当前に試しており、今回、BeagleboneBlackやGreen、また、LinuxCNC公式の最新のDebian上のLinuxCNCでも動くかしらん?とためしてみたくなりました。

結論からゆうと、LinuxCNC+Arduinoとゆう記事そのままでは私の環境下では作動させることはできませんでした。

ただ、ソースコードを少々触ってHAL上での作動確認はとれたので、記事とします。

Arduiono側

LinuxCNC+Arduinoのページから、our changed versionとゆうリンクをクリック、ダウンロードして、解凍。解凍されたファイルの中のフォルダArduinoの中のarduino.inoをArduinoIDEにて開いてArduinoに書き込む。

書き込むスケッチ自体、さほど程度の容量しか無いので、ATMega328を使用したArduinoUnoでなくとも、ATMega168とUSBシリアルにCH340を載せ中華ArduinoNanoクローンでも十分で、私はソレを使いました。
記事中、ArduinoIDEのインストールから書かれていますが、Win/Mac等でArduinoIDEを使用し、該当スケッチを書き込んでも良いかと思われます。


Arduino側の準備はコレで終わりです。




LinuxCNCをインストールしたPC側


該当ファイルをダウンロードし、解凍。
記事中の指示に従い sudo apt-get update をし、 sudo apt-get install python-serial にてパイソンシリアルをインストール
一応指示通り、python -c 'import serial' にてパイソンシリアルを有効にし、ダウンロード解凍したファイルのディレクトリに移動、
arduino.py とゆうファイルをテキストエディタで開きます。
もしかしたら、監理者権限でないと編集できないかもしれません。
そんな時は、
sudo nano arduino.py
で開いてください。

ファイルを開いたら、38行目の

nout =6 を、nout=3に変更、上書き保存。

このままnout=6とすると、デジタルOUTが6つの設定となり、arduino-VCP.halファイル内の信号の接続と合わなくなりエラーが出て作動させることができません。

次にarduino.pyの名前の変更。
記事中にもある通り、ArduinoIDEがインストールされたPCには、arduinoとゆうファイル名が使えない?ので、他の名前(私はarduinooとしました^^;)に。

名前を変更した元.pyファイルを sudo mv ナニガシ /bin にて/binディレクトリに移動。
chmodで実行ファイルに変更。

その下でPATHを通すコマンドが有るのですが、既に/binディレクトリにはパスが通ってると思うのですが、
一応記事通り実行。

記事ではこの直後halrun arduino-VCP.hal と入力して実行なのですが、halrunして実行するファイル、arduino-VCP.halを開いて修正します。
ファイルを開くのに管理者権限が必要な場合はsudoを付けてnano ~ファイル名 で開きます。

一行目、
loadusr -W arduino /dev/ttyUSB0 3
とありますが、この-W を取り去り、その先に続くarduinoをarduino.pyを変更した名前に書き換え上書き保存。

端末にて、このarduino-VCP.halファイルと、arduino-VCP.xmlの有るディレクトリ上で
halrun arduino-VCP.hal としてHALを実行します。

コレでUSB接続されたArduinoが入出力インターフェースとして作動すると思います。

触ってみると解るのですが、GUIでの操作からの反応がニブいです。
これは、Arduinoに書き込んだスケッチ内でUARTの通信速度が9600bpsとなっているからです。
Arduinoのスケッチと、/binに名前を変えて移動したarduino.py内にUARTのボーレートの設定があります。
このボーレートを上げるように書き換えることで、反応は速くなりますが、ArduinoのADCの読取り周期の時間が短くなってしまうので、ボーレートを上げると ADCが同じピンを読み続ける?事となり、アナログ入力は実質1チャネルだけとなってしまいます。
6本のADCチャネルですが、1つのADCを切り替えて6チャネルとしているので、このようなことが起こります。
Arduino自体のADCの読取り速度を早くすること、or ADCの読取りチャネルを減らすことでの対応は出来ると思います。

単にUSBUARTでの送受信だけでのI/Oの為、Arduinoに限らず、UARTの送受信フォーマット、データの順番を守りさえすれば、他MCUでも、同等なことができるのでは?と思います。
また、高速に通信できるのであれば、I/O の本数、種類等々も変更が可能だと思います。
実際、参考記事LinuxCNC+Arduino内では、インターフェースの種類と本数を変更し、使用されてます。

上記PC側、シマリス技研さんの公開されているUbuntu12.04LTS上で動作するLinuxCNC2.6.8と、現在LinuxCNC.orgで公開されているLiveImege上の2.78での作動を確認しております。


BeagleboneBlack,Greenの場合。

手順はほぼ同じですが、arduino-VCP.hal ,同.xmlファイルを/home/machinekit上に置き、ターミナルでそのディレクトリに移動、halrunしてください。

halrun実行時、管理者権限(root)では無い状態で実行してください。(rootで実行出来ないことが有った為。)

こちらも、Jessie ,wheezyのMachinekitで作動を確認してますが、作動後の起動でVNC接続が上手くいかない場合が有ったので、試すには、お試しSDカードを作った方がよさそうです。


LinuxCNC、加工モーションに関するステッピングモーター、サーボ制御をフィードバック制御しています。(HALファイルにて、信号の繋ぎを見るとよく判ると思います)このフィードバックループの最大時間が1ms、逆に云うと、1ms以内のリアルタイムフィードバックループでモーションを制御しています。
LinuxCNCの本家ページ、その他Wiki等にも書いてありますが、USBインターフェース自体規格上、1ms以上の遅延を許可しているが為に、たとえそんな遅延が起こらない高速なUSB通信だとしても、フィードバックループの最大時間以上の規格となるので、USB接続での機器に加工モーション系の入出力信号を許可していません。
1ms以内のフィードバックループを回しているが為、Mach3やUSBCNC、その他NCコントローラーのように、モーションコマンドを貯めて(バッファリング)しての送受信ができません。

この、ArduinoのUSBIOですが、LinuxCNC内では、リアルタイムスレッドではなく、ユーザースレッドでの作動で、少々時間が遅れても構わない、スピンドルや集塵機のON OFF制御や、クーラントの制御、ヒーターの制御、または、手元に置くHandPulseGenerater等のコントローラーの接続、もし、AutoToolChengerなどが有るのなら、そのあたりのI/Oとしての使用が適していると思います。

ADCや、AnalogOut(PWM)の結構な量のデータ転送が出来るので、パイソンのスクリプトと、Arduinoのスケッチの変更(arduinoに限らず、他MCUでも)さえできれば、相当に有効だと思われます。
また、各種制御をHalMeterの数値やHalScopeのスコープのグラフを見ながら、作動させることができるので、色々な使い方ができると思われます。
スポンサーサイト

テーマ : 自作・改造
ジャンル : コンピュータ

コメントの投稿

非公開コメント

ライセンス
アクセスカウンター
プロフィール

あきらひとし。

Author:あきらひとし。
木工用CNCルーターフレームと、ステッピングモータードライバを作ってみました。
たぶん記事は一般的な人には殆ど必要のない事ばかりなの、かも。

モーターは回るだけでも楽しい。制御(速度、トルク、位置)できるともっと楽しい!

メールフォーム

名前:
メール:
件名:
本文:

リンク
最新記事
カテゴリ
スポンサードリンク
スポンサードリンク 
スポンサードリンク
オンラインカウンター
現在の閲覧者数:
検索フォーム
RSSリンクの表示
最新トラックバック
最新コメント
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。