Current Language
×
Japanese (Japan)

言語の選択:

トグル・メニュー
Current Language
×
Japanese (Japan)

言語の選択:

ダウンロード

マニュアル、データシート、ソフトウェアなどのダウンロード:

ダウンロード・タイプ
型名またはキーワード

フィードバック

Raspberry Piを使用したオシロスコープの制御


はじめに

Raspberry Piは本来、学生にコンピュータ科学を教えるためのツールとして使用された、シングルボードの小型コンピュータです。その後、小型、低コスト、モジュール対応、オープン・デザインにより普及が進みました。Raspberry Piは、改訂のたびに機能が追加され、現在では教育以外の用途にも広く利用されています。

コンピュータ能力が限られているため、Raspberry Piは多くの分野で通常のPCに取って代わることはありません。しかし、コンパクトなサイズ、柔軟なI/Oインタフェース、低コスト、Pythonの組込み対応により、ラボのテスト・ベンチや製造現場のテスト・ラックの自動化、計測器の制御、形データや計測結果の取込み、計測器のデータ管理やリモート・アクセスのハブとして機能する、理想的なプラットフォームとなります

このアプリケーション・ノートでは、Raspberry Piを迅速にセットアップし、テクトロニクスの2シリーズMSO(ミックスド・シグナル・オシロスコープ)を自動化し、リモート制御するための設定方法をご紹介します。セットアップ方法については ビデオでもご覧いただけます。.

Raspberry Piのセットアップ

ラボの作業ベンチのコントローラPCとしてRaspberry Piを使用するための設定はシンプルです。

基本要件とセットアップ:

  • Raspberry Pi 4 with Raspberry Pi OS (旧Raspbian)
  • Python 3.7 or above
  • PyUSB 1.2.1
  • PyVISA 1.11.3
  • PyVISA-py 0.5.2

オシロスコープとRaspberry Piの通信サポートは、pyVISAをベースとしています。

セットアップを始める前に、Raspberry Piのソフトウェア・コンポーネントが最新であることを確認します。最新でない場合は、Raspberry Piをネットワークに接続して、ソフトウェアのアップデートを行ってください。

image1

図1. テクトロニクスの2シリーズMSOとRaspberry Piのセットアップ例

コマンド・プロンプトで以下のように入力します。sudo apt update && sudo apt upgrade -y

システムが最後にアップデートされたタイミングにより、アップデートに数分以上かかる場合があります。

セットアップには、Python 3.xのモジュールがいくつか必要です。必要なモジュールすべてをインストールするため、コマンド・プロンプトで以下のアップデート用コマンドを入力します。

  • sudo python3 -m pip install pyvisa
  • sudo python3 -m pip install pyvisa-py
  • sudo python3 -m pip install PyUSB

図2. 機器制御で必要なPython 3モジュール

Raspberry Piは、rootユーザしかUSBドライブにアクセスできない場合があります。すべてのユーザがアクセスできるよう、Raspberry Piのルールを変更します。

コマンド・プロンプトで以下のように入力します。

  • sudo su
  • echo 'SUBSYSTEM=="usb", MODE="0666", GROUP="usbusers"' >> /etc/udev/rules.d/99-com.rules exit

図3. すべてのユーザがUSBドライブにアクセスできるようにルールを変更する

変更を有効にするためにRaspberry Piを再起動します。

  • sudo reboot

コマンド・プロンプトで以下のように入力します。

  • sudo reboot

テクトロニクスの2シリーズMSOとの接続をセットアップします。

ほとんどのエントリレベルのオシロスコープには、接続のためのUSBデバイスが装備されています。以下の手順でRaspberry Piと2シリーズMSOを接続します。

  • オシロスコープ側面にあるUSBデバイス・ポートとRaspberry Piを接続します。
  • Raspberry Piが2シリーズMSOを認識できるかチェックします。コマンド・プロンプトで以下のように入力します。

    lsusb



図4. 接続されたUSBデバイスのベンダとして「Tektronix, Inc.」が表示されている

「Tektronix, Inc.」デバイスは、オシロスコープを意味しています。Raspberry Piがテクトロニクスのデバイスを検出しない場合は、別のUSBポートまたはケーブルで同じ手順を繰り返します。

Raspberry Piとオシロスコープの通信を確認するために、Python 3.0.を起動します。 コマンド・プロンプトで以下のように入力します。

次に、以下を入力してオシロスコープのVISAディスクリプタをチェックします。

  • >>> import pyvisa
  • >>> rm = pyvisa.ResourceManager()
  • >>> rm.list_resources()
  • ('ASRL/dev/ttyAMA0::INSTR', 'USB0::1689::261::PQ100125::0::INSTR')
  • >>> inst = rm.open_resource('USB0::1689::261::PQ100125::0::INSTR')
  • >>> print(inst.query("*IDN?"))

    rm.list_resources()には、VISAディスクリプタが表示されています。正しく表示されていることを確認して以下のように入力します。

  • inst = rm.open_resource(<VISA descriptor>) と入力してRaspberry Piとオシロスコープを接続します。

通信を確認するために*IDN?クエリを入力します。リターン・ストリングで正しい型名、シリアル番号が表示されていれば、Raspberry Piがオシロスコープと通信できたことを示しています。(以下の図5参照)

図5. *IDN?クエリ・コマンドで通信を検証する

2シリーズMSOだけでなく、テクトロニクスのTBS2000Bシリーズ、TBS1000Cシリーズ・デジタル・オシロスコープなどのエントリレベルのオシロスコープもRaspberry Piに対応しています。


図6. テクトロニクスのTBS1000Cシリーズ・デジタル・オシロスコープとの接続例

サンプル・スクリプト

F以下は、波形データを取得し、プロットするPythonのスクリプト例です。このサンプル・スクリプトは、example_script.txtというファイル名でこのPDFファイルに添付されているので、ダウンロードしてコピーすることもできます。

import time # std module

import pyvisa as visa # http://github.com/hgrecco/pyvisa - pyvisa for connectivity import matplotlib.pyplot as plt # http://matplotlib.org/ - for plotting import numpy as np # http://www.numpy.org

# VISA descriptor to identify the test and measurement device

# Please update the VISA descriptor from the query result from pyvisa visa_address = 'USB0::1689::261::Q300209::0::INSTR'

rm = visa.ResourceManager() scope = rm.open_resource(visa_address) scope.timout = 10000 # ms scope.encoding = 'latin_1' scope.read_termination = '\n' scope.write_termination = None scope.write('*cls') # clear ESR scope.write('header OFF')

# acquisition

scope.write('acquire:state OFF') # stop

scope.write('acquire:stopafter SEQUENCE;state ON') # single r = scope.query('*opc?')

# curve configuration

scope.write('data:encdg SRIBINARY') # signed integer scope.write('data:source CH1') scope.write('data:start 1')

acq_record = int(scope.query('horizontal:recordlength?')) scope.write('data:stop {}'.format(acq_record)) scope.write('wfmoutpre:byt_n 1') # 1 byte per sample

# data query

bin_wave = scope.query_binary_values('curve?', datatype='b', container=np.array, chunk_size = 1024**2)

# retrieve scaling factors

wfm_record = int(scope.query('wfmoutpre:nr_pt?')) pre_trig_record = int(scope.query('wfmoutpre:pt_off?')) t_scale = float(scope.query('wfmoutpre:xincr?'))

t_sub = float(scope.query('wfmoutpre:xzero?')) # sub-sample trigger correction v_scale = float(scope.query('wfmoutpre:ymult?')) # volts / level v_off = float(scope.query('wfmoutpre:yzero?')) # reference voltage v_pos = float(scope.query('wfmoutpre:yoff?')) # reference position (level)

# disconnect scope.close() rm.close()

# create scaled vectors

# horizontal (time)

total_time = t_scale * wfm_record

t_start = (-pre_trig_record * t_scale) + t_sub t_stop = t_start + total_time

scaled_time = np.linspace(t_start, t_stop, num=wfm_record, endpoint=False)

# vertical (voltage)

unscaled_wave = np.array(bin_wave, dtype='double') # data type conversion scaled_wave = (unscaled_wave - v_pos) * v_scale + v_off

# plotting

plt.plot(scaled_time, scaled_wave) plt.title('channel 1') # plot label plt.xlabel('time (seconds)') # x label plt.ylabel('voltage (volts)') # y label print(“look for plot window...") plt.show()

TightVNCのセットアップ(オプション)

これは、Raspberry PiでVNCを設定し、リモートで接続したいユーザのためのオプションです。
最新のバージョンにアップデートするため、コマンド・プロンプトで次のように入力します。

  • sudo apt update && sudo apt upgrade -y

    次に、コマンド・プロンプトで次のように入力してVNCサーバをインストールします。

  • sudo apt install tightvncserver

    コマンド・プロンプトで次のように入力してVNCサーバを初期セットアップします。

  • vncserver

初期セットアップであるため、コマンド・プロンプトでパスワードを求められます。8文字のパスワードを入力します。パスワードは自動的に8文字に短縮されます。

確認のために再度パスワードを入力します。

Vviewerのみに適用するパスワードかを聞かれた場合は、Noを選択します。

PCにおいて、tightvnc.comで tightvnc.com.クライアントをインストールします。

インストールしたならばTightVNC Viewerを起動します。接続ウィンドウで、Raspberry PiのIPアドレスとデフォルトのポート番号(5901)を入力します。

 

図7. TightVNCビュアーの接続ウィンドウ

Raspberry PiのIPアドレスを調べるには、ifconfigコマンドを使用します。

図8. ifconfigコマンドによるIPアドレスの確認

図9. リモートPC上のTightVNCビュアー