Armadillo-IoTゲートウェイ G4のPWM出力で圧電ブザーを鳴らす方法を紹介します。
Armadillo-IoTゲートウェイ G4をベースにした内容になっていますが、Armadillo-X2でも動作確認しています。 Armadillo-X2はArmadillo-IoTゲートウェイ G4の機能を一部減らして小型にした製品で、基本的には同じソフトウェアで動作します。 また、拡張インターフェース(CON11)の仕様も同じですので、CON11用に作った拡張ボードは両方の製品で動作します。
必要なもの
本Howtoでは以下のものが必要となります。
機材 | 説明 |
---|---|
Armadillo-IoTゲートウェイ G4一式 | Armadillo-IoTゲートウェイ G4本体、ACアダプタ、USBケーブル、LANケーブルが必要です。 |
圧電ブザーボード | 本Howtoに掲載している回路図を参考に作成する必要があります。 |
作業用PC | VMwareが動作可能なスペックのPCが必要です。 |
ネットワーク環境 | Armadillo-IoTゲートウェイ G4と作業用PCはネットワーク通信ができるようにしてください。 |
使用する圧電ブザー
圧電ブザーは以下を使用します。
PS1240P02CT3/TDK
- 他励振タイプ
- 音圧レベル : 60dB(A)/10cm min at 4kHz, 3V0-P矩形波
- 最大入力電圧 : 30V0-P max
デバイスの詳しい情報については、メーカーのホームページを参照してください。
ハードウェア
参考回路図
本Howtoで作成した圧電ブザーボードの回路図は次のとおりです。
参考回路は動作を保証するものではありません。回路設計の際にはデバイスのデータシートやアプリケーションノートをご確認の上、十分な評価をお願いいたします。
ピンアサイン
Armadillo-IoT ゲートウェイ G4のCON11に接続します。 CON11にはPWM出力ピンが4つありますが、今回はPWM4を使用します。
CON11ピン番号 | i.MX8MP 信号名 |
---|---|
29 | PWM4_OUT |
31 | VDD_5V |
33 | GND |
音圧について
圧電ブザーは印加する電圧値が高いほど、大きい音が鳴ります。 Armadillo-IoTゲートウェイG4のPWMピンから直接駆動して音を鳴らすことも可能ですが、音圧を上げるため、MOSFETを追加して圧電ブザーに5V印加しています。 直接駆動する場合は、逆起電力からのIC保護のためにPWMピンと圧電ブザーの間に抵抗を挟んでください。また、必要に応じて圧電ブザーと並列にツェナーダイオードを入れてください。
ソフトウェア
使用ソフトウェア
本Howtoで使用したソフトウェアは次のとおりです。
項目 | ファイル |
---|---|
開発環境 | ATDE9 (v20220124) |
Linuxカーネル | linux-at-5.10.118-r0.tar |
at-dtweb | バージョン 2.6.2 |
Armadillo-X2は下記ソフトウェアで動作確認しています。
項目 | ファイル |
---|---|
Linuxカーネル | linux-at-x2-5.10.161-r0.tar |
at-dtweb | バージョン 2.8.0 |
Device Treeのカスタマイズ用ファイルの生成
Device Treeをカスタマイズするの手順のとおり、at-dtwebでDTS overlaysファイル(dtbo)を生成します。
作業用PC上でATDEを立ち上げ、Linuxカーネルのソースアーカイブを展開し、デフォルトカーネルコンフィギュレーションを適用します。
[ATDE ~]$ ls
linux-at-5.10.118-r0.tar
[ATDE ~]$ tar xf linux-at-5.10.118-r0.tar
[ATDE ~]$ tar xf linux-at-5.10.118-r0/linux-5.10-5.10.118-r0.tar.gz
[ATDE ~]$ cd linux-5.10-5.10.118-r0/
[ATDE ~/linux-5.10-5.10.118-r0]$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- x2_defconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
[ATDE ~/linux-5.10-5.10.118-r0]$ cd ../
[ATDE ~]$
at-dtwebを起動します。
[ATDE ~]$ at-dtweb
Armadillo-IoT_G4を選択して[OK]をクリックします。
Linuxカーネルディレクトリを選択して[OK]をクリックします。
CON11の29ピンをPWMに設定して[Save]をクリックします。 以下の画面のようなメッセージが表示され、ホームディレクトリ下の mkswu/at-dtweb ディレクトリに、DTB overlays ファイル(dtbo)が生成されます。
at-dtwebを終了し、DTS overlaysファイル(dtbo)を確認します。
[ATDE ~]$ ls ~/mkswu/at-dtweb
armadillo_iotg_g4-at-dtweb.dtbo update_overlays.sh
at-dtweb.desc update_preserve_files.sh
動作確認
動作確認環境
Armadillo-IoTゲートウェイ G4の動作確認環境は次のとおりです。
項目 | ファイル |
---|---|
Armadillo Base OS | Armadillo-Base OS(3.15.4-at.7) |
Armadillo-X2は下記で動作確認しています。
項目 | ファイル |
---|---|
Armadillo Base OS | Armadillo-Base OS(v3.17.1-at.2) |
DTS overlaysによるカスタマイズ
Device TreeをDTS overlays によるカスタマイズの手順で変更します。
/boot/overlays.txt ファイルに armadillo_iotg_g4-at-dtweb.dtbo を追加して保存します。ファイルが存在しない場合は新規に作成します。
overlay実行のため再起動をし、起動ログに Applying fdt overlay: armadillo_iotg_g4-at-dtweb.dtbo
があることを確認します。
[armadillo ~/]# ls
armadillo_iotg_g4-at-dtweb.dtbo
[armadillo ~/]# cp armadillo_iotg_g4-at-dtweb.dtbo /boot/
[armadillo ~/]# vi /boot/overlays.txt
fdt_overlays=armadillo_iotg_g4-at-dtweb.dtbo
[armadillo ~/]# persist_file -vp overlays.txt armadillo_iotg_g4-at-dtweb.dtbo
'/boot/overlays.txt' -> '/mnt/boot/overlays.txt'
'/boot/armadillo_iotg_g4-at-dtweb.dtbo' -> '/mnt/boot/armadillo_iotg_g4-at-dtweb.dtbo'
Added "/boot/armadillo_iotg_g4-at-dtweb.dtbo" to /etc/swupdate_preserve_files
[armadillo ~/]# reboot
: (省略)
Applying fdt overlay: armadillo_iotg_g4-at-dtweb.dtbo
コンテナの作成
Armadillo Base OSでは基本的にユーザーアプリケーションをpodmanコンテナ上で実行します。
コンテナ内で動作するアプリケーションから PWM を扱うために、ホストOS側の /sys ディレクトリをコンテナに渡します。ここで渡された /sys ディレクトリは コンテナ内の /sys にマウントされます。
alpineイメージからpwm_exampleという名前でコンテナを作成し、起動します。 (インターネットに繋がっている必要があります。)
[armadillo ~]# podman run -it --name=pwm_example --volume=/sys:/sys docker.io/alpine /bin/sh
PWM設定と出力
以下は周期 1ms、duty50%でPWM出力して音を鳴らす例です。 周期を長くすると音が低くなり、短くすると高くなります。
[container /]# echo 0 > /sys/class/pwm/pwmchip0/export
[container /]# echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
[container /]# echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
[container /]# echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable