はじめに
OrangePi5でPWMを使えるようにするためのメモ
参考文献
こちらに書いてある内容を参考にしました。
また、PWMの取り扱いについては公式ドキュメントでも記載されている。
PDFをダウンロードしてPWM
で検索をかければ、sudo実行しているコマンドに当たるはず。
環境
- OrangePi5
- debian (Orange Pi 1.1.4 Bullseye with Linux 5.10.110-rockchip-rk3588)
設定
今回行うことは2点ある。
- orangepi-configでのPWM許可
- rules追記
orangepi-configでのPWM許可
まず事前知識として、orangepi5ではPWMを実行するためのアドレスを別々のピンで共有しているものがあることを覚えておく。例えば、16ピンと26ピン、15ピンと23ピンは同じアドレスを使っていることから、どちらか片方を許可する必要がある。
(OrangePi_5_RK3588S_User Manual_v0.7.pdfのp203参照)
アドレス(pwmchip) | 物理ピン | PWM名称 |
---|---|---|
fd8b0000 | 18 | pwm0-m1 |
fd8b0010 | 16 | pwm1-m1 |
fd8b0010 | 26 | pwm1-m2 |
fd8b0030 | 15 | pwm3-m0 |
fd8b0030 | 23 | pwm3-m2 |
febf0010 | 3 | pwm13-m2 |
febf0030 | 7 | pwm15-m2 |
febf0020 | 11 | pwm14-m1 |
上記を踏まえた上で、orangepi-configを開く。
sudo orangepi-config
System
→HardWare
と選択する。
使用するpwmにカーソルをあわせてSpaceキーを押して選択する。
選択すると、該当の項目に*
が表示される。
Save
を選択すると同じ画面に戻るため、先程設定した項目に*
でチェックが入っていることを確認したらBack
に選択を移して戻る。
再起動を促されるため、そのままReboot
を選択して再起動する。
rules追記
sudo無しでPWMを扱えるようにするための設定をここで実施する。
ターミナルで下記コマンドを実行する。
$ sudo groupadd pwm
$ sudo usermod -aG pwm $USER
60-pwm.rulesを開いて下記に書き換え。
新規作成は未記入であればそのままコピペでOK。
SUBSYSTEM=="pwm", PROGRAM="/bin/sh -c '\
chown -R root:pwm /sys/class/pwm && chmod -R 770 /sys/class/pwm; \
chown -R root:pwm /sys/devices/platform/*.pwm/pwm/pwmchip* && chmod -R 770 /sys/devices/platform/*.pwm/pwm/pwmc>
'"
ファイルを保存したら再起動する。
再起動が完了したら下記コマンドを実行する。ここで表示されるpwmchipの数はorangepi-configで許可したPWMによって変動するかも。
$ ls -l /sys/class/pwm/
total 0
lrwxrwxrwx 1 root pwm 0 May 3 00:17 pwmchip0 -> ../../devices/platform/fd8b0000.pwm/pwm/pwmchip0
lrwxrwxrwx 1 root pwm 0 May 3 00:17 pwmchip1 -> ../../devices/platform/fd8b0020.pwm/pwm/pwmchip1
lrwxrwxrwx 1 root pwm 0 May 3 00:17 pwmchip2 -> ../../devices/platform/fd8b0030.pwm/pwm/pwmchip2
lrwxrwxrwx 1 root pwm 0 May 3 00:17 pwmchip3 -> ../../devices/platform/febd0020.pwm/pwm/pwmchip3
lrwxrwxrwx 1 root pwm 0 May 3 00:17 pwmchip4 -> ../../devices/platform/febf0010.pwm/pwm/pwmchip4
lrwxrwxrwx 1 root pwm 0 May 3 00:17 pwmchip5 -> ../../devices/platform/febf0030.pwm/pwm/pwmchip5
一旦これでPWMは使用可能となる。pwmchipとアドレスの対応を見ながらgpioコマンドを叩けばPWMが発生するはず。
確認
下記は公式ドキュメントのpp.204-205に記載されていたサンプルをsudo無し実行した者です。pwmchipNが何に対応しているのかはls -l /sys/class/pwm/
で要確認。
$ echo 0 > /sys/class/pwm/pwmchip2/export
$ echo 20000000 > /sys/class/pwm/pwmchip2/pwm0/period
$ echo 1000000 > /sys/class/pwm/pwmchip2/pwm0/duty_cycle
$ echo 1 > /sys/class/pwm/pwmchip2/pwm0/enable