引脚规范

控制信号通过树莓派、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.