pwm

Jetson Nano でハードウェアPWMを使う

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

https://devtalk.nvidia.com/default/topic/1057330/jetson-nano/what-pins-can-be-used-for-pwm-control-except-33-in-samples/post/5386543/#5386543

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件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です