2013年12月22日日曜日

G-Code-Sender


Grbl、OSはUbuntu13.10前提で、GTK+3のGUIをGladeとPythonを使ってG-Code-Senderを作成。

こんな感じ。


Python、試行錯誤しながらのプログラミングにも最高。エディターはKomodo Edit 8.5、素晴らしい。Anjuta、Geanyも素晴らしいが不安定なことがある。

GUIに統一性がないとか、細かいところはのちのち、やるか・・・?

2013年11月23日土曜日

Open Source Circuit Boards at Home

この彼のやっていること、オートレベリング、基板の固定、両面基板の作成など手作り感満載のCNCですべてできている、大したもの。


Firmware


ファームウエアは、TeacupがよさそうだったのでAtmega328でいけると思い安っいArduinoを選んだが、試してみるとどうも高機能を望むとMerlinがいいよう。328ではだめっぽい、644以上なら間違いなく、Gen7のハード構成がよい感じ。

コントローラソフトは、CNCGcodeControllerがAutoleveingがついててよいけど、ファームはMerlinが標準みたい。Teacupでもいけるかも。ファームがGrblなら、Universal Gcode Senderがよさそう。Grbl Controllerは、リードバック位置のアップデートがスムーズじゃない。

Universal Gcode SenderはLook&FeelがNimbusでクロスプラットホームのためにはいいんだろうど、Ubuntuだと見た目がちょっと悲しいことになる。Pythonで探してみたがよさそうなのが見つけられない。

といことでちょっと書いてみよかと思い、まずは、OpenGLで3Dぐりぐりより楽そうな、2DのしょぼいGcodeビューアーを書いてみた。


すばらしいモジュール群のおかげで120行ほどで出来上がる。matplotlibはすごく便利。カラフルなのは色指定を指定なためで意図的ではないが綺麗なのでこのまま。いまだ道半ば。ヘルプを求めてHPにいくと開発者の方が若くして癌起因の合併症で亡くなられたらしい。寄付をしようと思ったが日本からはできないようだ。ご冥福をお祈りしたい。

2013年11月18日月曜日

GDN


GDNってなんだろうと一瞬考えたがGNDで間違いない。





多分中国製、変になるのは日本語だけじゃないんだ。

2013年11月16日土曜日

Arduino Pro Mini Clone


3Dプリンタが大はやり、が、部屋の中でプラスチックを溶かすのは嫌だなと思っていた。たまたまebayでExtruder用の部品が結構簡単に入手できるようになってきていることを知って、どんなもんかとRepRapを覗いてみると、RepRapでもPCBを作っている。やはりメジャー、関わっている人数が違うのか随分進んでいるよう。これを使わせて頂ければRPiでPCからでもUSBでCNCを制御できる、と試してみることに。

まずは、Arduinoが一番手っ取り早そうなのでebayをチェック。チップを購入して作るよりちょっと罪悪感があるがクローンの方が安く、あまり考えずに端子がたくさんあって安いのがいいやと購入。

到着したものがこれ。なんのことはない共通の端子がいっぱいなだけ。



よく見ると他の出品写真には載っている上の列の右から2番めのコンデンサがない。

いちおうArduino Pro MIniとあったが、Deek-Robotというものの更に派生品なのか回路図もなんにもないので何かと思って接続を確認すると、ResetとAREFの間に接続されている。

といことは、無いのが正解ではないか、余計な端子があるおかげでAREFがAtmega328
から離れたところまで引き回されてコンデンサを通してResetに繋がる。すなおに考えればADCの精度が悪くなるような気がするが。

もとのパッドを使わずにお隣がグランドなので左にずらして付ければバイパスできるが取り敢えずそのままで。

Blinkで動作確認。


2013年10月12日土曜日


DIY Guitar Interface


iRigもどきを作ってみた。

ネットで情報を探すと2年以上前位が旬であったよう。JFETを使いたかったが記憶の中にあった2SK30がどうしても見つからず、ノイズについて不利だけどBC850を使い、その他全て手持ち、再利用部品で作ることに。ゲインは必要ないので使用するトランジスタはコンデンサマイク用のFETが最適だろうか。4極ジャックはどうにもならずebayのお世話に。後でmeetsに行ったらイヤホンマイクがあった…

まずは、 

Qucksでシミュレーション

  • 回路図。iPod Touchの内部は、DCについて簡易測定。

  • ACシミュレーション。特性はこんなもんかなぁ…


 Eeagleで基板データ作り

  • Eagleの回路図。

  • Ubuntu LinuxCNCシミュレータでGコード確認。


Raspberry Pi LinuxCNCで基板切削

  • 出来上がり。

  • 部品取り付け。

  • 組み立て。

  • 完成。

  • ステレオミニプラグなのはマイク、ヘッドフォン分離ケーブルのマイク入力がステレオジャックのため。



やはりノイズは多い気がするが歪み系は使わないし、レベル調整をうまくやればGarageBandで十分楽しめそう。チューナーはJumpUP XTの方。

2013年10月10日木曜日


FTDI FT800 EVE


これは面白そう。安いマイコンでも高度な表示が実現できる。

オンラインストアで液晶、ケース付き1万円弱位、その他の扱いは、RSコンポーネンツ(日本)では見つからない、Digikey、Mouserあたりだけか。


一般的になるのが楽しみ。

2013年9月30日月曜日

iSSH


ソフト単体を購入するという事は、覚えている中で多分10年以上なかったが、つい最近、iPod Touchを頂くことになり、色々と物色することにした。

取り敢えずGarageBandは躊躇することなく購入し、なんとなく、XサーバとSSHがあればiPod TouchでLinuxCNCをコントロールできるよな、と思って探したところ、あった、iSSH

で、やってみる。


意味があるかどうかは別にして、ちゃんと動いた。

2013年9月23日月曜日

LinuxCNC 2.6.0-pre


どうせなら最新にしたいと思ってkerneldebianイメージとLinuxCNCのビルドをしたが微妙におかしな所があったりしてどうもうまく動かなかった。

で、最近どんな様子かとRaspberry Piのフォーラムを覗いてみると、kinsaさんによるdebファイルがあったので、早速RaspbianをSDにインストールして試してみた。


おお、最新になった。SDが安物なのでちょっと遅いが問題もなさそう。

2013年9月13日金曜日

Pi Case

用途を決められそうまので、そろそろ全体を固定するのケースをなんとかしたい。と、ふと目に入ったのがダイソーで買った仕切り版。Raspberry Piの仮止めをしてみた。でかい、
 

ケースづくりのヒントになりそう。

2013年9月11日水曜日

Backlash


基板の出来があまりに酷いので機構部分の調整をする。

まずは試し切りすると、切削したパターンが斜めにひしゃげる、円のはずが 軌跡がもとに戻らず左斜めってる変な形になっている。

POMのスペーサーと寸切りねじの組み合わせでは、そもそも精度が無い分、結構きつきつでバックラッシュは殆ど無かった。

ホームスイッチの動作確認なんかをしている時、X軸をこれ以上行かない方向に思いっきり動かしたりしたのを含め、スペーサーがいかれてきたらしい。

スペーサーを交換すれば良くなるはずだけど、バラすのは結構大変なので、ebayで、送料込み$10で買った中国製精度0.01mmのダイヤルゲージでバックラッシュの調整をすることにした。

調整の結果、

調整前:調整後

一番小さいパッドは8角だけど、この位がMyマシンの精度限界か。カッターが切れないのも原因・・・かな。

これでいけるんだったら自分でも作れそう、でももう少し良くできたら、と作ったのでこんなものだろう。楽して試作が目標。使った部品の中で一番高価なのは、レコフレーム。 組み立て簡単、購入しやすい、安価。

2013年9月9日月曜日

Milling PCB


Raspbery Pi GPIO版LinuxCNCで試しに基板を切削。

え〜、こんなにひどかったかな〜、


どうもカッターがもうだめな模様。あと切削条件も刃先が太くなってきているだろうと太めに設定したこと、機械的なずれの増加、なんかが加わっているものと思われる。手修正済み。

Gコード作成の手順は、
  • Eagleで設計。
  • pcb-gcode-3.5.2.11 ulpでGコードを作成。(最新は3.6.0.4ですね〜、随分とお世話になってるし寄付しないといかんよな)
  • opti_qtでGコードをオプティマイズ。

ちなみに以前PC版LinuxCNCで切削し、NGにしたものはこんな感じ。


これは紙エポキシで超綺麗ではないけどまだましな感じ。

ガラスエポキシの両面では、



こちらは、穴位置のずれなどでNG。

う〜む、Vカッターを注文せねば。

2013年8月29日木曜日

HAL Configuration

INIファイル

LinuxCNCの実行に必要なINIファイルは、stepconfで作成したパラレルポート用として使用していたものをPaspberry Pi用に変更しています。

Latency-Testを実行してジッタを確認することが基本ですが、適当な過負荷をどうすればよいのか思いつかず、他に何もしないでlatency-testだけを実行して見たところ、[EMCMOT]セクションのBASE_PERIODオプションは、50μSくらいまでは設定できそうです。しかし、実際にLinuxCNCを実行すると、DISPLAYに関する処理に問題がでるようで、Unexpected realtime delayが発生してしまったり、大きめのファイルを開くと表示の途中で止まってしまったり、関係ありそうなオプションを変更してもうまく動作しないので色々試した結果、100μSとしています。

作成しておいたrpi-my-mill.halは、[HAL]セクションのHALFILEオプションで指定します。[EMC]セクションのMACHINEオプションにrpi-my-millとありますが、これは単なる名称です。

ホームスイッチについては、共用する場合の例がマニュアルには見つからず少々悩みました。各軸の[AXIS_n]セクションの、HOME_IS_SHAREDオプションをに設定しスイッチが閉じている時のHommingはエラーとなるようにします。これをやらないと、ある軸のスイッチが閉じている状態で他の軸のHommingが実行された場合にスイッチの開閉を検出できないため異常な動作になってしまいます。さらに、軸共通のホームスイッチ入力を使用する場合の設定として[AXIS_n]セクションのHOME_OFFSETオプションを使用してホーム位置を少し移動させることでHomming動作を実行した軸のスイッチはオープンになるようにしています。これは、HOMEオプションでも同じことが可能かと思います。

変更しませんでしたが、いくつかのセクションにあるCYCLE_TIMEオプションなどのタイミングに関係するものは調整の必要があるのかもしれないし、パフォーマンスの向上が望めるのかもしれません。

INIファイルは以下の通りです。

2013年8月27日火曜日

Milling


試しに切削して見ました。といってもMDFにです。基板を切削するともう少し綺麗ですが、My CNCはこんな程度の実力です。



ちなみに、送りはX、Y軸が4mm、今考えるとなぜそうしたのかZ軸が3mmの寸切りネジにジュラコンスペーサー、モーターは48ステップで1−2相ドライブ、スピンドルは5000回転くらいで中華Vカッターを使用、という機械ど素人が作ったものです。

2013年8月25日日曜日

PPPOEDOWN 

Bフレッツがこんな状態で現在まともに使えておりません。



なので、次に行けず。

2013年8月23日金曜日

HAL Configuration


GPIOコンポーネントを使うためにHALを構成する必要があり、そのためのHAL,INIファイルの説明をします。で、まずは、HALファイル。

最初から作るととても大変になりそうで、Eagle2HALというのもありますが、できるだけ簡単にしたいので、今まで使用していた、パラレルポート用に作ったものを元にして修正することにしました。

もともとは、Stepper Configuration Wizard、を実行して作成したもので、ポートの入出力関係、アップデートのための関数部分を変更すれば良い、ということで、内容は、
追加、変更した部分は、
  • loadrtでhal_rpi_gpioをロード、3行。
  • addfでwrite-gpioとread-gpioをbase、servoスレッドに登録、7、13行。
  • setpで反転する出力を指定、15,16行。
  • netで入出力ピンをstepgenに接続、18〜26行。
です。各軸のスッテプパルスの設定、steplen = 1、stepspace = 0、dirholddirsetup = 58000、dirsetup = 58000は、このままで問題ないようです。入力は1本にしたので、homeスイッチは全軸共通にします。

2013年8月21日水曜日

HAL Component

その3、halrun


出来上がったHAL Componentをターミナルコマンド、halrunで試してみます。
  • ssh -C -Y rpi@xxx.xxx.xxx.xxxで、Raspberry Piに接続。ユーザー名: rpi、パスワード: linuxcnc
  • halrunを起動。
  • loadrt hal_rpi_gpio、で HAL Componentをロード。
で、こんな感じ、
Linux rpi-linuxcnc 3.2.27-xenomai-ro+ #8 PREEMPT Tue May 21 08:22:46
 SGT 2013 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
rpi@rpi-linuxcnc:~$ halrun
halcmd: loadrt hal_rpi_gpio
halcmd: 

  • HALコマンド: show pinでpinの情報を表示
halcmd: show pin
Component Pins:

Owner   Type  Dir         Value  Name
     6  bit   IN          FALSE  rpi-gpio.pin.0.out
     6  bit   IN          FALSE  rpi-gpio.pin.1.out
     6  bit   IN          FALSE  rpi-gpio.pin.2.out
     6  bit   IN          FALSE  rpi-gpio.pin.3.out
     6  bit   IN          FALSE  rpi-gpio.pin.4.out
     6  bit   IN          FALSE  rpi-gpio.pin.5.out
     6  bit   IN          FALSE  rpi-gpio.pin.6.out
     6  bit   OUT         FALSE  rpi-gpio.pin.in


halcmd: 
HAL Componentの名称から、「hal_」が除かれ、「_」は「-」になって、ピリオド、compで配列として定義した、pin.#.out[7]、の部分は、pin.[0-6].out、となります。

  • 次にパラメータ: show param
halcmd: show param
Parameters:

Owner   Type  Dir         Value  Name
     6  u32   RO     0x00000000  rpi-gpio.clrbits
     6  bit   RW          FALSE  rpi-gpio.out.0.inv
     6  bit   RW          FALSE  rpi-gpio.out.1.inv
     6  bit   RW          FALSE  rpi-gpio.out.2.inv
     6  bit   RW          FALSE  rpi-gpio.out.3.inv
     6  bit   RW          FALSE  rpi-gpio.out.4.inv
     6  bit   RW          FALSE  rpi-gpio.out.5.inv
     6  bit   RW          FALSE  rpi-gpio.out.6.inv
     6  s32   RO              0  rpi-gpio.read-gpio.time
     6  s32   RW              0  rpi-gpio.read-gpio.tmax
     6  u32   RO     0x00000000  rpi-gpio.setbits
     6  s32   RO              0  rpi-gpio.write-gpio.time
     6  s32   RW              0  rpi-gpio.write-gpio.tmax


halcmd:
.time、.tmaxはデバック用とのこと。

  • 最後にfunction: show funct
halcmd: show funct
Exported Functions:

Owner   CodeAddr  Arg       FP   Users  Name
 00006  4008997c  404610b8  NO       0   rpi-gpio.read-gpio
 00006  400899b0  404610b8  NO       0   rpi-gpio.write-gpiohalcmd: 


halcmd: 
というふうに確認することができます。

2013年8月20日火曜日

HAL Component

その2、ソースコード


全体像を簡単に説明。

picncのhal_picnc_jr.compを元にさせていただき、ソースコード中のハイライトした部分を必要に応じて追加、変更しています。マニュアルにはごく単純な例題しかないので、正しい記述になっているのか不明です。BCM2835のレジスタ定義等をしているヘッダーファイル、hal_picnc.mini.hもそのまま利用させていただいてます。

マクロを使って記述した関数は、
  1. EXTRA_SETUP() - GPIOのメモリへのマップ、各ピンの入出力設定。
  2. EXTRA_CLEANUP() - マップ開放、各ピンを入力に設定。
  3. FUNCTION(read_gpio) - GPIO4を入力に使用。
  4. FUNCTION(write_gpio) - GPIO17、18、21、22、23、24、25を出力に使用。
3と4をINIファイルでbaseおよびservoスレッドに登録します。1と2は自動的に呼ばれます。

このコード(ファイル名は、hal_rpi_gpio.compとしました。)を、RPi上でcompコマンドによって、コンパイル、インストールして使用します。

2013年8月19日月曜日

HAL Component

まとめを少々、その1。

LinuxCNCでハードウェアをドライブするために必要な部分、HAL Componentを作成する必要があります。マニュアルには、Cで書くと冗長で退屈な作業になるみたいな事が書いてあって、代わりに、HAL Component Generatorを使うとありました。

基本、C言語の構文ですが、独自のパラメータやマクロ的なものを使用することで簡単になるかんじで、filename.compを書いて、compコマンドでコンパイル、インストールします。

sudo comp --install filename.comp

でコンパイル、インストール。

comp filename.comp

として、filename.cを生成、などができます。


さて、Componentの記述についてどうすればという事で、まずは、picncのコード、LinuxCNCのマニュアルを参考に、
  • component
  • description
  • pin
  • param
  • variable
  • option
  • function
  • license
  • auther
 のパラメータの定義が必要でなようで、さらに、
  • EXTRA_SETUP()
  • EXTRA_CLEANUP()
  • FUNCTION()
 といった、マクロを使う必要が有りそうという事がわかりました。

パラメータ部の構文

使用したもののみ説明します。


component HALNAME (DOC);

コンポーネントの名称を定義。 

description DOC;

使い方等の説明を記述。

pin PINDIRECTION TYPE HALNAME ([SIZE]|[MAXSIZE: CONDSIZE]) (if CONDITION) (= STARTVALUE) (DOC) ;

入出力を定義。入出力の方向、bit, signed, unsigned、またはfloatの型、名称などを指定します。配列として定義することも可能。


param PARAMDIRECTION TYPE HALNAME ([SIZE]|[MAXSIZE: CONDSIZE]) (if CONDITION) (= STARTVALUE) (DOC) ;
 
パラメータ、r(ead)、w(rite)、またはrwの指定、bit, signed, unsigned、またはfloatの型、名称などを指定。
 option OPT (VALUE);

singleton yes; - RPiにはGPIOは1個だけなので、インスタンスは1個を指定。

option extra_setup; - GPIOの入出力を設定。

option extra_cleanup; - GPIOの初期化。すべて入力に戻す。

function HALNAME (fp | nofp) (DOC);

ファンクションが1個だけの時は名前を省略できるようです。GPIOの入出力を設定するための関数。

license LICENSE;

ライセンスを記述。

auther AUTHOR;

作成者の記述。


以上の順序は特になく、最後に「;;」をつけてパラメータ部を区切ります。

続く・・・

2013年8月18日日曜日

Homing


All HomeボタンでHome位置に移動させてMDIコマンドでX60、Y60、Z-10に移動、Unhomeallを実行してからもう一度All Homeした時の動画です。





問題なさそう。

2013年8月17日土曜日

インターフェイスボード


よく考えずに作ったらこんな感じになってしまいました〜



一応、Opto Isolatorでアイソレーションして、どうせ大した速度ではないからアイソレータ出力そのままでいいいやと適当に作ったところ、ステッパー信号を作成しているCPLDの入力の立ち下がりががあまりに緩やかになってしまい、うまく動かない対策としてバッファを追加するはめになってしまいました。

ひとまず動作的には問題ないようです。

Analog Devices社のADuMシリーズなどのディジタルアイソレータが使いやすそうで魅力的ですが、すべて手持ちの部品のみで作る目的なのでこんなことになりました。

部品は使い回しで、最終的にはこんな回路で行こうかと。


LinuxCNCの設定では、ホームスイッチとか、テーブルの移動方向とか、ほんと混乱してしまいました。

2013年8月3日土曜日

LinuxCNC AXIS on RPi


Raspberry PiでLinuxCNCのAXISを走らせるとこんな感じ。

 


ssh -C -X xxx.xxx.xxx.xxxで、T5600のノートより接続。 mini GUIだとはるかに軽快になるけど、リアルタイムに何か問題がありそうで、時々接続が固まり描画のアップデートが失われGPIO出力も止まってしまいます。

超遅いのが残念だけど、AXISでいこう。


X軸のGPIO出力。



2013年7月28日日曜日


RPiのLinuxCNCでGPIOからPWMを出力


TurboCNCをHP Omnibook 600CのMSDOSで走らせるところからはじめて、その後LinuxCNCに移行し、スピンドルその他を改良して取り敢えず使えているところで改造をストップしています。

ちょこっとした基板を作るのが目的だったのでそこそこの精度が出ればOKという位には仕上がったと思います。基板専用、POM、木の切削位が限界です。

ちゃんと計算はしていませんが、、モーター類はオークションで購入、分解したプリンタのものを使用したりして総額は2万円代半ば位と思います。最初に持っていた工具は電動ハンドドリル、金ノコ、ドライバーとかもろもろで、わざわざ道具を用意することなく作ることを目標にしましたが、結局、どうにもならない、スピンドル用のルーター、アルミの穴あけ用の安物ボール盤などを揃えることになってしまったのが残念なところで、今はこれらは全く使用していません。

昨年の7月に、Raspberry Pi を購入し、当初はテレビに接続してネット動画再生用にと考えていましたが、微妙なパフォーマンスだったため、もっと効果的な使い道を探していました。

ARMボードで専用のGUIを作ってLinuxCNC(EMC2)を使用している方がいたので、いつかはRPiにも移植されるのではと思っていたら、picncというものが公開されました。現在このカーネルイメージを利用させていただいています。

SSHでRPiに接続し、AXIS GUIも利用可能な素晴らしいもので、これをこのまま利用させてもらえば十分以上なのですが、私の低速CNC(せいぜい150mm/min)だったらGPIOのみでいけるのではと考え現在お試し中です。

RPiとDSO
 
切削基板で作った残念なDSOでキャプチャしたPWM出力(GPIO14の波形)

RPi上のLinuxCNCで100μSと1mSのスレッドを作成し、pwmgenで2KHz、デューティ60%でGPIOに出力させています。PWMといっても、10KHz/2KHzで5段階の分解能しかありませんが。


2013年7月26日金曜日

PCB Milling


1000円で購入したケースに収めた、



PCB Millingが主目的の自作CNCです。