Jetson NanoでPWM信号を出力する方法

  • URLをコピーしました!

Jetson Nanoには2つのハードウェアPWMを出力できるピンが搭載されています。今回はこのチャンネルを使ってGPIOからPWM信号を出力する方法を解説します。

Jetson NanoでデジタルのON/OFF信号を出力するための方法も以下の記事で解説していますので、あわせてご覧ください。

また、以下のページでJetsonの活用方法について解説していますので、あわせてご覧ください。

\ 機械学習を学びたい人には自宅で学べるUdemyがおすすめ! /

講座単位で購入できます!

目次

環境

ハードウェア:NVIDIA Jetson Nano 4GB 
JETPACK SDK:4.6.2

今回、JETPACKはJetson Nanoの最終サポートバージョンである4.6.2を使用しました。
インストール方法は以下の記事で解説していますので、あわせてご覧ください。

Jetson Nano本体は4GB版を使用しました。

Jetson IO ToolでPWM出力ピンの設定

まずはJetson IO Toolを使ってPWM出力ピンの設定を行います。GPIO32、GPIO33番ピンがPWM用の出力ピンとなっています。
以下のコマンドを実行します。

sudo /opt/nvidia/jetson-io/jetson-io.py

Jetson IO Toolを起動すると以下のような画面が表示されますんので、「Configure jetson 40pin Header」を選択します。

以下の画面が表示されたら「Configure for compatible hardware」を選択します。

「PWM0」と「PMW2」の項目のところにカーソルを移動してEnterキーを押すと「*」が付きますので、以下のように両方適用した状態にしてください。

「Save pin changes」を選択します。

「Save and exit without rebooting」を選択します。

以下の画面が表示されたら変更完了です。何かキーを押してJetson IO Toolを終了します。

Jetson IO Toolが終了したらJetson Nanoを再起動してください。

Jetson IO Tool起動時のエラー

Jetson IO Toolが起動直後すぐに終了してしまう場合は以下のコマンドを実行してください。

sudo mkdir /boot/dtb
sudo cp -v /boot/tegra210-p3448-0000-p3449-0000-[ab]0[02].dtb /boot/dtb/

ハードウェアPWMの確認

ハードウェアPWMが使えるようになったかを確認します。以下のコマンドを実行してください。

sudo cat /sys/kernel/debug/pwm

pwm-0とpwm-2が「null」になっていれば使用できる状態です。

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: 0 ns duty: 0 ns polarity: normal
 pwm-1   (pwm-regulator       ): requested enabled period: 8000 ns duty: 1440 ns polarity: normal
 pwm-2   ((null)              ): period: 0 ns duty: 0 ns polarity: normal
 pwm-3   (pwm-fan             ): requested enabled period: 45334 ns duty: 0 ns polarity: normal

ハードウェアの接続

今回は特に制御対象等は接続せず、Jetson NanoのGPIOの端子を直接計測します。

GPIO32、GPIO33番ピンとGNDをオシロスコープのプローブに接続しました。この状態でPWM信号を出力して波形を確認します。

今回使用したオシロスコープはOWON製のものです。アマゾン等でも購入することができます。

ハードウェアPWMの実装方法

Pythonで作成するプログラムから、GPIOライブラリの以下のメソッドを使用してPWM信号を出力します。

PWM周波数

GPIO.PWMメソッドでPWM周波数を指定します。単位はHzです。

p = GPIO.PWM(output_pin, FREQUENCY) # set (Hz) frequency

デューティ比

PWMのデューティ比をstartメソッドでしていします。単位は%です。

p.start(90) #set (%) duty-cycle

作成したソースコード

今回作成したソースコードは以下の通りです。
デューティ比を32番ピンは80%、33番ピンは50%と設定してPWMを出力します。

import Jetson.GPIO as GPIO
import time

#PWMピンを指定
output_pin1 = 32
output_pin2 = 33

#デューティを指定
duty1 = 80 #デューティー比を%で指定
duty2 = 50 #デューティー比を%で指定

#PWM周波数を設定
freq = 1000 #PWM周波数をHzで指定

#GPIOのpin指定方法を設定
GPIO.setmode(GPIO.BOARD)

#PWM1
GPIO.setup(output_pin1, GPIO.OUT, initial=GPIO.HIGH)
pwm1 = GPIO.PWM(output_pin1, freq) #周波数を設定

#PWM2
GPIO.setup(output_pin2, GPIO.OUT, initial=GPIO.HIGH)
pwm2 = GPIO.PWM(output_pin2, freq) #周波数を設定

#PWM出力
pwm1.start(duty1) #Dutyを設定
pwm2.start(duty2) #Dutyを設定

try:
	while True:
		pass
finally:
	#CTRL+Cで停止
	#PWM停止
	pwm1.stop()
	pwm2.stop()

	#GPIO初期化
	GPIO.cleanup()

実行結果

先ほど作成したソースコードを実行します。

Python3 jetson-nano-pwm-test.py

Pythonのプログラムが実行されるとオシロにPWMの波形が表示されました。

1ch目がGPIO32番ピンで80%、2ch目がGPIO33番ピンで50%の波形が正しく表示されています。

まとめ

今回はJetson NanoのPWM信号を出力する方法について解説しました。PWM信号が出力できるとJetsonでモーター制御などもできるようになりますので、ぜひ活用してみてください。

それでは、また次の記事でお会いしましょう。

\ 機械学習を学びたい人には自宅で学べるUdemyがおすすめ! /

講座単位で購入できます!

参考

よかったらシェアしてね!
  • URLをコピーしました!
目次