フライス盤用 デジタルリードアウト 作成:2004-09頃〜2005-05-01
フライス盤の目盛りを見ながら加工するのは大変です。でも、デジタルリードアウトの市販品は大変高価です。
アゴ無しノギスでDegitalReadOut(DRO)を自作します。予算は5万円程度です。
簡単な仕様を決めます
・精度は1/100mmあれば十分(もっともノギスなのでこれ以上は望めない)
・フライス盤なのでX、Y、Zの3軸をデジタル表示する
・市販DROのテンキー付きは非常に高価だが自作なら安価に出来るのでテンキーを付ける
・テンキーからの入力を表示するために液晶表示を付ける、もちろん座標はLEDで表示する
・とりあえずPCとのインターフェースが出来るようにRS−232Cもつける(今のところ使う予定無し)
・フラッシュメモリーにキー入力した値を記憶できるようにする(これも今のところ使う予定無し)
・いちおうブザーも付けてみよう
・CPUは安価なPICを使う 開発ツールも持っているし
作り始める前に
ミツトヨ製のノギスは計測値を出力する端子が付いている機種があります。当初このノギスのアゴを切断して作ろうと計画しましたが、ノギスそのものが非常に高価(特に長い物は高い!!)で安上がりに作ることが出来ません。安い外国製を探していたらいい物を見つけました、最初からアゴが無く、しかもDROのスケールそのものとして使われています。それがこれです。海外の http://www.littlemachineshop.com で購入しました。価格は1つ \12000- 程度です。初めての海外購入でしたがネットショップを使うのに英語が書ける必要ありません(読めないとダメですが...) 1つだけ購入し信号が読み出せるか調査してから残り2本を買おうと思いましたが送料がもったいないので思い切って3軸分購入しました。これは購入当初の姿ではありません。信号を取り出すための電線を引き出すために下部を少しフライス盤で削ってあります
ノギスから取り出した信号波形です。電圧は5Vを示していますが、これはトランジスターを使用して電圧変換した後の波形です。実際の信号の電圧は1.5Vです。上がクロック、下がデータです。クロックの立ち上がりにあわせてデータを読み出すと、それが表示されている値になります。
...と思ったのですが少し違ってました。その違いは後ほど
これが信号の全体像です。データは約320ms毎(1秒間に約3回ということだ かなり遅い)に出力されます。
青丸の所をうんと拡大したものです。時間は左から右へ流れています。A−B間が742マイクロ秒です。約1msの間に信号を出力すると319ms休みます、そしてそれを繰り返します。
休みすぎです。おそらくバッテリの持ちを良くするための物でしょう。
下のギザギザがクロックで上の刃こぼれしたギザギザがデータです。ギザギザが2組に分かれていますが読み出せばいいのは右の物だけです
データの読み方はこうなります
1.クロックが凸の時にデータが凸なら「1」、データが凹なら「0」と読みます
2.全部で24あるクロックのうち左3つは1/100以下を表しているので無視する
3.左が下位ビットなので数字にするときは右から読んでいく
この方法で読むと写真の例は 000000000000011011000 となります。
この2進数を10進数に直すと 216 となります。これは 2.16mm を表しています。このとき液晶表示も2.16mmを表示していなければならないのですが、実際に表示される値はこれと近い値を示すものの異なる値を表示しています、さらにこの差異は表示される値に比例して大きくなります。計測した物は1.25mmにつき0.01mmの誤差がありました。この誤差や個体差(今のところ不明ですが他の2つで確認できます)のためDROとして使用する場合、信号の値を校正して表示する機能が必要になります。
設計
とりあえず作った物です。正しく動くか不明です。問題があれば開発中に微修正を加えていきます。
回路図は本体部分とLED表示部に分かれています
dro_main.pdf へのリンク
dro_led.pdf へのリンク
プリント基板のパターンです。ビットマップファイルです。
EPSONのインクジェットプリンター用に作った物なので解像度1440dpiです。
main_prnt.zip へのリンク
led_prnt.zip へのリンク
ソフトウェア開発開始
開発風景です。ブレッドボードで動作確認をして、だいたいOKになったらプリント基板に乗せ替えます。最初はLEDを1つ点滅させるだけの回路を組み立て、少しずつ規模を拡大していき写真の状態まで成長させました。数値表示のLEDはプリント基板を起こしてからです。
この状態でソフトを作っていきます。開発にはC言語(WIZ-C)を使っています。信号の取り込み部分はアセンブラで書きます。1クロックが約13マイクロ秒なのでC言語では取りこぼしなく信号を拾う限界なのでマージンをとる意味でアセンブラにしています。
当初PIC16F877で開発していましたが、途中でプログラムメモリー不足になったのでPIC18F452に換装しました。PIC16F877よりノイズに弱いらしく安定動作しなくなりました。もっとも、この状態でF877の時は20MHz、F452の今は40MHz(外部クロック10MHzのPLL4倍モード)なので動いている方が不思議なくらいです。換装にはプログラムの変更が必要になるため一部変更を加えています、不安定の原因がハードにあるのかソフトにあるのか判別するためにプリント基板を起こしてから開発の続きをします。回路は検証済みなのでプリント基板を作るのには良いタイミングです。
インクジェットプリンターを購入するまでしばし中断です。(レーザープリンターは不調です)
2004-12-01 開発再開です。インクジェットプリンターでOHPフィルムにマスクパターンを印刷し、感光基盤で基盤を作ります。マスクパターンはkbanというフリーソフトを使用しました。このソフトでビットマップファイルのマスクパターンを作り塩化第2鉄節約プログラムで加工し、EPSONのスキャナーにおまけで付いてきたPhotoImpression 4で印刷しました。このソフトは印刷解像度を指定して印刷が可能です。右は現像が完了した基盤です。これを塩化第2鉄溶液に漬けると銅箔が露出している部分が溶け配線パターンが完成します。
マスクパターンには実際にあける穴よりずっと小さい直径0.3mmの穴パターンを設けてあります。エッチングするとこの部分の銅箔が溶けわずかにへこみが出来るため、これがセンターポンチ代わりになり、ドリルの位置決めが楽になります。実際にあける穴の径は0.6〜1.2mm程度です。写真の基盤は購入してから7〜8ヶ月くらいたった基盤なのでマスクが緑色になっています。新品はきれいな青色です。
エッチングが完了した基盤です。エッチング後に再度紫外線ライトで感光、現像し緑色のマスクを除去します。マスクはクレンザー(削り取る)や、アルコールでも除去できます。
穴あけして、外側の不要部分をプリント基板用ギロチンで切り落とします。プリント基板は切断しやすいようにいつも1.0mm厚のガラスエポキシ基盤にしています。1.0mm厚はぺらぺらですが部品が乗ると十分丈夫になります。
このギロチンのガイド(PC-300と書いてある部分)は全く直角が出ていなかったためフライス盤で削りなおしました。安物の鋳物にメッキがしてあり中途半端にぴかぴかなのですが、肝心なところの精度が出ていません。メッキする暇があったら精度を出してほしいところです。
削り直したガイドです。
完成した基盤です。ガラスエポキシ基盤に穴あけするとドリルの刃が直ぐ切れなくなります。これくらいの穴数だと4枚程度で寿命になります。
背の低い部品から取り付けていきます。放熱が必要な電源ICは基盤の裏に取り付けています。ナットをひとつ咬ませて仮止めし半田付けします、この穴は基板をケースに取り付ける穴を兼ねています。電源ICの取り付けはこの方式が一番楽です。
ほぼ部品が取り付けられたところです。
仮組みに取りかかりたいのですが、スイッチを何とかしなければなりません。20個もあるので正面パネルのみ先に穴あけしてスイッチを取り付けてしまいます。ケースのサイズがぎりぎりなので面倒ですが図面を書いて穴あけの座標を決めます。
パネルの図面(鍋CAD)
しっかり固定できるなら穴あきタイプのザグリカッターが一番よく切れます。キリコがカッターの穴を抜けて上方に排出されるので表面を傷つけることもありません。パネルを大きく切り抜くため強度が落ちる部分をミガキ角棒をあてがって補強して切り進めます。
穴あけ位置は自作の現物あわせ用のセンターポンチを使って決めます。材質は快削鋼ですがアルミ相手なので何とかなります。
大きくあけた穴からキリコが進入するのを防ぐためアクリル板でふたをします。アクリル板は透明です。青いのは養生テープの色です。このテープ、表面がつるつるの物にはよく張り付きますが、紙や木には全く張り付きません。
完成した窓をはめ込みました。コーナーのRはヤスリとカッターナイフで仕上げました。接着剤で固定する予定です。
電線はかなりの本数になります。フラットケーブルを使用した方が良かったかもしれません。
仮組みしてソフトウェアを開発します。通電してみましたがLCDに何も表示されません。回路パターンが間違っているかもしれません。
何が原因で動作しないか確認するためには基板に取りつけてしまった部品を取り外したいのですが組み付けてしまっているので、対象実験回路をブレッドボードで組み立てて、出ている信号を確認します。リセット回路を手抜き設計しているので正常にリセットされて信号が出力されているかの確認から始めます。右下の電線がたくさん出ている箱はロジックアナライザーです。計測器メーカーが販売している物は高機能ですが、安い物でも20万円程するので、オプティマイズ製のキットをケースに入れて使っています。計測した波形の取り込みや制御はUSB経由で行われ、電源もUSBから供給されています。本体は1万円程ですが、ケースとプローブ込みで2万円かかりました。それでもメーカー製の1/10の価格です。ロジックアナライザーのソフトはオプティマイズからもダウンロードできますがもっと機能の優れた物がここ(2008-01-23追記 リンク切れてます ホームページ閉鎖したみたいです)にあります。
ロジックアナライザーで調べましたが信号は正しく出ています。疑わしいと思っていたリセット回路の問題ではありません。結局、液晶ディスプレイと本体基板との結線間違いでした。元々、基板の配線パターンの取り回しミスで1回ひねりが入ってしまっていますが、さらに間違いがあったことになります。ハードは変更せずにソフトを変更して修正完了です。
通電するとブザーが0.5秒鳴るはずなのですが音がしません。見るとトランジスターが逆に付いています。左が間違い。右が正解。半田付けやり直して修正完了。でも、何故か今度は鳴りっぱなし。スイッチを押しても何の反応もないのと関係ありそう。長旅の予感。
スイッチ押しても反応無いのはプログラムが暴走しているせいでした。スイッチの配線に間違いはありませんでした。ブレッドボードで試した回路をそのまま基板にしただけなのに動かないのは変です。???。でも、よく考えたらY軸とZ軸の回路がブレッドボードの時はありませんでした。とりあえずY,Z軸の読み取りサブルーチンをコメントアウトしてみました。正解です。動きました。これが問題の回路。ダミーコネクターを付けて入力信号が不安定にならないようにしましたが、これがあるためロジックが誤動作していました。
LEDはアゴ無しノギスから信号がくるときに点滅します。完成したら電線を引き出してケースに取りつけます。スケール部分をカバーで覆ってしまうと動いているのか全く見えなくなるのでこれが必要になります。
やっとX軸だけ液晶表示できるところまできました。下一桁はちょうど2と3が切り替わる瞬間です。バックライトの光で緑色に光っています。下のXXの表示は開発途中のバグ取りのための情報。液晶表示が動作するとバグ情報を表示できるので修正がはかどります。
LEDを取りつけました。X軸以外はアゴ無しノギスを取りつけていないのでソフトウェア的に固定の値(−123.45)を表示させています。一度に点灯できるのは1軸分だけですが X軸−>Y軸−>Z軸−> の表示を高速で切り替えることにより全軸が点灯しているように見せかけている。....つもりでしたが目障りなほど点滅しているのがはっきりわかります。ソフト側で高速化処理するようにプログラムの見直しが必要です。
3軸分作りました。ノギスには直接半田付け。ケーブルはUSB用、コネクターはLAN用です。3軸分でLED光らせてみたかったのですが何故かX軸以外を接続するとプログラムが暴走します。原因のわかっていないBUGが3つあるのでソフト完成までかなりかかりそうです。
3軸配線したので信号のパルス間隔を測定してみました。個体差があると思っていたのですがあてが外れました。それぞれ
319.850msec
319.960msec
341.280msec
でした。問題なのは上の2つ。1度に1軸しか信号検出はしていないので(出来なくはないがソフトが複雑になりすぎる)信号の間隔が同じだと重なっている一方の信号を取り出せません。つまり1軸はかなり長い時間にわたって表示が更新されません。上の計測値から計算すると約3秒間も更新されないことになります。CPU(PIC)ひとつで動かすつもりでしたが、各軸の回路にデコーダー(これもPICで作ります)を差し込んできちんと表示が更新されるようにします。これで4CPU構成になります。
デコーダーはPIC16F84A。プログラムメモリーが1Kワードしかないのでアセンブラーを多用してコーディング中。開発効率が悪くてなかなか進まない。PICの上面には向きを間違えないように切りかき位置がわかりやすい白いシールが貼ってあります。向きを間違えても死ぬことはあまりありませんが、死ぬと買い出しにいくのが面倒なので。
やっとデコーダーのプログラムが完成しました。途中までWIZ−Cのインラインアセンブラーでプログラミングしていましたが、MPLABに切り替えました。環境が異なると微妙に違う部分があるので簡単には移植できません。1週間もかかってしまいました。
出力信号の波形はこんな感じ。上の2つが入力で、下の2つが出力です。上から...
・アゴ無しノギスのクロック信号(入力)
・アゴ無しノギスのクロック信号(入力)
・デコーダーのクロック出力信号(出力)
・デコーダーのデータ出力信号 (出力)
です。
信号には以下の加工を加えて出力しているので、入力と出力の波形が異なっています。
1.24ビットの入力信号を32ビットで出力(LONG形の変数に取り込みやすい)
2.下位3ビットはゴミなので取り除く
3.信号の開始位置がわかりやすいように
「CLOCK信号がHighの時にDATAがLowになったところが信号のスタート」 というルールで信号を出力する
受信側ではこれを「DATAがHighからLowに変化した直後にCLOCKがHighなら信号のスタートだ」と解釈する
15msec間隔で信号を出力しています
出力中に、アゴ無しノギスから入力信号が入ってくると出力波形が伸びてしまいます。でも、この信号を読みとるときはクロックの立ち上がりでデータを取り込むので問題は起きません。
コンパクトに作らないとケースに入らないのでデコーダー基板もプリント基板を作ります。これは露光しているところ。紫外線ランプが往復して広い面積をカバーする方式の物です。タイマーが付いていますがあてにならない機械式なのでキッチンタイマーを併用しています。
エッチングはタッパに塩化第2鉄溶液を入れて、揺すります。溶液はNescafeGOLDBLENDの空き瓶に保存しています。銅化合物が瓶の回りにこびりついています。
エッチングが完了した基板と露光に使ったマスクです。インクジェットプリンターのインクは水溶性のようで、手で触るとインクが落ちてしまいます。右上のシミは手で触ってしまった痕です。1時間乾燥させたのですが不足でした、完全にインクが乾くのにはかなり時間がかかるようです。フィルムはOHP用の物。(追記 どんなに乾燥させても、水をかけるとインクは溶けてしまうようです。丸一日乾燥させても落ちてしまいました)
穴あけした基板を拡大するとこんな感じ。ピン間2本なら何とか通すことが出来る。穴の位置がだいぶずれているが半田付けなのでこの程度の精度で十分。
デコーダー回路を差し込むためにパターンをカッターナイフで切りました。
パターン面にきたらならしく配線。でも、設計&工作ミスが3カ所
・デコーダー回路のPICとメイン基板のPICが直結。同時に出力にはならないがバグって出力が衝突するとPICが昇天する
・デコーダー基板にパスコン入れ忘れ(たぶん大丈夫)
・信号線をよじって配線。データとクロックの配線をよじっているがそんなことをしていいわけがない(たぶん問題ないだろう)
LEDはメイン基板の物と同じ機能なので不要になる。当然、74HC04もいらない。
不必要に長いのと、線をよじったせいかノイズが混入して表示がめちゃくちゃ 動画
パスコンを入れたり、線のよじりをほどいたりしたが一向に改善せず。ロジックアナライザーで調べて単なるバグであることを発見。これでハードウェアまわりは完成。抜き差しを繰り返していたらドライバーのPICの足がひどく曲がってしまった。こうなるとソケットへの抜き差しの繰り返しは困難なので実験用とする。
窓にはめ込むアクリルパネルはエポキシ接着剤で接着
メインの基板は底面に固定されて、横からコネクターが顔を出す構造なので位置決めが面倒。
横のパネルはABS製。とても切削性がいい。新品のフライスなら全くバリが出ない。デコーダー回路の基板は内部で固定されていない状態だが、穴位置を確認するため組み立ててみた。
一応完成。あとはフライス盤に取りつけてキー入力機能の見直をする。アゴ無しノギス本体と表示している値が異なるがX軸は値を2倍して、さらに正負も逆転させて表示しているのと、他の軸は値を校正せずにアゴ無しノギスからの信号をそのまま表示しているため。校正しないとこんなにも値が異なります。LEDの明るさが異なるのは、シャッタースピードの関係。同時に光るのは1軸分だけなのでシャッタースピードをうんと速くすると1軸分しか写りません。
フライス盤の裏側は調整用のネジが飛び出していてアゴ無しノギスの取りつけの邪魔になる。ノギスはあまり丈夫ではないので正面に取りつけると壊してしまいそうなのでアルミ角パイプの中に納めることにした。
デーコーダーを接続するケーブルはカラフルなケーブルに交換した。メインのCPUはプログラム修正中なのでプログラムの修正が必要になる数ヶ月はZIFソケット経由で接続したままにする予定。ZIFソケットを挿したままで何とかケースには収まっている。
固定金具は真鍮で作りました。切削性がよいと思って真鍮にしたのですが
1.刃物が食い込みやすい(3〜4カ所失敗してしまった)
2.結構、大きなバリが発生する
3.細かな粉のようなキリコが出るので掃除が大変
など、欠点が多く作業性はアルミの方が優れていると感じました。
フライス盤のテーブルと固定されるのはノギスの片側だけで、もう一方は固定しません。
ノギスのデジタル部を固定する金具は5mm厚のアルミです。1000番台のアルミなので柔らかすぎて切削性がよくありません。右は3枚まとめて削っているところです、ほんのわずかサイズの差があると小さい物が切削中に動いたりするので、厚紙の弾力性を使って動かないようにしています。案外効果があります。
1000番台のアルミはアップカットとダウンカットでは切削面に大きな差が出ます。左がアップカット、右がダウンカット。アップカットの方はキリコが切削面になすりつけられて非常に汚くなります。
刃物の径が大きいとこの差は顕著で、径の小さい刃物を使うとアップカットでもかなりきれいに削れるようです。写真の物は10mmのフライスです。4mmで削ったらアップカットでもそこそこきれいに削れました。
ケーブルの収まりがいいようにボールエンドミルで側面をへこませてあります。
ガード部分を取りつけてみました。まだ中身は空っぽです。穴の位置は真鍮ネジの先端を尖らせてセンタポンチ代わりにしました。これをテーブルの固定穴にねじ込んで、ガードを強く押しつけて穴をあける位置をきめました。
Y軸以外はスリットの長さはX軸のストロークを超えているので2回に分けてあけます。3本で約3時間もかかりました。囲まれているのでネジ止めのためのドライバーが通る窓穴も必要です。
X軸固定完了です。横から見るとこんなです。1日あれば3軸固定できると思いましたが、とにかく時間がかかります。もう1週間以上作業しています。
Y軸取りつけ完了。スリットの部分が上を向いているとキリコが入ってしまうので、遠回りしてY軸と接続されています。
X、Y軸は最初からあいていたネジ穴を利用して取りつけましたが、Z軸は適当な穴があいていません。4カ所穴をあけてタップを切りました。
やっと完成しました。しばらく使いながら、キー入力機能などを改良していきます。
チャタリング対応の部分などかなりあまい部分もありますが、これをVer1.0とすることにしました。
以下はソフト一式です。メイン基板とデコーダー基板は一つにまとめたので、現物とは異なります。
DRO_MAIN_V1.pdf へのリンク <−メイン基板の回路図
DRO_LED_V1.pdf へのリンク <−LED基板の回路図
DRODecode.zip へのリンク <−デコーダーのプログラム(MPLAB用)
main_pgm.zip へのリンク <−メイン回路のプログラム(WIZ C用)
main.zip へのリンク <−メイン基板のプリント基板パターン(KBAN用)
LED3.zip へのリンク <−LED基板のプリント基板パターン(KBAN用)