Jetson NanoでハードウェアPWMを使うのに、本来はPinmux テーブルを設定し書き込まないと使えないのですが、フォーラムにおいて簡単に使う方法を教えてくださった方がいたので、シェアします。
2020-03-30 追記
Jetson Nano 最新のJetPack ではもう少し簡単になってるようです。
https://qiita.com/kitazaki/items/9db6b0679eee5f768b3e
環境
jetson-nano-sd イメージ
バージョン r32.2.1
インストール直後のデフォルト環境で使えました!
使用方法
リンク元 What pins can be used for PWM control except 33 in samples
ashtuchkin さんに教えて頂きました。
レジスタを直接叩いているようです。busybox devmemなんて便利なコマンドあったんですね。
Tegra X1 Technical Reference Manual 参照とのこと。
# 先に
sudo su
# (All commands as root, use sudo if needed)
# Enable Pin 32 / PWM0
busybox devmem 0x700031fc 32 0x45
busybox devmem 0x6000d504 32 0x2
# Enable Pin 33 / PWM2
busybox devmem 0x70003248 32 0x46
busybox devmem 0x6000d100 32 0x00
# Then enable & control the pwm, e.g.
cd /sys/devices/7000a000.pwm/pwm/pwmchip0
echo 0 > export # Control PWM0 on Pin 32
cd pwm0
echo 20000000 > period
echo 1500000 > duty_cycle
echo 1 > enable
# 解除
echo 0 > unexport
最初のレジスタ設定を毎起動時に行う感じかと思います。
試してないですが、きっとnVidia のJetson.GPIO にあるGPIO.PWMも使えるようになるのでは?
https://github.com/NVIDIA/jetson-gpio
pin32は上記コマンドで使用でき、pin33はbusyと表示されました。
とりあえず 1ch使用 ですが、1個あるだけでサーボやモータ、各種コントロールなど有用に使えますから便利ですね♪ もっと使いたい場合はI2CタイプのPWMコントローラPCA9685が便利だと思います。
ashtuchkin さん、ありがとうございます!
参考
Jetson/PWM – eLinux.org 解除の方法など
https://elinux.org/Jetson/PWM
第9章 Linuxカーネル仕様 period、duty_cycle、polarityなどオプション説明
https://manual.atmark-techno.com/armadillo-4×0/armadillo-400_series_software_manual_ja-2.0.0/ch09.html
「Jetson Nano でハードウェアPWMを使う」への1件の返信