引脚规范
控制信号通过树莓派、Jetson Nano和连接的外设(如PCA9685舵机控制器)上的引脚发送和接收。从版本5.x开始,Donkeycar使用“引脚规范”来指定引脚,包括特定于底层硬件或库实现的各种配置。这使得底层逻辑(例如电机控制器如何接收油门值并将其输出到电机)更独立于用于生成信号的特定硬件或库。
引脚类型
PWM引脚生成方波,有时称为PWM脉冲。用于控制舵机、电子速度控制器和LED。
TTL输出引脚可以生成高电平(1)或低电平(0)。
TTL输入引脚将值读取为高电平(1)或低电平(0)。
引脚提供程序
Donkeycar支持多种技术来指定引脚。引脚被指定为一个字符串,用于标识提供程序、引脚编号和任何特定于技术的配置。
PCA9685
PCA9685舵机控制器支持16个PWM和TTL输出引脚。PCA9685只能输出信号,不支持输入引脚。PCA9685引脚的规范包括:
- PCA9685连接的I2C总线
- I2C总线上PCA9685的地址(十六进制)
- 通道号0-15
例如,"PCA9685.1:40.13"指定了位于I2C总线1上地址为0x40的PCA9685的通道13。
例如,"PCA9685.0:60.1"指定了位于I2C总线0上地址为0x60的PCA9685的通道1。
RPI_GPIO
Donkeycar在Raspberry Pi上的默认安装中安装了RPi.GPIO库。Jetson Nano上默认安装了兼容库Jetson.GPIO。这两个库的工作方式类似,可以支持Raspberry Pi或Jetson Nano上40针GPIO总线上的PWM、输入和输出引脚。引脚规范包括:
- 引脚寻址方案
- "BOARD"表示引脚编号基于Raspberry Pi/Jetson Nano电路板上打印的引脚编号,从0到39。
- "BCM"表示引脚编号基于Raspberry Pi中实现的Broadcom GPIO编号方案。Jetson库中模拟了这个方案,因此可以在Jetson上使用"BCM"引脚编号。
- 引脚编号,取决于引脚寻址方案。
在此处查看Raspberry Pi 40针引脚头的详细信息:https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header
Jetson Nano 40针引脚头使用相同的板编号方案,尽管引脚头在物理上在板上翻转了,因此请注意板上打印的编号。Jetson Nano仅支持2个PWM引脚,并且必须启用这些引脚。请参阅从Jetson Nano生成PWM
例如,"RPI_GPIO.BOARD.33"指定使用Rpi.GPIO库的板上引脚33。
例如,"RPI_GPIO.BCM.13"指定使用Rpi.GPIO库的Broadcom GPIO-13。如果查看上面链接的引脚头图表,您会注意到这与"RPI_GPIO.BOARD.33"是同一个物理引脚,它是引脚33的同义词。
在使用RPI_GPIO引脚提供程序时,您可以选择使用BOARD或BCM引脚方案,但所有引脚必须使用相同的引脚方案。不能混合使用引脚方案。
PIGPIO
树莓派用户可以选择安装PiGPIO库和守护进程来管理40针GPIO引脚头上的引脚。请注意,该库在Jetson Nano上不起作用。该库支持PWM、输入和输出引脚。
安装和启动PiGPIO
- 安装系统守护进程
sudo apt-get update
sudo apt-get install pigpio
- 安装Python支持(在激活donkey环境的情况下)
pip install pigpio
- 启动守护进程
sudo systemctl start pigpiod
- 在启动时启用守护进程
sudo systemctl enable pigpiod
PIGPIO引脚规范包括: - "BCM" PiGPIO仅使用Broadcom(BCM)引脚编号方案,因此它已经包含在引脚规范中。 - BCM引脚编号
例如,"PIGPIO.BCM.13"指定了Broadcom GPIO-13。如上所述并在链接的引脚头图表中显示,这个引脚暴露在板上的引脚33上。
从Jetson Nano生成PWM
Jetson Nano和Raspberry Pi 4都支持两个硬件PWM引脚。在Jetson Nano上,这些引脚必须进行配置。
配置Jetson扩展头以生成PWM
-
SSH进入donkeycar,并运行以下命令
sudo /opt/nvidia/jetson-io/jetson-io.py
。它应该显示Jetson扩展头工具,允许您更改GPIO引脚功能(见下文)。 -
如果Jetson扩展头配置中没有显示任何PWM引脚,则需要启用它们。
---
=================== Jetson Expansion Header Tool ===================
| |
| |
| 3.3V ( 1) ( 2) 5V |
| i2c2 ( 3) ( 4) 5V |
| i2c2 ( 5) ( 6) GND |
| unused ( 7) ( 8) uartb |
| GND ( 9) (10) uartb |
| unused (11) (12) unused |
| unused (13) (14) GND |
| unused (15) (16) unused |
| 3.3V (17) (18) unused |
| unused (19) (20) GND |
| unused (21) (22) unused |
| unused (23) (24) unused |
| GND (25) (26) unused |
| i2c1 (27) (28) i2c1 |
| unused (29) (30) GND |
| unused (31) (32) unused |
| unused (33) (34) GND |
| unused (35) (36) unused |
| unused (37) (38) unused |
| GND (39) (40) unused |
| |
====================================================================
---
Choose Configure the 40 pin expansion header
to activate pwm0 and pwm2:
---
=================== Jetson Expansion Header Tool ===================
| |
| |
| 3.3V ( 1) ( 2) 5V |
| i2c2 ( 3) ( 4) 5V |
| i2c2 ( 5) ( 6) GND |
| unused ( 7) ( 8) uartb |
| GND ( 9) (10) uartb |
| unused (11) (12) unused |
| unused (13) (14) GND |
| unused (15) (16) unused |
| 3.3V (17) (18) unused |
| unused (19) (20) GND |
| unused (21) (22) unused |
| unused (23) (24) unused |
| GND (25) (26) unused |
| i2c1 (27) (28) i2c1 |
| unused (29) (30) GND |
| unused (31) (32) pwm0 |
| pwm2 (33) (34) GND |
| unused (35) (36) unused |
| unused (37) (38) unused |
| GND (39) (40) unused |
| |
====================================================================
---
After enabling, pwm0 is board pin-32 and pwm2 is board pin-33.