Howto

PWM 出力で圧電ブザーを鳴らす方法 (Armadillo-IoT ゲートウェイ G4/X2)

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