LoginSignup
6

More than 3 years have passed since last update.

Jetson Nano の 2 つのハードウェア PWM を使用してみた。

Last updated at Posted at 2020-01-05

Jetson Nano の 2 つのハードウェア PWM を使用できたのでメモに残しておきます。
PCA9685 などの I2C 接続 PWM Servo Driver が不要になります。

※ NVIDIA Developer の元の記事はこちら
※ 参考にした記事はこちら

環境

  • Jetson Nano
    • JetPack 4.3(r32.3.1)イメージファイル (nv-jetson-nano-sd-card-image-r32.3.1.zip)
    • Geekservo (灰色) x 2個

手順

最初に root になっておきます。(コマンドプロンプトが $ から # に変わります。)

$ sudo su
#

PWM の状態を確認します。

# cat /sys/kernel/debug/pwm
platform/70110000.pwm, 1 PWM device
 pwm-0   (pwm-regulator       ): requested enabled period: 2500 ns duty: 0 ns polarity: normal

platform/7000a000.pwm, 4 PWM devices
 pwm-0   ((null)              ): period: 20000000 ns duty: 2000000 ns polarity: normal
 pwm-1   (pwm-regulator       ): requested period: 8000 ns duty: 1440 ns polarity: normal
 pwm-2   ((null)              ): period: 20000000 ns duty: 5000000 ns polarity: normal
 pwm-3   (pwm-fan             ): requested enabled period: 45334 ns duty: 0 ns polarity: normal

レジスタに PWM の設定をします。
Pin 32 に PWM0 を割り当てます。

# busybox devmem 0x700031fc 32 0x45
# busybox devmem 0x6000d504 32 0x2

Pin 33 に PWM2 を割り当てます。

# busybox devmem 0x70003248 32 0x46
# busybox devmem 0x6000d100 32 0x00

ディレクトリを移動します。

# cd /sys/devices/7000a000.pwm/pwm/pwmchip0

Pin32 の PWM0 を操作します。(値の単位はns)

# echo 0 > export
# echo 20000000 > pwm0/period
# echo 2500000 > pwm0/duty_cycle
# echo 1 > pwm0/enable

Pin33 の PWM2 を操作します。(値の単位はns)

# echo 2 > export
# echo 20000000 > pwm2/period
# echo 1500000 > pwm2/duty_cycle
# echo 1 > pwm2/enable

PWM の状態を確認します。

# cat /sys/kernel/debug/pwm
platform/70110000.pwm, 1 PWM device
 pwm-0   (pwm-regulator       ): requested enabled period: 2500 ns duty: 0 ns polarity: normal

platform/7000a000.pwm, 4 PWM devices
 pwm-0   (sysfs               ): requested enabled period: 20000000 ns duty: 2500000 ns polarity: normal
 pwm-1   (pwm-regulator       ): requested period: 8000 ns duty: 3920 ns polarity: normal
 pwm-2   (sysfs               ): requested enabled period: 20000000 ns duty: 1500000 ns polarity: normal
 pwm-3   (pwm-fan             ): requested enabled period: 45334 ns duty: 0 ns polarity: normal

一度有効 (enabled) の状態にすれば duty_cycle の値を変更するだけでサーボモーターを動かすことができます。
例として Pin33 の PWM2 を連続操作します。

# echo 1500000 > pwm2/duty_cycle; sleep 1; echo 2500000 > pwm2/duty_cycle

最後に PWM を無効にします。
Pin32 の PWM0 を解除します。

# echo 0 > unexport

Pin33 の PWM2 を解除します。

# echo 2 > unexport

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6