ラベル CNC4030 の投稿を表示しています。 すべての投稿を表示
ラベル CNC4030 の投稿を表示しています。 すべての投稿を表示

2023年10月22日日曜日

自作CPUで遊ぶ 11

CNCはG-codeで制御することになるが、主軸の移動を指示するコードにG00(位置決め)とG01(直線補間)がある。G00は主軸の原点復帰等のような位置決めに使われる。この時各軸は同期せず個別の設定値で移動する。起動/停止時の加速度もそれぞれの設定値を使うので、例えばX/Y各軸の設定値が同じ場合主軸は最初に45度の方向に移動し、何れかの軸が目標位置に到達すると今度はX方向またはY方向のみ移動して目標点に到達することになる。これに対してG01の直線補間(切削送り)は現在位置から目標位置までの直線上を移動する。前々回に検討したのはこの場合になる。
で、これらの処理のFPGAのロジックとソフトウェアの分担について検討した。 パルスモータードライバーへのパルス生成方式は基本的にはHDD用スピンドルモーター駆動時の方式をベースにするのだが、とりあえず以下のような入出力で考えている。
*_pm_***はパルスモータードライバへの制御信号だ。em_stopは非常停止信号でこれが1の期間は動作を停止し*_pm_enも0にする。s_beatはビートパルス信号で、起動/停止時の加減速はこのパルスに同期して行う。*_pcntは*_pm_pulseに出力されるパルスの計数値だ。*_pm_dirの値によって増減する。*_pcntは*_clrで0にリセットされる。*_clrは原点設定時に1になる。X/Y/Z各軸のパルスモーターの回転が各軸の移動に変換されるので、*_pcnt値に1パルス当たりの移動量を乗じれば原点からの座標になる。*_accelは起動/停止時の加速度、*_speedは目標速度だ。主軸が停止状態から移動が始まるとすると、速度0から *_accelのレートで増速していき *_speedに達する部分で *_speedに固定する。また、停止時は *_speedの速度から *_accelのレートで減速して行きやがて0になる。 *_enは起動/停止を制御する。 0から1に変化すると移動を開始し1から0になると停止する。停止時は直ちに停止する訳ではなく減速しながら停止する。起動から完全停止迄の期間のパルス数が移動量になるので停止のタイミングはちゃんと計算する必要がある。 

で、FPGAのLOGIC側をこうするとすると、zumi32側の処理は少なくとも以下のことをする必要がある。
数値計算はfloatで行う必要があるが、これは問題ない。Dpを求めるのに√演算が必要になってしまった。これを何とかする必要がある。zumi32は演算用リソースとしては加減算器とバレルシフタしか持っていないのでfloatの四則演算はそれなりにステップ数を要する。√演算となると尚更だ。そこで、この部分はハード化することにした。√演算器は10年くらい前に趣味で自作した。最初のやつはパイプライン式で組んだが回路が大きくなるのでその後に非パイプライン化版も作った。これは1bit@1clockで計算する。32bit floatの仮数部の√を求めるのでトータルで26クロック掛かる。これだとちょっと掛かりすぎな気がするので、今回2bit@1clockで計算するように変更した。
この演算器をzumi32に組み込み、sqrt命令を追加することも出来るが、他のfloat系演算命令は未実装なのでこれだけ入れるのはバランスが悪すぎる。今回はfp_sqrtモジュールとしてi/o busに接続して使うことにした。また、こうするとfp_sqrtにデータを書き込んだ後、結果がでるまでzumi32で他の処理をさせることも可能で処理を並列化することも出来る。といってもfp_sqrtのレイテンシーは13なのでその期間だけの話だが。。。 以下は動作確認のために現状のプロジェクトに組み込んだ様子。
zumi32のプログラムは以下のようにした。
simulationの結果
vivadoでimplementして見た。100MHzで動作させるがタイミングエラーは無くMetした。回路規模も意外と小さい。

2023年10月9日月曜日

自作CPUで遊ぶ 10

所有しているCNC3040には三つ爪チャックが付属している。モーターはパルスモータでチャックとモーターとのプーリー比は1:3だ。 これを回してみた。このチャックは購入してから一度も動かしていなくて今回初めて動作させてみた。

普通に回すだけなので問題無く動いた。ベースボードに固定すれば卓上旋盤的な物が作れそうだ。
何かワクワクする。 (^_^)

CNCでX-Y2軸を制御してスピンドルの位置を移動させる場合、移動先の座標値の与え方には幾つかの方法が考えられる。普通に考えればX,Yの直交座標系で各軸の移動量を与える方法だろうが、極座標系で角度と目標位置までの直線距離を与える方法もあるだろう。 何れの方法も座標値は絶対座標の場合と相対座標の場合が考えられる。 何れの方式にしても、実際に制御するのはX/Y各軸のパルスモーターになるので、最終的にはこれらのモーターに印加するパルス数とパルスレート(周波数)に変換することになる。パルスモーターには最大自起動周波数という特性があって、いきなり起動・停止できる最大パルスレートに制限がある。なので、パルスモーターを起動・停止するときは徐々に加減速する必要がある。つまり、加速度に上下限値が存在する。CNCを制御するソフトウェアにはMach3やLinuxCNCがあるが、これらのソフトウェアでもこれらを設定するパラメータがある。

 Mach3の設定画面

即ち、X/Y各軸のモーターに対してこの加減速制御をする必要がある訳だが、如何なる場合にも同じ値とは行かずこれらの値は点P0からP1への直線移動の加速度とし、これをX/Y軸の加速度に変換する必要がある。
スピンドルの移動速度もG-code等で設定されるので、X/Y軸の移動速度は以下のようになる筈だ。
つまり、G-code等で与えられた各値からXpulse、Xspeed、Ypulse、Yspeedを求めてパルス発生部に入力する必要がある。どこからどの部分までをFPGAロジックに実装し、他の部分をzumi32に実装するかを検討する必要がある。


2023年10月1日日曜日

自作CPUで遊ぶ 9

定年になって再雇用社員になったというのに何故か仕事がめちゃくちゃ忙しい。給料はほぼ半減したのに下手したら定年前よりも忙しい。先日は仕事帰りに急に喉がヒリヒリ痛く微熱も出てきた。職場で高熱で休んだ人がいるという話も聞いていたので、これはいよいよ私も何かに感染したかしら?とか思ったのだが一晩寝たら回復した。かなり疲労が溜まっているので免疫力が低下しているのかも知れない。 こんな時は好きことをやって気分転換だ。…やってることは仕事とあまり変わっていない気がするが… 全部、自分の思い通りに・好きなように・作りたいものを作る。というのが気分転換になる。 

さて、今度はステッピングモーター(パルスモーター)を制御して見たくなってジャンク箱からモーターを出して来た。 パルスモーターの制御を習得したいなーと思って集めていたら、いつのまにか沢山所有してしまった。 ここに写っているのはその内の一部だ。
モータードライバはDM556Dというやつを使うことにした。これもいつかこれで遊ぼうと思い数年前にAmazonで購入して死蔵していたやつだ。 回転させるだけならHDDのスピンドルモーターと同様の方法で良いが、位置決め制御等もやってみたいので今回はこれを使うことにした。
なので、FPGAからはEnable、Dir (回転方向)、Pulseの3種の信号をDM556Dに与える。
7年位前にCNC4030Zという中華製のCNCを購入した。今はまったく使っていないがまだ所有している。 この装置のコントローラはI/Fが古く、PCのプリンタポートと接続する必要がある。また制御するソフトウェアもWindows95用のものなので今動かすの色々と難しい。 最終的には、コントローラと制御ソフトウェアを自作してこれを動かしたいと考えている。これで最高4軸迄は制御してみることが出来る。
とりあえず、普通に回転させてみた。プログラムはHDD用スピンドルモーター用のやつをベースに若干手直しして使った。 とても容易に回せた。このモーターの場合、回転数は9000 [rpm]が上限のようだ。

2016年8月13日土曜日

CNC4030 26 (チューブ式ポンプの製作 15)

設置して実運用を開始した。

このポンプを作った動機は、製品に付属していたポンプの音がうるさすぎたので静音タイプのポンプが欲しいからだった。果たしてその結果は… 残念ながらうるささはあまり差がない。 また、このポンプの役割はスピンドルモーターの冷却液を循環させることだが、その点に関しては… ちゃんと機能している。 例えばスピンドルモータ−の回転数7200[rpm]で基板を切削した場合、ポンプを止めた状態だとモーターの表面はかなり熱くなる(感覚では60℃位?)が、ポンプを動作させた場合はほんのり温かいといったレベルだ。感覚では40℃以下だと思う。(外気温度等の条件は同じ)

ということで、音に関しては改善されなかった。残念  orz

今後もちょくちょく改良とかはするかも知れないが、FPGA関係がだいぶ疎かになってしまったのでチューブ式ポンプの製作は一旦これで終わりにしようと思う。

このポンプ製作を通して機械加工が如何に高度な技能を要求されるのか、また、職人と言われる方々が如何に凄い能力を持った方たちかということが少し判った気がした。


2016年8月7日日曜日

PCB切削 5

今回は成功した。

ウラ面を切削する場合は基板を反転させる必要があるが、その時に何らかの方法で座標軸への位置合わせをする必要がある。今回は基板の外側4隅にΦ3.0のガイド穴を4箇所設けて、そこで位置合わせをしたのだが若干ずれてしまった。ここらへんもまだまだ工夫が必要だ。

設計はKiCADで行っている。以下はKiCADの3D Viewerで表示させたパターン。
上の切削結果とほぼ合っている。当たり前か。。。



この基板はFRISKのケースに収容する。大きさを見てみた。

外側のケースと比べると十分入りそうに見えるが、内側のケースと比べると若干基板の方が大きかったのでこの後サンドペーパーをかけて補正した。

12ピンピンヘッダのランドはサンハヤトのスルピンキットでスルーホール化してみた。


このスルピンキットは今から20年くらい前に購入したものだが、ほとんど使わずにしまっておいたものだ。その存在を忘れていたのだが、今回そういえば昔スルピンキットを買ったっけ?と思い出して探し出した。ちゃんと使えるか不安もあったが問題なく使えた。

このピンヘッダ部はベタパターンのかけ方が不味くて、ヘッダのランドとベタパターンとがはんだブリッジしてしまう箇所が多数できてしまい、結局部品面側はランド周辺のベタパターンを剥離することとなった。このような銅箔全体がむき出しの場合はランド周辺のクリアランスを十分広くとる必要があることを痛感した。pcg2gcodeの場合は--extra-passesオプションで調整可能だが設定値を多くするとそれに比例して加工時間も長くなってしまうため、これも何か工夫が必要だ。


部品実装した状態
銅箔が酸化してしまうのが嫌でついつい、全面にハンダを付けてしまう。
ただ、このやり方は見た目も汚くなるしハンダブリッジを作ったりしてしまうので何か別の酸化防止の方法を考える必要がある。


ケースに収容した。



世界最小クラスかも知れないFPGAボードを使って書込できるかを確認した。

実は、ここで上述のピンヘッダ部のベタパターンとのハンダブリッジが発覚してベタパターンを剥離する羽目になってしまった。

で、最終的に無事書込できるようになった。 \(^_^)/



2016年7月31日日曜日

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

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


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



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

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



PCB切削 4

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

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

2016年7月18日月曜日

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

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


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


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









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

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

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

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



ERROR: Failed to spawn fakeroot worker to run ...

なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz  家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...