こちらの記事について、内容・翻訳・視点・長さなど、皆様のご意見をお送りください。今後の記事製作の参考にしたいと思います。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
こちらの記事の感想をお聞かせください。
この連載のパート3では、評価測定装置のハードウェア構成について考えました。今回の投稿では、Raspberry Pi上のLinuxで作動させることが可能な制御をすべて調べ、 以前取り上げたSDKをもう一度読み返します。その後、それを使ってテストを行い、アンプの性能についてのグラフを作成します。
評価測定装置を制御するためのソフトウェアを作成し、テスト結果をお見せします。
Linuxの設定
評価測定装置のフロントパネルにはロータリーエンコーダが搭載されているので、エンコーダ自体の回転と、エンコーダのシャフトについているボタンの2つの入力をRaspberry Piで処理する必要があります。
これは、Linuxの「devicetree」を使用することで簡単に処理可能です。devicetreeとは、コンピュータに接続されたハードウェアを体系的に記述する方法です。このdevicetreeには、ハードウェアの記述が含まれているファイルである、devicetree overlayファイルが必要です。今回のユースケースでは、Raspberry Pi用に作成された既定のDebianイメージに、ロータリーエンコーダと押しボタンをインターフェース接続するのに適したdevicetreeオーバーレイファイルが含まれています。
ロータリーエンコーダのオーバーレイを有効にするには、/boot/config.txt
に1行追加する必要があります。これによってブートローダが、コンパイルされたオーバーレイを読み込むようになり、それがカーネルによって取得され、適切なハードウェアドライバが読み込まれます。
特にこのロータリーエンコーダ用オーバーレイは、少なくともエンコーダの「A」ピンと「B」ピン用の定義を必要とします。さらに、追加でlinux_axis
パラメータを指定することで、Linuxで制御する軸を設定しています。
ロータリーエンコーダと同じく、GPIOピンをキーを押して接続できるように、オーバーレイを入れました。ここでは、GPIOピンを設定し、次にキーの関連付けをする必要がありました。この際のキーマップリストはLinuxソースにあり、こちらから確認できます。
どちらのオーバーレイも設定できたところで、Piを再起動し、オーバーレイを適用します。その後、「evtest」を使用することで、入力ができているかどうか確認することができます。
両方の入力装置が表示され、イベントが正しく報告されていることが確認できます。
温度センサのDS18B20に対しても、提供されているw1-gpio
オーバーレイを使用して同様のことが行えます。これは、コマンドラインの「raspi-config」や、GUIベースの「Raspberry Pi Configuration」ユーティリティを使用して有効化することも可能です。
両方の温度センサが/sys/bus/w1/devices/
の下に表示され、デバイスフォルダ内の「temperature」フォルダを読むことで、簡単に値を読み取ることができます。このセンサは、温度値をミリセルシウスで返すので、1000で除算するだけでセルシウス度の温度を取得することが可能です。
テスト用ソフトウェア
これで、すべての入力装置をLinux上で読み込めるよう設定できたので、次はテスト用ソフトウェアを作成していきます。今回は新しくRaspbianをインストールしたので、必要なソフトウェア等をすべて設定して、Analog Discovery 2とインターフェース接続できるようにします。
WaveFormsのインストールはとても簡単でした。2つの.debパッケージをDigilent社のウェブサイトからダウンロードし、次にsudo dpkg -i
のコマンドを、パッケージ名を用いてインストールするだけです。最初はWaveFormsのインストールに失敗しましたが、依存関係が欠落していただけであったので、sudo apt -f install
で解決できました。
WaveFormsを無事インストールし終わったので、アプリケーションを実行してみます。ここでは、「Wavegen」ツールを使用して正弦波を生成し、「Scope」ツールを使用してその波形を観察することにしました。すべてのハードウェアが検出され、予想した通りの動作をしていることが確認できました。
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
でインストールする必要があります。
これですべての依存関係が解決したので、スイープ信号と両チャネルの信号を図示する例の「AnalogOut_Sweep.py」を実行してみます。上の写真から見て取れるようにこれは、入力チャネルのどちらかひとつを含んだ、2つの線のグラフを生成します。
この上にシステムを構築するには、固定周波数の正弦波を生成する「AnalogOut_Sine.py」と組み合わせ、その後でScipyのFFT関数を使用しました。これによって、測定した入力のエネルギー分布を示すグラフを作成することが可能になります。Pythonには、FFTをはじめとした複雑な数学を一手に引き受けることができるScipyのようなライブラリが多く存在するため、こういったPythonを使って機器を制御する能力は、独自のテスト構成で作成する際の障壁を低くしてくれます。
この例では、実現可能なアプリケーションの可能性にはまだまだ触れられておらず、この例を改良して、プロットにサンプルではなく、周波数を使用することも可能です。また、読み取り値をデシベルで表すか、別の適切な測定単位であらわすように改善することも非常に有効です。今回の例では、複数の信号を生成できるよう拡張して、歪み(ここでは高調波)が特定の周波数で生成されているかどうかを確認できるようになります。
動作の様子
最後に
このプロジェクトでは、Digilent社 Analog Discovery 2の汎用性や、機器を制御するためのカスタムコードを書くことで、柔軟な分析ツールとして使用できることを実証してみました。
他の連載パート: