FC2ブログ

ラズベリーパイのRealtimePi-buster-lite-0.4.0へのLinuxCNC2.9preのインストール


昨日この記事書いたんだけれどもRaspbian-buster-liteのRealtimePiなRTPREEMPTなSDイメージ、RaspberryPi3で動かなく、下記はRaspberryPi4向けの記事です。
基本手順はたいして変わらないのでPi3の場合のSDカードイメージはOfficial mirrorを使いましょう。Orz,,,,,



おぼえ書きとして。

基本手順は公式Wiki 内RPi3BPreemptRTより。

まず、RPi3BPreemptRT内ではリアルタイムカーネルのコンパイルから始まりますが、時間がかかり面倒なのでrtpreemptパッチの当たったSDカードイメージをダウンロードします。

今回はDebian10と同等?な最新のbuster-liteのOSイメージへのインストールした手順を記しておきます。

RealtimePiのGithubのページ、guysoft/RealtimePiのNightly builds are available here (currently built on demand)のhereをクリックしアーカイブされているNightlybuildのページに飛びます。このページは最新のどちらかとゆうとテスト用のrtpreemptなパッチの当たったRealtimePiのイメージが置いてあります。
もし、過去の安定版が必要であるならば、Official mirror is hereのhereをクリックすると今なら
2018-06-12_2018-04-18-realtimepi-stretch-lite-0.3.zipとゆう安定版が入手可能です。
もちろんこちらでも先のLinuxCNC公式のRaspberryPi3へのインストールページのLinuxCNCのインストール部分を実行するとRaspberryPi上にLinuxCNCをインストールすることが出来ます。(確認済み)
ただ、多少インストール時にエラーが出るかも知れません。エラーのコメントどおりに修正すれば問題なくインストール可能でした。

今回はRaspberryPi4が発表、海外では販売開始されたので、OS自体新しいBuster-liteとします。
基本的な手順は同じです。

ダウンロードしたSDカードイメージをSDカードに書き込みます。
書き込み方はRaspberryPi公式Installing operating system imagesに各種OSからSDカードに書き込む方法が書いてあるページに飛べます。

書き込んだら書き込んだSDカードをRaspberryPi3、3+に刺しキーボード・マウス、LANケーブル、モニタを繋ぎ最後に電源を繋ぎ起動。
通常のRaspberryPi用のGUIな所が無い-liteが付いたイメージなので、コンソールが立ち上がります。

RaspberryPi3の場合、Pi上のHDMI端子から直接のGUI表示を行うと結構なCPUパワーを食われるので、基本SSH-Xな接続での使用が無難だと思われます。そのため-liteの付いたOSイメージを使います。
コントロールはモニタレスで外部PC、若しくはもう一台のRaspberryPiを使ってモニタ表示を行ったほうがリアルタイム遅延が少ないです。
普通のRaspberryPiにてLinuxCNCをインストールしたRaspberryPiにSSH-Xで接続する際、コマンドとして
$ssh -XC4 pi@192.168.0.某
とすると、SSH接続の通信内容に圧縮が掛り多少モニタ表示、クライアント側のRaspberryPiでの表示速度が改善されます。
user はpi 、passはraspberryでログインします。

SDカードの容量の拡張もしておいたほうが良いと思われます。
Raspi-configを使用してキーボード、ネットワーク等の設定をしておきます。

Wifiも設定しておくと良いでしょう。
この辺りの設定の仕方は他のWebページにたくさん出ていると思われるので、このページでは端折ります。
もちろんLinuxCNC公式Wiki内のRPi3BPreemptRTのページにもCONFIGURE SOME BASIC SETTINGSとして少々載っております。

MobaXterm等、SSH-Xでの接続でモニタレスで使用する場合のためにRaspberryPiのIPアドレスを調べて控えておくと良いでしょう。Wifi接続時のIPアドレスも。

$ip a

でつらつらと出てくるはずです。フツーのご家庭では192.168.0.某と。

RPi3BPreemptRTのページのGet used to doing clean shutdowns to protect the Pi and SD cardの所にコンソールでのシャットダウンの仕方が書いてあります。
シャットダウンにはhalt -n以外にもsudo shutdown -h nowとしてもシャットダウンされます。
また、リブート時にはsudo reboot 若しくはsudo shutdwon -r nowとするとリブート出来ます。

LinuxCNCをインストールと書きましたが、正確にはソースコードをGithubからクローンして、LnuxCNCをビルドして実行ファイルを生成します。
インストールするディレクトリを起動時のフォルダとするため
$cd
します。
GithubからLinuxCNCのソースコードをダウンロードします。

pi@realtimepi:~ $ git clone git://github.com/linuxcnc/linuxcnc.git linuxcnc-dev
Cloning into 'linuxcnc-dev'...
remote: Enumerating objects: 146, done.
remote: Counting objects: 100% (146/146), done.
remote: Compressing objects: 100% (101/101), done.
remote: Total 212859 (delta 71), reused 92 (delta 45), pack-reused 212713
Receiving objects: 100% (212859/212859), 127.01 MiB | 4.64 MiB/s, done.
Resolving deltas: 100% (162174/162174), done.
Checking out files: 100% (6065/6065), done.
コマンドを入力するとつらつらつらと処理内容が表示されます。

次にカレントディレクトリから linuxcnc-dev/debian/に移動しビルドの設定をします。
そしてソフトウエアの依存関係の設定をします。

pi@realtimepi:~ $ cd linuxcnc-dev/debian/
pi@realtimepi:~/linuxcnc-dev/debian $ ./configure uspace
unknown distribution: Raspbian-10
detected dependencies may be incomplete or wrong
please consider fixing it and submitting a pull request
successfully configured for 'uspace-Raspbian-10'-'uspace'..

未知の分布:Raspbian-10は依存関係が不完全か間違っていることを検出したため、修正してpull requestを送信してください
と出ますが、一応ソフトウエアの依存関係のリストが作成されます。

一つ上のディレクトリに移動 $cd ..とし、ビルドに必要なソフトウエアやライブラリをチェックします。

pi@realtimepi:~/linuxcnc-dev/debian $ cd ..
pi@realtimepi:~/linuxcnc-dev $ dpkg-checkbuilddeps
dpkg-checkbuilddeps: error: Unmet build dependencies: debhelper (>= 6) dh-python libudev-dev tcl8.6-dev tk8.6-dev libreadline-gplv2-dev asciidoc (>= 8.5) dblatex (>= 0.2.12) docbook-xsl dvipng ghostscript graphviz groff imagemagick inkscape python-lxml source-highlight texlive-extra-utils texlive-font-utils texlive-fonts-recommended texlive-lang-cyrillic texlive-lang-french texlive-lang-german texlive-lang-polish texlive-lang-spanish texlive-latex-recommended w3c-linkchecker xsltproc python-dev python-tk libxmu-dev libglu1-mesa-dev libgl1-mesa-dev | libgl1-mesa-swx11-dev libgtk2.0-dev gettext intltool autoconf libboost-python-dev libmodbus-dev (>= 3.0) libusb-1.0-0-dev desktop-file-utils yapps2

結果が出てくるのでコレをインストールします。
所々で (>= 0.2.12)のような記述が出てきますが、多分このライブラリやソフトウエアのバージョンがコレ以上必要と云う記述で、 libgl1-mesa-dev | libgl1-mesa-swx11-devと|(パイプ)で結合されて出てきているものはパイプ以前に書かれたソフトウエアに含まれているとゆう意味だと思われます。()の記述とパイプとパイプ以降の記述を削除して$apt-get installします。

pi@realtimepi:~/linuxcnc-dev $ sudo apt-get install debhelper dh-python libudev-dev tcl8.6-dev tk8.6-dev libreadline-gplv2-dev asciidoc dblatex docbook-xsl dvipng ghostscript graphviz groff imagemagick inkscape python-lxml source-highlight texlive-extra-utils texlive-font-utils texlive-fonts-recommended texlive-lang-cyrillic texlive-lang-french texlive-lang-german texlive-lang-polish texlive-lang-spanish texlive-latex-recommended w3c-linkchecker xsltproc python-dev python-tk libxmu-dev libglu1-mesa-dev libgl1-mesa-dev libgtk2.0-dev gettext intltool autoconf libboost-python-dev libmodbus-dev libusb-1.0-0-dev desktop-file-utils yapps2

依存関係の部分でRaspbian-10のリストは無いと出力されていたのでビルドに必要なソフトウエアはこれだけでは足りません。
LinuxCNCをビルドすれば、足りないソフトウエア部分で何が足りないかエラー表示があるので、その都度インストールしますが、あとからインストールするのは面倒なので先にインストールしておきます。

$sudo apt-get install bwidget libtk-img tclx autoconf
上記はRPi3BPreemptRTのページに有るもの。

$sudo apt-get install python-gtk2
$ sudo apt-get install python-yapps

これは私がインストールした時にエラー出力でインストールしろと指示が出たものです。

この先、Raspberrypi-10のインストールリストが更新されると、各種ライブラリの依存関係チェックの時にリストの中に入るようになるかもしれません。

カレントディレクトリを起動時のディレクトリに戻し、linuxcnc-dev/srcに移動しビルドのConfigureをします。

$cd
$cd /linuxcnc-dev/src
$ ./autogen.sh
$ ./configure --with-realtime=uspace

依存関係にあるライブラリやソフトウエアが有るかチェックが始まります。

チェックが終わると下のようなテキストが表示されます。

######################################################################
# LinuxCNC - Enhanced Machine Controller               #
######################################################################
# #
# LinuxCNC is a software system for computer control of machine #
# tools such as milling machines. LinuxCNC is released under the #
# GPL. Check out http://www.linuxcnc.org/ for more details. #
# #
# #
# It seems that ./configure completed successfully. #
# This means that RT is properly installed #
# If things don't work check config.log for errors & warnings #
# #
# Next compile by typing #
# make #
# sudo make setuid #
# (if realtime behavior and hardware access are required) #
# #
# Before running the software, set the environment: #
# . (top dir)/scripts/rip-environment #
# #
# To run the software type #
# linuxcnc #
# #
######################################################################

この内容に従って
$ make
します。

30分位掛かります。

LinuxCNCのビルドが終わると下のように表示されます。

You now need to run 'sudo make setuid' in order to run in place with access to hardware.

指示に従い

$ sudo make setuid

します。


その後下のようにするとLinuxCNCをRunすることができる準備ができます。
このインストールの方法はRunInPlaceでLinuxCNCを作動させます。
起動してコンソールを開いたら必ず下記の手順でスクリプトを作動させないとLinuxCNC本体、halrun、latency-test等々が動きません。
RunInPlaceは最新のLinuxCNCがインストールされます。
参考LinuxCNC Run In Place

$ cd
$ cd linuxcnc-dev/
$ . scripts/rip-environment

その後、ちゃんとビルドされているかをLinuxCNC等起動する前にチェックを行います。

$ scripts/runtests

上記のコマンド、RPi3BPreemptRTのページと違いますが上記が正解です。


これでLinuxCNCのインストールが完了しました。



RPi3BPreemptRTの記述では、その後、外部入出力インターフェースについての記述が続きますが、
私は公式にリアルタイムコンポーネントが有るMesaの7i90HDを使います。
HALのリアルタイムコンポーネント名はhm2_rpspiで、コンポーネントについての説明のページがあります。また、RaspberryPi3でLinuxCNCを運用する際のちょっとした注意事項も書かれているので読んでおくと良いでしょう。

RaspberryPi3の場合、CPUの少消費電力でクロックを下げる機能をOFFしたほうが良さげです。(記述内にヒートシンクをつけて冷却せよと書いてある)


7i90HDのHAL INIファイルの記述はまた今度、、。
スポンサーサイト



RaspberryPi3へのmesaflashのインストール、コンフィグ用SPIROMへの書き込み。

RaspberryPi3用のLinuxCNCの公式ビルドは今の所有りません。前記事内のリンクの記述に沿って作業をすればインストール出来ます。
Mesa7i90HDのクローンを作ってコネコネ触っているのですが、せっかくクローンを作ったので、mesaflashにてFPGAのコンフィグレーションSPIROMの書き換えをしたいと思いmesaflashをインストールしてみました。


ラズパイのカレントディレクトリをインストールしたいディレクトリに移動。
gitcloneを使いGithub上に有るmesaflashのソースコードのクローンをRaspberrypi3上に作成。
クローンしたmesaflashのディレクトリに移動。
raspberryPiにPCIインターフェースは付いてないのですが、mesaflashのプログラム自体が各種インターフェースのmesaボードの書き込み、書き換え等に対応している為、libpci-devをインストール。
makeコマンドでmesaflash実行ファイルを生成。
使う時はクローンしてmakeしたmesaflashファイルの有るディレクトリ内で
$./mesaflash ~
で命令を実行。

手順はgithub上に有るmesaflashのREADMEに書いてあるとおり。

github上には複数のmesaflashが有るのですが、今回クローンしたmesaflashはmicges/mesaflashでクローンするには

$gitclone https://github.com/micges/mesaflash

としクローンを作成。

カレントディレクトリをクローンしたmesaflashのソースコードファイル内に移動

$cd mesaflash

mesaflashコンパイルに必要なlibpci-devをインストール。

$sudo apt-get install libpci-dev

ソースコード内に有るMakefileを使ってソースコードをコンパイル、実行可能なファイルを生成。

make

生成されたmesaflashの作動チェック。helpを表示

$./mesaflash --help

です。

実際にRaspberrPi3にSPI0を使って繋いだ7i90HDクローンのHMID(Hostmot ID?)を読み込む場合は、

./mesaflash --device 7I90 --spi --addr /dev/spidev0.0 --readhmid

のように、デバイス名、インターフェース、インターフェースのアドレス指定、作動させたいコマンドを入力します。


せっかくなので、ジェネリック7I90HDのコンフィギュレーションSPIROMも書き換えてみます。
ジェネリック7i90HDに使用したいコンフィギュレーションファイルはmesaの7i90HD販売ページ内に有るSpecificationタブ内Support Softwareの所のDownload Support Softwareを押すとダウンロードされる7i90.zipファイルを解凍した7i90/configs/hostmot2/source/hostmot2.zipを解凍した中のXixinxのISEのプロジェクトファイルseveni90spi.xiseをISEで開いて選んで理論合成しファイル出力した物です。
大抵の場合、7i90/config/hostmot2内に有る.bitファイルで事足りると思うのでそれをmesaflashを使って書き込むことが出来ます。
書き込むこと自体は同じことです。


通常の7i90HDであるならば、

$./mesaflash --device 7I90 --spi --addr /dev/spidev0.0 --write コンフィギュレーションファイル名.bit

で書き込み、Verifyされますが、ソコはジェネリック、大本のコンフィギュレーションはISEで生成したファイルをSPIROMに書き込むファイルに変換、DigilentのJTAG-HS2 Programming Cableを使ってSPIROMへ書き込んでいるので上記の記述では書き込むことが出来ません。

JTAGで書き込んだSPIROMでFPGA自体はコンフィギュレーションされちゃんと作動するのですが、Mesaの仕様でない書き込み位置の為、ハネられる御様子。

pi@realtimepi:~/mesaflash $ ./mesaflash --device 7I90 --spi --addr /dev/spidev0.0 --write topgcspihostmot2.bit
unable to set bpw32, fallback to bpw8
Checking file... OK
File type: BIT file
Error: BootSector is invalid

ソコでmesaflashのhelpをよく読んでみると--writeコマンドの後に--fix-boot-blockとゆうオプションが有ります。
このコマンドを使って書き込むと無事、Write、Verifyされました。

pi@realtimepi:~/mesaflash $ ./mesaflash --device 7I90 --spi --addr /dev/spidev0.0 --write topgcspihostmot2.bit --fix-boot-block
unable to set bpw32, fallback to bpw8
Checking file... OK
File type: BIT file
Erasing sector 0 for boot block
BootBlock installed
EEPROM sectors to write: 6, max sectors in area: 8
Erasing EEPROM sectors starting from 0x80000...
|EEEEEE
Programming EEPROM sectors starting from 0x80000...
|WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
Board configuration updated successfully.
Checking file... OK
File type: BIT file
Boot sector OK
Verifying EEPROM sectors starting from 0x80000...
|VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
Board configuration verified successfully.

You must power cycle the hardware
pi@realtimepi:~/mesaflash $





RaspberryPiなLinuxCNCとMesaボード

RaspberrypiでもLinuxCNCとゆう方々は居られるようでLinuxCNC公式Wiki内にRaspberryPiとゆうページが有り更にRPi3BPreemptRTとゆうRaspberryPi3用のLinuxCNCインストール手順ページが有ります。
んで、リアルタイムコンポーネントにもHM2_RPSPIとゆうMesaの7I90HDとゆうFPGAボードをRaspberryPiで使えるボード用のコンポーネント迄。

この7I90HD、そのまま使うとパラレルポートのEPPとゆう通信でPCと繋ぐ外部FPGAボードなんですがEthernetやPCI、PCI-E程物理的な接続は難しく無いので、手持ちのFPGA、XilinxのSpartan6を使いクローンを作ってみました。
Mach3とかのクローズな商用ソフトウエアとは違い外部FPGAボードのソース・ファイル迄公開LinuxCNCは公開されています。
結論から言えばクローンの作成は可能です。
Mesaのボード自体の価格はFPGAボードの中では安価なのですが、海外送料がかなり掛かるので、一つはオリジナル、緊急時には自作できるといいなぁ、と思い作成してみました。



RaspberryPi3でのLinuxCNCについて。
上記の公式Wiki内RPi3BPreemptのページ内にてRTPremmptなカーネルビルド云々からLinuxCNCの起動、運用に近い所迄解説してありますが、リアルタイムカーネルをビルドするのに非常に時間が掛かります。
公式フォーラム内にRealtimePiのビルドされたSDカードイメージのNightly buildsがRealtimePiのGithub内にリンクが有るので私はソレを利用させていただきました。
RealtimePiのSDイメージを使えばLinuxCNC公式Wiki内のリアルタイムカーネルビルド部分は飛ばす事ができます。


このページで自作FPGAボードにMesa7i90HDのConfigファイルを入れて同等に動かす、とゆうのは、自分で動かしてから、公式フォーラム内のFlash a XC6SLX9 dev board as a 7i90HDにXilinxのSpartan6 XC6SLX9な中華ボードを使ってのクローンは可能か?とゆう記事が有ります。中華Spartan6ボードは$19程度で販売されています。ピン配置と使用クロックの調整の為ソースコードを触るだけの知識は必要ですが問題なく作動させることが可能です。(過去に作ったSpartan6のボードで確認済み)
FPGAのIDEであるISEの使い方の理解とかUCFファイルとゆうピン配置、制約ファイルとかの理解は結構大変であろうとは思いますが、コレを作ることが出来るとPCでもラズパイ3でもI/O部分はなんとでもなるようになります。また以前の記事「LinuxCNCのMesaなFPGAカードのSSERIALドーターカードの互換カードを作る」内でSSerialなI/Oカードも作ることができるので、1msでのI/Oは扱いきれない位出す事ができるようになりました。




RaspberryPi4も(海外では)発売されたようですし簡易な(とはいえどもフルクローズドが組める)NCコントローラーはこの手のカードサイズPCで十分と言われる世の中になるのかもしれません。



BBB、BBGのMachinekitで有れば外部FPGA繋がなくともStepper出力等がリアルタイムでは有りますが、やはりGUIを使った操作はニブいので、、基本的な思考としてはMachinekitは外部クライアントに表示させるモノのようです。

ただ、Raspberrypi3でのLinuxCNCも1台のRaspberryPi3で表示から何からするとLatencyが??となるので、LinuxCNCをインストールしたRaspberryPi3はGUIを使わずコンソールのみとしてSSH -Xで別PCorRaspberryPi3とかのクライアントな接続とすると良いようです。PCからのWifi接続でも、環境jによるとは思いますが、普通のPCでのLinuxCNCの作動よりチョイと遅いかな?程度で動いています。












LinuxCNCの外部FPGAカードのConfigファイルである.bitファイルを作ってみる。

LinuxCNCの外部I/O,シグナルジェネレータ等の器であるMesaのFPGAボードのFPGA部分をConfigするファイルである.bitファイルを生成してみました。
基本的にFPGAと呼ばれるフィールドプログラマブルゲートアレイ、電源を入れると毎回書き換え可能なSPIROM内に書き込んである.bitファイルのデータ読み込みコンフィグレーションされます。
FPGAは毎回電源を切るorリセットが掛かると内部の回路情報が消えてなくなり、電源が入る度にSPIROM等から.bitファイルを読み込み回路情報通りの回路を生成します。
余談ですが、最近のIntel(旧アルテラ)のMax10などはこのコンフィグレーション用の書き換え可能なROMを内蔵しています。

この回路を生成するファイルを回路情報を記述したファイルより、合成、作成します。
このConfigファイル、MesaのFPGAカードの販売ページ内のFPGAカードのページのSpecificationタブ内にSupportSoftwareとしてzipファイルとして置いてあります。
そしてこのサポートソフトウエア内のconfigs/hostmot2に代表的な既にFPGAの開発環境を使い作られたコンフィグレーションファイルである.Bitファイルが有り、このファイルをLinuxCNCをインストールしたPCのコンソールを使いmesaflashとゆうコマンドでコンフィグレーションファイルが書き換え可能です。

このメーカー側が作ってくれたコンフィグレーションファイル通りのI/O、各種パルスジェネレータ等としたい場合は良いのですが、そうではない場合、コンフィグレーションファイルを作成しなければなりません。
bitファイルになる前のソースコードとなる物が、config/hostmot2/source内のhostmot2.zipに入っています。解凍するとhostmot2フォルダが出てきて、その中にはMesaのFPGAカードで使われているXilinxのFPGA用IDEのISEデザインスイートのプロジェクトファイルその他コンフィグレーションファイルが生成出来るソースコードの一式が詰まっています。

xilinxのISEは無償で使うことの出来るISEWebPackとゆうものが有り、使用は無償ですが、ユーザー登録とライセンス認証が必要です。
かなり古い開発環境では有りますが最近はWindows10用も用意されてWindows環境LInux環境双方での使用が可能です。

検索すればWeb上にいくつかのインストールの方法が出てきますので今回はISEのインストール、ライセンス認証の仕方はこの記事には書きません。

基本的にはLinuxCNC公式Wikiページ内のMaking bitfiles for MESA Hostmot2 boards.に記載されている通りすればコンフィグレーションファイルであるbitファイルを生成することが出来ます。
Wikiの記事では、例としてEPP接続のFPGAカードのコンフィグレーションファイルの生成が書いてありますが、このページではPCI-E接続の6i24-25のbitファイルの生成を軸に書いてみます。

軸に、とゆうのは、FPGAとPCを繋ぐインターフェース部分の違いによって開くプロジェクトファイルが違うからです。
大きな違いはここで、PCI-E接続の6i24-25はPCI接続の5i24-25をエミュレーションしている状態でファイル生成に使うプロジェクトファイルはfivei24.xiseをISEにて開きます。
ise1.png

ファイルを開いたらStart/Design/Files/Librariesとあるタブのライブラリタブの中に使いたいピン設定ファイルが有るか確認します。
Source/hostmot2ファイル内に有ってライブラリ内に無いPIN設定が有る場合、Librariesウインドウ内を右クリックしてメニューを出し、Add Sourceを選びPIN設定のvhdファイルを読み込みます。

このPIN_~.vhd ファイルが使いたいパルスジェネレーター、インターフェースの数等を指定しているファイルです。

例えば、、、PIN_ST24_72.vhdとゆうファイルが有ります。コレはStepGen24個と23個のGPIOが使用でき、FPGAボードの入出力ピンヘッダの数が72本のPIN設定vhdファイルです。
PIN_ の後に続くSVSTとかは、

SS スマートシリアル
TP 3相PWM
RS リゾルバ
UA UART
SV Servo
ST Stepgen
となっているようで、その後に続く数字はこの英文字の表記の順番でのそのインターフェースの数を表してるようです。
が、そうとも限らない物やこの記述以外の記述の仕方のPIN_ファイルも有るので、vhdファイルをテキストエディタやプログラマーズノートパッドとかで開いてみて確認してみてください。
また、.vhdの直前に有る数字はFPGAカードに有る入出力ピンの数で5I24や6I24のような50ピンのピンヘッダが3つ付いている物はそのうち72ピンが入出力ピンです。
5I25や6I25などの26ピンヘッドとDSUB25ピンなカードは.vhdの前の数字は34と付いたものを選びます。

Designタブを押すとHierarchyに一つ緑の四角3つのアイコンが付いたファイル名をダブルクリックして開きます。
TopPCIHostMot2.vhdファイルのソースコードを上から見ていくと
-------------------- select one card type------------------------------
とあり、今回の場合、
use work.@Card@.all;
となっているので--を付けてコメントアウト。
--use work.@Card@.all;
とします。
今回のボードで有るi24_x25を指定するために
use work.i24_x25card.all; -- needs 5I24.ucf and SP6 x25 256 pin
の--を外します。
--はvhdファイルのコメント記号のようで、コレを付けたり外したりして選択していきます。

基本的に購入し、使用するFPGAカードの販売ページ内からダウンロードしたソースファイルを使用すると、そのボードに合った指定されたファイルになっているようです。

その下
-------------------- select (or add) one pinout -----------------------

use work.@Pin@.all;
となっているので--を付けて
--use work.@Pin@.all;
とします。

そしてLibraries内に有ったPIN_.~vhdファイルの名前がつらつら出てきます。
一つコメントアウトしますLibraries内に無く追加もしくは変更したファイルが有ればそのファイル名を元にここに書き込みます。

たとえば、下の画像のように。(クリックすると別ウインドウで大きく開けます)
ise2.png

そしてフロッピーディスクマークを押しセーブしときます。
上記画像内Hierarchyウインドウ内のグレーになっているxc6slx16-2ftg256となっているのは、6I24-16のデバイスですので、デバイスの容量を変更します。
xc6slx16-~となっているところを右クリックし、出てきたウインドウ内の一番下DesignPropertiesを選択。
するとウインドウが開きその中のDevice名の所をXC6SLX16からXC6SLX25に変更します。
実際の所MesaのFPGAボードxilinxのFPGAをしようしてるんですが、新し目の物はXC6SLX(Spartan6)の容量は9~25迄様々ですので、ここは確認が必要です。
容量ですが72ピンのI/Oのコンフィグファイルで25の容量でも、半分もロジックエレメントの類いを使用していないので一つ下のSLX16で十分なのかも、とも思います。

コレでbitファイルの生成の準備はできました。
後はHierarchyウインドウしたのProcessのウインドウ内のGenerateProgrammingFlie をダブルクリックして合成を開始します。

Synthesize,Implement,GenerateProgrammingFileと3つの処理を行うので、処理が修了するにはしばらく時間がかかります。(うちの古PCのWindows環境下で7分程度)

Process "Generate Programming File" completed successfully
と表示され、config/hostmot2/source/hostmot2内に.bitファイルが生成されれば成功です。
生成されるbitファイルの名前は使用したプロジェクトのトップファイルの名前が付けられるのでこの場合toppcihostmot2.bitとゆうファイル名で出てきます。

このファイルをLinuxCNCなPCに持っていきMesaflashするとこのファイルが書き込まれConfigに使用されます。





余談
ISEにて.bitファイルを生成成功すると、DesignSummary(ProgrammingFileGenerated)にてこのソースコードを使って使われたFPGA内のリソース数とパーセンテージを見る事が出来ます。


参考
LinuxCNC公式Forumより
Mesa 5i25 custom bitfile
custom mesa implementation



基本的にLinuxCNCのこのFPGAのConfigファイル生成用のソースファイルのライセンスはソースコード内の記載により
GNU General Public License (GPL), version 2.0 or later
3-clause BSD License
となっているオープンソースソフトウエアです。

LinuxCNC公式フォーラム内の記述custom mesa implementationにLatticeのFPGAを使用して云々と有ります。
LinuxCNC派生MachinekitのDE0NanoSoCボード上のARMSoCFPGA上のMachinekitの中には、ここのソースコードで生成されたコンフィグファイルを利用してSoC上のFPGAをコンフィグレーションしI/Oとしています。







かなりニッチな記事ですが、日本語で書かれた記述が無かったので記事としました。基本は公式Wiki内の記述をGoogle翻訳等で読み下してください。
LinuxCNC、1msのリアルタイムのモーションフィードバックができるのが最大の特徴です。
スマートシリアルも利用するとかなりのデータ量をPCに送り込む、取り出す事が可能です。
入出力は割とどうとでもなる事がよく解りました。











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

LinuxCNCのMesaなFPGAカードのSSERIALドーターカードの互換カードを作る

前記事にてSSerialなドーターカードの作動をしてみましたが、色々なデータをリアルタイムスレッドに突っ込んで1msのリアルタイム制御がしたいと思い、全記事最後の方に有るリンク内のソースコードを参考にMCUを使ってSSerialにてLinuxCNCのリアルタイムスレッドにデータを出し入れしてみました。

基本的に全記事最後の方のに有るリンク内のソースコードを使用し、手持ちで使ってないSTM32F410RB用にプログラムを変更。
案外すんなりSSerial接続でのデータの入出力が可能になりました。

なぜ、SSerialでのデータの入力がしたいかとゆうと、リアルタイムスレッドで動くリアルタイムコンポーネントに接続出来るから。通常のMesaのFPGAカードの沢山有るI/Oをリアルタイムコンポーネントで纏めてデータを入力、、とも考えたのですが、配線が大変なことに。
SSerial経由だと、MCUを使うことにより、ADC,DAC,その他各種通信器からのデータも纏めて入出力が可能となり、NCコントローラー内で電源管理からモーター電流云々まで把握でき便利であろう、と。

SSerialがいかようにもなる事が解ったのでとりあえずの所LinuxCNCのインターフェースに関する事はなんとでもなるように。
SSerial接続のドーターボードが自作できなくとも、I/Oの主となるMesaのFPGAカードは購入せねばならない(ソースコードは公開されているので、自作できなくはないが市販のFPGAボードに比べれば安価)ので、必要なI/Oが決まっているのであればドーターボードの類いも一緒に購入したほうが効率的だと思われます。

現状インターネット上に上がってるソースコードと情報で自作が可能(各種機器を繋ぐ場合のドライバ部分は自作せねばですが)とゆうことが解りました。

ソース

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

LinuxCNC_Mesa_SSerialドーターカードな7I69を作動させる。

LinuxCNCに公式にサポートするMesa外部FPGAカードRemoteSerialDautherCardである7I69を作動させてみました。

IMG_1697.jpg


かなり前にEtherNet接続の7I92MとゆうDサブ25ピンのI/O が2つ付いた7I92や、パラレルポートのEPP接続で通信する7I90HDと一緒に購入してありましたが、ボード上のSmartSerial入出力ピンから差動信号に変換する簡単な回路を作るのに億劫となっていたので、少々放置してしまいました。

どうもMesaの商品ラインナップを見ていると、50ピンx3が付いているFPGAカードは元々ピン数が多いので問題有りませんが、Dサブ25X2が付いている通常のPCのパラレルポートを置換する形で使うFPGAカードでQuadEncoder等を使ったりMPGを引き出したりするとピン数が足らなくなる場合が多々ありそう、なので、SSerialを使ったDaughterカードを追加してI/Oを増やすように出来てるようです。

Dサブ25ピンのFPGAカードでは、Dサブで接続するDsub25DaugherCardを接続して使うのが基本っぽく、大きくI/Oが多い7i76,7i77には、オンボードでSSerial接続なI/Oが載っています。
なのでDSub25ピンの内17本の信号線以上のI/Oが7i76,7i77には出ています。

今回はDSub25なDaugherカードはしようせず、FPGA基板のDSub25から直接信号線を引き出し、FullDuplexの差動信号に変換、LANコネクタを介してLANケーブルで7i76へ接続しました。
使用したFPGAカードはEtherNet接続な7i92M7i92MLinuxCNCでの使用は以前の記事に。

LinuxCNCのHAL的には非常に簡単に繋がり、ピン等は自動で読み込んでくれます。

halファイル内でFPGAボードのリアルタイムコンポーネントを呼び出す際のconfigの引数として、"num_stepgens=x"とかと同じように"sserial_port_0=0xxxxxxx"と記述するだけです。
この時のsserial_port_NのNはSSerialのポート番号、その後に続く8桁の数値は接続したSSerialボードのモード設定用の数字です。
SSerial1ポート毎に8つのチャネルが有り、右から左へ1番2番~8番となっています。xはそのチャネルを無効化します。
この事はLinuxCNC公式ドキュメントのHOSTMOT2のconfig modparamの項目内に書かれています。

各SSerialなドーターカードはカード固有のモード設定を持っていて7i69の場合、

MODE 0 Bidirectional mode (48 bits in 48 bits out)
MODE 1 Input only mode (48 bits in)
MODE 2 Output only mode (48 bits out)
MODE 3 24/24mode (24 bits in = bits 0..23 and 24 bits out = bits 24..47)
MODE 4 Bidirectional mode (48 bits in 48 bits out) plus 4 MPG encoder channels on inputs 0 through 7

と4つのモードを持っています。このモードの解説はボード毎に違うので各ボードのマニュアルを参照します。

7i69には50ピンのピンヘッダが2本付いてますが、50ピンの内、GNDが50本5Vが1本、信号線が24本で、全ての信号線の数は48本です。
モード設定のMODE1,2,3は理解できますが、MODE0,4はバイデレクショナルモードとなっており、InputOutput双方出来てしまいます。

MODE1,2,3の場合、MODE0に比べ情報量が半分になるため、1つのSSerialに複数のボードを繋いだ場合、に有効なようです。
MODE4の通信量が一番多そうです。

LinuxCNCのhalrunを使用し直接作動させてみると分かるのですが、HAL上のピンの設定自体InputとOutputが有り個別に操作できてしまいます。 


ハードウエア的にSSerialなドーターボードはLANケーブルを利用したRS422なインターフェースでの信号入出力でFullDuplexになってます。
ですので本来でいくとシングルエンドのTX、RXの信号を双方作動信号とするデバイスが必要ですが、秋月にはHalfDuplexなRS485なトランシーバーしかありませんでした。ですので、コレを2つ使い、TXとRXを別々に作動させて使用しました。(片側のTX,RXの作動を無効化)
ここでMesaのFPGAボード側のTXRX,今回のドーターボード側のTXRXは逆にして接続します。(TransmitとReceveなので)
使用したデバイスは秋月で売ってるRS485/RS422トランシーバ SN75176BP2つで、速度的に問題ないようです。もう一つ有るRS485/RS422トランシーバ LTC485CN8でも構いません。
回路といえども、電源ピンに0.1μFのセラコンを付けただけで、ほぼ配線を繋いでいるだけ。LANケーブル・コネクタとして、通常のユニバーサル基板に刺さるように基板付きのLANコネクタDIP化キットも使用し、LANケーブルにて接続できるようにしました。
とりあえずのテストなので、電流がそんなに流れないであろう事を踏まえ、LANコネクタに電源線も配線。FPGAボードに供給した電源からの駆動となり、LANケーブル1本でOKとなります。



LinuxCNCのhalを使い簡単なチェック用のパネルを生成し、Qエンコーダー入力をしています。
入出力ピンが非常に多くなります。
MPGやキーパッドを作るのに良いかもしれません。
キャラクタ液晶をコントロールすることのできるMPG向けの7I73 Pendant/control panel interfaceなどでも良いかも。


このSSerialプロトコル等がマニュアルに記載されていて、LinuxCNC公式フォーラム内にはcustom board for smart serial interface?とゆうスレッドも有ります。
このスレッド内のリンク、Githubにてrene-dev/stmblとゆうSTM32を使用したSSerial接続も可能なブラシレスDCモータードライバの作例も公開されています。
7i69に載っているデバイスもdsPIC33Fなので、2.5Mbpsで通信できる比較的高速なマイコン等でなら、自作可能かもしれません。

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

DE0NanoSoCなMachinekit

かなり前の記事「DE0-NANO-SoC FPGAでMachinekit/LinuxCNC」にてIntelのFPGASoCなTerasicのDE0NanoSoC上でのMachinekitの作動の記事を書きました。


BealgeboneBlack/GreenでMachinekitが動くのでわざわざDE0NanoSoCでMachinekitを動かさなくてもいいような気はしますが、BeagleboneのCPUコアはARM A8のシングルコア1Ghz、DE0NanoSoCで使われるCycloneⅴはARM A9のデュアルコア925Mhz。

Beagleboneで通常のモーション系のBaseThreadとして使われるタクスを担うのがリアルタイムプログラマブルユニット、De0NanoSoCでのBaseThreadはFPGA上。

BeagleboneBlackにはHDMI出力が有りますがDE0NanoSoCには在りませんので、BeagleboneGreenと同じようにX11Forwardingを使用しMachinekitが作動している小型ワンボードコンピュータをホスト、卓上のPCをクライアントとして、外部PCからEthernet接続を使用し利用します。
このときのクライアント側PCはLinuxCNCをインストールしたDebianを使いました。

既にDE0NanoSoCボード、廃盤になってる御様子なのですが、新たにHDMI端子等の付いたDE10NanoでのLinuxCNCでのSoCのFPGA側のコンフィグレーションファイルがインストールディスクイメージの中に合ったので、多分DE10Nanoでも作動するのでは?とも思います。DE10NanoSoC、この記事を書いてる時点でのTerasicでの価格は$130。

今回は公開されているDE0NanoSoCのインストールディスクイメージのダウンロードから、ディスクイメージ内で設定されたSoCFPGAのFPGA側のConfig、作動までを備忘録として。


まず、Machinekitのディスクイメージをここからダウンロードします。
この中にはDebian8.5と9.2が有りますが9.2のインストールイメージではDE0NanoSoCでLinuxが立ち上がらず、8.5の最新のもの debian-8.5-console-armhf-2017-02-14/ 2017-02-14 18:27 を使用しました。
で、まず、ダウンロード、7-Zipにて解凍しイメージファイルにします。

インストール先のSDカードはSD AssociationのSDメモリカードフォーマッターを使用してフォーマット。
Win32 Disk Imagerを使い、SDカードにディスクイメージを書き込み。DE0NanoSocへ。

DE0NanoSoC上のFPGA書き込み設定をするSW10とゆうディップスイッチをHPS(CPU)側から書き込めるように

1 on
2 off
3 on
4 off
5 on
6 on

と設定しておきます。
この事はGithub内のMachinekit/Mksocfpga/docs/に書いてあります。


machinekit / mksocfpgaにはDockerイメージ?を使ってSoCFPGA用のFPGA側のConfigurationを生成出来る記述が有ります。
基本的には、PCでのLinuxCNCで使用する外部インターフェース用のFPGAカード(MESAカード)用に用意されたConfigurationをSoCFPGAのFPGA部分をMachinekitから使用できるようにしてあるみたいです。

コントロールするPC側にシリアルコンソールを用意します。DE0NanoSoC側のUSBシリアルインターフェースICはFT232RなのでもしかしたらLinux側にドライバが入ってないかもしれません。こんなときはArduinoIDEをインストールするとFTDIのUSBドライバも一緒にインストールされます。また、ArduinoIDE内のシリアルコンソールを使用して接続することも出来ます。
DebianでのArduinoIDEのインストールは
$ sudo apt-get install arduino
です。
またWindowsPC上のシリアルコンソールで繋ぐ場合はTeraTermを使うと便利です。
USBUARTのボーレートは115200に設定。

DE0NanoSoCにEtherケーブルを繋ぎ、Etherコネクタの隣りにあるUSB-mini-Bコネクタをケーブルを使いPCに繋ぎ電源コネクタを刺します。

するとしばらくしてシリアルコンソール内にOSのスタートアップ画面が現れてDefault ユーザーネームとパスワードが表示され、ソレを入力します。双方ともBeagleboneでのMachinekitと同じmachinekitです。

$ ip a
と入力するとEtherのどこに繋がってるか表示されます。
2:eth0 :
の所の
inet 192.168.0.xとゆうのがEtherに繋がってるアドレスです。

接続しているPCがLinuxの場合コンソールを開き
$ ssh -X machinekit@192.168.0.x
と先ほどのEtherのアドレスを付けてSSH接続をし、シリアルコンソールでしたようにログインします。

PCがWindowsの場合BeagleboneでのMachinekitと同じようにMobaXtermを使いEtherのアドレスを調べたアドレスを入力しSSH接続にてDE0NanoSoCにログインします。
BeagleboneでのMobaXtermと違いRemoteEnvironmentはInteractive shellを選択、基本BasicSSH SettingのRemote hostの項目に192.168.~と入力するだけです。

コンソールに
$ machinekit
と入力しMachinekitを立ち上げます。Configration選択画面が表示されるのでhm2-soc-stepper内の5i25-socfpgaを選択、OKボタンを押すとMachinekitが立ち上がります。
この時立ち上がるMachinekitは単純3軸のConfigrationでリミットスイッチ等外部入力がなにも繋がってない状態の3軸NCです。
また、FPGA側のConfigrationはDE0_Nano_SoC_DB25.7I76_7I85S_GPIO_GPIO.dtboでされて、stepgenは4つ、encoderが1つの設定となってます。

これはmachinekit/config/hm2-soc-stepper/5i25-socfpga.ini内の[HOSTMOT2]の項目内CONFIG=に記述されています。
このFPGA側のConfigは/lib/firmware/socfpga/dtbo/内に有るConfigファイルを指定しています。
/lib/firmware/socfpga/dtbo/内に有るDE0_Nano_SoCの付いた/.dtboが使用可能なFPGA側のConfigファイルです。

このConfigファイル内のDB25と付いたものはMachinekit BlogDE0-Nano_Soc and the DB25 interface board - real world testingの記事にて作成されている基板、ピンアウトを基本としたもので、LinuxCNCで使用するMesaのPCI-FPGAボード5I252枚分のI/Oが使用出来るConfigです。

7I76,7I85Sとゆうのは、5i25に繋ぐドーターボードを指します。

気をつけなければならないのは7I85Sのインターフェースが4chエンコーダーとなってますが、約4Mhzでの信号で2つのエンコーダー入力が多重化されているので、このエンコーダーインターフェースを4ch分使用するにはマルチプレクサが外部回路として必要です。
もちろんDE0NanoSoCのピンヘッダに先のブログのDSUB25ピンのバスバッファを使ったI/Oポートを作成すれば、このMesaの7I76,7I85Sをパラレルポートケーブルにて繋ぐことが出来ます。

DE0NanoSoCをインストールしたそのままの状態のMachinekitのConfig内のhm2-soc-stepper.iniに定義してあるFPGA側のConfigファイルはDE0_Nano_SoC_DB25.7I76_7I85S_GPIO_GPIO.dtboで、この7I76部分のピン配置は下図のようになっています。(使用前にはちゃんとピンをご確認ください)

7i76_7i85s_de0_nano_soc_machinekit.png

このピン配置の元になっているのは先の記事DE0-Nano_Soc and the DB25 interface board - real world testing内のコメント欄内に貼り付けられたURLcdsteinkuehler/bobc_hardware内のDE0-Nano_DB25.pdfの記述と、Mesaの5I25のSupportSoftware内のconfigs/hostmot2内の5I25_7I76_7i85s.pinファイル内記述です。

5i25-socfpga.iniでMachinekitのAxis画面を立ち上げたら、HALの設定を確認します。
ウインドウ上部のメニュー内Machineの中のShowHalConfigrationを選択、するとHAL Configurationとゆうウインドウが開きます。
ここで5i25-socfpga.ini内で指定したHALファイルの内容を確認出来ます。また、Test HAL Command:とゆうスペースにHALコマンドを入力することで設定値の変更等ができます。このときの設定値の変更は開いたHALファイルにはSaveされません。

halrunでのコンポーネントのロードは、テキストファイルにて下記設定を入力。

loadrt hostmot2 debug_idrom=1 debug_modules=1
newinst hm2_soc_ol hm2-socfpga0 -- config="firmware=socfpga/dtbo/DE0_Nano_SoC_DB25.7I76_7I76_7I76_7I76.dtbo num_encoders=1 num_stepgens=3"

ファイル名を~.hal でSave、halrun -I -f ~.hal にてhalを起動、上記設定をロード。

するとshow all show ~にて設定されているI/Oの機能等々を見ることが出来ます。
気をつける所はhm2-socfpga0の後の2つのハイフン"--" これが無いとファイル指定とみなされずエラーが出ます。

後は必要なI/O等を追加して使用するConfigファイルを構築します。




DE0NanoSoCでもMachinekitを作動させてみましたが、利点は、BeagleboneでのMachinekitよりも少しGUIの更新が速い点と、I/Oが豊富に使えるとゆう所です。
欠点はBeagleboneのようにミニコンピュータとして使用する前提でないボードなので、OSをShutdown してもボード自体の電源が落ちないこと。

ミニコンピュータボードでMachinekit/LinuxCNCが作動するのはとてもありがたい事ですが、操作性云々はPCでのLinuxCNCの方が楽です。
またLinuxCNC自体、相当色々なことが出来るはずなのですが、基本的な操作設定マニュアルは有るものの、公式フォーラム内で探さなければ出てこない事も多い、のですが、更にMachinekitはソレに輪をかけて記述が少ないので、かなり困ります。
Machinekit自体がLinuxCNCのフォーク(枝分かれ)物なので、基本的な操作や基本的な設定方法はLinuxCNCの記述も参考に。



備忘

SSerialについて。
Mesaの7I76等DSub25ピンのドーターボードには割とSSerialとゆうインターフェースが載っているものが有ります。
これはRemote Serial Daughter Cards接続用のピンで、最大2.5Mbpsにて通信を行い結構な量の各種I/Oピンを作動させることが出来ます。各種SSerialなカードのマニュアルには詳細に解説されており、LinuxCNCの公式フォーラム内にはcustom board for smart serial interfaceとゆうスレッドが有り、自作も可能な御様子。実際にSSerialで接続するサーボドライバのファームウエアが紹介されてます。rene-dev/stmbl

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

LinuxCNCのライブイメージでインストールしたPCからBeagleboenのMachinekitを立ち上げる

machinekitの入っているDebianイメージなBeaglebone(Black or Green)をUSBを使いLinuxCNC公式のライブイメージのインストールされたPCに接続、コンソールを開き

ssh -X machinekit@192.168.7.2

と入力、Enter。

初回だとAre you sure you want to contimue connecting (yes/no)?
と聞かれるのでyesと入力、Enter。

Machinekitのパスワードを聞かれるのでMachinekitと入力、Enter。

すると、コンソールのカーソル前の所がmachinekit@beaglebone:~$ となりコンソール入力がBeagleboneのMachinekitになります。

で、この状態からMachinekitを立ち上げるのですが、

machinekit

と入力、EnterするとMachinekitが立ち上がり、どのConfigファイルで立ち上げるが?の選択画面が表示されます。
因みにlinuxcncと入力してもMachinekitが立ち上がります。

GUIでの表示はWindowsでのMobaXtermを使った時と違いデスクトップそのものを表示するわけではなく、あくまで基本コンソール。
GUIで必要なウインドウが有る場合、そのウインドウ部分だけが表示されます。

下の画像はクリックすると別ウインドウにて大きく表示できます。
この画像はX11forwarding (上記の接続)を使いLinuxCNCの動いているPCにUSBにてBeagleboneGreenを接続、Machinekitを立ち上げて同一デスクトップ上に2つのAxisを置いてみました。

linuxcnc and machinekit

多分アドレスを変更すれば数個のMachinekitを立ち上げることもできるのではないかと思います。

また、Machinekitを立ち上げたコンソールは入力を受け付けないので、もう一つコンソールを開き、もう一つSSH~と入れると、Bealgebone側のコンソールがもう一つ。

LinuxCNCのライブイメージをインストールしたPCにはUbuntuMateの18.04も入れてあるのでソレのコンソールでも試して接続を確認しています。

基本的なLinuxの仕組みを使用しているようなので、UbuntuやDebianなLinuxで有れば、大抵上記コマンドでBeaglebone のコンソールに繋ぐことができるのでは?と思います。

MahcinekitとLinuxCNC、並べて操作すると、BeagleboneのMachinekitのもっさり感が際立ってしまいます。
その辺はIntelATOM系のPCと比べても処理速度の差が出てしまいますね。

Beaglebone系のMachinekit、今の所誰でも手に入れて同じハードウエアの状態で作動させることができる貴重なボードなんですが、出来ることなら、デスクトップPCでLinuxCNCを作動、操作したほうが、見た目も作業効率も良いと思います。

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

旧Cut2DとCut3DはLinux上のWineで動く

Vectric Forum内スレッドBoard index ‹ VCarve Pro & Desktop ‹ VCarve - Generalより
Vectric works in Linux

LinuxCNCのLiveイメージでインストールできるDebian上にWineをインストール。Cut2Dがデスクトップとプロに分かれる前のバージョンをインストール、無事起動。ちゃんとパスまで出力できました。
もちろん、新し目のLinuxのWineでもWine側の文字化け等は有りましたが、それも修正できて、ちゃんとCut2D3D共々インストール、作動できました。

また、LinuxCNCのポストプロセッサはLinuxCNC公式フォーラム内Vectric Cut2Dにリンク有り。
LinuxCNC公式Wiki内にもCam Postのページ内に 5. Vectric cut2D / cut3D / vcarveとして有る。


Mach3の設定をLinuxCNCへ

LinuxCNC公式フォーラム内 スレッド User Interfaces > Other User Interfaces > Mach3 Linuxcnc equivalence より。

LinuxCNC2.7のStepConfigWizardにて、Mach3の設定ファイル ~.xmlを読み込みLinuxCNCの設定に変換できます。
やってみたらできました。
ただ、コレはパラレルポートを使用しているMach3の設定ファイルをLinuxCNCのパラレルポートを使用する設定に置き換えるものでSmoothStepper等を使っていると使用できないご様子。

また、このスレッドの最後の方にMach3もLatencyTestをしている、、、と。
インストールして一番最初に動かすアレですね。


FreeCADでツールパス。



https://www.youtube.com/watch?v=M99VshffvDYより。

現在配布されているLinuxCNCのLiveイメージのDebianの古いバージョンでは古いFreeCADしかインストールできませんが、最新?のUbuntu等のLinuxディストリビューションでFreeCADをインストールすると、NCで使えるGコードを生成出来るPathWorkbenchが使用可能です。

Fusion360も、一定の売上がない場合において、無償使用が可能ですが、FreeCADもまたアリなのかも。

Beagleboneblack(green)のI/Oに流せる電流値のメモ

このブログでは所々でBeagleboneblack(green)を取り上げてますが、このMachinekit(LinuxCNCフォーク)が動くこのボード、ピンヘッダのI/Oは基本マイコン直結です。

TI製のAM3358とゆうマイコンが使われているのですが、そのデータシート内にI/Oに流して良い電流が記述されています。
データシートを読むのが一番確実なのですが、手っ取り早く「Beaglebone sink source current」で検索
GoogleGroup内のスレッド「Maximum current on GPIO?」が引っかかりました。
その中のベストアンサーに

Source 6mA, sink 8mA, with the following pins limited to sourcing 4mA:

· P9_19 gpio0[13]
· P9_20 gpio0[12]
· P9_24 gpio0[15]
· P9_26 gpio0[14]
· P9_41 gpio0[20]
· P9_42 gpio0[7]

と記述されています。

このsink soure電流の値はデータシート上のP.91のDC Electrical CharacteristicsのAll other LVCMOS pins (VDDSHVx = 3.3 V; x = 1 to 6)にはI_OH=6mA、I_OL=6mAの場合の最低最高電圧が定義され記述されています。Sink,Source共6mA時の電圧が定義されてるので、この値以下で有れば最低最高の電圧が出る、って事になります。

割に簡単に扱えるマイコンボードのArduinoからすると、GPIOの電圧も低いし、Sink,Source共流しても壊れない電流もとても低いです。

出力ピンのシンク、ソース電流はWeb上に解説が多々有ると思うのでそちらに任せます。

Beagleboneblackとかをステッピングモータードライバ、その他モータードライバ等Beagleboneblackの電源電圧以上になる回路に接続する大抵の場合、Beagleboneblack本体の基板、更にはボードにUSB接続で繋いであるPCの保護用にフォトカプラ等で絶縁をすると安全です。

Aliexpress等で販売されている安価なステッピングモータードライバユニットは、割とフォトカプラで絶縁されているものが多いのですが、信号入力端子、フォトカプラの発光側に繋がる回路上の抵抗の抵抗値が330Ω位の物が多く、3.3Vの電圧を繋ぐと10mAも流れてしまいます。

安価なステッピングモータードライバに使われているフォトカプラは6N137で割と高速に作動しますが、少々古め?のフォトカプラなので、フォトカプラ内の発光ダイオードが受光側に検知されるだけの発光するのにかなり電流が必要です。
BeagleboneblackのI/O直結では、Beagleboneblack自体の出力ピンが壊れてしまいます。

BeagleboneblackのI/Oの出力できる電流以上の電流が必要な場合、HCやAHCなどなどのロジックICのバスバッファを使ったり、レベル変換の付いたHCTなど、チョイと電流量が多い場合はトランジスタアレイのシンクドライバやソースドライバICを使います。


フォトカプラによる絶縁に関して言えば、秋月電子で現在販売しているTLP2361を使うのもよいかもしれません。
推奨作動条件が入力側の発光ダイオードが2mA~6mA、出力側がインバーターロジック出力で、電源電圧の標準が3.3Vと5Vとなっているので、絶縁と共に外部回路入出力に使うと5Vへの電圧変換にも使え便利です。






RaspberryPiとLinuxCNCのリンク、メモ

RaspberryPiではBeagleboneBalck(Green)のようにCPUと独立して動くプログラマブルなリアルタイムユニット(RPU)が無いので、外部にリアルタイムで動くユニットが何かしら必要になります。


PICnc-V2

LinuxCNCからフォークされたMachinekitで使うPICを外部リアルタイムユニットとして使用。

spi-fpga-driver

RaspberryPiやBeagleboneBlackがSPI通信を使ってPluto-PとゆうFPGAボードを外部リアルタイムユニットとして使うPluto_spi_stepperとPluto_spi_servoのファームウエアとMachinekit側の設定ファイル等々。MESA7I90HD Parallel/SPI Anything I/O cardのhm-2stepper-7i90HDとゆうLinuxCNC側のini、HALファイルも。

RaspberryPi公式フォーラム内LinuxCNCスレッド

RaspberryPi上でLinuxCNCを動かす事を目的としたスレッド。
ビルドされたRaspberrypi用のLinuxcncのイメージがあったかも(うろ覚え)

RaspbianXenomaiBuild

LinuxCNC公式のRaspbianベースのXenomaiリアルタイムカーネルパッチの当たったLinuxCNCイメージの作成ページ。

HM2_RPSPI

LinuxCNC公式manualページ。RaspberryPiのSPI用のHM2ドライバ。このページによると72ピンのI/Oを持つMESAの7i90を最大5枚(360I/O)接続可能。推奨はRaspberryPi上に2つ有るSPI通信器に各一つづつ。(筆者未確認)

Parallel robots, machine tools and more内のLinuxCNC on a Raspberry Pi

RaspberrypiへのLinuxCNCのインストールの記述。
preempt-rtなRTカーネルパッチらしい。


LinuxCNCで使うリアルタイムカーネルパッチもRTAIやPreempt-rt、Xenomaiなどなど、有るのでちょいと注意が必要。
LinuxCNCフォークなMachinekitはXenomai。

現在のPCへインストールできるライブイメージが公式にUPされている2.7の場合、RTAIリアルタイムカーネルパッチ。
大本のLinuxCNCの場合、ゆくゆくはpreempt-rtへの移行を進めている様子。

現在テスト段なDebian Stretch、RT-PREEMPT、LinuxCNC 2.7.x用の画像のテスト内にあるライブイメージでは記述の通りPreempt-RT。

このPreempt-RT、どうも今までのRTAIなリアルタイムカーネルパッチで極端にレイテンシが少ないIntelAtom系のマザーボードではレイテンシが逆に大きい結果。
LinuxCNC公式フォーラム内では、i3とか割と新し目のCPUの載ったマザーボードではソコソコのレイテンシとなる御様子。
MESAの7I92M I / Oイーサネットカードを使う場合、Rtpreemptなリアルタイムカーネルパッチ。

以前Raspberrypiを使ってLinuxCNCを作動させた時にはPluto-P向けのFPGAのファームウエアをIntelのMAX10用のコンフィグファイルに書き直し作動。



安価にボード単体にてLinuxCNC or Machinekitを使いたいのであれば、BeagleboneBlack(Green)が最安。
RaspberryPiは外部に何らかのリアルタイムユニットとなるMCUorFPGAが必要になる、が、Beagleboneを使った時よりもGUIの表示はスムーズ。


ただ、LinuxCNC自体、処理の遅れ(latency)には厳しいけれども、PCの処理としては最新PCが必要なほど重い処理をしているわけではないので、古PCに軽いOS、パラレルポートさえ有れば動かぬこともないので、、、。


BeagleboneBlack(Green)には、外部I/Oピンが沢山。
元々Beagleboneに使われるTIのSitaraプロセッサ自体がNC制御その他モーター、機械駆動系のコントローラーとして使用してもらう前提で開発されたプロセッサ。
だからCNC制御コントローラーに向いている。



そもそも、Mach3,4でなく、LinuxCNCを使うってのは、、、、根本的な所での違いは1ms単位のフィードバック制御ができる所で単なる3軸Gコードプレーヤーで有るのならばGRBLでも良いような気はしないでもない。

LinuxCNCのドキュメント、MESAのIOボード、IOボードに繋ぐドーターボードのインターフェースを見ていると、DCモーターや3相モーターとエンコーダーを繋ぎ、サーボ制御自体をPC上(LinuxCNC上)で行うこと(フルクローズドループ制御)ができる事がLinuxCNCの一つの大きな特徴。

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

シマリス技研さんのレーザーに関する記事

シマリス技研さんが、中華レーザー 彫刻機を購入されて、レーザーに関する記事をUPされています。

レーザ彫刻機の調達
レーザ彫刻機と目の保護
レーザ加工機でマーキング

このブログでは、レーザーマーカー、レーザーカッターの類の運用に関しての記事は、私自身レーザー系での加工の専門でもなんでもないので控えておりますが、そっち方向の専門?であるシマリス技研さんが記事とされたので、少々書かせていただきます。

レーザーでのマーキング、カット等、中華部品のお手軽さから結構日本のWebページ上で見受けられます。
切削加工と違い加工工具として物理的に物がぶつかる事による加工ではなく、エネルギー自体を加工物にぶつけて加工するレーザー加工は、実質的に燃える物なら燃やして、金属等なら溶融、蒸発しています。
当たり前のことですが、加工時の材木樹脂金属等々から立ち上がる煙、匂いもアレですが、人間が吸ってあまり良いものではないはずです。

レーザーとゆう強い光が物にぶつかる事により、熱に変換され、加工するものなので、レーザーの出力が強ければ特に、その反射光も、モノにぶつかり熱に変換されます。ですので、その運用時には、燃えない箱の中に納めておいたほうが安全です。
海外のWebサイト、動画等々で剥き出しレーザーがありますが、オススメできません。
ちゃんとしたメーカーのCO2レーザーカッターとか、可視光でない波長のレーザーの場合、保護用の箱の覗き窓部分に使われている材料は、CO2レーザーの波長をカットするフィルタの付いた物だと思われます。(その為箱を閉めないと加工できない)


シマリス技研さんの記事中の目の保護、とても重要です。
2桁Wの出力、反射の多い金属の加工と言われてますが、単純に強い光は余り目に良いものではありません。

失明は、、、、、明らかに目が見えなくなってしまうので明らかに解ると思うのですが始末が悪いのが視野が掛ける事。
私自身、一時期病気?で視野が欠け、眼科に通ったことが有るのですが、人間2つ目が有るので、欠けた部分を脳内であたかも見えている様に補完してしまうので(実際には欠けた所は見えていない)気づきにくく厄介です。
病気の場合は治る場合もありますが、レーザー光で網膜を焼いてしまうと、視野が欠けたままとなってしまいます。
もしかしたら、日本のWeb上でカバーも欠けずに自作、中華レーザーを運用されている方々の中には、、、と。

シマリスさんも書かれていますが、目の代わりにWebカメラ等々を。

ちなみに会社が社員に対して守らなければならない労働安全衛生法のレーザー光線による障害防止対策要綱(厚生労働省)のページを貼っておきます。

http://www.mhlw.go.jp/bunya/roudoukijun/anzeneisei/050325-1a.html

通常の刃物が回る加工機とはまた違った危なさ、が有りますが、きちんと安全対策をして使えば便利なものだと思います。

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

LinuxCNCで位置決め用のカメラを設定する。

linuxcnc_camera.png

上記の画像のように、LinuxCNCのAxis_GUI内に市販のUSBWebカメラを利用した位置決め用のカメラスクリーンを入れてみました。

LinuxCNCのWiki内の記述Embed Live Video to Axisでは、現状Liveイメージで配布されているdebianのLinuxCNC2.7のAxis_GUIにカメラスクリーンを入れることは出来ますが、画像のようにカメラ画像にオーバーレイするようにターゲットスコープ状のモノを配置することが出来ませんでした。

で、LiniuxCNCのフォーラム内を掘ってみると、CamView for Wheesy and Jessieとゆうスレッドが有りました。
2ページ目の下から2つ目の書き込み内のcampy.zipをクリックしダウンロード。
解凍した中にあるCamPY_READ.MEとゆうテキストファイル内に記してあるようにすれば、、、、、LinuxCNCのGUI内にエッジファインダーとして使えるカメラスクリーンを表示することが出来ます。

具体的には?各種ソフトウエアをインストールし、セットアップ用のCamPy_setup.pyとゆうスクリプトを実行、使用するConfigファイルのフォルダ内に解凍したディレクトリ内にあるcamview.gladeをコピー又は移動。
iniファイルの[DISPLAY]セクションに
EMBED_TAB_NAME = Camera
EMBED_TAB_COMMAND = gladevcp -x {XID} camview.glade
と記述するだけです。

外部ソフトウエア?とゆうかプラグインとゆうか、そんな感じで使うソフトウエアは、video4linux2とゆうようで、USB接続のカメラをコントロールするソフトウエアのご様子。


上の方のLinuxCNCのWiki,Embed Live Video to Axisにも書いてありますが、640x480程度の画像でも、使い方によりけりで結構正確な位置決めができるのでは?と思います。
もちろん、画像自体をモーションコントロールに使用することはできませんが、決まった位置への移動の他に、長さの解っている2点間をカメラのエッジファインダーで位置を計測、コンピュータ内の移動量と照らし合わせてキャリブレーション、とゆう使い方をすると良いと思います。
この事は単純にLinuxCNCに限らず、GRBLその他のNCコントローラーでもターゲットスコープをオーバーレイするUSBウェブカムで撮れるソフトウエアを使うことにより、キャリブレーションや正確な位置決めが行えるのでは?と思います。

ちょいと話しは逸れますが、RaspberryPiにUSBインターフェースを介さずに直接繋げるPyCameraが有ります。
USBインターフェースを使用せず、直接つなぐことで、結構なフレームレートでの表示が可能です。
PiCameraのAPIがPython等でしっかりしているので、上手に使うことが出来れば、、、とも思います。

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

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

あきらひとし。

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

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

メールフォーム

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

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