United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

AVアンプ用の評価測定装置をAnalog Discovery 2とRaspberry Pi 4で製作! パート 4:仕上げとテスト

この連載のパート3では、評価測定装置のハードウェア構成について考えました。今回の投稿では、Raspberry Pi上のLinuxで作動させることが可能な制御をすべて調べ、 以前取り上げたSDKをもう一度読み返します。その後、それを使ってテストを行い、アンプの性能についてのグラフを作成します。 

Amplifier output waveform

評価測定装置を制御するためのソフトウェアを作成し、テスト結果をお見せします。

Linuxの設定

評価測定装置のフロントパネルにはロータリーエンコーダが搭載されているので、エンコーダ自体の回転と、エンコーダのシャフトについているボタンの2つの入力をRaspberry Piで処理する必要があります。

これは、Linuxの「devicetree」を使用することで簡単に処理可能です。devicetreeとは、コンピュータに接続されたハードウェアを体系的に記述する方法です。このdevicetreeには、ハードウェアの記述が含まれているファイルである、devicetree overlayファイルが必要です。今回のユースケースでは、Raspberry Pi用に作成された既定のDebianイメージに、ロータリーエンコーダと押しボタンをインターフェース接続するのに適したdevicetreeオーバーレイファイルが含まれています。

Raspberry Pi contains device tree overlays - code

ロータリーエンコーダのオーバーレイを有効にするには、/boot/config.txtに1行追加する必要があります。これによってブートローダが、コンパイルされたオーバーレイを読み込むようになり、それがカーネルによって取得され、適切なハードウェアドライバが読み込まれます。

特にこのロータリーエンコーダ用オーバーレイは、少なくともエンコーダの「A」ピンと「B」ピン用の定義を必要とします。さらに、追加でlinux_axisパラメータを指定することで、Linuxで制御する軸を設定しています。

ロータリーエンコーダと同じく、GPIOピンをキーを押して接続できるように、オーバーレイを入れました。ここでは、GPIOピンを設定し、次にキーの関連付けをする必要がありました。この際のキーマップリストはLinuxソースにあり、こちらから確認できます。

どちらのオーバーレイも設定できたところで、Piを再起動し、オーバーレイを適用します。その後、「evtest」を使用することで、入力ができているかどうか確認することができます。

testing the inputs using evtest

両方の入力装置が表示され、イベントが正しく報告されていることが確認できます。

温度センサのDS18B20に対しても、提供されているw1-gpioオーバーレイを使用して同様のことが行えます。これは、コマンドラインの「raspi-config」や、GUIベースの「Raspberry Pi Configuration」ユーティリティを使用して有効化することも可能です。

command line for raspi-config

両方の温度センサが/sys/bus/w1/devices/の下に表示され、デバイスフォルダ内の「temperature」フォルダを読むことで、簡単に値を読み取ることができます。このセンサは、温度値をミリセルシウスで返すので、1000で除算するだけでセルシウス度の温度を取得することが可能です。

テスト用ソフトウェア

これで、すべての入力装置をLinux上で読み込めるよう設定できたので、次はテスト用ソフトウェアを作成していきます。今回は新しくRaspbianをインストールしたので、必要なソフトウェア等をすべて設定して、Analog Discovery 2とインターフェース接続できるようにします。

WaveFormsのインストールはとても簡単でした。2つの.debパッケージをDigilent社のウェブサイトからダウンロードし、次にsudo dpkg -iのコマンドを、パッケージ名を用いてインストールするだけです。最初はWaveFormsのインストールに失敗しましたが、依存関係が欠落していただけであったので、sudo apt -f installで解決できました。

WaveForms screen

WaveFormsを無事インストールし終わったので、アプリケーションを実行してみます。ここでは、「Wavegen」ツールを使用して正弦波を生成し、「Scope」ツールを使用してその波形を観察することにしました。すべてのハードウェアが検出され、予想した通りの動作をしていることが確認できました。

WaveForms screen using scope tool

WaveFormsでは、観測しているオシロスコープ波形上でFFTを実行することができるといったような、数多くの便利な機能が提供されています。上の画像からは、最大に調整したアンプが正弦波で駆動されていて、正弦波の高調波でアンプがピーク部分をクリッピングしている様子がわかります。

ハードウェアが期待通りに動作しているので、Digilent社から提供されているPythonの例を参考に、どのようにしてこの例に機能を追加するか考えていきます。

あるPythonサンプルを実行してわかったことは、「matplotlib」や「numpy」をはじめとした、 多少の依存関係が欠落しているということでした。まずはMatplotlibをpip3 install matplotlibでインストールしましたが、ここで「pip3」を使用していることにご注意ください。Python2は今では非推奨なので使用していません。Matplotlibの依存関係が満たされたところで、Numpyをpip3 install -U numpyで最新版にアップグレードする必要があります。さらに、Cairoとのバインドを提供するために、matplotlibの追加の依存関係をsudo apt install python3-gi-cairoでインストールする必要があります。

WaveForms showing sweep tone

これですべての依存関係が解決したので、スイープ信号と両チャネルの信号を図示する例の「AnalogOut_Sweep.py」を実行してみます。上の写真から見て取れるようにこれは、入力チャネルのどちらかひとつを含んだ、2つの線のグラフを生成します。

WaveForms showing a fixed frequency

この上にシステムを構築するには、固定周波数の正弦波を生成する「AnalogOut_Sine.py」と組み合わせ、その後でScipyのFFT関数を使用しました。これによって、測定した入力のエネルギー分布を示すグラフを作成することが可能になります。Pythonには、FFTをはじめとした複雑な数学を一手に引き受けることができるScipyのようなライブラリが多く存在するため、こういったPythonを使って機器を制御する能力は、独自のテスト構成で作成する際の障壁を低くしてくれます。

この例では、実現可能なアプリケーションの可能性にはまだまだ触れられておらず、この例を改良して、プロットにサンプルではなく、周波数を使用することも可能です。また、読み取り値をデシベルで表すか、別の適切な測定単位であらわすように改善することも非常に有効です。今回の例では、複数の信号を生成できるよう拡張して、歪み(ここでは高調波)が特定の周波数で生成されているかどうかを確認できるようになります。

動作の様子

最後に

このプロジェクトでは、Digilent社 Analog Discovery 2の汎用性や、機器を制御するためのカスタムコードを書くことで、柔軟な分析ツールとして使用できることを実証してみました。

他の連載パート:

Engineer of mechanical and electronic things by day, and a designer of rather amusing, rather terrible electric "vehicles" by night.