2010年4月30日金曜日

CNC

CNCの計画をはじめてから、かなり時間がたってしまった。
主軸の部分をどうするかで随分と回り道をしている。
ブラシレスモーターとベビーチャックを使ったスピンドルではなくて、普通のブラシつきDCモーターにしておくか、ミニルーターにしておけば、もう少し早く進んでいたかも知れない。しかし、すでに買ってしまったのだから、いまさら別な方法に切り替えるのもお金の無駄だと思う。

そこで、ブラシレスモーターは完成までにまだまだ時間がかかりそうなので、いったんCNC本体の詳細設計と製作に取り掛かろうと思う。

それと、ベアリングを保持するピロー型ユニット部分が予想以上に重たくなりすぎてしまっているので、これもなんとかしたい。


設計となると、CAD。
今までにJWというフリーのCADを何度か使ったことがある。しかし、このJWは、どうやら建築用のCADらしい。そして、これもフリーなのだが鍋CADというのがあって、こちらが機械製図に適しているということらしい。なので、今回は鍋CADを使ってみることに決めた。

・・・でも、使い方から勉強することになるので、また時間がかかりそうだ。


--

まだ購入していなかった主要部品を注文した。

2010年4月29日木曜日

タコメーターのプチ修正

タコメーターの試験で、電動ドリルの回転数を図ってみたら、ノイズを拾うせいか、数字が数万に跳ね上がる。明らかに変なので、ソフトを修正した。

3回分の計測結果を保持して、中間値を表示するようにしてみたところ、数字の跳ね上がりがなくなった。

追記:
今回の修正でチェック処理を簡略化するために、計測範囲を57~14万RPMに変更した。

2010年4月25日日曜日

タコメーターの製作

モーターの回転数を知りたくて、タコメーターを作ることにした。

PIC16F468Aを使い、レシプロカル方式でカウントする。周波数カウンタの応用で、その表示をRPMにしたもの。
最低57RPMから最高85万RPMまでカウントできる。

レシプロカル方式というのは、入力信号の周期を測定して周波数(ここでは回転数)に変換し表示するもの。
通常の周波数カウンタは、1秒や0.1秒の時間内のパルス数をカウントする方式が使われている。これは高周波の計測には便利だが、低周波になると計測時間が長くなるという欠点をもつ。一方、レシプロカル方式だと、周期を測定するので、低周波でも、最低1周期だけ計測すれば良くなるので、計測時間のロスが少なくなる。反対に高周波の計測は難しいという欠点をもつ。

小型のDCモーターの回転数は、数百~数万RPM。周波数にすると、大体1Hz~1000Hz程度なので、レシプロカル形式の方が都合が良い。

回転センサーには、こわれた古いマウスについているフォトインタラプタを利用することにした。








フォトインタラプターを取り出したところ。

このフォトインタラプターだけだと信号が弱すぎるため、アンプで信号を増幅した後、PICに入れることにする。

今回は、以前作った周波数カウンターで使った2石アンプが実績があるのでこれにした。

この2石アンプは、初段が2SK941、2段目が2SC1815のエミッタ接地。
初段のFETで高入力抵抗にしている。

当初、オペアンプで作ろうとしたのだが、経験不足もあって信号がうまくとりだせなかった。
フォトインタラプターにつなぐ抵抗が大きいほど信号の振幅が大きくなるという特性があったため、1Mオームの出力抵抗となっている。それに対応するため、初段の入力抵抗も1Mオームとなっている。このフォトトランジスタは大きな電流を流せないのかも知れない。

テストのために、パルスジェネレーターで100msec周期の信号を入れたところ。これはパルスジェネレーターで設定できる最大値。
599RPM=9.983RPS
1/RPS = 0.100166944sec
本当なら600RPMになるはずが、周期を回転数に変換する際に割り算を使うため、多少の誤差が出ているようだ。

今度は、80usec周期。これ以上短い周期、たとえば50usecだと、最上位の桁が表示されないことになるので、ほぼこれが上限近くの値。

周期から回転数に変換する際に端数が出ない場合は、画像のように綺麗な値が出る。
750000RPM=12500RPS
1/RPS = 0.00008sec

回路図

ちなみに、この回路はA/D変換の実験をするためにボリュームがついている。これはタコメーターの機能には必要ないものである。





アセンブラソースコードと回路図はこちら

2010年4月20日火曜日

MPASMでリロケータブルのオブジェクトが生成されず

MPLAB IDE で久々にアセンブラを使って、タコメーターを作っていたのだが、オブジェクトファイルが生成されず1日棒に振ってしまった。

原因は、アセンブラファイルの名前を"tacho_main.asm"としていたのが問題だった。これを"main.asm"にしたらオブジェクトファイルが生成された。

IDEからMPASMを呼び出すときに、コマンドラインを使っているようで、これがMS-DOSのファイル名の文字数制限に引っかかって、"tacho_ma"みたいになっていたようだった。

おかげで、英語マニュアルを読んだり、IDEを最新ヴァージョンにしてみたり、MPASMWIN.exeからアセンブルしてみたり、ネットのサンプルを使ってみたり、大変だった。MPASMWIN.exeのGUI上でオブジェクトのチェックを入れたときは生成されたのだが、IDEで動かしたかったので色々とああでもない、こうでもないと。

カルマが引っかかると、本当につまらないところでグルグル空周りばかりしてしまうものだなぁ。

2010年4月11日日曜日

センサーレス技術

ネットで調べると、MicroChip社のHPにいくつかのアプリケーションノートを見つけることができる。

(AN901)センサーレス BLDC コントロール用 dsPIC30F の使用
(AN1175)Sensorless Brushless DC Motor Control with PIC16
(AN857) Brushless DC Motor Control Made Easy ソースコードあり
(AN1083)Sensorless BLDC Control with Back-EMF Filtering(Japanese)

同社のPICをコントローラーとして使ってもらえるように準備しているのか、意外とたくさんある。
dpPICのDSP技術をつかうものは、今回は技術的な部分を読むだけにとどめておこう。
PIC16がいくつかあるので、こちらは具体的に検討する価値がありそうだ。

BEMFとは、Back ElectroMotive Force の略で、モーターの逆起電力のことのようである。
AN857によると
PRM=KV×Volt
BEMF=PRM/KV
Torque=KT×Amps
KV×KT=1
という関係があるようだ。

このアプリケーションノートでは、センサーつきのブラシレスモーターの速度制御をPWMのデューティー比を変化させて実現するための技術的な解説が書かれているようである。

PWMでデューティー比を下げると、BEMFの絶対値が下がることが観測される。これは見かけ上、電源電圧Voltを下げたことになる。式からVoltが小さくなるとPRMが下がる。この関係を利用するようだ。

AN1175、これは本命とみているのだけれど、このアプリケーションノートのBack EMF Sensing の中で、Zero-Crossing event を見つけ出すことがポイントだと述べられている。
そして、この零点を検出する方法は2つあるそうだ。
  1. 3相の各信号と、それらを符号反転させた信号を作り出して比較する方法。
  2. 3相の各信号と、中性点(三相のゼロボルト点)を比較する方法。
この1番目の方法は、前回の失敗したボードでつくったもので、U、V、Wの三相から、反転した波形をV+W、W+U、U+Vというふうに合成して作り出し、UとV+W、VとW+U、WとU+Vの組み合わせで比較していく方法だ。

2番目の方法は、U、V、Wから中性点を作る。すなわち、U+V+Wの合成で中性点が得られる。この中性点とU、V、Wの各々と比較する方法。そして、こちらの回路を作るほうが、部品点数が少なくてすむ。

ただし、三相モーターで1回転に6つの零クロスが存在するものにしか適用できないとある。
今回使用するHyperionモーターはこの要件を満たしているので問題ない。

どうやら、後者のほうが回路も簡単で良さそうだ。

今回使用する予定の PIC16F648A にはコンパレータ(比較器)が2つしかないため、三相を比較することができない。だからLM339というコンパレータを外付けにすることになる。

このMicroChipのアプリケーションノートのゼロ交差検出方法は、零点と零点の時間間隔をタイマーで計測して、適切な相の切り替えを行っている。ゼロ交差が検出できない初期のスタート時などは、強制的に規定速度まで回転していくようである。

また、進み角の設定については余り述べられておらず、進み角の設定を誤るとモーターに余計な電流が流れ、それによる発熱でモーターの寿命が短くなると警告していた。
このあたりの表現からするとモーターを良く知らない素人には手を出すなということだろうなと思う。そのあたり、英語圏のドキュメントだなと思ったりする。日本人的には、細かい点が気になるので、そういったもう一歩踏み込んだ情報も得たいと感じる。

ブラシレスDCモーター起動

ブラシレスDCモーターがようやく回転してくれた。

画像中央にたくさんのセメント抵抗が見える。これは、電流を制限するためにつけたもので、抵抗を変えていくつかの電流パターンを検証できるようにした。最初は2Aをめどにしていたが、起動させるためには2.5A程度の電流が必要だった。





まず、PIC16F648で簡単なコントローラーを作成した。
ポートBを出力にして、6ビットをMOS-FETドライバへの出力、1ビットをPWM出力、1ビットを動作確認ようのLEDとした。

ポートAは、今は使わないが、何れローター位置検出の入力などに使う予定。



PICにはPWM出力が1つ備わっている。これを使ってMOS-FETドライバへの出力信号をPWM化するためのロジック回路を作った。

74LS00のNAND回路だけで作った。
また、MOS-FETドライバは、すべて反転入力する必要があるので、それを考慮した回路にした。
そして、PIC側からは、ハイサイドもローサイドも、FETを動作させたい場合は1を出力すればいいようにした。

モーターを回すまえに、ロジックアナライザで回路のチェックを行い、正しく機能することを確認。

次に、PICのプログラムでPWMが20KHz、デューティー比が10%~100%まで変化させて、出力をオシロスコープで確認。

その後、PICでモーターを動かすためのプログラムを書く。
PWMでデューティー比10%~100%に変化させて、電流が変化することを確認。
その状態で、モーターに0.1秒から0.5秒まで0.1秒刻みで通電時間を変化させた起動パターンを作った。
電流がデューティー比にあわせて、0.1Aから2.0Aまで変化することを確認した。しかし、このときはまだ回転できず、モーターはブルブル振動するだけ。この時点で、セメント抵抗を少し下げてみた。
何度か繰り返して実験していたら、デューティー比80%以上、通電時間0.3秒以上でくるっと60°回転することがあった。

さらにプログラムを変更。1回転で6ステップの出力パターンがあるが、1ステップの周期を300msから、徐々に短くしていくものを作った。起動トルクが必要なので、デューティー比は80%固定にした。
すると、1ステップの周期が3msのときに回転したのだった。約3333RPMだから、思っていたよりも高回転で回り始めるようだ。定格で2万~3万回転なので、その10分の1ぐらいが起動ポイントになるのかも。

ようやく第一関門突破。

オシロの写真、上が1相の電圧変化と下が電流変化。
山と山が逆位相になっている。
電流と電圧の位相差が180°になったから回転したのだろうか。

次は、この位相をPICでキャッチして、センサーレス動作をさせる必要がある。
位相信号を取り出す部分は、前に作った回路がそのまま使えそうだ。
ただし、BEMF という別な方法もあるようなので、どちらも検証してみたい。まずは、その仕組みから押さえておかなくては。

2010年4月8日木曜日

モーター基板の回路見直し

安直に、他人の作った回路を模倣して、モーター基板をつくってみたものの、モータはうまく回ってくれないし、修正しようにも回路が良く理解できていないため、どこをどうするのが良いか検討がつかない。

仕方ないが、もう一度基礎から固めなおすことにして、図書館でトランジスタの本を借りてきて読んだ。それで分からなかった点が少し理解できた。

次にMOS-FET本の基本的な回路を参考にしてゲートドライブ回路を組んでみてテストした。
フォトカプラなしの5V回路。これはlemonさんのアドヴァイスを参考にした。

前回、フォトカプラをつけてゲートドライブ回路の確認をしたときに、MOS-FETがおかしな動きをしていた。その原因は、MOS-FETのゲート-ソース間の電圧が規定の4ボルトよりも低いために、MOS-FETが完全にONできず、中途半端な状態になっていたためだった。だから、今回はその点を特に注意した。リーク抵抗といって、ゲートとソースの間に1M~数十Kの抵抗をつける回路もあるようだが、この電圧がきちんと出ていればいらないようだ。

また、テスト中に何度か出力がおかしくなる場合があった。原因は電源配線にあったようで、できるだけ配線を短くすることで、このおかしな挙動も起こらなくなった。配線の中に含まれるインダクタンス成分などが影響するぐらいにMOS-FETはデリケートな半導体のようである。

参考のために前回作った回路をみていたら、なんと、MOS-FETのソースとドレインが逆になっていた。それに、P-MOSの動作が良く分かっていなかったために、ゲートドライブ部分の初段エミッタ接地回路がまちがっていた。これじゃあ、動かないはずだ。自分が犯したミスとはいえ、知らないということは恐ろしいものだと思った。

ということで、自分の間違いを一つづつ発見、確認しながら、作業を進める。

今度はMOS-FETがきちんとON/OFF動作していることをオシロスコープで確認。入力パルスは100kHz。

ハイサイド、ローサイドともに回路抵抗などをいろいろ変えてみて、最適なポイントを探し出す。

こうやって、作った新しい回路図がこれ。

初段はエミッタ接地、信号源とのレベル変換をかねている。信号はここで反転する。ローサイド、ハイサイドのそれぞれにプルアップ、プルダウン抵抗をつけて、電源投入直後のMOS-FET誤動作を回避させる。ベース抵抗と並列にスピードアップコンデンサをつけた。この効果は大きい。

次にプッシュプルバッファで出力インピーダンスを下げる。2SC2120と2SA950のコンプリメンタリで構成、Ic=800mAまでなので、設計では500mAとする。

最終段にパワーMOS-FET。ハイサイドは2SJ477で、-60V25A。ローサイドは、2SK2232で60V25A。コンプリメンタリではないが、似たような仕様のものを選択。ゲートの電流制限抵抗は、J477は5オーム、K2232は10オームとした。これは、CissがJ477が2000pF、K2232が1000pFと、2倍の開きがあるため、駆動電流の計算からこのようになった。
Iar = Ciss * Vg / Tr = 500mA
Tr = 2.2 * Ciss * Rg = 48nsec
自分で回路を確認しながら進めているので、安心感がある。時間を惜しまずこうするべきなんだな。

ブレッドボードから今度はユニバーサル基板に組んでみる。
すべて作らず、まずは1相分を組んでみて、動作確認。配線はできるだけ短くし、インピーダンスの影響を少なくする。

つぎは、ハイサイドMOS-FETのドレインに30kオームの負荷抵抗をつけてGND。ローサイドMOS-FETのドレインに30kオームの負荷抵抗をつけてVCCへ。両方のMOS-FETが同時にONしないことを確認。

OK。
そして、2相目、3相目を同じ手順で組み立てていく。

これでようやくドライバ部分が完成。

この次はPICコントローラー部分だ。

スピンドルの仮組み

この2週間ほど、ブログに投稿するのを怠ってしまっていたのでまとめてアップ。

先日入手したベビーチャックなどを仮組みしてみた。

スピンドルのヘッドにカラーをつけてその上に40ミリのプーリーをのせた。
プーリーにベルトをかけてモータとつなぐ予定。

これだけで3キロ弱の重量がある。ベアリングの支持金物が思った以上に大きかった。一つだけにしようかと思ったが、一つだけだと芯ブレが大きいためやむなく2つにした。

黒い色のセットカラーとアルミプーリーを接続するために、1.5ミリ厚のアルミ板を円形に切ったものを作った。







セットカラーとプーリーをねじでとめて一体化した状態。

赤い色は、ねじの緩み防止用ボンド。

多少、プーリーが負けている感じがするが、まあいいでしょう。




一方のモーター側はというと、これ。直径20ミリのアルミプーリー。
そして、ブラシレスDCモーターの2ミリシャフトとつなぐための苦肉の策が、直径6ミリの真鍮棒に2ミリの穴を開けてつくったスペーサー。

モーターのシャフトに固定するための芋ねじがない為、まだモータにはつけていない。



実はこの真鍮棒に2ミリの穴を開けるのがとても難しくて、いろいろ考えた。

「ミニ旋盤を使いこなす本」という、旋盤を使う人たちのバイブル的な本を買って、読んでいたら、丸ものの真ん中にけがきを入れるための治具が紹介されていたので、早速、手持ちの端材で作った。
それが、この三角形のもの。


画像のように、丸いものを内側の三角の頂点にくっつけておいて、センターのケガキ線を入れるのだ。精度はそれほどでもないが、あると便利。
ただ、三角形を形成しているアルミの角材が10ミリ角で、ちょっと小さいために安定性が悪い。20ミリ以上のアングル等で作り直したいところ。

外枠の三角と上に乗っかっているアルミ板で作った三角、角度が違っているため底辺側で枠がはみ出している。外枠の頂点の角度が60度よりも大きくなってしまったためなのだが、ちょっと不細工。(笑)

High Frequency Solid State Tesla Coil

昨日、SSTCを検索していたら、面白いものを発見した。

HF-SSTC

このテスラコイルは、とても小さく、そして動作周波数がとても高い。大きさは、2次側コイルがΦ46ミリ×102ミリ、周波数が4MHz。出力500W。

私の知っているテスラコイルは、周波数がせいぜい100kHzぐらいまでだと思っていた。あの大きなコイルでは、高周波は無理だと思っていた。でも、当たり前のことだけど、高周波にするためには小さくすれば良いのだった。単純なことだけど、2次側の出力電圧が高くないとアークが出ないのではないかなと思っていた。でも、実際に作った方がおられ、その写真をみると、ちゃんとアークが出ている。すごいなぁ。

このSSTC、もうひとつ見ものがある。それは、出力段にE級アンプをつかっていることだ。E級アンプについても良く知らなかったので、あらためて調べてみたところ、非常に効率が良く、無線通信などで少しづつ使われだしているものらしい。これからの有望になる技術だそうだ。
ついでに、F級というアンプもあるそうで、これもまだ研究段階のようだ。どちらも効率が良いことが特徴で、スイッチにパワーMOS-FETを使うようである。このMOS-FETは、ゲートの開閉に時間がかかるため、100kHz程度までなら使えるが、それ以上だとそのままでは使えない。そのため、出力段の最後にコンデンサとコイルをつけて、共振回路を形成させて、ここで希望の周波数電力を作り出すようである。MOS-FETはコンデンサにエネルギーを送るバルブ的な役割を果たすようである。

この次に作る予定のSSTCは、高周波動作をさせたいと常々考えていたので、とても良い事例を発見することができてうれしい。技術的には困難な点が多そうだが、そのうち挑戦してみたい。