2009年8月31日月曜日

FT232RL

GigaSt v5のUSBチップは、FTDI社のFT232RLというUSB-RS232Cチップが使われている。
よって、GigaSt v5のソフトウェアをインストール時に、このFT232RL用のドライバをインストールしている。
このチップは、結構あちこちで使われているようで、アプリケーション側はUSBがあることを意識しないで、シリアル通信をすることができるそうだ。

ruby-usbドライバが使えなかったので、シリアル通信をすることにしたのだが、どうもうまくデータが取れない。送信するデータは、SnoopyProで確認するとGigaStのオリジナルソフトとまったく同じ内容なのだけれど、なぜかUSBの挙動が違う。オリジナルソフトは、送信前にドライバーとUSBチップの間で何度かコントロールコードのやり取りがあって、そのあとGigaSt向けのデータを送っている。そのあと1秒以内に計測結果が返ってくるのだ。

rubyのシリアル通信用ライブラリがおかしいのか?

wincom.rbというものをつかっているのだが、ソースをざっと見たところ、Win32APIを呼び出している。

送信モードが何か違っているのかなぁ?バイナリーとアスキーがあるのか?

ruby-serialportがコンパイルできなかったので、rubyのDL2でDLLを直接呼び出すことになるのかなぁ。。。

2009年8月30日日曜日

SnoopyPro

USBのパケットをキャプチャするソフト。

PC上のアプリは、USBシリアル通信ドライバを使って、見かけ上シリアル通信を行っている。

一方、GigaStのマニュアルには、送・受信内容のドキュメントがひとつある。このドキュメント以外に何らかの通信を行っていたら、ソフト開発そのものが無理になってしまう。その心配を解消するため、USBのパケットをキャプチャすることにした。

SnoopyProはフリーソフト。

早速、使い方が書いてあるサイトを見ながらパケットを見てみた。

解析の結果、他の通信は見つからなかった。ドキュメントに書かれたデータを単純に送信・受信しているだけのようだ。

これでひと安心。ソフトの続きをつくってみるか。

ruby-usbが使えない

簡単なサンプルを実行しようとしてみたが、デバイスが出てこない。

おかしいなといろいろ調べたら、既存のドライバがデバイスをつかんでいるため、libusb側には何の情報も来ないということだった。

ドライバを入れなおすことも少しやってみたものの、うまくいかない。

う~ん、困ったぞ。

usbをつかうことをいったんやめて、シリアル通信にしてみるか。。。

それで、ruby-serialport-0.7.0を入れて動かしてみたら、ruby-1.8.xのDLLを要求された。ruby-1.9.1じゃないのか。
ソースをextconf.rbからMakefileを作成して、VC++でコンパイルを試みたが、エラーだらけでさっぱりわからない。

またしても、困った。

それで、仕方なく、wincom.rbというライブラリを使うことに。このライブラリは、windows専用なのだ。プラットフォーム依存バリバリ。でも、仕方ない。

2009年8月23日日曜日

ruby-usbのコンパイルが出来た


画像のようなエラーが出ていたため、libusb 用のライブラリがコンパイルできないと思っていたのだが、意外と簡単に解決した。


以下に手順を書くことにする。

  • はじめに
まずは、VisualC++が動くように /bin/vcvars32.bat を実行して環境変数を設定する。

  • ソース入手
ruby-usb - libusb binding for Ruby のサイトから ruby-usb-0.2.tar.gz をダウンロードする。


それから、libusb-win32も入手しておく。

これらのソースファイルを適当な作業用ディレクトリに展開する。

libsub-win32は、usb.hとlibusb.libは面倒だからruby-usbと同じフォルダーにコピーして配置した。

  • Makefile作成
READMEに書いてあるとおり、

ruby extconf.rb

を実行する。するとMakefileが出来上がる。

このMakefileをエディターで開いて、

LIBS = $(LIBRUBYARG_SHARED) oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib libusb.lib

のように、行の最後にlibusb.libをつける。これで先ほどのエラーが出なくなる。要するにエラーの原因はライブラリが読み込めてなかったということだった。

  • コンパイル&インストール
READMEの続きを実行する。ただし、VCなのでmakeじゃなく、nmakeとなる。

> nmake
> nmake install

最後に、usb.h と libusb.lib を rubyのインストールされているディレクトリ配下のinclude/ruby-1.9.1とlibにそれぞれ手で配置した。

irbを起動して、require 'usb'すると-->trueと返事が返ってきた。

これがつかえるとなると、DLなどを使ったコードを書かなくても済むに違いない。


スペアナGigaSt v5をrubyからコントロール出来るか

GigaSt v5というスペアナはUSBでPCとつながっている。だからrubyがUSBポートをコントロールできれば、スペアナのデータが取り出せるはずだ。

それで調査してみたのだが、WindowsXPのSP3以降には、MS純正のUSBドライバ(WinUSB.DLLとWinUSB.sys)が入っていることがわかった。

参考:
http://www.wdddc.net/node/25

参考URLの記事によると、以下のようなソフトウェア構成になるらしい。

[ユーザーアプリケーション](exe)
 ↑[ユーザーリンクライブラリ](WinUSB API群を利用するdll)
  ↑[WinUSB.DLL](Microsoft社提供WinUSB API群)
   ↑[WinUSB.SYS](Microsoft社提供WinUSB デバイスドライバ)
    ↑[ユーザーデバイス](ハードウェア)

それで、この絵の下から4番目(上から2番目)の部分にあたるDLLはどうするのかしら・・・とさらに調べた。

すると、libusb というユーザーモードのドライバが存在するらしい。それも、linux, MacOSX, WindowsをサポートしてLGPLで公開されているらしい。Windows版は、LibUsb-Win32。素晴らしい。

すると、あとは、rubyからこのLibUsb-Win32をコントロールできればいいわけだ。
rubyからDLLを呼び出す方法は2つほど存在するようだ。ひとつはWin32APIというライブラリを使う方法。もうひとつは、DLというダイナミックリンクライブラリを呼び出すためのCラッパーライブラリを使う方法。
後者の方が新しいらしく、OSに依存しないようにできるとか。特に、今回はlibusbというライブラリを使うので、このDLを利用したほうがよさそうだ。

ちなみに、rubyからlibusbドライバを呼び出すためのlibusbというライブラリも存在するのだが、こちらはWindowsではコンパイルできなかった。

FreeRTOS動作確認

昨日の続き、dsPIC33FのインターフェースボードにFreeRTOSをのせて動かすテストを行った。

テスト中の動画


画面左側のLEDは200ms周期で点滅。右側は500ms周期。これと右上のブザーで1kHzの音を100ms鳴らして、500ms止める動作を繰り返している。ただし、カメラの特性なのか、動画の特性なのかわからないけれど、1kHzの音が録音できていない。

ソースはこちらから→ FreeRTOSConfig.h, main001.c
修正した最新の回路図

ちなみに、PicKit2をデバッグモードで動かしているので、ソースの修正から動作確認まで非常に簡単にできてしまう。とても便利。

さて、この次は周辺ものである、ロータリースイッチやLCDなどをつけて動作確認だ。

2009年8月22日土曜日

dsPIC33FJ32GP202+FreeRTOS

まずはじめに、FreeRTOSで簡単なサンプルプログラムを作ってみることにした。

dsPICの23番ピン(RB12)にLEDをつけてある。これを点滅させるのだ。
発信器は内臓のものを使う。

電子工作室のページに移植手順が書いてあるので、ディレクトリを適当に決めて、ほぼここに書かれているとおりに作業を行った。プロジェクト名はinterface001にした。FreeRTOSのソースファイルは数が少ないのには少し驚いた。

メインのプログラムを書いていて、デバイスのConfigurationのところでつまづいた。
dsPIC33Fのリファレンスマニュアルを見る必要がありそうだ。

MICROCHIPのサイトにdsPIC33Fファミリ リファレンス マニュアルがあるが、英語版のみで日本語版はない。

浅草ギ研のページによると、dsPIC33Fリファレンスマニュアルの日本語版はまだなく、dsPIC30がそのまま使えるらしいことがわかった。ついでに、そのままそこにあったリファレンスマニュアルをGETさせてもらった。

リファレンスの必要そうな部分だけに目を通して、ソースを完成させた。

ビルドを何度か繰り返してエラーを取り除いて、最終的にHEXファイルをEXPORTしてバイナリーをつくった。

次に、PicKit2を接続して、書き込みだ。

PicKit2をPCのUSBポートにつないで、ターゲットボード上に用意したピンヘッダーに接続、ボードの電源を入れる。そして、PicKit2のソフトを起動する。すると、起動時にエラーメッセージが出る。VDDの電圧が異常?しばらくよくわからないまま、作業を続けていた。

dsPIC33Fは、自動的にデバイスを認識してくれないのかな?マニュアルでデバイスを指定。

PicKit2のマニュアルをみて、PicKit2が検出しているVDD電圧が2.3~2.4Vで、デバイスの書き込みに必要な2.7~3.0に達していないということがわかってきた。

それで、PicKit2本体のVDD電圧をキャリブレーション調整する。0.5Vほどずれているようだった。
これで直ったかと思ったが、その後もVDDの電圧でメッセージが出てくる。???原因がよくわからない。

デバイスへの書き込みを行っても電圧が不足しているからエラーが出てくる。
ボードの電圧を測定すると3.3Vでている。おかしいなぁ、、、と回路図をもう一度確認していたら、間違いを発見!
PicKit2を接続するピンの順番が間違っていた。3番目のVSS(GND)と、5番目のPGCがテレコになっていた。設計時にどこかのサイトに出ていた回路図を参考にしたときにミスったようだった。

原因がわかったところで、早速、配線の間違いを直し、PicKit2をつないでみた。OK!エラーは出なくなった。

2009年8月17日月曜日

FreeRTOS


今回、dsPIC用のフリーのリアルタイムOSであるFreeRTOSを使うことにする。


FreeRTOSのサイト:
http://www.freertos.org/

参考サイト:
http://www.picfun.com/RTOS24/FreeRTOS24frame.html

最新版は、v5.4.2だった。

exeファイルをダウンロードして、実行すると、自己解凍された。

MPLAB C30

Microchip社の純正C言語コンパイラであるMPLAB C30というものがある。
dsPICで開発するのに必要なので、これをGETしてインストールする。
これは純正だけど、制限つきのアカデミック版が無料で提供されているのでそれを使う。

参考サイト:
http://www.picfun.com/c30frame.html
http://www.microfan.jp/mplab-c30

ダウンロードの画面



このとき、ユーザー登録が必要だったので、メールアドレスやパスワード、氏名、国、住所などを登録した。

ダウンロードが完了したら、インストール。

・・・インストール中・・・すべてデフォルト。














これでインストール終わり。

スペアナ(GigaSt v5)の画面表示ソフト



以前、購入したスペアナGigaSt v5(画像はステップアッテネータ製作時のもの)の画面表示ソフトを先日コンパイルしたRuby1.9.1+Shoesで作れないかなーと考えている。

http://www.wa.commufa.jp/gigast/GigaSt5/GigaSt-v5.html

スペアナというすごく高級なものをアマチュアレベルで購入できるほどすごく安価に提供されている青山さんという方はとても素晴らしいと思う。でも、表示ソフトは.Net系のもの(VBかな?)で、ソースは非公開なのだ。

このスペアナを自動化してみたり、もっともっといろいろと活用できないものかと考えると、画面をカスタマイズしたり、データを加工したりする必要がでてくる。だから、オープンソースじゃないのがとても残念。

しかし、幸いにも、USBとのインターフェース仕様が公開されているので、このデータを拾って画面に表示するぐらいなら出来るかなー、、、プログラマーとして、やってみる価値はあるかなー、、、、と考えている。作ってみたら、いろいろとスペアナについても勉強できることだろうし。


言語はRuby。これは今お気に入りだから。

このRubyは、困ったことに標準のGUIがTkぐらいしかついていない。なので、たいした物はつくれないのだ。それで何か良いGUIライブラリーはないものかと探してみた。

参考サイト:
http://www.pressure.to/ruby_gui_survey/index-ja.html
http://www.infoq.com/jp/news/2007/09/ruby-shoes

候補はいくつかあったのだが、Shoesというのが目についた。

http://www.shoooes.net/

比較的新しいRuby用のフリーのGUIで他に比べて活発に活動しているみたいだった。欧米では人気があるらしいが、日本語ではあまり知られていないようだ。日本語の情報源がほとんど見当たらないのが若干ネック。しかし、画面のソースの書き方が非常にシンプルな感じ。Cで書かれているらしいし、Windows、MacOS、Linux用が提供されている。スペアナがLinux上で動くというのもなかなか面白いかなとも思う。

ただ、リアルタイムで画面を更新するものだけに、どれだけ使えるのかは、実際に作ってみなければわからない。

インターフェース部の製作


SSTC1号機の改修はちょっと時間がかかりそうなので、インターフェース部分を先に作成した。

とりあえず、dsPIC周りだけにして、周辺のロータリーエンコーダーやLCDやタクトスイッチなどの別基板部分は後日作ることにした。
このボードだけで、とりあえずLED1個と電圧サウンダーとRS232Cが使える。

配線を終えたので、これにFreeRTOSを載せて動作確認を行う予定だ。

写真は一通りの配線とそのチェックを終えて、電源を入れたところ。左下のスイッチ横の青色LEDは電源ランプだ。

2009年8月12日水曜日

eneloop

Blogに載せる写真はコンパクトデジカメかケータイのカメラで撮っている。

私が持っているコンパクトデジカメは、ニコンのCOOLPIX L15。こいつは、単三電池2本で動作するタイプ。1年ほど前に購入した。

こういう電子機器は、バッテリーが一番問題になる。だいたいバッテリーは数年で交換する必要が出てくる。そこを考慮して単三電池で動くのを買った。バッテリーの持ちを気にすることがなくなるし、電池が切れてもアルカリ電池が比較的容易に購入することができる。

しかし、ストロボを使うと電池の消耗が激しい。また、こういう電子機器は、待機状態でも電気を食うため、使わない間に電池が消耗してしまう。

一時期、待機電力で消耗しないように、電池の部分にシートなどを入れて、カメラを使うときだけシートを外すということをしていたのだが、内蔵時計もとまってしまって、カレンダーが狂ってしまっていた。だから、今は電池を入れたままの状態。

そんなこんなで、デジカメ用にSANYOのeneloopを購入した。単三型eneloopが4本と専用充電器がセットになったものを選んだ。

充電器は、NC-MR58というeneloop専用で、単三、単四の急速充電とリフレッシュ機能と電池残容量チェック付きのもの。アキバオーで3988円。

一緒に電池ケースも買った。同じくアキバオーで100円。

昔、ウォークマン用に予備のNi-HN電池をポケットに入れて電車で移動していたら、金属が接触してポケットから煙が出てきたことがあり、あれ以来、高エネルギーの電池にはケースが必要と知った。

eneloopは1000回繰り返し使えるので、電池を毎回購入するよりもランニングコストは低いはず。これからの活躍に期待がかかる。

電源回路がほぼ完成


電圧測定用の回路に問題があって、2度も爆発をさせてしまったが、ようやく実験用の電源装置が完成した。

左側の表示がトランスの2次側電圧。100/220vを逆さまにつないであるので、44~45Vの表示が出ている。

右側の表示が直流出力電圧で、写真は3倍に昇圧した後の電圧。

ひとつ気がついたことは、メインブレーカーを切っても、負荷がかかっていないため、コンデンサに充電された電気がたまったままになっている。ブレーカーを切ったあと、気をつけないと感電して火傷する恐れがある。放電用の抵抗器が必要で、実験の後は必ず放電してやらないと危険だ。

それから、メインのトランスを昇圧側に接続すると、出力が最大でDC1000Vぐらいになると思われる。まず、一般の機器や配線はAC600V用なので、絶縁破壊する可能性が出てくる。だから、今日はこのテストはやめておこう。

この電源回路、メインのトランスを使わないで、AC100Vを直接整流回路とつないでしまうことも可能だ。その場合、100V、200V、300Vの直流電圧が得られるはずだ。

いったん電源回路はこれで終わりにして、次は、壊れたSSTC1号機を修理して、動作中の特性をスペクトラムアナライザで測定しなくては。
電源回路の設計を開始してから2ヶ月近くも要してしまい、予定が大幅に遅れている。

それが終わったら、3相信号発生器のコントローラーを作って、3相信号発生器がきちんと動作することを確認する必要がある。

爆発の原因が判明

図面を修正して、回路もそのとおりに直したのだが、原因がわからなかったので不安が残ったままだった。

それで、確認のためメインブレーカーを投入したところ、また同じ箇所でブリッジダイオードが爆発した。
今度は2度目だったので、あまり動揺はしなかった。

そして壊れた回路を調査していたら、また同じように、ブリッジダイオードのプラス側の配線が吹き飛んでいた。かなりの電流が流れたようだ。

これは、トランスの突入電流だろうか?しかし、ブリッジダイオードは600V1Aのものだし、直流側の抵抗も燃えるはずなのだが、抵抗は前回も今回も無傷。

お茶を飲んでしばらく考える。。。

その後、突入電流の対策として、耐電圧の大きいブリッジダイオードを使おうかと準備していたら、ふと、グランドがおかしいんじゃないかということに気がついた。

改めて回路を見ると、おっ、これはおかしいぞ。


ブリッジダイオードの交流入力側の片方とマイナス出力側とがアースでつながってしまっている。

絵を描いてみた。回路は絵の1番上のようになっている。
交流がプラス側のときは、絵の2番目のようになり、90kオーム負荷抵抗が入っているため、電流は数ミリアンペアとなる。これは正常。

しかし、絵の3番目、交流がマイナス側に入ったときに、異常事態が発生する。
矢印で書いたように、グランドを通じて電流が迂回するため無負荷になってしまう。ショート状態になるためにダイオードならびに、AC100Vコンセントとダイオードの間には、数A~数十Aが流れる。幸い、貧弱な配線と定格が1Aのダイオードだったため、これらがヒューズ代わりとなって、解けて断線し、大きな被害には至らなかったということだった。

原因が完全に分かったため、ダイオードの交流入力側に絶縁トランスを入れた。



これで一安心。

メインのトランスが絶縁型でなく、しかも、数倍の電圧が複数選択できるように、半波整流を選択したために、グランドが共通になり、いろいろな問題を生じさせてしまったようだ。

回路図を修正し、組み立てなおしをおこなった。今回は電圧の調整が簡単になるように精密半固定抵抗を入れた。

検電器


電源回路のアースが、商用100Vのアースと極性が同じかどうかがすごく気になったので、手持ちのネオン管と3Mオームの抵抗で作った。

写真はコンセントに入れて確認しているところ。ネオンがわずかにオレンジ色に光っている。これでHOT側を調べておいてから、電源回路のHOT側とが同じになるようにすれば、グランドが共通になるので、心配した問題は回避される。

2009年8月10日月曜日

電源回路の見直し



回路を大幅に見直して、余計なものは排除した。

・電流と電圧の切り替えにリレーを2個使っていたが、電圧の表示に小数点が不要になったので、6pスイッチで済ませた。
・そもそも、交流電流と交流電圧の測定回路が間違っていたので、それを正しく動作するように修正し、回路の入力ではなく、トランスの2次側出力(整流回路の前)に入れた。
・回路図は実際の組み立てで実際のパーツの配置やコネクタ間の配線がわかりづらかったので、メインの整流回路を別図面にしたほか、パネル面、計装部を分離して表現するようにした。
・±5Vの電源を削除した。

これで、回路はかなりすっきりした。

実際の組み立て方に関しても、予備のスペースが多かったので、少し小さくしたこと。それと、電圧電流計パネルの向きを今までの正面としていたところから左側側面に移した。これは、高圧部分と計装部分の配線が接触していたので、それを避けるため。


以上のことを、一通り終えた。組み上げるところまで組み終わった。あとは調整だが、また次の機会にゆずって、今日は終わり。

2009年8月9日日曜日

爆発(その後)

関係するパーツをひとつひとつチェックした。

当初、リレーが吹っ飛んだと思ったのだが、リレーは問題なかった。

ひどかったのは、配線で、リレーと整流後の分圧抵抗の間をつないだホルマル線の塗り物がすべて蒸発して裸になっていたのと、AC100V側の電圧を取り出すビニル被服線の1本が断線してところどころ内部から線がむき出しになり黒くなっていた。それと、ブリッジダイオードが内部でショート。爆発したように見えたのは、このビニル電線だろうと思う。

原因が良くわからない。片線だけが焼けて、もう片方は損傷が認められないのだ。
電線の耐圧が超えたことはなんとなく想像がつく。電子回路の5Vで使う貧弱な線を商用100Vにつないだのは間違っていた。

トランスは絶縁型じゃないから?
アースがうまくとれていないから?

トランスは、片側だけを昇圧した簡単な構造のものだから、出力側から想定外のサージが入るととたんに入力側にも影響がでる。

しかも、整流回路は半波整流で3倍まで昇圧している。それにACの片側をグランドにしているので、商用100VのグランドとHOTが逆に接続されたなら、ちょっとまずいような気がする。


とりあえず、100V以上の電圧が掛かる箇所については、耐圧600Vの電線に置き換えることにした。

2009年8月8日土曜日

カレントトランス


秋葉に行って交流電流を検出するためのカレントトランスを買ってきた。
ラジオセンター内の東邦無線で1050円だった。




当初、カレントトランスはトロイダルコアにエナメル線を100回巻いて作ったものを使う予定だった。
電流計の調整中に、自作したカレントトランスの性能を測定してみた。

負荷に1200Wのヘアドライアーを使って実験してみた。10A以上は電流が流れるはずなので、100Ωの抵抗をつけると10Vぐらいは出るはず。だが、非常に性能が悪く1Vすら出ない。オシロで波形を観測しても非常にノイズが多く、とても使用に耐えない。

トロイダルコアの型番は不明なので、なんともいえないけれど、透磁率が低すぎるのだと思う。巻き数を1000回ぐらいにすれば性能が上がる気もするけど、ちょっと自作は無理そうに思えた。







買ってきたカレントトランスで同様な実験をおこなった。なんら問題なくしっかりと値が出ている。
WEBカタログに特性がちゃんと出ている。
http://www.u-rd.com/products/CTL-6-S-H_tab1.html#detail_tab
結合係数(K特性)をみると、0.1A~20Aはほぼフラットな特性が出ている。申し分ない。

2009年8月7日金曜日

爆発

先週の日曜日、電圧計の調整をおこなって、ほぼいい感じになったので、ばらしてあったものを組み上げて電源を入れて最終確認をおこなっていた。
それで、メーターのスイッチを切り替えた瞬間、バン!と。

まさか、電圧計の回路で。。。

そのショックで、少し精神的に立ち直れなくて。Blogにも書けず。

原因不明。あまりやりたくないが、詳しい調査は、明日やる予定。

回路図の見直しもやらねば。

2009年8月1日土曜日

Visual C++ 2008 Express Editionでruby1.9.1をコンパイル

今日は、このBlogのテーマとは少し脱線。

仕事でrubyを使ってツールを作っているのだけれど、どうもJava使いの人から不安定だとかいろいろとクレームをいただいている。環境は、Windowsなのでmswin版を使っている。それで、最新のパッチを適用したいのだけれども、mswin版のコンパイル済みが頻繁に更新されていないのだ。ということは、自分でコンパイルするしかないなぁと。

ググッてみたら、意外とコンパイルされている方がいることがわかった。

http://d.hatena.ne.jp/anon_193/20090110/1231556310

http://d.hatena.ne.jp/Kazzz/20090313/p1

ありがたいことに、MSがVisual C++ 2008 Express Edition を無料で提供してくれている。さっそくインストール。

つぎにRubyの1.9.1の最新バージョンをGET。ついでにzlibも。zlibはrubygemsに必要なので。

Rubyのソースを展開して、コンパイル。約30分ほどで終わった。
nmake test を実行すると、いくつかエラーがでているようだったが、最後まで通ったので無視。
nmake install を実行。ライブラリも生成されていく。


約1時間ほどで作業が終わった。

このあとrubygemsをいれて、win32-apiなどをチェックしてみようと思う。