只要在淘宝上输入 “DC-Stepper-Motor” 关键字,就能找到非常多的供应商,价位在 30~50 公民币之间,不过出货都因此上图左边的散件为主,须要将四个关键位置自己加以焊接,其他用不上的部分可以不用处理。
这个掌握板是由一个 PCA9685 的 PWM 掌握芯片与两个 TB6612 电机驱动芯片所组成,与 Jetson 设备、TT 电机之间形成如下图的接线关系。由 PCA9685 吸收来自 Jetson 设备 I2C 总线的指令,然后驱动 TB6612 芯片按照 PWM 掌握旗子暗记对两个 TT 电机,透过改变电流大小去调度电机转速与方向,来实行 Jetbot 小车的移动。
但是这里有个在 “Jetbot 实战系列 06:I2C 总线与 PiOLED” 所遗留的问题须要先办理,由于 PiOLED 显示屏也要接上一组 3V3/GND 供电与 SDA/SCL 接脚,已经将 Jetson 的 1~6 引脚全部占用,那么这个 DC-Stepper-Motor 掌握板的 SDA/SCL 该如何与 Jetson 的 I2C 引脚对接呢?

这个显示屏的选项有三种,Jetbot 原厂利用下图最左边的 Adafruit 原厂显示屏,然后按照 https://jetbot.org/master/hardware_setup.htm的第 10 步骤,在上面焊接 6 根 90 度波折引脚,再透过杜邦线与 DC-Stepper-Motor 掌握板上的 3V3/GND 与 SDA/SCL 的四个脚位对接,如此一来只须要一组 I2C 总线就能完成在 PiOLED 屏上显示与掌握 DC-Stepper-Motor 用场,在总线上的资源调用是最节省的。
但这种 Adafruit 显示屏在海内的售价大约在 120~150 公民币,比中间的国产显示器的 30~50 公民币足足赶过 4~5 倍,而且还须要额外的 6 根接脚的焊接作业,实在并不是个优选的方案。
这里推举一个既省钱又省力的方案:
1.利用上图中间(2 号)的国产 PiOLED 显示屏,线路上不须要做任何调度,按照标准办法插上 Jetson 设备的 1~6 引脚位置,如下图左;
2.如上图,利用 Jetson 设备上另一组 I2C 总线(27 脚位的 SDA 与 28 脚位的 SCL)、3V3(17 脚位)与 GND(20 脚位),与 DC-Stepper-Motor 掌握板上的四根引脚对接,也能实行相同的掌握任务;
3.调度掌握代码里面的总线编号,在项目中 ~/jetbot/jetbot/robot.py 便是用来掌握这个 DC-Stepper-Motor 的 PWM 旗子暗记,将第 14 行代码中的“default_value=1” 改成 “default_value=0” 就可以,如下:
i2c_bus = traitlets.Integer(default_value=0).tag(config=True)
如果是利用 Docker 容器的办法,修正代码之后须要重新创建 base 与 jupyter 两个容器,请实行以下代码,就能让修正的配置生效:
cd ~/jetbot/docker && ./disable.shsource configure.sh# 只须要重修base与jupyter两个容器cd base && ./build.sh && cd ..cd jupyter && ./build.sh && cd .../enable.sh $HOME/jetbot
这样就能用原来 I2C_2 实行 PiOLED 显示内容,另一组 I2C_1 处理机电掌握的部分,总的来说会是最大略轻松的处理办法。
前面提到 DC-Stepper-Motor 掌握版是由 PCA9685 与 TB6612 两种芯片所组成,前者在 I2C 总线运用领域是非常主要的一个 PWM 掌握器,后者则是根据 PWM 的掌握旗子暗记为 TT 电机供应对应电流掌握的芯片,透过二者的协作让 Jetbot 用最简便的元器件,搭建完全功能的车轮掌握体系。
Jetbot 已经针对这两个芯片供应高等封装的接口,极大程度减少我们的代码繁芜度,但是为了让读者能在这过程中,对付 I2C 总线与这些掌握芯片的协作有进一步理解,能更广泛地在 Jetson 设备上开拓出更丰富的机电掌握运用,因此占用一些篇幅来讲解一下这两个掌握器的基本事情与 Jetbot 里面的底层代码内容。
PWM掌握旗子暗记与PCA9685掌握器
这里最主要的关键技能是“脉冲宽度调制(PWM,Pulse width modulation)”掌握旗子暗记,卖力调节对机电设备的电源供给量,但并不对设备供应电源,就像水龙头的功能是卖力调节水量而并不具备供水能力是一样的,水龙头是大家所熟习的“人机界面”,我们只要大略地调节水龙头来掌握水流量就像,至于埋藏在墙里的供水管道有多繁芜,常日不太引人们把稳,除非漏水或壅塞!
目前大部分嵌入式设备都供应这个功能,包括 Jetson 系列开拓套件里也都供应一组 PWM 引脚(32 与 33),不过这必须先经由前面讲解过的 jetson-io.py 工具进行配置,并且重启之后才能利用。但除非您要开拓的运用只须要非常纯挚地掌握一个设备,否则一组 PWM 顶多能做个 “LED 闪灯”这类最根本的入门小实验而已。
PCA9685 芯片是能供应 16 个 PWM 通道的掌握芯片,用 1 组 I2C 总线就能掌握高达 16 组机电设备,在机器人、机器手臂或无人机等运用领域是非常得当的,毕竟 I2C 总线在设备上的数量是相对稀缺的。在 https://i2cdevices.org/devices/pca9685 设备地址列表中,可以看到 PCA9685 地址编号横跨 0x40~0x7F 的半壁江山,就能显示这个芯片在 I2C 运用领域的高利用性。
这个旗子暗记掌握器须要独立的 2.5V~5.5V 电源来支持其运作,在掌握板上以 “VCC” 作为标识,由于所须要的电流非常小,可以直策应用主控设备(如 Jetson Nano 2GB)上扩充引脚的得当电源与 GND,也不会影响主控设备的稳定性,其余再加上一组来自主控设备上的 I2C 总线的 SDA/SCL 输入就可以开始事情。
掌握板上有另一个 “V+” 标识的电源输入,是真正要对舵机(下图左)、电机马达(下图右)等动力设备供应电力的供电源。
根据设备不同转速、扭力、转距等参数有不同的事情电流,总的来说一起舵机的最基本事情电流在 100 毫安以上、一个电机马达的待机状态最少就须要 250 毫安,实际所须要预留的供电量每每是这个最低量的 2~3 倍以上,这样的用电级别就不是 Jetson Nano 2GB 这类嵌入设备所能供应的,必须依赖一个独立供电源才足以支撑。
网上大部分提到的 PCA9685 掌握板,指的是下图中间这种 16 路 PWM 舵机驱动板,左边的接脚与 Jetson Nano 2GB 的 I2C 与电源的引脚相连,下面有编号 0~15 统共 16 组引脚可以接上右边的各种舵机。掌握板中间可以看到 “PWM/V+/GND” 的印刷字样,上方白色电源孔接到独立供电系统,这样就能轻松地组合多机器手臂的运用。
读者可以自行采购这类舵机掌握板,去搭建组合机器手臂或者二维/三维可旋转的摄像头的项目,透过指定掌握板上的 0~15 通道(channel)编号的 PWM 值,进而掌握每个舵机的独立事情。
TB6612电机驱动器与电机供电
这是个俗称为“H 桥”的直流电机掌握器,紧张由于其核心电路形状酷似字母“H”而得名,其功能便是根据所吸收的 PWM 旗子暗记,为电机马达供应对应的电流,每个 TB6612 芯片可以掌握一对(两个)电机马达的转速与方向。
在 DC-Stepper-Motor 掌握板上(如下图中),可以看到两边各有一个 “6612FNC” 芯片,每个芯片占用 PCA9685 一个通道,各自掌握两组电源供应线路,每一组都有正(红线)负(黑线)两极的线,与最右边 TT 减速电机进行对接。
这个芯片的每个桥都为电机供应 1.2A 的高电流,每组两个电机就至少须要 2.4A 以上电流,这绝对不是 Jetson Nano 2GB 这类嵌入设备所能供应的,必须依赖独立的 5V 电源才足以知足。
在 Jetbot 项目中只须要用到 1 个通道的两个电机组就可以,5V 电源由市售的充电宝来担当,但受到这种电源的供电能力所局限,后面要进行的 Jetbot 范例全都是“慢速低电流”的运用,读者可以在过程中考试测验将电机转速调到最大,会创造很随意马虎由于供电不敷而导致整套 Jetbot 掉电。
Jetbot的掌握代码
在 ~/jetbot/jetbot 下面的 robot.py 与 motor.py 两个代码,便是为这个项目供应的两个不同阶层的调用库,在这里大略做个解释,读者可以根据这些定义进行调度,改写成适用于其他项目的代码:
robot.py:
1.定义“以小车为单位”的“提高/退却撤退/左转/右转/停滞”等 5 个动作,可以自行修正 “speed=” 参数去调度行进速率。
2.这是个高阶封装的开拓接口,紧张调用 Python 版的 Adafruit_MotorHAT 库以及下面的 motor.py 所定义的函数。
3.这里会利用到的几个参数,紧张对应上层 robot.py 的参数如下
(1)i2c_bus:必须根据实际利用的 I2C 总线去设置编号,如果利用 I2C_2 总线则 “default_value=1”,如果利用 I2C_1 总线则 “default_value=0”。
(2)motor_channel:将 “left” 设为 “1”、“right” 设为 “2”,这些设定会传给 motor.py 中,去判断该对那个接口输出对应 PWM 的电流。
motor.py:
1.定义“以电机为单位”的“提高/退却撤退/停滞”等 3 个动作。
2.调用 Python 版的 Adafruit_MotorHAT 库,定义与 DC-Stepper-Motor 掌握板直接互动的低阶接口,作为 robot.py 的根本函数库。
3.这里会利用到的几个参数,紧张对应上层 robot.py 的参数如下:
(1)driver:对应到 robot.py 的 I2C 总线编号
(2)channal:对应 robot.py 的旁边轮 “motor_channel”
(3)ina/inb:根据旁边通道去设置实际电流输出口的位置编号
以年夜将两个代码中最主要的关键提取出来大略解释,实在还是比较大略的,只要捋清楚上面参数之间的关系,就能很轻松地调度代码内容。
这两个代码是针对 TB6612 驱动的车轮运用所设计的,并不适用于舵机用场,但是只要清楚这些调用逻辑之后,实在代码内容同样是“根据 PWM 值给设备供给电流”的操作过程,最关键的事情便是先确认设备所对应的接脚编号,其他的代码便是指派事情而已,并没有什么技能难度。
强烈推举读者可以基于本文所讲解的技能内容,先试着将网上浩瀚树莓派小型项目移植到 Jetson 设备上,例如 LED 灯闪烁掌握、多维度摄像头云台等机器手臂干系运用,也可以到 https://developer.nvidia.com/embedded/community/jetson-projects 这个英伟达开拓社区优选项目中,探求得当的范例。