« 2014年6月 | トップページ | 2014年8月 »

2014.07.31

ZYNQのAD変換ボード、やっと出図

半年くらい設計していたZYNQのAD変換ボードをやっと出図できました。

Np1068_all

スペックは、

  • 12bit 125MHz ADC 8ch (最大32chまで拡張)
  • アナログ入力のフルスケールは±1V
  • 2次のバターワースフィルタ入り(たぶん)
  • 拡張基板へ行くディジタル信号は全部で10
  • 基板サイズは、88mm×175mm
  • DDR3メモリ1GB
  • GTXトランシーバを2ch
  • PCI Express Gen2対応
  • ギガビットイーサ & PoE対応
  • USB3.0搭載
  • ZYNQQSPI ROMからブート可能
  • SDカード搭載
  • Serial ATA Gen3対応
  • デバッグ用USB-UART
  • 汎用ディジタルポート 8
  • 5V単一電源またはPoEで動作

となりました。なんだか、特電の集大成のようなボードになりました。とにかく、苦労しました。詰め込めるだけ詰め込んだので、一発で動けばいいのですが・・。

名前を何にしようか悩んでいるところですが、Cosmic AnalyzerとかCosmo Zとか、そんな名前にしたいと思います。

アナログ部は、今作っている18bit ADCでDNLやINLを減らしたり、ゲイン誤差を抑えるノウハウを獲得したので、そのノウハウをふんだんに盛り込みました。

ただ、PCI ExpressのGen2対応とか、SATA3対応とかは、やってみないとわかりません。そもそもPCI Express Cablingなので、x1でGen2に対応したケーブルやPC側のボードがあるかどうかもわかりません。まぁ、ディジタル部は「おまけ」みたいなものなので、このボードの本質的なところではありません。

このボードはどういう用途を想定しているかというと、最初の応用例は、光電子増倍管を多数つなげるような事例です。

このボードに拡張ボードを挿せば、1セットあたり32個の光電子増倍管からの信号を受けられます。2セット、3セットと増やしていけば、とてもたくさんの光電子増倍管からの信号を受けることができます。

そして、パルス波形をリアルタイムにFPGAで処理して、イベントが起きた時刻と、パルスの幅、高さなどの特徴量に抽出して、それをひたすら記録していきます。私はパルスの形状から特徴量を抽出するところは、Vivado HLSを使ってC→VHDLの高位合成を試してみたいと考えています。

もちろん、素粒子物理学の計測だけではなく、XILINXのGTXを使ったギガビットデータ転送の実験にも使えます。100MHz程度でサンプリングした最大32chのデータをリアルタイムに処理できるので、マルチパスの無線やフェーズドアレイレーダの開発などにも使えるのではないかと思っています。

来週の金曜日。8月8日には生の基板が出来上がってきます。それを基板屋さんに即日届ければ、8月12日に最初の1枚の実装が仕上がるとのことです。

早く動かしてみたい。楽しみです。

| | コメント (0)

2014.07.30

18bit A/D変換ボードの発売を開始します。

お待たせいたしました。

18bit A/D変換ボードの発売を開始します。オンラインショップでご注文を受け付けます。

https://shop.tokudenkairo.co.jp/shopping/detail.php?shpdi=ADC18BRD

Ad18brdt

特電のWebサイト内に、製品紹介ページも作りました。

http://www.tokudenkairo.co.jp/ad18/

このボードの性能は、

  • ビット数・・・18bit
  • サンプリング周波数・・・2Msps
  • フルスケール・・・±2.5V
  • チャネル数・・・2ch
  • 入力・・シングルエンド/差動 どちらでも対応
  • ノイズ・・・約40μV
  • ひずみ率・・・-100dB以下
  • INL・・・±5LSB(以下)
  • DNL・・約±0.3LSB(以下)

と、真の18bit性能を誇ります。この性能を出すめに半年くらい試行錯誤をしてきました。

このA/D変換ボードは、FPGAとA/Dをつないだだけの単なる拡張ADCボードではありません。アナログ技術の粋を結集した精密A/D変換ボードです。

物理実験、光学の測定、音響の測定など、精度を求める実験系や、工業計測で求められるニーズをきっと満足します。

| | コメント (0)

AD変換器のDNLを測定した

開発中の18bit A/D変換器のDNLを測定しました。

極めて歪のすくない正弦波を入力し、実際に計測されたヒストグラムに、計算で求めた確率密度関数をフィットさせます。

Board2_ch1

こうして求めらたDNLは±0.3LSB程度でした。データシートどおりの性能が出ているということです。

なんだかギザギザしていると感じるか方がいるかもしれませんが、横が262144とべらぼうに長いのです。12bitや10bitとは違うのです。1LSBの電圧の幅が狭いし、±0.3LSBくらいの誤差があれば、このくらいギザギザしてしまいます。12bit ADCなら横が平均化されるのでもっと平になりますが、18bitだとこんなものです。

ということで、18bit A/D変換ボードの性能がひととおり測定できました。

開発した18bit A/D変換はちゃんと18bit ADCとして十分な精度が出ているという結論が、ようやくでました。測定を始めて3か月くらいかかりました。

本日からオンラインショップで予約受付開始します。

| | コメント (0)

2014.07.28

ZYNQのADCボードの設計が大詰め

ZYNQ搭載のADCボードを開発しています。

仕様は、

  • ZYNQ7030
  • 125MHz 12bitADCが32ch
  • DDR3メモリ1GB
  • SATA3
  • PCIe Gen2x1
  • 汎用GTX×4
  • SDカード
  • GbE&PoE

というものです。LinuxとWebサーバを搭載していて、計測データがWebブラウザ経由で見れたり、FTPで取ってこれるという測定器を目指しています。

今日、ついに、すべてのネットがつながって、UnroutedやShort CircuitなどのViolationがなくなりました。きっとこの状態で出図しても動くのでしょうが、せっかくだからもう少し開発を続けます。

今日、昼の2時くらいの状態。

Zynqadc_0728_1

ここで、右下の空いた箇所に、PCI ExpressのExternal Cablingコネクタを詰め込みました。その結果、USBコネクタが少し上にずれました。

Zynqadc_0728_2

上の図が夕方の状態。家に帰ってからも作業続行です。

そして、夜の状態。

Zynqadc_0728_3

MGT用に1.0Vと1.2Vのスイッチング電源を追加して、PCI Expressの配線を通して、スイッチング電源を移動させて、真ん中に大きな空白を作りました。この空いた場所に、EZ-USB FX3を詰め込みたいと思います。

もう、なひたふの工数を1人月以上かけている気がしますが、せっかくだから完璧を目指したいものです。

Zynqadc_0728_4

早く会いたい!

| | コメント (0)

2014.07.25

18bit A/D変換器のヒストグラムからDNLを推定

A/D変換器にはINLやDNLといった特性があります。これらは、何Vを入れたときにどういうコードが出力されるかといった特性が、どれだけ直線からずれているかを示すものです。

DNLというのは、いわばAD変換特性の、1つ1つの階段の幅のようなものです。DNLの考え方を下の図に簡単に示します。

Hist10_2
上の図では階段の幅が狭くなったり、広くなったり、しています。これが1LSBからどれだけずれているかが、DNLです。よって、上の図のような特性が得られた場合、DNLは-0.25LSB~+0.5LSBといえます。

さて、実際のAD変換器でDNLを測定するには、超精密なランプ波を入れて測定するのが理想的なのですが、18bitの精度で直線的なランプ波を作ることは普通はできないので、一般的には正弦波を入れてヒストグラムを取ります。

超綺麗なランプ波よりも、超綺麗な正弦波のほうが作りやすいからです。

さて、AnalogDevices社のAD7986 2Msps18bitのADCを使ったA/D変換装置

Np1067a_1

に、オーディオアナライザで作った綺麗な正弦波を入れてヒストグラムを取りました。

Hist1

計算で求めた理想的なヒストグラムを次に示します。

Hist2

これをフィットさせて、DNLを求めます。この過程の計算は超ムズカシイ式がいっぱい出てくるので、優秀な大学生にやってもらいました。

詳しい計算方法は、来週の特電社内勉強会で発表してくれるそうです。

計算すると、おおっ、それらしきDNLの形になったではないですか!

Hist3

ただ、フィットさせるときのパラメータ(オフセットとゲイン誤差)にかなり敏感だということで、やり方によっては次のような形にもなるようです。

Hist4

つまり、測定されたDNLはプラス+0.6~-0.5LSBということでした。データシートによれば±0.6LSBとのことなので、妥当であると言えます。

Hist5

このDNLを積分すればINLが出るはずなのですが、実際にやってみると・・

Hist6

縦軸はLSB単位ですから700LSBも出ていることになります。標準電圧発生器で測ったときには±5LSB以下にはなっていたので、こんなに出るはずがありません。オフセット誤差やゲイン誤差などのパラメータに極めて敏感なので、何かがずれているのでしょう。

このA/D変換器のDNL特性をよく見てみると、周期8で大きくなったり小さくなったりしています。

Hist7

ここで、ちょっとフェイクなのですが、横に8個ずつ平均をとって、つまり15bit相当のA/D変換器としてみます。すると・・

Hist8

DNLは約0.1LSBでした。これが何を意味するかというと、PulSAR型A/D変換器の中に入っている容量の小さい側の3つのコンデンサが不ぞろいなのではないかと推定されるわけです。

AD7986の内部の等価回路は、下の図のように18段のスイッチドキャパシタの構成になっているそうです。初段の131072Cと書かれたコンデンサの容量が30pFなので、一番小さいコンデンサの容量は約230aF(アトファラッド)となります。

Hist9

フェムトファラッド、アトファラッドレベルの差がDNLとして効いてきているのだとすると、半導体の個々の個体差に影響が大きいので、来週は別の基板で試してみたりしようと思います。

まだ回路的に改善できる余地もあるかもしれません。

とにかく、DNLは±0.6LSB程度で、データシートどおりであったと言えます。

今までに測定してきた結果をまとめると、

  • サンプリング周波数2Msps,
  • ノイズは40μV
  • ひずみ率は-100dB(以下)※
  • フルスケール±2.5V
  • INLは±5LSB(以下)※
  • DNLは約±0.6LSB(以下)

でした。

SINADはまだ計算していませんが、おそらく95dBくらいあると思われます。実行ビット数(ENOB)は、ENOB=(SINADdb-1.76)/6.02 という計算式がるので15bitくらいはあると考えられます。

| | コメント (2)

2014.07.24

FreeRXduinoのCubeSuite+対応版をリリースしました

RXduinoの無償評価版「FreeRXduino」の開発を行っています。今月の目標は、CubeSuite+とHEWに対応させることです。

とりあえず、本日、Free版をCubeSuite+に対応しました。

ダウンロードするには下記のページへお越しいただき、

https://www.tokudenkairo.co.jp/login2/download.php?keyword=rxduino

一番上にある「rxduino-free-v120cs.zip」を選択してください。

RXduinoのCubeSuite+版を使うメリットは3つあります。

  1. 無償評価版とはいえど、RXduino V1.08の純正な後継版なので、かなり安定しています。
  2. 純正コンパイラCC-RXでコンパイルするので、コード効率が良く、動作速度も速い(はず)・・比較したことはあまりない
  3. Arduino由来のコードを一切含まず、またGPLやLGPLのライブラリとはリンクしていないので、ソースコードを公開する義務が生じません。 お客様が作成したプログラムをリリースするときに、ソースコードを秘密にしたり、リーバースエンジニアリングを禁じることも自由です。

オープンソースではないので、企業ユーザにとってはより使い勝手の良いライセンスなのです。

このファイルは特電お客様サイトにあります。特電のお客様だけではなく、ゲスト登録することで、ダウンロードすることができるようにしました。 (7/25のAM1:30に修正)

だから、特電製品をまだお買いあげいただいていない方でも、無償でダウンロードできるようになりました。

さて、現在のFreeRXduino CS版は、

  • 究極のRX62Nボード
  • RaXino
  • 秋月電子AKI-RX62
  • GR-SAKURA

に対応しています。使い方を簡単に説明します。

CubeSuite+をインストールしてください。CubeSuite+は評価版でも構いません。

CubeSuite+はルネサス殿のWebサイトからダウンロードできます。まず、http://japan.renesas.com/products/tools/ide/cubesuite_plus/index.jsp
へ行き、「ダウンロード」→「無償評価版(2)」をクリックします。

Download_cs

そして、下のほうにある「【無償評価版】 統合開発環境 CubeSuite+ V2.02.00 (一括ダウンロード版)」をクリックしてダウンロードします。

ご利用のボードに合わせて、rxduino-free-v120cs.zipを解凍した中にある、csprojectディレクトリの中にあるバッチファイルを実行してください。

  • 究極のRX62Nボードの場合  ・・・  UseULT62N.bat
  • RaXinoの場合             ・・・  UseRaXino.bat
  • 秋月AKIRX62の場合        ・・・  UseAKIRX62.bat
  • GRSAKURAの場合           ・・・  UseGRSAKURA.bat

Setup_cslib

解凍したcsproject\userapp\ディレクトリにあるuserapp.mtpjが、CubeSuite+用のプロジェクトのひな形です。これをCubeSuite+で開いてください。

デフォルトでは、メインのプログラムはuserapp.cppです。userapp.cppの中のsetup()やloop()を書き換えてください。

Csmain

また、このプロジェクトから、userapp.cppを外して、お客様が用意した様々な*.cや*.cppファイルを追加することもできます。

「CC-RX (ビルド・ツール)」のプロパティを開き、「共通オプション」→「よく使うオプション(コンパイル)」→「マクロ定義」を開いてください。Macrodefine

TARGET_BOARD=BOARD_GRSAKURAとなっているので、ご利用のボードに合わせて変更してください。

  • 究極のRX62Nボードの場合  ・・・  BOARD_ULT62N
  • RaXinoの場合             ・・・  BOARD_RAXINO
  • 秋月AKIRX62の場合        ・・・  BOARD_AKIRX62
  • GRSAKURAの場合           ・・・  BOARD_GRSAKURA

CubeSuite+でビルドすれば、motファイルが生成されます。
(初回は、クリーンしてからビルド、またはリビルドしてください)

Rebuild

出来上がったmotファイルは、csproject\userapp\DefaultBuildにあります。これをFDTや、RXprogで書き込めば、RXマイコンが動作します。

Motfile

なお、.absというファイルの実体は、たしかELFです。

E1エミュレータを接続している場合は、CubeSuite+上からそのままダウンロードして実行、デバッグができます。

E1を使う前に、「RX E1(JTAG)(デバッグ・ツール)」をクリックして、プロパティを出し、メイン・クロック周波数[MHz]を12.0000にセットしてください。

E1config

こうして、デバッグメニューの中から「ビルド&ダウンロード」を選べば、E1エミュレータを使ってデバッグができます。

E1debug

デフォルトではGR-SAKURA用に設定されていますが、他のボードで使用したい場合は次のようにします。

 ②の手順で示したバッチファイルを実行します

 ④の手順で示したTARGET_BOARD=BOARD_****の設定を変更します。

プロジェクトツリーにある「(マイクロコントローラ)」を右クリックして、マイクロコントローラの変更を行ってください。

Change_mpu1

究極のRX62Nボードや、RaXino、AKI-RX62の場合はRX62Nの中から適当に選んでください。「R5F562N8*****」の8があっていればよいです。後ろのアルファベットは何でもよいです。秋月AKI-RX62はRX621ですが、RX62NにしておいてもOKです。

Change_mpu2

GR-SAKURAを選ぶときは、「R5F563NBB*****」のB以上であればOKです。

これで、CubeSuite+への対応ができるようになります。

RXduinoで快適なRXマイコンライフをご堪能ください。

| | コメント (0)

2014.07.23

18bit A/D変換器でヒストグラムテスト

ほぼフルスケールの低ひずみ(-106dB)の正弦波を入れて、2~3分くらいデータを集めてみました。

横が262144ポイントもあるので、見るのも、加工するのも大変です。Excelでは手に余るので、グラフ化するためにGnuplotを使いました。Gnuplotなんて超久しぶりです。

Hist1

Gnuplotでも表示が大変なので、少しデータに細工をしましたが、なんかそれらしい形が出ました。一応、ミッシングコードはないようです。

さて、このデータをどう加工して計算すればDNLが算出できるのか・・。英文と数式だらけの解説があるのですが、読んで理解するのは結構大変です。

今週の金曜日に優秀な学生さんが来てくれるので、それまで待つことにします。

| | コメント (0)

2014.07.22

18bit AD変換装置をAXIバスに

開発中の18bit AD変換装置で、ヒストグラム法によるDNLの測定やミッシングコードの測定を行いたいので、長時間のキャプチャができるように改良しています。

18bit AD変換装置で、変換データをAXIバスに出力するようにしました。これで、AXIインターコネクトを通じてDDR3メモリに書き込むことができます。

18bit 2Mサンプリングなので、18bitを32bitに拡張すれば8MByte/secです。バスの使用率的からみると微々たるものです。

Ad18_axi_1

しかし、大電力を消費するDDRメモリなどを使ったらノイズが乗るかもしれません。そこで実際に調べてみました。

まず、DDR3メモリを使わずに、内蔵BlockRAMでとった時の波形。標準偏差は2.50LSB。

Ad18_axi_2

DDR3メモリに蓄えたときの波形。こちらも標準偏差は2.50LSB。

Ad18_axi_3

つまり、DDR3メモリを有効にしても、ノイズの影響はなかったということです。

一安心です。

| | コメント (0)

2014.07.21

Artix-7 Linuxでネットワークを使うには

Artix-7 Linuxでネットワークを使うための注意点をまとめておきます。

まず、EDKでPortsの設定を出して、microblaze_0_intcを選択します。

A7lin_net1

ここでF2を押すと割り込みポートの設定画面が出ます。デフォルトではaxi_ethernetliteからの割り込みは入っていないので→ボタンを押して右側に移動します。

A7lin_net2

次に、Project→Export Hardware Design to SDKを行います。

これでHardwaer→Generate Netlistを行い、ISEに戻って、論理合成します。

BitStreamができあがったら、XILINX Design Tools→ISE Design Suite 14.5→Accesories→ISE Design Suite Command Promptを起動します。

A7lin_net4

data2memを使って、初段ブートローダのELFファイルをBitStreamに埋め込みます。

data2mem -bm edkBmmFile_bd.bmm -bd ..\withmmu\srecboot_withmmu\Debug\srecboot_withmmu.elf -bt main.bit

A7lin_net5

このbitファイルでFPGAを起動すれば、初期ブートローダ(srecboot)が起動して、SPI ROM内に格納されたU-Bootが起動します。

U-Bootが起動したら、下記のコマンドを入力することで、TFTPサーバからLinuxのカーネルイメージとRAMDISKとデバイスツリーを取得して起動します。

setenv ipaddr 192.168.1.99;setenv serverip 192.168.1.7;tftpboot b8000000 linux.bin.ub;tftpboot b4000000 uramdisk.image.gz;tftpboot b2000000 xilinx.dtb;fdt addr b2000000 00100000;fdt resize;bootm b8000000 b4000000 b2000000

A7lin_net6

Linuxが起動したら、

ifconfig eth0 up 192.168.1.99
route add default gw 192.168.1.1

でネットワークが使えるようになります。

A7lin_net7

これでPINGも飛ぶようになるし、もちろん、ネットワーク・ソケットプログラミングでサーバやクライアントを作ることもできるようになります。

どこかにTFTPサーバをたてておいて、XILINXのSDKで作ったELFファイルをTFTPでGETして実行すると、とても楽にMicroblaze Linuxのプログラム開発ができるようになります。

| | コメント (0)

2014.07.18

オーディオアナライザVP-7722Aでひずみ率測定

18bit ADCのINLがひとまず安心できる範囲になってきたので、オーディオアナライザ「VP-7722A」を購入して、ひずみ率測定することにしました。

Vp7722a

どういう原理かわかりませんが、0.0001%だか0.0002%の、つるっつるの正弦波を発振することができる装置だそうです。

お店の札には-130dBと書かれていましたが、それはちょっと大げさでしょう。お店で動かしてみてもらったところ-102と表示されていました。

10kHzの正弦波を出すように設定しても、INPUT側の数値は9.883とか少し違った値を出してふらふらしています。状態変数型の発振回路を外部から制御しているのでしょうか。どういう仕組みなのかはよくわかりません。

さて、自称10kHzの正弦波を作って、開発中のA/D変換器につないで簡単に測定してみたところ・・

Vp7722a_fft

二次高調波が-110dB、三次高調波以降はノイズに埋もれてわからないという結果になりました。

オーディオアナライザすごい!

さて、来週はオーディオアナライザを使ってSINADやINL、DNL、有効ビット数を測定する方法を考えてみます。

| | コメント (4)

2014.07.17

18bit A/D変換器の誤差の測定

40分くらいかけて入力電圧と計測値との差を測定しました。

YOKOGAWAの標準信号発生器「7651」にGPIBをつないで、-2.5V~+2.5Vまで200μV刻みで出力していって、それをA/D変換器で測定してグラフにしました。

Ad18_allspan

ぱっと見てわかるとおり、±1Vより外と、±0.1Vの中では様子が変わっています。これはYOKOGAWA7651の出力電圧のレンジが切り替わるためです。

当然ながら標準信号発生器±100mVの中が一番精密な電圧が出るのぜ、中心のところが真のグラフなのだと思われます。

逆に、「7651」は、±1V以上ではノイズも増えるので、上のギザギザが出ているのは信号発生器の特性ではないかと思われます。

「7651」は±100mV以内で最高の性能を発揮するので、-100mV~+100mVまで400μV単位で振ってみました。すると、

Ad18_100mv

誤差は±40μVくらいの範囲内に収まっています。

このA/D変換器は1LSB=19μVに設定しているので、INLは±3LSB以下という結果が得られました。

これ以上の測定は、信号電圧を発生させる装置を変えるか何かしないと難しいのですが、18bit AD変換器として十分な性能が出せるようになったと考えています。

| | コメント (2)

18bit A/D変換器の積分誤差

前回、YOKOGAWAの7651を使って入力電圧を徐々に変えていってどんな値が出力されるかを調べました。

すると、このようなギザギザがでてきました。

Ad18_vs_7651_2

このギザギザの高さは400μVくらいあるので、つまり、入力電圧の範囲によっては±200μVくらいの誤差が出てしまうということでした。

±40LSBくらいあるので、さすがに無視できません。

正弦波を入れたときにこの誤差がどういう影響を及ぼすか、数値計算してみると、ひずみ率が-95dBくらいになるようです。意外なことに、あまりひずみ率への影響はありません。

最初はA/D変換のプロトコルの問題だろうと思っていたのですが、どうやらそうではないことがわかって青ざめました。

この原因を必死で解明してきました。VREFのコンデンサを増やしたり、VREFの電圧リファレンスICを変えたり、電源を変えたり、いろんなところのパターンをカットしたりつないだり・・それでも全然減りませんでした。

約2週間不毛な戦いを続け、昨日、ついにその原因がついにわかりました。

今は±5LSBくらいにまで減っていて、周期的な構造はなくなりました。

やはりアナログ回路なんだなという原因でした。

| | コメント (4)

2014.07.14

ZYNQ ADボードの設計続き

月曜日の動かない頭を動かそうと、ウォーミングアップのつもりで配線を引いていたら、こんな時間になってしまいました。

Zynqad_0714_1

1.0Vのコア電源とかもつなぎ終わり、未配線はあと35本となりました。

でも、ここから先が結構大変なんです。何種類もある電源をどうするか決めていなかったところもあるし、PCI ExpressコネクタやUSB3.0コネクタとかいろいろあります。

もう一頑張り!

| | コメント (0)

2014.07.11

Digikeyで購入した部品をデータベース化してみた

いつもDigikeyでたくさん部品を買っていますが、部品の管理にはいつも悩んでいます。

「○○の部品はどこだっけ?」「あれ、前の部品が残ってたよ」

もう、こんなことで悩みたくありません。

今まではExcelで管理してきたのですが、それも限界になってきました。Accessで管理してもいいのですが、スタッフが増えたらソフトウェアのライセンス代もかさみますし、なによりVBAという言語が嫌です。

そこで、PHP+MySQLを導入しました。SmartyとBootStrap3も使っています。

まず、Web上にこんな画面を作りました。

Zaiko1

ここで、Digikey Invoiceからのインポートというボタンを押します。

こんなテキストエリアが開きます。

Zaiko2

Digikeyから来たメールに添付のPDF(Invoice)を開き、全文をテキストとしてコピー・ペーストします。

Zaiko3

そして、さきほどのWebのフォームに貼り付けます。

Zaiko4

PDFの文章中のテキストを貼り付けているので、ぐちゃっとしていますが、PHPのプログラムが一定の規則にしたがってこれを解釈してくれます。

こんなふうに解読されて取り込まれました。

Zaiko5

もちろん、Invoiceに書かれた情報は洩れなく登録していますので、詳細を見てみると、

Zaiko6_2

こんな感じです。最近はREACHといって、ROHSをさらにこじらせた環境基準があるようなので、DigikeyのInvoiceにもREACH情報が書かれるようになってきています。どのように使うのかはわかりませんが・・

取り込んだ後は、

Zaiko7

一覧として見えます。ただし、メーカー名やメーカーの型番はDigikeyにInvoiceには書かれていません。

そこで、PHPのプログラムからDigikeyのホームページを検索させて、ページを読んで、自動的にメーカー型番や製造元を調べるようにしました。

特電のスタッフさんが、2008年以降のメールに添付されたInvoiceをひたすらデータベースに取り込んでくれました。

ぶわーーーーーーーーーーーっと

Zaiko8

・・・

こんなのが延々と続きます。12pFのコンデンサどこにしまったっけ・・といった、あいまいな条件での検索も瞬時にできます。

こういう業態に特化したものは、市販のソフトにはないでしょうから、自分で作るのが一番です。作ってみて感じたメリットは、

  • 部品の単価は現在の価格ではなく、購入時の単価です。したがって、棚卸のときの計算も購入時の価格で計算できます。
  • 「実験用に○個使った」「製品の製造で○個」、というようなイベント登録して、残数を自動的に計算できる。
  • 社内での保管場所や使用目的を登録できるので、どこに保管したかをスムーズに探せます。
  • 部品の残り数をデータベース上で管理しているので、次に発注すべき数量を瞬時に決められます。
  • 1年間、一度も使わなかった部品は捨てる」といった決断を機械的に実行できるようになります。

ゆくゆくは、QRコードを部品に貼りつけて、スマホで部品のリールを覗くと残り数が表示されるようにしたいと思います。

電子部品在庫管理の効率化

| | コメント (0)

2014.07.08

ZYNQ ADCボードのイーサとGTXの配線

今夜もZYNQ ADCボードのイーサとGTXの配線をしました。

Zynq_adc_0708
ギガビットイーサには12本の信号と、2本のMDIO、それからRESETとINITで、全部で16本の配線があるようです。このZYNQは図の左上のほうからイーサの配線が出てくるので、画面右にあるギガビットイーサのPHYにつなぐにはDDR3を迂回するしかないと思っていました。

DDR3を迂回すると距離が延びるので200MHzくらいの信号では不安・・・そんな風に考えていたのです。

しかし、やってみると、ZYNQの下をすいすい通せるではないですか!

そういうわけで、イーサの端子からPHYまではほぼ一直線に引けました。

Zynq_adc_0708_2

それから、ギガビットトランシーバGTXの配線です。

コンデンサが多くて嫌になるかと思いきや、意外とあっさりと引けました。

Zynq_adc_0708_3

慣れてくると目でみただけで特性インピーダンスがわかるようになりそうです。

おっと! うっかりPCI Express Cablingの配線を削除してしまいました。PCIeをもとに戻そうかと思ったのですが、USB3.0を乗せようと思っているので、PCIeを置くスペースがもうない。

右下にあるSDカードの裏には、PCIeか、USB3.0か、どちらか一方しか置けません。

Zynq_adc_0708_4

もう、こうなったら、PCIeでも、USB3.0でもいいので、縦に出てくるコネクタを探すことにします。

| | コメント (0)

2014.07.07

ZYNQ搭載のAD変換ボードの設計を再開

4月半ばで止まっていた「ZYNQ搭載ADCボード」の設計を再開しました。

いま、こんな感じです。

Np1068_0707_2

この2日間で、

  • 各種電源回路の配置・配線
  • コンフィグ回路の完成
  • DDR3の配線の完成
  • PoE回路の完成
  • 右下のほうに余白を作る

を行いました。

右下のほうに余白を作ったのは、ここにUSB3.0を乗せるためです。

125MHzでサンプリングした8chのADCデータをリアルタイムにUSB3.0で取り込みできるようになります。といってもUSB3.0じゃ帯域がたりないので、ZYNQでデータ処理したものを取り込むことになると思います。

あと、

  • Gigabit Etherの配線
  • GTXの配線とSATAの配線
  • GTXの電源を作る
  • システム全体の電源のみなおし
  • USB3.0コントローラの搭載
  • 配線のインピーダンス整合や、等長配線
  • シルクの見直し

といった作業が残っています。基板の出図までにはあと1週間くらいかかりそうです。

| | コメント (0)

2014.07.05

YOKOGAWAの7651をGPIBで制御して・・

YOKOGAWAの標準電圧電流発生器7651をGPIBで制御して、AD7986のAD変換ボードで取得してみました。GPIBの制御プログラムはRATOKシステムのサンプルを参考にして作りました。

// YOKOGAWA 7651用GPIB制御 for RATOK REX-USB 220 超簡略化版
// By なひたふ

#include <windows.h>
#include <stdio.h>

#include "U2GPLIB.H" int     MyGpibAdrs = 1;      // REX-USB 220のアドレスは1 char GpAdrsBuf[12] = "3"; // アドレス3の機器を制御 bool GpibInit() { if(gp_init( MyGpibAdrs, 0, 0 ) != 0) return false; gp_cli(); // IFCラインをTRUEにして、全機器クリア gp_ren(); // RENラインをTRUEにして、リモート状態にする gp_tmout(5); // GPIBバスタイムアウト5秒 gp_clr( GpAdrsBuf ); // SDCコマンド送信 gp_wait( 1 ); gp_llo(); // LLOコマンド送信。機器はボタン操作できなくなる char buf[256]; strcpy( buf, "F1R5;"); // R2 10mVレンジ,R3 100mV,R4 1V,R5 10V if ( gp_wrt( GpAdrsBuf, buf ) != 0 ) return false; return true; } bool GpibVoltage(double volt) { // 電圧の変更 char buf[256]; sprintf(buf,"S%1.4f;\n",volt); // 電圧設定 if(gp_wrt( GpAdrsBuf, buf ) != 0) return false; if(gp_wrt( GpAdrsBuf, "E;" ) != 0) return false; // トリガ return true; } bool GpibOutput(bool enable) { // 出力許可 gp_wrt( GpAdrsBuf, enable ? "O1;" :"O0;" ); // 出力/禁止 gp_wrt( GpAdrsBuf, "E;" ); // トリガ return true; } int main() { if(!GpibInit()) return -1; GpibVoltage(1.234); GpibOutput(true); Sleep(1000); GpibOutput(false); }

たったこれだけのプログラムで遠隔操作できてしまうのだから、便利です。

もう少し複雑なプログラムにして、-2.5Vから+2.5Vまでを10mV刻みで出力するようなプログラムにしてみました。そして、そのときのAD変換値をUSBで取得して、ファイルに記録し、Excelでグラフ化してみると・・

Ad18_vs_7651

ほぼ直線的なデータが得られました。-2.5Vから+2.5Vまでフルスケールに変換できています。Excelで直線近似してやると、ゲインは0.9941で、オフセットが-1.5mVと出ました。

でも、ちょっとでこぼこしているようなのが気になります。

そこで、(出力電圧)-(入力電圧*0.9941-0.015)をグラフにしてみると・・・

Ad18_vs_7651_2

はうわっ!なんだこのギザギザは!?

数えてみると32回波打っています。18bit A/Dなので、0~262143の値域がありますが、4096ごとに高め低めを繰り返しているようです。その高低差は400μVくらいあるのでDNLにしては大きすぎます。

AnalogDevices社のAD変換器のSPIプロトコルでは、18bitを2回に分けて受け取るという変なプロトコルなので、その区切り部分でのFPGAの設計ミスかもしれません。

| | コメント (0)

2014.07.04

18bit AD変換ボードの特性を測る

18bit AD変換ボードも、出荷に向けて詰めの作業に入ろうとしたところ、いろいろ課題にぶつかっています。

YOKOGAWA 7651という標準電圧発生器(とても精度の高い電圧源)で発生させた電圧をAD変換ボードの2つのチャネルに入れたところ、2つのチャネルで差が生じていました。その誤差は、どうやら電圧を変えていくと広がるので、ゲインの誤差ということが推測されました。

いろいろと調べていて、プリアンプのゲイン誤差ではなく、A/D変換器(AD7986)自体の誤差であることがわかりました。

それは、ADコンバータのVREFの電圧の差に起因するものです。AD変換器の出力値は入力電圧とVREFとの比なので、VREFがずれるとゲインがずれることになります。

A/D変換器AD7986のVREFを内部基準電圧を使って作り出すと、データシート上は4.081~4.111Vとなっていて、なんと0.7%も違ってしまいます。これでは2つのA/D変換チャネルを作ったときに値が一致するわけがありません。

Ad18_7651_ref

そこで外部電圧リファレンスを用いたのですが、これもダメでした。AD7986は1.200Vの基準電圧を入れるのですが、その1.2Vから内部で4.096Vを作り出しています。その倍率の計算で、AD7986の個体差があるようでした。

結論を言うと、AD7986のバッファをディゼーブルにして、外部からVREFを与えてやらないと複数のAD7986のゲインは一致しないようです。

そうすると、2つのチャネルのプリアンプが作り出していると思われるのオフセットの誤差(1mV程度)だけが見えるようになりました。

【+1.400Vを入れた場合】

Ad18_7651_p14

【-1.400Vを入れた場合】

Ad18_7651_m14_2


0.3%くらいのゲインの誤差がありますが、これはVREFの電圧が4.096Vから僅かにずれているためでしょう。基準電圧源は0.1%精度ですが、前述のADコンバータ内のバッファアンプの誤差があるので、わずかにずれてくるのだと思います。

というところまで会社でやったところで帰宅時間になったので、AD7651とAD変換ボードと、GPIBインタフェースを持って帰ってきました。

Ad18_7651


今夜はADコンバータと徹夜で戯れようと思います。

| | コメント (0)

2014.07.02

JTAG基板検査機能の進展

少しだけ、MITOUJTAGの新しい基板検査機能に進展がありました。

いままでのMITOUJTAGの基板検査では、C++のソースをコンパイルして、JSMという実行ファイルを作っていました。(たしか、JTAG Script Moduleだったか・・)

今回の改良で、複数のJSMを登録して、順番に実行できるようにしました。

Advpcb_3

といっても、まだインフラストラクチャテストと、IDCODE/USERCODE読み出ししかないのdすが、ちゃんとJSMを順次読み出して実行できるようになりました。

複数のJTAGデバイスがある基板(BLANCAの場合、XC95288,XC3S1500,XC3S400)では、次の図のように3つ表示されました。

Advpcb_4

-------2014/07/02 17:24:00 スクリプト実行開始-------
Infrastructure test SUCCESS.
-------2014/07/02 17:24:00 スクリプト終了-------
 
-------2014/07/02 17:24:02 スクリプト実行開始-------
Num of devices = 3
Device :  IDCODE   USERCODE 
---------------------------
       0  49616093  00000000
       1  01434093  FFFFFFFF
       2  0141C093  FFFFFFFF
---------------------------
-------2014/07/02 17:24:02 スクリプト終了-------

いまはまだインフラストラクチャテストと、IDCODE読み出しくらいのモジュールしか作っていませんが、これから、DDR2メモリテストや、SPI ROMテストなどのモジュールを作っていきます。

それと同時にネットリストから自動的にピン接続情報を作り出す機能を作ろうと思います。

| | コメント (0)

MITOUJTAGの新しい基板検査機能

MITOUJTAGの新しい基板検査機能を開発中です。

いままでのMITOUJTAGの考え方では、

  1. C++で基板検査のためのソースを書いて
  2. ピン定義を割り当てて
  3. コンパイルして実行

という手順で基板検査を行ってきました。

基板検査のソースというのは、C++のソース中で

PIN_ADDR = 0x5555;
PIN_DATA = 0xaa;

のように変数を操作すると、その変数に対応したピンがバウンダリスキャンで操作されるというものでした。

そして、基板検査のためのソースとは別にピン定義ファイルというのを作っておきます。たとえば、

PIN_ADDR : A4 A3 A2 B2 B5 C4 D4 …

のようなファイルです。上記のC++ソースでPIN_ADDというのが、実際にはA4 A3 A2 B2 B5 C4 D4番ピンにつながっているよ、というものです。

どんな操作でもC++で書けるし、どんなピンでも動かせるので、汎用性は高かったのですが、こういう考え方は現代風ではないようです。

そこで、新しいMITOUJTAGの画面は次のようになります。

Advpcb_1

まだ開発中なのでいろいろと画面のパーツがダサいのはご容赦ください。

考え方としては、

  1. やりたい検査を選んで、
  2. どのICにそれを実行させるかを指定する
  3. 「開始ボタン」で一連の操作を実行する

ということをユーザが組み立てていくことになります。

新しいMITOUJTAGの中にはあらかじめ「インフラストラクチャテスト」「IDCODEとUSERCODE」「SDRAM」「DDR2/DDR3」「インタコネクト」「キャラクタ液晶表示」「SPI ROM」「I2C ROM」などの様々な検査項目がライブラリとして組み込まれています。

Advpcb_2

このように「モジュール」として提供された基板検査ライブラリの中から、ユーザがやりたい検査を選んで、オリジナルの検査手順を組み立てていくという方針です。

もちろん、C++で書いたソースから作ったユーザ定義の基板検査もできます。

また、ピンの定義ファイルは今までは

PIN_ADDR : A4 A3 A2 B2 B5 C4 D4 …

のように手作業で書いていたのですが、これもネットリストを読み込んで自動生成できるようにしようと思います。ネットリストは、図研やAltium、Telesis、KiCADなどに対応させる方針です。

まとめると、

  • ネットリストの自動読み込み機能
  • さまざまなモジュールの中からやりたい検査を選ぶ

ということです。

書いて→コンパイル→実行という手順ではなく、やりたいものを選んで実行、という現代風にしていこうと考えています。

| | コメント (0)

2014.07.01

特電「リアルタイムご感想」のページをオープンしました

特電ホームページ大改造計画のひとつ、

特電「リアルタイムご感想」のページ

をオープンしました。

http://www.tokudenkairo.co.jp/feedback/realtime.php

Realtime

このページは、感想をサクっと書いて、すぐ反映されるチャットのようなものです。

お客様から特電に寄せられたご意見やご感想がリアルタイムに表示されます。

特電スタッフが手を加えることなく、お客様が書いたものがそのまま表示されます。

包み隠さずに表示されます。

「お客様サイト」に投稿されたご感想も、こちらのページでリアルタイムに見えます。

もちろん、匿名での投稿もOKです。

特電製品やWebサイトのこと、なひたふ に一言いいたい!など、なんでもお気軽にお書きください。

http://www.tokudenkairo.co.jp/feedback/realtime.php

お待ちしております。

| | コメント (0)

« 2014年6月 | トップページ | 2014年8月 »