环境设置
Jetson 系列的板子上都搭载了40pin接口用于实现对外通讯与控制,通常直接通过 Jetson.GPIO 库即可实现编程。
但是如果要在 Jetson 中使用硬件 PWM,则需要修改 Pinmux 表来多路复用。Jetpack 提供了一个名为 jetson-io 的工具,它允许创建和更新可以使用 PWM 的 dtb。
首先,在 Jetson 终端中运行以下命令:
sudo /opt/nvidia/jetson-io/jetson-io.py
从菜单中,选择 Configure Jetson 40pin Header
> Configure header pins manually
, pwm1(15) 和 pwm5(18)选择并 Back
, Save pin changes
,Save and reboot to reconfigure pins
,按下任意键后重启,即可完成设置。
Python PWM 编程
import Jetson.GPIO as GPIO
import time
PWM_PIN = 18
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(PWM_PIN, GPIO.OUT)
pwm = GPIO.PWM(PWM_PIN, 5) # 设置输出pin与频率为50Hz
pwm.start(1) # 开启PWM输出,并设置占空比为50%
while True:
time.sleep(1)
print("hello, pwm")
pwm.stop()
GPIO.cleanup()
下图是输出的波形图,
问题
描述1:在执行sudo /opt/nvidia/jetson-io/jetson-io.py
后并没有文字显示或乱码。
解决1:放终端窗口放大,小窗口可能会导致其显示出问题。
描述2:在执行sudo /opt/nvidia/jetson-io/jetson-io.py
后进入了界面,但是突然闪退,而且重启后依旧。
解决2:问题极大可能是前面的设置时候没有保存好导致了文件冲突。执行:
cd /opt/nvidia/jetson-io
sudo python config-by-pin.py -p 5
这时候会出现报错:
RuntimeError: Multiple DT overlays for 'Jetson 40pin Header' found!
Please remove duplicate(s)
/boot/tegra234-p3737-0000-p3701-0000-hdr40.dtbo
/boot/kernel_tegra234-p3701-0000-p3737-0000-hdr40-user-custom.dtbo
原因是系统中存在多个设备树叠加(DTBO)文件,它们都针对同一个硬件组件——“Jetson 40pin Header”。错误消息明确指出了存在多个DTBO文件。
所以,直接将其中user-custom
的文件删除即可。
Ref:
官方文档配置
评论区