秋月のANDDIOモジュールを使った制御 †
- (2016/04/21) ラマン装置で電源等のコントロールで、ANDDIOを使うことにした。そのため、専用ケースに組み込む予定。そのために秋月でParallax製のUSBシリアル変換アダプタ(M-06812)を買ってみた。既にドライバーをインストールしているFTDIのチップのためか、なにもインストールしなくても、Macですぐ使えた。ANDDIOデジタルIOモジュールは、基板に固定用穴がないので、ケースに固定するときに困る。両側にあるシリアル端子両脇の穴を使って、L金具で固定するしかなさそう。
- (2014/09/02)アジレントのデジタルマルチメーターの制御を後ろに追加
- (2014/06/27)意外かもしれないが、Macでもシリアルインターフェースが付いている計測器等を制御することができるが、多くのメーカーはそうとは宣伝していないのが現実である。以前別項でRS232Cによる計測器の制御について書いているので、RS-232Cが付いている計測器の制御はそちらを参考にしてください。計測器以外の制御(電源やレーザーのON/OFFなど)をすることを考えて、秋月電子通商からANDDIOデジタルIOモジュールを買った。まずテストしてみる。
秋月電子通商のANDDIOデジタルIOモジュール †
- このモジュールはRS-232CでPCに接続して、14個のチャンネルを入出力制御できるユニットである。例えばスイッチの状態を読んだり、電源のON/OFF制御などに応用できる。ただ、電源の制御などでは外部にリレー等の回路が必要であり、外部電源も必要となる。また、ユニット自体に電源が必要である。インターフェースはRS-232Cであるが、USBシリアル変換ケーブルを使うことで、PCはもちろん、Macからでも制御できるはず。マニュアルにはMacで使えるかどうかについて書いてはいない。
とりあえずMacから動かせるかどうかの確認 †
- まず電源が必要なので、手持ちのDC12 V電源アダプターを使う。モジュールにはレギュレーターが付いているので、DC8-30 Vの電源アダプターが使える。モジュールに電源用のソケットがついてないので、手持ちのプラグ部品に電線をハンダ付けして、モジュールに電源を接続する。同時に秋月からエレコムのUSBシリアル変換ケーブル(UC-SGT)を買ったが、現在使っているOS X 10.9.3でドライバーがうまく動かない。仕方ないのでArvelのUSBシリアル変換ケーブルに替えた。そちらはチップメーカーからダウンロードしたドライバーで問題なく動く。
- Mac上ではXojo(Realbasicの後継)でプログラムを作成する。最初にシリアルコントロールを新しいウインドウに貼付ける。インスペクターを使って、通信の設定をする。9600 baud, 8 data bit, No parity, 1 stop bitとし、XON,CTS,DTRは全てoffにする。次にPopupmenuをウインドウに貼付けて、openイベント時に以下のプログラムを設定。
me.ListIndex = -1 dim i, count as Integer count = System.SerialPortCount for i = 0 to count - 1 me.AddRow( System.SerialPort( i ).Name ) next
これはシリアルデバイスを読んで、その一覧をメニューに入れるので、起動後にポップアップメニューを開くと、インストールしたドライバーに対応するデバイスが出てくるはず。最初にそれを選択する必要がある。出てこない時はUSBシリアル変換ケーブルがつながってないか、ドライバーがちゃんとインストールされていない。次にPopupmenuでchangeイベントが起こった時に以下を入力する。if me.ListIndex = -1 then return Serial1.SerialPort = System.SerialPort( me.ListIndex ) if not Serial1.Open then MsgBox "Couldn't open the device: " + Str( Serial1.LastErrorCode ) end
これは選択された時(changeイベントが起こるので)、選択されたデバイスをシリアルポートに設定している。
次にPushbuttonを2個貼付けて、1つにはactionイベントで以下を入力。Serial1.Write "AHN"+Chr(13)
AHNはモジュールに対するコマンドで、1つ目のモジュール(A)で、チャンネルNをHigh(5 V)にすることを意味する。最後にCR(chr(13))が必要となる。Serial1.Writeは意味通りで、シリアルデバイスにAHN+CRを書き込む命令。
もう1つのボタンにはactionイベントで以下を入力。Serial1.Write "ALN"+Chr(13)
こちらは出力をLowにする。
ウィンドウがcloseするイベントにはSerial1.Close Quit
を入れておく。これはシリアルポートを閉じている。 - さてテストする。ポートの出力の確認のために、チャンネルNとGND端子の間にLEDを取り付けておく。NにしているのはGNDから近くてLEDをそのまま付けられるというだけの理由。プログラムをビルドして、実行する。まずPopupmenuからシリアルデバイスを選択する。最初のPushbuttonを押すと、LEDが点灯した(下の写真)。2つ目のボタンを押すと、LEDが消灯し、プログラムからモジュールが制御できているのが分かった。これでMacで使えることが証明された。後は実際の実験用に外部回路を作るが、来月から忙しいので、部品だけは買っておいて、しばらくはお休み。手持ちのレーザーのON/OFFはTTLレベルの信号でできるので、特に外部回路はいらないようだ。現在、顕微ラマン測定ではCCD検出器制御装置が持っているI/Oを使って色々と制御しているが、かなり古いので壊れると困る。しかしそれらの制御をこちらのボードに移すことができそうだ。そちらはWindowsマシンで、かつラマン測定自体の制御ではVisual Basicを使っているので、それで作成する必要ことになる。
- 上の写真はデジタルIOモジュール(左側)とArvelのUSBシリアル変換ケーブル(赤く光っているところ)。ちょうど、MacからチャンネルNの出力ONにしたところで、そのチャンネルに差した緑LEDが光っている(中央下部)。左下のケーブルはモジュールへの電源を供給するケーブル。
Macを使った装置制御2(アジレントのデジタルマルチメーター34401A) †
- デジタルマルチメーター34401AはインターフェースがRS-232C(とGPIB)であり、USBシリアル変換ケーブルを使うことで、Macから制御できる。上記同様、ArvelのUSBシリアル変換ケーブルを使った。
- 同様にXojo(Realbasicの後継)でプログラムを作成する。最初にシリアルコントロールを新しいウィンドウに貼付ける。インスペクターで通信の設定。9600 baud, 8 data bit, No parity, 2 stop bitとし、DTRをONにする。多分マルチメーター側でも同じ設定にしないといけない。次にPopupmenuを貼付けて、Openイベント時に以下のプログラムを設定。
me.ListIndex = -1 dim i, count as Integer count = System.SerialPortCount for i = 0 to count - 1 me.AddRow( System.SerialPort( i ).Name ) next
これはシリアルデバイスを読んで、その一覧をメニューに入れるので、起動後にポップアップメニューを開くと、インストールしたドライバーに対応するデバイスが出てくるはず。私の場合は、usbserial-FTF05D9Iがリストに入っているので、それを選択。出てこない時はUSBシリアル変換ケーブルがつながってないか、ドライバーがちゃんとインストールされていない。 - マルチメーターに命令を送る時には最後にCR+LFを付けないといけない。面倒なのでcrlfという変数をshared propertiesとしてstring型で登録する。そしてevent handlersでOpenイベントの時に以下を書き込む。
dim d as new Date timer1.mode=0 crlf = chr(13)+chr(10)
Timerコントロールを使って一定時間毎にデジボルからデータを取り込むようにするので、timer1はそのコントロールである。Timerコントローラーをウィンドウに貼付ける。InspectorからModeはMultiple, Periodは1000 (ミリ秒単位)としておく。Periodを変えると測定間隔を変えられるが、測定精度で設定した積分時間よりも短くするとマルチメーター側でエラーが生じて、電圧の読みもおかしくなる。下の設定どおりだと0.5秒は大丈夫だが、それより短いとエラーが出る。もっと短時間で測定するためには精度を下げる必要がある。 - 次にPopupmenu(serial port用)でChangeイベントが起こった時に以下を入力する。
if me.ListIndex = -1 then return Serial1.SerialPort = System.SerialPort( me.ListIndex ) Serial1.Write "SYST:REM"+crlf Serial1.Write "*RST"+crlf
これは選択されたデバイスをシリアルポートに設定している。
Serial1.Writeは意味通りで、シリアルからデバイスに命令を渡している。SYST:REMはマルチメーターをリモートモードに、RSTはリセットする。 - 1つボタンを貼付けて、Actionイベントで以下を入力。表示用にTextareaをウィンドウに貼っておく。nlineもshared propertiesでinteger型で登録。nlineはTextareaを自動的にスクロールさせるために使っている。CONF:VOLT:DC 0.1,0.00001は、測定をDCV, 0.1 Vレンジで、0.00001精度で測ることを指定。SENS:VOLT:DC:NPLC 10は積分時間の関係の設定、TRIG:SOUR IMMはトリガーの設定。この場合はただちに測定を開始する。最初の日時も書き込んでいる。
dim t as string dim d as new Date Serial1.Write "*CLS" + crlf ' clear errors TextArea1.AppendText(Left(d.LongTime,Len(d.LongTime))+crlf) nline = nline + 1 TextArea1.ScrollPosition = nline if (timer1.mode=2) then timer1.mode =0 else Serial1.Write "CONF:VOLT:DC 0.1,0.00001"+crlf Serial1.Write "SENS:VOLT:DC:NPLC 10"+crlf Serial1.Write "TRIG:SOUR IMM"+crlf timer1.mode =2 end if
- Timer1のActionイベントで実際に測定する。以下を書き込む。
dim emf as double Serial1.Write "READ?"+crlf emf =val(Serial1.Read(17)) '17 byte ?? emf = emf *1000.0 ' Convert to mV unit TextArea1.AppendText(str(emf) +crlf) nline = nline + 1 TextArea1.ScrollPosition = nline
- 最後にウィンドウがcloseするイベントには以下を書き込む。
Serial1.Close Quit
- これでDC電圧を読んで、Textareaに書き込むことができるはず。端折ったので上記だけではよく分からない方も多いと思います。参考のためにソースを置いておきます。これはもう少し機能が追加されていて、いくつかの熱電対の温度へ変換、室温補正、データ取得間隔の変更、データのセーブが可能となっている。下がそのキャプチャー画像。
Last-modified: 2020-12-06 (日) 20:20:45