サイト検索 サイトマップ 会社案内 通信販売 求人情報
製品情報 テクニカルサポート ダウンロード カタログ請求 ホームページ

 
テクニカルQ&A
■AXP-AD02 A/Dコンバータカード

Question  
Q1. AXP-AD02はどんな製品ですか。
Q2. 対応OSについて。
Q3. 欠番
Q4. Windows95/98で動作するとなっていますが、開発環境は何が使えますか。
Q5. 4ビットの汎用入出力が使えません
Q6. 汎用入出力の出力電流はいくつですか?
Q7. Windows95/98でうまく動作しませんなぜですか?
Q8. 英語版のWindows95/98でも動作できますか?
Q9. MS-DOS上で入出力がうまく出来ませんなぜですか?
Q10. 0V,5V,-5Vをクロスする点で、不自然なデータがサンプルされました。サンプルされた値が、実際よりも200mVほどずれているようにおもいます。
Q11. 連続サンプリング時のデータ取得方法について、参考になるソースプログラムはありますか。
Q12. プログラムをwindows API形式で作っていますが、つまづいています。どのように解決できますか。
Q13. 外部クロックをトリガにしてデータ変換したいのですが可能でしょうか?
Q14. A/D変換のタイマ値を1msに設定して、100ms間隔ごとに、100個のA/Dデータを取込む ことは可能でしょうか?
Q15. 電源オン時の入出力端子の状態
Q16. VBでのハードウェア割り込みメッセージの受け取り方
Q17. A/D入力信号はカード内部の制御電源とアイソレートされていますか?
Q18. 入力最大電圧が±33Vとの事ですが、アナログ入力信号に±33V以下であれば故障しないとの意味でしょうか。
Q19. AXP-AD02の2枚同時使用について
Q20. VCで発生するリンクエラーについて
Q21. サンプリング中のエラーコード&H2発生について
Q22. 外部機器を接続していない状態でサンプルプログラムを実行すると、サンプリングデータとして「82a」などの値を取得するのは何故でしょうか。
Q23. S/H(サンプル&ホールド)は付いているでしょうか。
Q24. チャンネル切り替え時間について
Q25. 関数名 Ad02SetModeの使用方法に関して
Q26. ”チャネルインクリメントとタイマサンプリングを組み合わせる場合はdwTimerを 6 以上に設定する必要があります。”の意味を教えて下さい。
Q27. サンプルプログラムでは、サンプリング済みデータの取得のところで、プログラムで99回編集したら抜けるようになっていますが、もっとたくさんのデータを表示させるにはどうしたら良いですか?

Answer  

A1. AXP-AD02はどんな製品ですか。

 AXP-AD02は、PCカード(PC Card Standard ,PCMCIA 2.1/JEIDA 4.2およびPCMACIA 2.01/ JEIDA 4.1)に準拠した 8ch 12ビット A/DコンバーターPCカードです。
 カードの厚み TYPE II
 添付品 36ピンアンフェノールオス型コネクタ付きケーブル(長さ約1m)、保証書
 ※サポートディスクマニュアルはWebからダウンロードして下さい。

A2. 対応OSについて。

 Windows95/98/Me/2000/XPで利用可能です。

A3. 欠番

A4. Windows95/98で動作するとなっていますが、開発環境は何が使えますか。

 Visual C++、Visual Basic、Delphiなどのビジュアル環境で、アプリケーションを開発する事が出来ます。

A5. 4ビットの汎用入出力が使えません

 Windows95/98対応ドライバーのリリース番号がRel.1.20以前のバージョンですと汎用入出力が利用できません。Rel.1.20以降のドライバーがホームページよりダウンロード出来ますので、そちらを利用して下さい。

A6. 汎用入出力の出力電流はいくつですか?

 汎用入出力の出力電流は5mAです。

A7. Windows95/98でうまく動作しませんなぜですか?

 AXP−AD02はリソース(IRQ)を1つ消費します。Windowsのデバイスマネージャーで、リソースが競合していないか、確認して下さい。

A8. 英語版のWindows95/98でも動作できますか?

 AXP-AD02のドライバー自体は言語に関係ありません。しかし、付属しているHELPファイルやサンプルで日本語を使用しておりますので、Helpやサンプルでは不具合が出ると思います。

A9. MS-DOS上で入出力がうまく出来ませんなぜですか?

  1. MS-DOS版のカードサービスが正常にインストールされている事を確認して下さい。又、お使いのノートパソコンのPCカードスロットがMS-DOSもサポートしている事も確認して下さい。
    注)PCカードスロットに付いては、ノートパソコンのメーカーにお問い合わせ下さい。
  2. MS-DOS版のカードサービスが正常にインストールされている場合は、AXP-AD02のリソースを確認して下さい。利用したいIOアドレスやIRQが、すでにBIOSなどで予約されている場合があります。

A10. 0V,5V,-5Vをクロスする点で、不自然なデータがサンプルされました。サンプルされた値が、実際よりも200mVほどずれているようにおもいます。

 たしかに指摘されるような不具合がドライバに存在していましたので、その修正版をホームページにアップデートいたしました。
 Rel 1.60でこの不具合は解消されています。下記ホームページよりダウンロードしたうえで、C:\Windows\System ディレクトリにある、axpad02.VXDファイルを新しいものに交換するようにしてください。
http://cpi-tec.jp/adtek/support/soft/index.html#PCCARD

A11. 連続サンプリング時のデータ取得方法について、参考になるソースプログラムはありますか。

 システムタイマによるメッセージを約100mSec毎に発生させて、連続サンプリングモードによるデータ取り込みをおこなわせた事例をVCによるソースの形式でご紹介します。

A12. プログラムをwindows API形式で作っていますが、つまづいています。どのように解決できますか。

(1)サンプリングモード設定(Ad02SetMode)でoneshotを設定
(2)サンプリング開始(Ad02StartSampling)
(3)サンプリングデータ取得(Ad02GetData)で必要分データを得る
--ここまでは問題なし。
(4)再度サンプリング開始(Ad02StartSampling)
(5)サンプリングデータ取得(Ad02GetData)で必要分データがあるはずですがデータ数0となってしまっている。
--どうしたら2回目以上のサンプリングでデータが得られるのでしょうか?
2.チャンネルのインクリメントとサンプリングデータの順番は?
3.サンプリング終了時に送出するWM_EOC又はWM_HALF_FULLについての使い方は?
 ワンショットモードでサンプリングをおこなった後、再度サンプリングをおこなう為には、サンプリングストップ(Ad02StopSampling)実行後、もう一度サンプリングモード設定(Ad02SetMode)からおこなうようにしてください。

 つぎに、
--------------------------------------------------------------------
サンプリング対象チャンネル    Ch0,Ch1,Ch2,Ch3
サンプリングデータ数       512X4=2048 (512/Ch)
タイマ値             10 (10X10=100μS)
トリガ              内部
入力電圧レンジ          ±10V

' サンプリングモードの設定
md.cwBuffer = 512*4 ' バッファサイズ(ワード単位)
md.dwChFirst = 0 ' サンプリング開始チャンネル(0 〜 7)
md.dwChLast = 3 ' サンプリング最終チャンネル(0 〜 7)
md.dwSampleMode = AD02_SM_ONESHOT ' サンプリングモード
md.dwTimer = 10 ' タイマ値(1〜255)60μS以上
md.dwTrigSource = AD02_TS_INTERNAL ' トリガソース
md.dwVoltageRange = AD02_VR_S10V ' 入力電圧レンジ

 このようにモード設定をして、データサンプリングをおこなった際のバッファメモリ上のデータの並びは、下記のようになります。
cwBuffer(0) = Ch0
cwBuffer(1) = Ch1
cwBuffer(2) = Ch2
cwBuffer(3) = Ch3

cwBuffer(4) = Ch0
cwBuffer(5) = Ch1
cwBuffer(6) = Ch2
cwBuffer(7) = Ch3
  :
cwBuffer(2044) = Ch0
cwBuffer(2045) = Ch1
cwBuffer(2046) = Ch2
cwBuffer(2047) = Ch3

・メッセージについて

 AD02ドライバは Ad02Create 実行時に指定されたハンドルを持つウインドウに対し、特定の現象が発生した時にメッセージを送出します。送出されるメッセージの詳細はAPI仕様書の 5.メッセージ をご参照ください

 WM_EOC(AD02_WM_OFS_EOC) メッセージ

 ワンショット指定でのサンプリングが開始され、指定バッファ数のサンプリングが終了した時にドライバからメッセージ送出されます。アプリケーションはこのメッセージを受信することによってサンプリングが停止したことを認識し、それに対応する処理を行ってください。
 例えば、連続してワンショットのサンプリングを行う場合は次のような流れになります。
EOC メッセージ受信
  ↓
サンプリングデータ取り込み
  ↓
サンプリング停止
  ↓
サンプリングモード設定
  ↓
サンプリング開始
  ↓
EOC メッセージ受信待ち
WM_HALF_FULL(AD02_WM_OFS_HALF_FULL) メッセージ

 サンプリングモード設定された指定バッファ数の半分までサンプリングが終了した時にドライバからメッセージ送出されます。
 アプリケーションは、連続でサンプリングを行い続ける場合のデータ取得タイミングの目安としてご使用ください。

A13. 外部クロックをトリガにしてデータ変換したいのですが可能でしょうか?

 可能です。
 ただし、変換スタートは外部クロックによってトリガされますが、それ以降は内部タイマによりサンプリングされます。

A14. A/D変換のタイマ値を1msに設定して、100ms間隔ごとに、100個のA/Dデータを取込むことは可能でしょうか?

 デバイスバッファ(512データ)の半分(256データ)揃わないと取込めないようです。モードの設定は、以下のようにしました。

 mode.cwBuffer        = 2000;
 mode.dwChFirst       = 0;
 mode.dwChLast        = 0;
 mode.dwSampleMode    = AD02_SM_CONTINUOUS;
 mode.dwTimer         = 100;
 mode.dwTrigSource    = AD02_TS_INTERNAL;
 mode.dwVoltageRange  = AD02_VR_S10V;
1)動作を見てみると、Ad02wGetSamplingStatus()により取得するサンプリング済みデータ数が、

 1回目の100ms : 0
 2回目の100ms : 0
 3回目の100ms : 256
となっています。

2)また、A/D変換のタイマ値を38のように、100ms間に256データ変換できる数字にすると、100ms毎に256データという個数が取得できます。
 (100000[us] / 256 / 10[us] = 39.0625 よって 38)

1),2)から256データ揃わないと受け取れないように感じられます。
 上記の通り256個のデータを一括して扱いますので、256個のデータが揃うまではデータの取りこみができません。ハードウェアの構造上、最少データ単位が256個となっております。
 それでは、データの受け渡しのサイズとして256以下のサイズ(100や50)だった場合にどう処理しているかというと、読み捨てています。 ですので、タイマー値を38に選択することでほぼ100msに近づける事が可能となります。

A15. 電源オン時の入出力端子の状態

 製品購入時に添付されております取扱説明書の内容についてですが、 汎用入出力ポートに関しての記載で、
”その他注意事項:カード挿入後数ms 間汎用出力が安定しません。 またカードが挿入された状態でPC電源を投入した場合、 PCが立ち上がる間も同様です。その影響をうけるような装置の場合注意が必要です。”
とあります。
 これは、入出力の等価回路でいえば、74LS244でコネクタ側に10kΩの抵抗でPULL UPされております。
汎用出力が安定しないとは、10kΩ抵抗のPULL UP電源が安定しないのか、LS244バッファ自体が安定しないのか、 どちらでしょうか?
 74LS244の手前は XILINX の XC5202(FPGA) になっています。数msと言う時間はこのFPGAに対する初期データコンフィグレーションの時間です。
XC5202はコンフィグレーション中の入出力端子はPULL UPされていますのでHiとなり、したがって74LS244の出力もHiとなるはずです。その後はLoとなります。
 ですので、安定しないと言うよりはHiになる、との表現のほうが適切と思われますが、データシートのうえで明記されていないことですから、今後の変更も起こり得るとの立場からこのような表現になっています。ご了承ください。

A16. VBでのハードウェア割り込みメッセージの受け取り方

 連続サンプリングを実行してデータを取り込み、外部からのタイミングでその前後のデータを判別しようとしています。 そのタイミングのデータの判別を正確にしたいので汎用入力からの割り込みの使用を考えています。
 上記の様な使用方法についてアドバイスがありましたら教えてくださるようにお願いします。
言語:VisualBasic6.0
使用したい割込:汎用入力割込、バッファフル、ハーフバッファフル
 VisualBasicの下で、ハードウェア割り込みメッセージを受け取るためのサンプルソースをご紹介します。

A.17 A/D入力信号はカード内部の制御電源とアイソレートされていますか?

 アナログ入力信号はアイソレートされておりません。

A.18 入力最大電圧が±33Vとの事ですが、アナログ入力信号に±33V以下であれば故障しないとの意味でしょうか。

 その通りです。アナログマルチプレクサ内部の過電圧クランプ回路により、上記が保証されております。

A.19 AXP-AD02の2枚同時使用について。

  1. AXP-AD02を2枚同時に使用して16Chの計測を行ないたいが、1台のパソコンで同時に2枚使用可能でしょうか?
  2. 可能な場合、ソフトウェアからそれぞれのカードを識別する方法は。(VC++6.0を使用)
  1. 使用可能です。ただし、お使いのパソコンによってPCカードスロットに供給できる電源容量に制限がある場合がありますのでご留意ください。
  2. デバイスの使用宣言関数(Ad02Create)を呼び出しますと、*pwLogSocketにソケット番号が格納されます。このソケット番号にはPCカードスロットに対応した数値が入ります。
    サンプリング開始(Ad02StartSampling)等の関数には、このソケット番号(pwLogSocket)の指定がありますので、これにより2枚のAXP-AD02を区別してデータの取得を行うことが出来ます。

A.20 VCで発生するリンクエラーについて

 ドライバソフトウェアのVCサンプルソース、axpad02w.h, axpad02.h, axpad02.libをVCのプロジェクトに追加し、ビルドすると下記のようにリンクエラーが生じてしまいます。
 「error LNK2001:外部シンボル”_Ad02wCreate"は未解決です」
 「fatal error LNK1120:LNK1120:外部参照2が未解決です」
 エラーが発生する原因は、ラッパー関数がプロジェクトに追加されていないためです。axpad02w.cをプロジェクトに追加することによって、エラーは解決いたします。
 なお、VisualC++ を使った構築例は、\Sample\Vc\buildvc.txtに詳細が書かれておりますのでそちらを参照下さい。
 ラッパー関数(Ad02wCreate 等)を使う場合、axpad02.lib はプロジェクトに追加する必要がありません。プロジェクトからは削除してください。

A.21 サンプリング中のエラーコード&H2発生について

 エラーコード &H2は、ドライバで使用可能なデバイスが検出できなかった場合に発生いたします。発生原因は以下の2点となります、
  1. 他のアプリケーションが開いてるデバイスに対して使用宣言を行った場合。
  2. 自アプリケーションが既にデバイスを開いてる状態で、再度同じデバイスに対して使用宣言を行った場合。
 このことから、アプリケーションがデバイスを閉じる前に再度使用宣言を行っていることが考えられます。 アプリケーション実行中に使用宣言とデバイスを閉じる処理を繰り返し行うとアプリケーションのフェーズのずれにより発生する可能性が出てきます。
 アプリケーション初期化時のみデバイスの使用宣言を行い、アプリケーション終了時にデバイスを閉じるようにすることによってこの問題を回避できると思われます。

 なお、アプリケーション初期化時のみデバイスの使用宣言を行うと、エラーが出てしまいます。この対処方法としては、基本的に、
  • アプリケーション起動時に
       Ad02wDllOpen() → Ad02wCreate()
  • アプリケーション終了時に
       Ad02wClose() → Ad02wDllClose()
 といった手順になるようにアプリケーションを設計していただければ問題は解決いたします。
設計案:
  アプリケーション実行
    ↓
Ad02wDllOpen()
    ↓
Ad02wCreate()
    ↓
サンプリング処理 → 必要な回数だけサンプリングを行う
    ↓
アプリケーション終了処理実行
    ↓
Ad02wClose()
    ↓
Ad02wDllClose()
    ↓
アプリケーション終了

A.22 外部機器を接続していない状態でサンプルプログラムを実行すると、サンプリングデータとして「82a」などの値を取得するのは何故でしょうか。

 外部機器からの入力が「0」の状態でも同様の値を取得します。外部機器を接続していない状態でもサンプリングデータが「0」にならないのはなぜなのでしょうか。
 AXP-AD02の入力レンジは、-10V〜+10V、-5V〜+5Vの2つから選択可能です。サンプルプログラムは入力レンジを-10V〜+10Vと設定してありますので、入力電圧(Volt)と出力コード(DATA)の関係は以下の通りになります。
  Volt = ((FS*DATA/4096)-(FS/2))

    FS(Full Scale)
    ±10Vレンジでサンプリングを行った場合はFS=20(V)

    4096
    分解能 12bitの10進表記 

  従って、取得したコードと入力電圧の関係は大よそ

    000H  -->  -10V
    800H  -->    0V
    FFFH  -->  +10V

  となり、82eHは0V付近であることがわかります。
 なお、 A/Dコンバータの入力端子を開放(オープン)にした状態では、入力インピーダンスが1MΩ程度ありますので、外来ノイズ等の影響により800H丁度にはならない場合があります。その場合は入力をGNDに短絡した状態でご確認下さい。

A.23 S/H(サンプル&ホールド)は付いているでしょうか。

 S/Hが付いている場合A/DCの前に1つでしょうか。マルチプレクサーの前にチャネル毎に付いているのでしょうか。
 S/H回路は、A/DCの前に1つ付いています。マルチプレクサーの前のチャネル毎には付いておりません。

A.24 チャンネル切り替え時間について

 チャンネル切り替え時間について、60μsecかかると書かれていますが、例えば8chを計測する場合、最短で変換時間を含む(10+60)*8の560μsec必要ということでしょうか。
 S/HをHOLDにするのと同時にチャンネルを切り替えますので、HOLD&A/D変換の最中にチャンネルが切り替わります。その為、60μs*8CH=480μsの時間が最短となります。

A.25 関数名 Ad02SetModeの使用方法に関して。

  1. cwBufferは内部バッファサイズということですが、連続モードの時、256以上に設定できますか。
  2. 連続モードの時、データはAd02GetSamplingStatusでFIFO内のデータ点数を見て、読み込みということの繰り返しで問題ありませんか。
  3. Ad02GetSamplingStatusで返されるデータ点数はFIFO内のデータ点数ですか。
  1. 設定可能です。内部バッファとは、ドライバが確保するメモリエリアですので、サイズはPCに搭載されているWindows とメモリ容量に依存します。 基本的に上記の制限以内でしたらいくつでも設定可能ですが、そのサイズが確保できない場合は、エラーメッセージ 「AD02_ERR_NOT_ENOUGH_MEM」が返ってきます。
    なお、一般的にはバッファサイズとして、「WM_HALF_FULL割り込み」をトリガとしてデータを取り込みをはじめた時に、バッファがオーバーフローしない様なサイズを設定します。
  2. その方法でも問題ありませんが、より高速なサンプリングを行うには、WM_HALF_FULL割り込みメッセージの使用をお奨めします。
  3. はい、その通りです。

A.26 ”チャネルインクリメントとタイマサンプリングを組み合わせる場合はdwTimerを 6 以上に設定する必要があります。”の意味を教えて下さい。

複数チャンネルサンプリングの場合、タイマーは1-5の設定ができないのでしょうか。
 仕様書の通り、チャンネルインクリメントモードでは複数のチャンネルを切り替えるためセトリングタイムが必要となりますので、dwTimerで1-5の設定は出来ません。

A.27 サンプルプログラムでは、サンプリング済みデータの取得を99回行ったら終了するようになっています。より多くのデータを表示させる方法はありますか。

 サンプルソースでサンプリング回数を99回としているのはバッファサイズを256ワードと設定しているためです。例えば1000回分のデータを取得したい場合は、バッファサイズに1000ワード以上を設定します。

テクニカルQ&A
サポート&サービス
Home Page