LoginSignup
7
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
7
6
0

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
  3. You can use dark theme
What you can do with signing up
7
6