LinuxCNC用のMesaの外部I/Oボード

LinuxCNC、リミットスイッチ等々を各軸の+-やIndexに使ったり、ロータリーエンコーダーやリニアエンコーダーを使ったり、スピンドルのリアルタイム回転制御等々をすると、パラレルポートの入出力だけでは、とてもI/Oの数が足りません。また、PC自体のJitterの影響でStepconfWizardで生成するステッピングモーターへの司令パルスの周波数の上限が低くなったり、直交エンコーダー入力の最大入力周波数が低かったりします。

コレは元々PC上でのモーターのサーボ制御とLinuxCNCがフルクローズドループ前提のシステム設計となっていて、1ms以下の制御ループを回すために、25μS単位でのソフトウエアステップパルスジェネレータや、ソフトウエアPWMジェネレータを作動させるために出力する速度を制限しているようです。

使用するMCU内に、PRUとゆうプログラマブルリアルタイムユニットを内蔵するBeagleboneblack、Green等に使われるMachinekitには、この25μS単位で回るBaseスレッドが有りません。これはPRUが、パラレルポート出力のLinuxCNCで作動するソフトウエアパルスジェネレータや、ソフトウエアPWMジェネレータ部分の作動をするからです。
厳密に言えば、PRU自体PRUとゆう、マイコンであり、Beagleboneで使われるAM335xのメインで使われるマイコン部分とは別に作動して、Linuxが動いているメインのマイコンの負担を減らしています。また、AM335x自体にeQEPとゆうエンハンスド直交エンコーダーペリフェラルが3つ、ハードウエアとして載っているので、作動速度による直交エンコーダーの読取りの取りこぼしがありません。
モニタを繋がなければ、汎用GPIO自体は、OnOff、入力自体はServoスレッドの1ms単位での読取り、書き込み。UARTやSPI,I2Cといった通信器も、ユーザースレッドでの作動で、リアルタイムでなくなってしまいますが、ハードウエアとして内蔵しています。

RaspberryPi2や3でも、LinuxCNCは動きますが、RaspberryPi単体でのLinuxCNCの作動の場合、汎用GPIOを使用するので、パラレルポートを使用するPCみたいに、ソフトウエアステップパルスジェネレータ、ソフトウエアPWMジェネレータとなってしまうので、あまり速い信号を入出力する事ができません。
ただ、このブログ上で取り上げたRaspberryPi2,3と、FPGA,CPLDをPlutoStep/Servoとして作動させ、ステップパルスジェネレータやPWMジェネレータ部分を外部の~器として作動をさせることにより、RaspberryPi上でのLinuxCNCを普通に使うこともできます。また、Pluto~ではなく、FPGAやCPLDより安価なPICC32を使ったPICNCでも、同様な事ができるようです(PICNCは私が検証できず)。

LinuxCNCで使える一番安価?なMesaのFPGAカード、7I90HD Parallel/SPI Anything I/O cardを入手してみました。

7i90HD.jpg


ボード単価は$59で、$1=120円換算で7080円、但し一番安価なUSPSでの送料が$57.90掛かりましたので、14028円での入手価格となりました。支払いはクレジットカード払いです。
今回の入手はドーターボードや、パラレルポートへの接続ケーブル等の無いボード単体での購入でしたが、ケーブル類も一緒に購入しておくと、ボード作成やケーブル作成の手間が省けます。


以前には5I25 Superport FPGA based PCI Anything I/O cardとゆうPCIカードタイプのFPGAI/Oカードと、7I85S 4 Channel encoder, 8 differential output 1 channel Serial RS-422 interfaceとゆうドーターカードを購入し、高速入出力を試していて、国内Web上には余り情報が有りませんがLinuxCNCの最近のバージョンに含まれるPnconfWzardにて、I/Oその他Hal,iniファイルの生成が可能なようです。

今回は、このFPGAPCIカードよりも入出力が多いにも関わらず、少々安価なボードを。

この7i90HD、PCとの接続がパラレルポートのEPP通信での接続。圧倒的にPCIカードの方が通信速度が速いにも関わらず、ステップパルスジェネレータ等々のパルスジェネレータや、72ピンのI/Oなどを持っています。
EPP接続、とゆうことは、パラレルポートの無いPCではPCIやPCIeにてパラレルポートを増設すれば、となりますが、PCI系のFPGAI/Oボード自体もMesa自体が出しているので、そっちを購入したほうが良さげです。また、NetMos製のPCIパラレルポートチップでは、EPP通信自体をきちんとサポートされていないらしく、LinuxCNC公式のForum内のスレッドで注意を、とされていました。

EPP通信での外部パルスジェネレータとの、、となるとPlutoStep/ServoもPCのパラレルポートのEPP通信。通信器部分をSPIに置き換えたモノでRsaspberryPi2,3でのLinuxCNCの作動を確認してみましたが、この7i90HDも、どうもSPI通信が出来るインターフェースに置き換える事ができるようで、RaspberryPi2,3での使用や、odroidとゆう、beagleboneやRaspberryPiと同じようなARM_Linux上で作動をさせている方などなど、使い方によりけりでは有りますし、元のミニLinuxボードよりも7i90HDの方が高くつくような気がしないでもありませんが、そのような使い方も可能だそうです。興味がありましたら、上記キーワードで検索してそのあたり掘ってみると面白いかもしれません。

一応、現状LinuxCNC公式のディスクイメージとして公開されているDebianでのLinuxCNC2.7、また、シマリス技研さんのUPしているUbuntu12.04LTS上で動作するLinuxCNC2.6.0では、LinuxCNCのConfigurationSelector内のSampleConfigurations→by_interface→mesa→hm2-stepper→7i90と、サンプルコンフィグレーションが有ります、が、このサンプルでは作動しませんでした。
また、PnconfWizard内にも該当する7i90とゆう該当するボードの名前は選択することが出来ません。

このあたり、市販のソフトウエアだとクレーム殺到となるような事なのでしょうが、基本全てがオープンソースであるLinuxCNC、ソースコード読むなり、フォーラム内を検索するなり、なんとか自力で解決方法を見つけなければなりません。
5i25と7i85Sの時もまだ発売間もなく?PnconfWzard内に設定がなく、ちょいと困りましたが、今回も解決方法はフォーラム内に有りました。

PnconfWzardにて、同じEPP通信でのPCとの接続の7I43-P FPGA based EPP Anything I/O cardの7I43を指定してHal,iniファイルを作り、HALファイル内のhm2_7i43とゆう記述をテキストエディタのSearch→Replace機能を使い全てhm2_7i90に置換。loadrt hm2_7i90,,,,,とボードを呼び出す記述のconfig=に続く”で囲まれた記述内のfirmware=hm2/7i43-2/svst4_4.BITとゆう記述を削除する事でLinuxCNCが立ち上がり7i90が使用可能となります。
この.BITファイルの指定、7i43ボード等、古めのMesaボードはlinuxCNC起動時にFPGA自体のConfigurationデータをPCから送り込み、FPGAをConfigurationしてました。新しめのMesaのボードはFPGAのConfigurationファイルをコンソール内で使用するmesaflashとゆうコンフィグレーションコマンド(ソフトウエア)を使い、ボード上のSPIEEPROMに書き込みます。
ですので、各種インターフェースとして使えるドーターボード上の機能に合わせて、FPGA内の~器をmesaflashを使用して書き込みます。この時、PCとのインターフェースができていれば、別途書き込み器は必要がないようです。

また、このBITファイル自体、XilinxのISEとゆうFPGAのIDEで作成されたもののようで、FPGA上に生成するStepGenやPWMGen自体のソースコードまで、オープンソースで提供されており、XilinxのIDEの使い方や、FPGAに明るい方ならば、このBITファイル自体をカスタマイズして生成も出来るようになってます。
ですので、8軸分のステップパルスジェネレータ等々個々で必要な外部回路をFPGAの容量の制限はありますが生成することが可能です。

また、PCI,PCIeの34I/Oのボードしか有りませんが、Plug-N-Go Kitsとゆう付属ドーターボード用のFPGAのコンフィグのなされたケーブル付きのボードも販売されています。




上の方にも書きましたが、フィードバック制御前提なソフトウエアの仕様の為、Mach3のUSBSmoothStepperのような、USB接続な外部パルスジェネレーターやUSBCNCのようなUSB接続は公式にはサポートされていません。

今回PnconfWizardで生成したHALファイルiniファイルを眺めていると、通常PC付属のパラレルポートを使った場合の設定Sarvoスレッドの更新速度が1ms指定となっている所が、LatencyTestで測ってPnconfWzardで設定したjitter値によってSarvoスレッドの更新速度が200μSとなっていたり、PC自体のレイテンシに応じた速いフィードバックループとなるように設定されていました。
また、ステッピングモーター単体使用の設定なはずなのに、emulatedEncoderは使用せず、PIDでのHAL記述。
このあたり、制御の仕方等々を、となると本の2,3冊分の記述量となってしまいますので、LinuxCNCのマニュアルを一通り読んでみることをお薦めします。


ソフトウエア自体オープンソースで、各種ホビー用ソフトウエアNCコントローラーに使われて、更に無償使用が可能なのですが、その能力を十分に使おうとすると、やはりソレナリに掛かってしまいますね。

コンピュータ数値制御自体、色んな要素が多々あり、時には矛盾を持ったシステムで、CADで図面を書いてGコードに変換して、NCコントローラーで作動、加工、、、、だけでは、本来の正確な加工は難しく、LinuxCNCと同等程度の設定が必要なはずだと思います。それでも、曲線部分は正確なトレースが難しく、、。



今の所LinuxCNCで一番コストパフォーマンスの高いのは、、、BeagleboneGrennでしょうな。。

追記


本文上画像、左側上に付いているリボンケーブルの付いたコネクタにPCのパラレルポートを繋ぎます。ピン配置にも夜と思いますが、7i90側のコネクタはパラレルポートのピン配置にて出ているので、ピンヘッダの出ているマザーボードの場合、2x13(26P)のコネクタを直接繋ぐ事が出来るものもあります。
マザーボードの背面パネルにパラレルポートのコネクタが出てる場合、DSUB25のオスコネクタを繋げるアダプタを買うor作るなりします。

次記事のEthernet接続なI/Oカードと違い、この7i90HDはMesaの他のFPGAI/Oカードよりも安価にも関わらず、FPGA設定用のConfigSPIEEPROMが2つも載っており、非常時にジャンパで設定を変更する事が出来ます。
なぜこの7I90HDだけが他のカードよりも安価なのかはよく解りませんが、パラレルポートが付いたPCでの使用ならば、安価につかえるのが有り難いです。

ところで、MESAのFPGAカードには、PC側への各種インターフェース用のボードが容易されてますが、PCから見て、FPGAの外側に繋がるコネクタが25ピンの物と、50ピンの物があります。(FPGAカードに直接端子台の付いた物もありますが、、)

50ピンの方は、AnythingI/ODauterCardとされている物と、MothionControlと呼ばれる各種モータードライバ基板へ直接繋げることが出来ます。

25ピンの方は、DB25 Daughter Cardsと繋ぐことが出来ます。また、25ピンの方は、MesaFlashで書き込むFPGAのConfigファイル内にパラレルポートに直接繋ぐタイプのモータードライバ付きI/O基板を、直接繋ぐ為のファイルが有ります。
また、この25ピンのタイプのFPGAのConfig内には、SSERIALとゆうFPGA基板から更にSerial通信を使用し48I/Obitを増やす設定ファイルが有ります。

多分50ピンの物も、SSERIALは使えると思うのですが、元々のピン数が多い為なのか、SSERIALの接続出来る設定ファイルは少ないです。

ステッピングモーター4軸、スピンドルPWMスピンドルエンコーダー、Estop3軸リミットスイッチ程度であれば、25ピンタイプのの34I/O有れば事足りると思いますが、上記に加えて8軸分エンコーダーフィードバックや、オートツールチェンジ等々を、となると、SSERIALによるI/Oの追加や、50ピン3本の72Ì/Oなボードが必要になるかもしれません。

全てが全て、単純にFPGAのピンを引き出しているわけではなく、特定のFPGAのConfigでは、ピン数を節約するためにQEncoder入力が多重化されていたり、アナログ入力なボードが有ったりと、簡単に外側のI/Oボードを自作出来ないものも有ります。
このあたり、Configのソースファイル、PIN_と書かれたファイルを確認すると判ります。


品種が多いのと、人それぞれNC制御に必要なI/Oの数は違うので、よく調べないといけませんね。
スポンサーサイト

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

コメントの投稿

非公開コメント

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

あきらひとし。

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

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

メールフォーム

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

リンク
最新記事
カテゴリ
スポンサードリンク
スポンサードリンク 
スポンサードリンク
オンラインカウンター
現在の閲覧者数:
検索フォーム
RSSリンクの表示
最新トラックバック
最新コメント
月別アーカイブ