2016年7月31日日曜日

CNC4030 25 (チューブ式ポンプの製作 14)

実運用するための組み立てを開始した。


ちょっとポンプの位置が高すぎたかも。



モーターは低速のやつで行くつもりだったのだが、これだと輸液量が最大 1L/minと現行ポンプの半分程度にしかならないので、高速のやつを使うことにした。

CNC4030のコントロールボックスからの電源をつないで動かしてみた。



PCB切削 4

FT2232HLを使ったFRISKケースサイズのJTAGライタ & USB-UART変換器を作ろうとして基板を削っている。

この面は旨く削れたのだが、穴あけをミスってしまって折角の基板をダメにしてしまった。 orz
今度の休みに再挑戦だ。

ロシア?

最近、このブログへの異常?なアクセスが続いている。
ブログの統計情報によるとロシアからのアクセスとなっていて、1度に数十回から数百回連続アクセスが度々発生している。たまに米国からも同様のパターンのアクセスがあるが頻度はロシアからのアクセスが圧倒的に多い。そのせいで今月のページビューは2500超となってしまった。




ロボットプログラムの巡回等のような機械的なアクセスかな?とも思うのだが、参照されている記事を見ると何か意図があってブログの記事を見ている?かのような参照のされかたでもある。また、IPを公開しているhi-hoのホームページやdvi_encを公開しているsourceforgeへもアクセスされている。。。 このブログは広告を表示している訳でもないのでページビューカウンタの値が増えたからと言って誰も得をしない。また、内容的にも大したことが書かれているわけでもないので大量アクセスの意味が良く判らない。。。   何か不正アクセスの一種なんだろうか??  ほっときゃそのうち治まるのかしら?  といって何が出来るわけでもないのだが。。


2016年7月18日月曜日

CNC4030 24 (チューブ式ポンプの製作 13)

以前24時間連続運転試験をしたらチューブ表面に裂傷が多数出来たり変質してテカテカしたりといった結果を得た。その原因の一つがローラーの材質(表面のザラつき)にあるのかも知れないと考え、ローラーにゴム(熱収縮チューブ)を被せて見ることにした。


そしてチューブも新品に交換して再度24時間連続運転をしてみた。


結果
前回同様チューブ表面がテカテカしているが、ローラ接触側と壁接触側とでは、ローラ接触側がテカリが少ないように見える。また、前回裂傷が多数発生していたが今回は発生しなかった。










チューブゴムの成分が付いてしまっている。

ローラー
こちらは変質している風には見えない。

ということでローラ表面をゴムにした効果はあったようだ。

そこでチューブの長さを3cm程短くして張力を上げることでチューブを壁で押さえなくても良いように変更して見たところポンプ性能に差は見られなかったのでこれで行くことにした。



2016年7月17日日曜日

PCB切削 3 (pcb2gcode の autoleveller 機能)

前回、pcb2gcodeで生成したGコードに加工中にZ軸のゼロ調を行うコードを差し込む方法を考案して試し旨くできたのだが、 pcb2gcodeのオプションを確認したらpcb2gcodeにはZ軸用autoleveller機能があることが判った。 autoleveller用コード付きのGコードを生成させるためのオプションは --al-**** と --software **** だ。 autoleveller用コード付きGコードの場合、加工前に加工する領域でZ軸方向のゼロレベルのバラつきを計測・保存し、その値でZ軸の移動量を補正しながら加工する(Gコードを生成する)。 計測したデータはテキストファイルとして出力もされるので表計算ソフトやgnuplot等でグラフ化して見ることが可能だ。

autoleveller機能を使って、ある基板を加工した時の測定値をgnuplotで3Dグラフ化してみた。

等高線の交点が測定点だ。このケースの場合、最大値と最小値の差は35umもあることになる。
今回使用した基板の銅箔の厚みは35umなので、Z軸補正無しで加工しようとすると切削深さを70um位にしないと旨く加工出来そうにないが、この測定値を使ってZ軸の移動量を補正しながら加工することでZ軸方向の精度が上がりそうではある。しかし、autoleveller機能はZ軸のバックラッシュについては対応できないような気もする。今回はこのautolevellerの機能と加工中のゼロ調をする方法を組み合わせて加工したところ、切削深さ55umでも綺麗に加工することが出来た。
もしかしたらもっと浅くても、例えば40um位でも行けたかも知れないし、autoleveller機能だけでも十分なのかも知れない。これに関しては少しづつ条件を変えながら加工して見て行くしか無い。
まぁ、でもそれらのテクニックを用いる事で0.5mmピッチのQFP用基板のパターンを高精度に作る事ができることは判った。 良くよく考えればこれは我がpoorman's laboにとっては画期的な事だ。国内の基板製造サービスを利用して基板を作ると数万円はかかってしまうし、fusion PCBを利用すると安く作ることが出来るが注文してから基板を入手出来るまでには数週間かかってしまう。
線間ギャップが0.2mm以下とか4層板とかには対応できないが、2層で線間ピッチ0.2mmまでの基板なら自宅で製造することが出来、早ければCADでパターンを引いてその日のうちに基板が作れてしまう。もちろんソルダレジストやシルク印刷は無いしスルーホールメッキも無く、後で線材で導通させる必要があるが、数枚程度の実験用基板としてならこれでも十分だ。購入したCNC4030がこのような用途に最適かどうかは他の機械の使用経験がないので比べようが無く判らないが、個人的には購入して良かったと思う。いやー、、いい買い物をした!


2016年7月3日日曜日

PCB切削 2

前回、CNC4030でPCBを切削した場合にバックラッシュが原因と思われるZ軸のズレにより加工の最後の方が旨く削れないと書いた。それで何か工夫できないかと考えて、加工中定期的にZ軸のゼロ点調整をやったらどうなるか、FT2232HLを使ったJTAGボードを題材にして試してみた。ゼロ点調整は手動では無くGコードプログラムにゼロ調用のコードを埋め込んで実行させる。

ゼロ調用のコードは以下のようにした。

G00 X0 Y0
G04 P2.5
G31 Z- 2.3 F25
G92 Z0
G04 P0
G00 Z2.0

GコードのG31はプローブ電極(今回はPCBの銅箔をプローブ電極として使う)と導通検出できるまでZ軸を下降し、検出された時点で下降を停止するので、下降が停止した時点でGコードG92でZ軸の値を0にリセットする。 このゼロ調は、今まさに切削しようとしている場所で行うのが理想なのだが、その場所はそれまでの切削によって銅箔が島状になり電気的に絶縁された状態になっている場合もあり得る。その場合はZ軸がどこまで下がっても導通が検出されないことになってしまいワークやCNC自体を破損してしまうことになる。そのため、ゼロ調はどの時点に置いても確実に導通が取れる場所で実行する必要がある。今回は以下のように座標基準点(X0,Y0)を基板の外側にとり、そこでゼロ調を実行させることにした。


PCB切削用データは、回路設計からパターン設計およびガーバーデータ出力までをKiCadで行い、出力されたガーバーデータをpcb2gcodeでCNC用のGコードに変換して作成している。
pcb2gcodeが生成するGコードはグループ化されており、グループ間の境界部は以下のような感じになっている。


ゼロ調用コードは、G00 Z2.00000 ( retract )行と、次のブロックの開始行との間に挿入する。
次のようなawkスクリプトを書いて実行した。全てのブロック境界に挿入すると時間がかかるので、5ブロック毎に挿入するようにしている。


そうやって作成したGコードで切削をしてみたところ、1回の切削でほぼ完璧に加工できた。

写真はパターン切削の後に穴空けと外形切り出しまで完了した状態のもの。
刃は前回同様Φ0.2mmのドリルを細工して使っている。0.5mmピッチのパッドも良い感じに削れている。




ウラ面

実際に部品を実装してみた。

銅箔の酸化防止を兼ねて全体にハンダを付けたのだが、見た目が汚くなってしまった。。。残念
しかし、ハンダ付け自体は普通の基板へのハンダ付けと変わるところはなく簡単に出来た。
また、動作もバッチ・グーで動作した。

CNC4030 23 (チューブ式ポンプの製作 12)

前回 CAN通信が出来なかったのは、CANトランシーバICのハンダ付け不良が原因だった。
トランシーバはMaximのMAX3051EKAというICを使用しているのだが、これのRSピンをGNDに落とすのを忘れていた。Hi-speedモードにするためにはこのピンをGNDに接続する必要があるがハンダ付けを忘れてピンがフロート状態になってしまっていたためLow-speedモードか若しくはどっちつかずの不安定な状態で動作していたようだ。

ウラ面で8番ピンをGNDに接続する予定だったが、忘れてしまっていた。

このRSピン部を修正したら、CAN通信できるようになった。

ポンプ操作部の機能としては、ボリュームやスイッチで操作するマニュアルモードとCANbus経由で操作されるリモートモードを持つこととした。起動時の初期モードはマニュアルモードで、モード切り替えはCANbusから行う。リモートモードでは手動操作は無効となる。 CANbusからはこのモード切り替えの他に、PWMの周期、duty、回転方向が設定できる。少々判りづらいがRTLはこんな風になっている。

PWMモジュールは5年前に作った物だが、このモジュールではdutyは固定小数(1.7bit ... 整数部1、小数部7bit、最大値1.0)で設定できるようにしてある。そのため、上位側が回路(HDL)であれソフトウェアであれ、設定値のduty⇔パルス幅変換の計算をすることなく、duty値そのものを設定することが出来るので楽できる。PWM式のDAC等に応用する場合に扱いやすいだろうと考えてこのような仕様にした。

これはIP作成当時のシミュレーション波形


Zynq側で以下のようなプログラムを書いてCAN busから制御できるかを見た。

リモートモードに変更後、dutyを100msec毎に0%から100%まで上げた後、今度は逆に100%から0%まで下げ、最後にマニュアルモードに戻す。


動いている様子
video
マニュアルモードで動作中にリモートモードに設定されたことでCAN bus支配下になりプログラム通りに回転数が上昇・下降している。また、リモートモード中はボリュームやスイッチ操作を受付ないがマニュアルモードに復帰すると操作出来ている。

ということでコントローラも一応完成した。
今後はローラーを若干改良して実際に冷却液を流してみようと考えている。



GTX1050Ti と Tesla m2050 No.2 (BNN-PYNQのtrainingをやってみた)

BNN-PYNQのtraining(学習)をやってみた。  手順は https://github.com/Xilinx/BNN-PYNQ/tree/master/bnn/src/training に記載されており、特に判りづらい点はなかった。 ・ mnist.py 実行...