2018年5月13日日曜日

USBcount50をPythonで使ってみた

秋月で売っているUSBcount50というUSB接続の周波数カウンタがあるんだけど、対応OSは32bitオンリーだしWindows 10はおろかVistaまでの対応らしいのでどうにか使いたいということで知り合いから相談を受けた。
ということで一応借りてきた。


Elan Digital Systems Ltd'sってところから出てるデバイスらしいんだけどディスコン?になってるし、サイトもWebアーカイブに残ってるだけだし…
0.1Hzから50MHzまで測れる周波数カウンタらしい。USBポートはオスがそのまま出ていてUSB延長ケーブルが付属している。赤色LEDがBNC入力端子の下についてて、あとは4chまでスタックして使用できるらしいのでそれ用のポートがついてる。

というわけで早速秋月のページからソフトウェア類が入ったzipをダウンロードすると、ソフトウェアのソースコードとかレジスタの説明が入っていた。Communications Protocolを見てみるとどうやらソフトウェアとデバイス間の通信はUARTでやってる?これならPythonとかでも使えるかも。

USBcount50の中身的には(分解していないのでソフトウェアからの推測だけど)、周波数カウンタの機能自体はFPGA、PCとの通信用にSilicon LabsのCP210xシリーズのUSB UART変換ICを使っていて、FPGAとは921600bpsで通信しているっぽい。こんなに高速にUARTで通信している割には通信プロトコル自体には誤り検出とか実装されていないように思うんだけど、結構安定して通信できているのかな。
USBとBNC端子はアイソレーションされてるようなのでUARTかUSBのラインにアイソレーションICが入ってるのかな?

デバイスとの通信部分はDLLになっていて、DLLをVB6.0のGUIソフトウェアから呼び出してるみたいな構成。どうやらCP210xに直接アクセスしてシリアルナンバーとかバージョンを読み出すところはCP210x用のDLLを使っているようなのでそのせいでPCで仮想COMポートとして認識していてもソフトウェアからアクセスできなくなってそう…

ためしにCooltermからUSBcount50の仮想COMポートにプロトコルの仕様書通りにコマンドを送ってみるとちゃんと帰ってくるようなので、純正ツールを使わなくてもCOMポートにアクセスさえすれば使えそう。どうやらCP210xとの通信はバージョンチェックとかデバイスがつながっているかどうかの確認しかしてなさそうだし。

というわけでDLLの必要そうな部分と、GUIツールからDLLを扱ってる一部をPythonに移植してみた。USBcount50では使ってない関数もあるかも。(同じ外見のデバイスで何種類かシリーズものがあるらしい)
これでOSやバージョンを問わず使うことができそう。XPのマシン用意するのも大変だろうし。
GUI部分はとりあえずは保留でライブラリとして使えるような形で作ってみた。Pythonよく理解できてないのでなんか変な所あるかも…

とりあえずラズパイ上ではうまく動いた。これ、純正ソフトだと周波数と時間しか表示できなさそうだけど、パルス出力のセンサー類をつないでセンサーの出力に応じた計算までさせたいのであればPythonは結構便利な選択肢だったかもしれない。
多分古いデバイスだし、使う人いないだろうけど一応公開しておく…

USBcount50.py

DLLの中身で必要そうな部分をそのまま移植した感じなので不要な関数もあるかも。
そしてテストで測定結果を取得したときに使っていない関数はほぼ未確認。
スタック用のポートもレジスタいじると操作できそうなので汎用デジタルIOとして使えそうな気がする。

そういえばUSB Host ShieldでもCP210xが扱えるらしいけど921600bpsとかで通信できるのかなぁ?もし通信できるならマイコンとかでも扱えちゃうかも?

追記:リンクが切れていたので再アップのついでにVIDとPIDで自動でデバイスを認識するように変更した。

3 件のコメント:

  1. こんにちはブログ拝見させていたたたきました。
    古いデバイスだし、使う人いないだろうけど一応公開しておくということで
    公開していただけたこと感謝いたします。

    ちょうど同じ商品が気になっていたのですが
    使ってるPCはWindows10 64bitだし
    今更XP 32bitマシンを用意するのもなあと思って諦めかけてました。

    自己責任で挑戦しようか考えているのですが差支えなければお知恵を拝借できれば助かります。

    これでOSやバージョンを問わず使うことができそうとのことですが
    Windows10 64bit マシンで使えるようになる可能性はあるのでしょうか


    PC上のプログラミングはあまり得意ではありませんが、フリーのツールやバイナリエディタを使ってファイルの書き換え程度は問題なくできると思います。

    Windows10 64bitは対応外とかハードルが高いようなら諦めます。

    返信削除
  2. おはようございます。 ↑の者です。
    パソコンとUSB接続で使える小型周波数カウンタを探していて当該商品しか見付けれなくて困っていてコメントを記入させていただきましたが
    Windows10でも使える物を同程度の価格で見つけることができましたのでそちらを導入することにしました。お騒がせしてすみませんでした。

    返信削除
    返信
    1. コメントありがとうございます!
      返信がだいぶ遅れてしまい申し訳ありません…
      別な製品を見つけられたということでよかったです。
      USBCount50はUSBシリアル変換チップを介して内部のFPGAと通信しているような構成でしたので、上で公開しているUSBcount50.pyをすこし改良すれば64BitなWindowsからでもアクセスできそうです。
      ただしGUIとかになるとちょっと作るのに手間がかかりそうです…

      削除