2017年1月11日水曜日

Excel VBA で USB-SPI ブリッジを使う

PCからSPI(Serial Peripheral Interface)を持つデバイスを制御する方法を検討した。
過去にPIC側からのアプローチとして「PIC USB のまとめ」にあるように、今回も目的は同じ。今回は、安価なUSB-SPI ブリッジICを試し、実用に供したい。
  • SPIの先でシリアル-パラレル変換すれば入出力点数は自在
  • SPIの先にマイコンを挟めば、ADコンバータのサンプリング回数や間隔などマイコンに任せられる
  • システム構成上何らかの自前の回路を付加する必要があるなら、これを組み込んでしまえば安上がりになる
  • Excel VBAで制御したい
  • msオーダーのレスポンスが必要
  • 大量のデータを扱う必要は無い
チップ実装済みの基板が各社から販売されている。デバイスとしては次の二つを選定。
  • Microchip MCP2210
    ・・・HIDデバイスとして認識するみたい/DLLから制御も可能
  • FTDI FT232H
    ・・・USBシリアル変換IC FT232の機能拡張版/各種方式の通信が可能

FT232Hの実装された基板を購入し、まずVCPモードでループバックテストを試してみた。
  • VCPとは、Virtual COM Port(仮想COMポート,USB-RS232C変換ケーブルがそう)
  • デバイスマネージャーの、USB Serial Conveterのプロパティにて「VCPをロードする」にチェックが必要
  • ノートパソコン(Win8.1)は、Win32API シリアル通信テストで、USB-RS232C変換ケーブルでテストした事があったので、何もせずともループバックテストができた
  • デスクトップPC(Win10)の方は、FTDI D2XXをインストールした後、USBを抜き差しして使えるようになった。COM5に割り当てられた。

モノが動くことは確認できたので、Excel VBA で制御するためのサンプルコードを探すも、
  • VBAのコードサンプルは皆無
  • FTDI のサイトに VB6 のサンプルコードは有り
  • VB6 のコードをExcel VBEに貼り付けて、コンパイルエラーを潰していく手順
  • MPSSE(Multi-Protocol Synchronous Serial Engine)というモードにすれば、SPIのみならず他の通信方式も使えるらしい
  • D2XXより上位と思われる LibMPSSE-SPI は使わない
  • 各社(まず和文の説明書から)の説明書をつなぎ合わせつつ、サンプルコードも二つ三つを見比べながら、自力でやってみた

今回は、MPSSEモードにしてビットのオンオフを繰り返すところまでで終わり。繰り返したときの間隔、Sleep関数の精度を確かめてみた。
  • 単発の場合の、最少パルス幅は40~80us
  • 右波形は、Sleep(2)を挟んで30回繰り返し波形、一発目が12msかかっている
  • Sleep(15)の場合は、一発目から15msくらいになり、ほぼ均等に30発
  • Sleepの代わりにtimeGetTime関数を使っても似たような結果
  • やはり、15ms以下のタイマ(休止)はあてにならない
FT232Hの使い方、移植の際の注意点などは別途、「要点整理」する。