2009年10月26日月曜日

パルスジェネレーターとMAX2 CPLD

実は、ロジアナを作っている最中に、実験用のパルスジェネレーターが必要だと感じ始めていた。

何に使うのかというと、このあと控えているMOS-FETをHブリッジ構成で駆動させる1次コイル用のドライバ回路の製作で、MOS-FETの負荷短絡テストなどにどうしても必要だから。

それで、どうせ作るならCPLDをベースにしようということになった。そしたら、今回このロジアナを購入したオプティマイズさんのところで、MAX2というCPLDをかなりリーズナブルで出しているではありませんか。

それで、早速、雨の振る中を秋葉原のITプラザさんまで買いに出かけていった。ちょっと早く行き過ぎてしまって、お店がまだ開いてない。12:00になってようやくお店の女性の方がこられた。どこかのブログにも同じような経験をされた方がいたことを思い出しながら、目的のものを買った。

このMAX2 CPLDキットは1600円で、ByteBlaster MV互換JTAGライターが1000円だった。

細かなパーツを注意しながら組み立てる。





できあがり。

ちょっと写真をみて変なのが、ケーブル。よく見るとセンターからずれている。
このケーブル、実は秋月で150円で売っていた14ピン用のものなのだ。4ピン余分なのだが、安さと手間を考えて、見た目は眼をつぶることにしたのだった。


作り終えたあと、パーツをチェックしていたら、なんと!黄色い色のタンタルに極性があることをすっかり忘れていて、向きが逆だった。

それで修正するために、いったんつけたものを取り外すのに無理な力を加えてしまったため、端子が根元から折れてしまった。ああ・・・
なんとか半田技でくっつかないものかと、写真のように団子状態にしてみた。しかし心配だ・・・



このタンタルコンデンサは16V10uF。レギュレーター用のものだったので、別にタンタルでなくても問題ないだろうからと、手持ちの35V10uFの無極性の電解コンデンサに交換した。

ご覧のとおり、またもや見た目が悪くなってしまった。(汗)




このあと、ALTERAのサイトからフリーの開発ツール Quartus Ⅱ Web Editionをダウンロードしてインストールした。

さあ、VHDLでパルスジェネレーターの回路を作るとするか。。。
でも、まだPICとFPGA間のシグナルの問題が解決してないなぁ。。。

2009年10月25日日曜日

カメレオンUSB+ロジアナその3

前回に引き続き、ロジアナの製作。
ボードまで完成していたので、ケースの加工とプローブを作った。

このプローブは、あちこちのサイトから得た情報により、IDE用ケーブルを使った。

ICクリップの手持ちがなかったので秋葉原の千石電商で購入。1個70円。15個買ったが、今回見たい波形は3つだけなので、とりあえず6個だけつけてみた。


←PICボードにつないで出力をチェック中。

ネットで調べていたら、myLAというオプティマイズ純正よりも使い勝手の良いソフトがあるらしいことを知った。しかし、ほとんどがリンク切れになっていて、どうやらサイトを閉じてしまったように思った。
それでも、どこかに落ちてないかと調べていたら、発見!
以下のサイトにアーカイブされて残っていた。




myLA入手先

なかなかよく出来ている。

そこで、このソフトを使ってPICのデータをのぞいてみた。

はじめ、プローブのIDEケーブルを20cmで作っていたのだが、どうもノイズが多いように見えた。そこで、ケーブルの長さを短くして10cmにした。若干減ったようにも見えたが、相変わらずあちこちでいろんなひげが出ている。サンプリング周波数を100MHzから10MHzぐらいに下げてみたり、いろいろ設定も変えてみた。それでノイズは完全に消えないが、データの形が見えてきた感じ。

全体を見て感じたのは、データがうまく出力されてないように見えた。ひょっとしたらPICのプログラム側に問題があったのかもしれない。

2009年10月18日日曜日

カメレオンUSB+ロジアナその2

まずは、カメレオンUSBの組み立てから取り掛かる。
パーツがかなり細かいので卓上用のルーペで念入りにチェックしながら作業を進めていく。

USB端子をつけたところでノートパソコンと接続確認を行う。しかし、ここでまず躓く。
EZ-USB Control Panelをインストールしたのだが、EZ-USBがきちんと認識されない。どうやらドライバーがうまく登録されていないようだ。

何度もドライバーの削除とUSBの抜き差しを繰り返したが駄目。ネットで調べると同様な現象が起きている人たちもいるようだった。iniファイルに1行追加するとか、どこか別なサイトで使われているiniファイルを使うと動くだとか、書いてあることを試したが現象は変わらず。

最後は、インストールしたEZ-USB Control Panelを削除して、もう一度インストールしなおす。

その間、もう一度基板の半田付けを確認してみたら、ひとつだけ半田がうまく流れていない感じだったのでこれも修正。

いろいろやってみて、ようやくうまく動作確認ができた。
(左の画像が出たらOKだ。)

EZ-USB Control Panelのインストールがうまく出来ていなかったようだ。


残りのヘッダーピンを基板に取り付けて完成。








この状態で、USBをPCに接続して、CPLDのプログラムを投入する。

コマンドプロンプトを立ち上げて、cusbwr.exeというプログラムでロジアナのバイナリーを転送する。

うまくいったみたいだ。



これでカメレオンUSBは完成。次はロジアナ基板の組み立て。
カメレオンUSBはCPLDがはじめからついていたが、こちらのロジアナは全てのパーツをつける必要がある。0.5mmピッチの半田付けなんて初めて。フラックスを塗るとうまくいくとの説明があるので塗る。

以前、どこかのサイトで半田をてんこ盛り状態にピンの上につけておいてから、半田吸い取り線で半田を取り除くとうまくいくんだという記事を見たことがあったので、この方法でやってみた。半田付けはかなり大雑把ながら出来たように見える。ただ、半田吸い取り線の松ヤニが基板についてしまって見た目が汚くなってしまった。それに、半田がきれいに取れすぎでちゃんとつながっているのか少し心配だ。

結局、キットについていた糸半田をつかって少しずつ端子に半田を流し込むことに。

集合抵抗やコンデンサ、ヘッダーピンなどをつけて、ようやく出来上がる。

カメレオンUSBとロジアナを接続。USBケーブルをつけてPCと接続。特に問題なさそうだ。

ロジアナソフトを起動して、動作確認をする。
32chあるのでそれなりに大変。ひとつづつ信号を入れて画面をみる。
う~ん、いくつかのピンで信号が重なっていたり、全然信号が出てこないものがある。簡単なテストなので接触不良もあるだろうから、あとでしっかりと調べることにしよう。

ボードの突起物もほとんどないためかなりコンパクト。
あらかじめ買っておいたプラスチックケースにもぴったりと収まりそうだ。


さあ、このあと、ケースの加工とロジアナ用プローブをつくれば完成だ。

でも、今日はここまでかな。

2009年10月17日土曜日

カメレオンUSB+ロジアナ


ロジアナの必要性を感じて探していたら、アマチュア向けだが1万円以下で32ch、100MHzまで計測できるロジックアナライザがあることを知った。

それで、早速、秋葉原に行き、ITプラザで購入した。
カメレオンUSBが4980円で、ロジアナが4000円。


あわせて、千石でテイシン製のTB-50というモールドケースとIDE HDDなどで使われるL型40ピンコネクタを買った。

このキットは、説明書などは何もついておらず、ある程度こういうものに知識がないと難しいなと思う。しかし、発売元のオプティマイズのサイトには回路図など多くの情報が充実しているようなのでそれほど困らないだろうと感じた。

2009年10月12日月曜日

世の中そんなにあまくない

そう甘くないです。

ModelSimで検証ができて問題が解決したように見えたが、実機での検証は良くなるどころかますます悪化したように見える。

以前は、ごくわずかながらでも信号が出て動いていたけれど、まったく動かなくなってしまった。PIC側の周波数の設定を変更すると信号が届いて反応しているのだが、その結果が完全にZEROになってしまい、波形がでないのだ。

配線を再チェックすると、1箇所で間違いを発見した。けれど、その修正でも直らない。

まだまだ見えない問題が隠れている。それに、今の回路をいろいろ検討すると、異常時の対処がない点も気になり始めた。フェールセーフが不十分なのだ。配線が断線していても、安定しているのかどうかとか、信号に何かしらの強力なノイズがのった場合に、どういう挙動をするのかなどなど。

もう少しいろんなパターンをシミュレーションしてみるべきなのかもしれない。
あるいは、PICから伝送される信号を見るためのロジックアナライザー的な計測器が必要なのかもしれない。

ModelSimの使い方

ModelSimを使ってみた。以下、自分用の使い方の覚書。


まず、シミュレーション用のVHDLをISEで作成する。

ISEを立ち上げて、左上側のSourceウィンドウの中のデバイスのところでマウスを左クリックしてメニューを出す。メニューの中のNew Source...を選択する。



ウィザードが立ち上がるので、
左が側の"VHDL Test Bench"を選択し、右側のファイル名を入力する。今回は、'3ph_sg_test'とした。右側下のLocation:は、変更せずにNextを押下。




次に、VHDLソースが出てくるので適切なファイルを選択。
ここでは、一番上の'dds_3sg'を選択した。
Nextを押下。





Wizardの最後に確認画面がでるのでFinishを押下。







すると、VHDLのテスト用ソースが生成される。

80行目~102行目の部分を目的にあわせて修正する。









テスト用の信号をVHDLで記述するのだが、今回は左のような感じにしてみた。












ここまで出来たら、これらのVHDLソースを使って、ModelSimでシミュレーションを実行してみることになる。

これ以降のシミュレーションを実行するまでの手順は、
Help>PDF Documentation>tutorial
を参考にした。




チュートリアルには、「Create working Library」とある。
まず、ModelSimを立ち上げる。


プロジェクトがないとWizardが立ち上がるようなので、Create Projectをする。

ここでは、プロジェクト名を'dds_3sg_test'とした。




この後、Add items to the Projectというダイアローグが出てくる。

ここで、右上のAdd Existing Fileを選択する。






次のようなダイアローグが出てくるので、Browseボタンを押下する。





ファイル選択ダイアローグが出てくるので、ISEで作成したVHDLソースファイルを選択する。

複数のファイルが同時に選択可能だ。
選択したら、開くボタンを押下する。

Add items to the Projectというダイアローグがまだ残っているので右下のCloseボタンを押下。


画面右上のWorkspaceウィンドウに先ほど選択した4つのファイルが入っていることに気づく。








「Compile the Design」

この状態でコンパイルを実行
Complile>Compile All





あれれ、、、エラーが出ている。



赤くなったエラー行をダブルクリックすると詳細が表示される。




テスト用のVHDLの3行目がおかしいと言っている。
ここでも赤くなった行をダブルクリックする。


すると、ソースが表示された。オレンジ色で問題の箇所がマーキングされている。

うーん、このツールよく出来ているな~と関心。

ところで、3ph_sg_testというキーワードが重なってしまったのが原因??。よくわからないが、とにかく修正してみることにする。修正は、ModelSimから出来ないので、いったんISEに戻ことになる。

ところで、ちょっと、この状態でライブラリを作成してみた。

File>New>Library...









ライブラリ名を入力








すると、4つのファイルのうち、コンパイルが正常に終了した3つのファイルが、workspaceウィンドウのLibraryタブのリストの一番上にあるworkの中に入っていた。

どうやらコンパイルが出来たものだけライブラリとして登録されるようだ。

では、プログラムを作りなおしてみる。

ISEに戻って、上記と同じ要領でVHDLを生成。

ファイル名が数字で始まっているのが問題かもしれないので、今度は'dds_3sg_test.vhd'としてみた。

生成されたものを先ほどと同じ修正を加えて保存。

ModelSimに戻って、画面右上のWorkspaceウィンドウのProjectタブを選択。余白部分でマウスを右クリックしてメニューを表示
Add to Project>Existing File
でダイアローグを出して、Browsボタンを押下。
ファイル選択ダイアローグが出てくるので、先ほど作り直した'dds_3sg_test.vhd'ファイルを選択して開くボタンを押下。

WorkspaceウィンドウのProjectタブ内にファイルが追加されたことを確認。4ファイルになっている。




このあと、先ほどやったようにCompile Allを実行する。





WorkspeceウィンドウのLibraryタブに切り替える。

リスト一番上のwork左の+マークをマウスで押すとライブラリとして登録されたエンティティが表示される。ちゃんと4つ入っていることがわかる。

「Load the Design」

次にこの4つのうち、シミュレーションのターゲットとなるエンティティをダブルクリックして、Loadを行う。このLoadを行うことで、ModelSimに最新のファイル状態が取り込まれるようである。


「Run the Simulation」

ここまできてようやくシミュレーションがスタートできる状態になる。

<<画面の表示が変わった。

左上のWorkspaceウィンドウには、Sim, Files, memories, Capacityといったタブが増えている。
右上にはdds_3sg_test.vhdソースが表示されている。

ここでいったんwaveウィンドウを開いてみる。
View>Wave

すると、右上のソース表示ウィンドウがタブ表示になり、waveがタブとして表示された。

しかし、このままではシミュレーションを開始しても肝心の表示したい信号が登録されていないので見ることができない。

次に、右上のWorkspaceウィンドウのsimタブ中のリスト一番上のdds_3sg_testの上でマウスの右クリック、メニューを出す。そして

Add>To Wave>All items in region

を選択。

すると青い色のマークがついた信号名が追加される。

(もしもこれを行わずにRunしたら、本当になにも表示されないのだ)




このままだと、小さくて見づらいので、ウィンドウの右上端の
+マークとXマークの間にあるUnlockを押して、独立したウィンドウにすると都合が良い。




さあ、いよいよシミュレーションの開始だ。

その前に、ツールバーの中のシミュレーションバーで、実行したい時間を設定しておく。

今回は、おおよそ2000μsec必要なので、2000usをセットする。このツールバーは独立する前のウィンドウにも、独立して表示したwaveウィンドウの上にもある。

ツールバーの数字をセットしたすぐ右横のアイコンがRunボタン。これをクリックするとシミュレーションが実行され、2000usに達したらstopしてくれる。


画像は、ツールバーの虫眼鏡のマイナス記号がついたZoom Outを使って、結果の時間軸を圧縮した状態のもの。

テスト用の入力信号が上の3段に表示されている。

その下の緑色が50MHzのベースクロック。細かすぎて緑色につぶれている。さらにその下の白っぽい緑のライン3本が出力されている3相の周波数だ。これもつぶれてしまっている。でも、Zoom Inして時間軸を引き伸ばせば見えるようになる。

あと、便利な機能はカーソルだ。
黄色い色のカーソルを使うと、カーソル間の時間が詳細に表示される。マーキングしておくとスクロールで移動させたときもポイントがすぐにわかる。

それから、表示されたデータをアナログ表示することもできる。

信号をマウスで選択して、右クリックしてメニューを出す。
Format>Analog(automatic)
で波形となって表示される。

多少待たされる。その間、CPUファンがうなっている。

1本出来上がり。しかし、これもよく出来ている機能だ。。。素晴らしい。


3本完成。
画像の左側が100kHzの波形で、きれいな三相波形が見える。右は数十MHzの波形だが、周波数が高すぎて白くつぶれてしまっている。

2本の黄色いマーカーに注目。
FQLOAD信号がLOWに落ちてから5us後に周波数が切り替わっている。設計どおりだ。


こちらは同じポイントで時間軸を変えたところ。
右側の波を見た感想は、Sinカーブとはいえないが、周期のずれ方から一応3相にはなっているようだ。1サイクルが3クロックだから周波数は16.67MHzぐらいか。





はじめ、信号をアナログにしたときに波形がプラス側とマイナス側が逆転して凹型の組み合わせたもののような形になっていたので、VHDLのソースに問題があるのか・・・と思ったが、ModelSimが信号を符号付きとして扱っていたようだった。
それで、上記と同様に信号をマウスの右クリックでメニューを出して、
radix>unsigned
にした。すると画像のようなキレイな波形となって表示された。ホッと一安心。

【問題の解決】

さて、このModelSimを使っていて、先日の信号が0.01Hzに落ちてしまう現象を再現してみた。

シミュレーションから得られた結論は、外部であるPICから与えるENABLE信号のHIGHTレベルの時間が短かったということだった。PICでは2μsecに設定してあったのだが、テスト波形をこの2μsecにすると、見事に周波数が出てこなくなった。2μsecだとぎりぎり時間が足りなかったようだ。これを3μsecにしてやると上の画像のようにきちんと周波数の切り替えが出来た。

原因がわかって一安心。あとは、PICの時間を3μsecに修正して、実機で確認だ。

※しかし、今日は随分と長文になってしまったなぁ。。。


参考サイト:電子回路の豆知識

2009年10月4日日曜日

VHDLの修正とModelSim



外部から与える信号が認識できていなかったので、FPGAのVHDLソースを修正した。

問題だった部分を別のファイルに書き出してモジュール化した。そして、外部信号をそのまま拾わずに、いったんタイマーで一定時間経ってからワンショットの信号を生成して、内部のラッチレジスタに取り込むような形にした。

それと同時に、PIC側の送信タイミングも若干変更した。

いざ、ボードの電源を入れて確認。初期化は正常に機能しているので、立ち上がった直後は信号がキレイに出ている。。。

ところが、先週確認したときは正常に動作していたと思っていた、DAコンバータのアンプ、3つあるうちのひとつが死んでいた。とりあえず、アンプの入力まで信号がきちんと来ているので、ICを交換すれば直るだろうから後回し。

つぎに、PIC側の周波数をデフォルトの100kHzから60kHzに下げて設定してみた。すると、FPGA側で信号はなんとか受け取っているようだが、出力波形が、ほとんどDCに近い。いや、よく見ると少しずつ動いている。一分以上かけて、上下を繰り返している。どうやら、周波数の下限である0.01Hzが出力されているようだ。

ここで問題なのは、PICの送り側なのか、FPGAの受信側なのか、良くわからなくなってきた。PICをデバッグモードで動かして確認したら、一応想定どおりの動きはしているように見える。

FPGAは???

どうすれば良いかまったく検討もつかない。
それで、いろいろ調べたところ、ModelSimというシミュレータが存在することを知った。
シミュレータでどのような挙動をしているのかを調べてみることにした。

まずは、ModelSimのインストールから。

kaki03ノート×組込×FPGA によると、普通はISEを入れたあとに、このModelSimを入れるようだ。まったくの素人なので、そんなこと知らずにいた。
インストールガイド を見ながら作業をすすめる。

・・・ファイルのサイズが大きくて、とても時間がかかるなぁ・・・

やっとのことで、ModelSimを立ち上げるところまでこぎつけた。
記念にスプラッシュ画面をUP。