jetbot 小车使用的电机驱动模块上用了 pca9685 扩展 i/o ,一边与主控通过 i2c 总线通信,另一边连接 tb6612 马达驱动芯片。
本篇 sugar 就来有根有据地说一说 pca9685 的使用,以及 rt-thread pca9685 驱动组件。
硬件特点
1、每路 12 位分辨率(4096 级)的 pwm;
2、最多 16 路 pwm 输出,所有路 pwm 频率统一,每路占空比可以独立控制;
3、i2c 通信方式;
4、支持 2.3v~5.5v 电压,逻辑电平 3.3v;
5、复位方式:上电复位、软件复位。
用于舵机控制的 pwm
一、明确控制信号
1、用于舵机控制的 pwm 频率是 50hz(周期 20000us)
2、对于 12 位分辨率而言,时间控制精度(即:时间分辨率)就是
3、舵机的控制脉宽是0.5ms ~ 2.5ms,时间伸缩范围是 2000us
4、伸缩范围在 4.88us 时间分辨率下可以分成近 410 份。
5、时间伸缩范围 2000us 对应舵机转动范围 0~180 度,因此舵机的角度分辨率约为 0.439 度
二、在 pca9685 手册里查芯片用法
1、芯片长什么样
2、引脚功能
3、i2c 地址
地址引脚由 a0 ~ a5 组成,因此最多可以有 64 个地址。由于芯片本身保留 all call 7 位地址 0xe0 以及 software reset 7位地址 0x06,所以有 62 个地址可用。
在默认情况下(即:a0 ~ a5 全部接地),其 7 位地址为 0x40。
4、目标寄存器
(1) mode1 寄存器,地址0x00,可读、可写。
(2) mode2 寄存器,地址0x01,可读、可写。
(3) 每路 pwm 有 4 个 8 位控制寄存器,地址见 datasheet,可读、可写。
4 个 8 位寄存器在手册上说成:2 路 12 位寄存器。2 个 12 位寄存器分别控制该路输出的高、低电平时间,最大数值是 4095。
根据下面的 example 1 不难了解到这 2 个 12 位寄存器的意思是:每个周期从第几个 count 开始置 1,则 ledx_on 寄存器写几(十六进制形式);每个周期从第几个 count 开始清 0,则 ledx_off 寄存器写几。
下图的 4 个 example 表示了一般情况下 2 个 12 位寄存器设置情况与输出的关系。
下图的 4 个 example 表示了 on 寄存器值 《 off 寄存器值情况下的输出。
下图的 4 个 example 表示了 on 寄存器值 》 off 寄存器值情况下的输出。
(4) pwm 频率设置寄存器 pre_scale,地址0xfe,可读、可写。
芯片内置 25mhz 的晶振,update_rate 是以 hz 为单位的频率值。因此,对于 50hz 的 pwm 来讲此寄存器应设置为 121。
rt-thread 的 pca9685 驱动组件
硬件连接如上图,sugar 使用了最常见的 pca9658 舵机控制模块,接上逻辑分析仪看数据。
一、第 1 段
展开第一段通信内容,如下图:
上图黄色框中“向 40 号地址写两个 0 ”的意思是:向地址为 40 的设备地址为 0 的寄存器写入数据 0。
相应的,后面蓝色框就解读为:读取地址为 40 的设备地址为 0 的寄存器值,设备反回目标寄存器里的数据值为 0。
下面到代码里去找这段通信的相关内容,如下:
二、第 2 段
根据 pca9685 的 datasheet 所述,设置 pwm 输出频率的时候要先进入 sleep 模式。并且从 sleep 模式重启的流程是在 datasheet 里指定的。
在 rt-thread 的 pca9685 的组件包里,把设置频率相关的一干操作都封装到了一个函数 pca9685_set_pwm_freq() 里面。
三、第 3 段
上面已经把研究方法说透了,这里就不再把逻辑分析仪的图放上来了。通过对代码的分析,sugar 发现 rt-thread 这个 pca9685 的驱动组件包传承了 rt-thread 本身小而美的特点,按照 pca9685 的 datasheet 封装函数,这样使得对 pca9685 的了解容易很多。
以 arduino “以使用方便”为目的不同,pca9685 组件包倾向于真正让人弄懂 pca9685 的用法。在懂了之后,个人就有能力自己“以使用方便”为目的再次做一遍封装。很多玩过 arduino 的人都觉得做起来真简单,离了 arduino 的环境真不会。
arduino 面对的是小白,以方便体验为主,而 rt-thread 和其一众组件能够让人真正了解深层次的本源,搞懂这些能让人在成为高手的路上走得更轻松。当成为高手之后,再回头看 arduino 才能体会到 arduino 封装的真正智慧。
机器人将进入证券市场代替分析师
头戴设备可治疗抑郁症?与传统药物效果一样
磁波感应式防盗报警器电路图
阿里巴巴为AI人才再出新招
华为鸿蒙系统与EMUI有什么不同?
PCA9685的使用及RT-Thread PCA9685驱动组件详解
关于5G低延迟的应用场景介绍
PFC电路中旁路二极管的作用是什么
基于区块链技术的交易平台怎么样
6W焕“芯”——开关电源芯片U93133
一文告诉你好的LoRa产品应该如何挑选
常见的PCB故障分析方法
铭普光磁新型片式网络变压器在WiFi6路由器中的应用
怠速控制阀在哪个位置_怠速控制阀坏了会怎样
交流接触器的分类有哪些
如何用Cadence Fidelity高效叶轮机械气动设计与优化?
5G网络将给共享汽车迎来怎样的发展机遇
小米6什么时候上市?小米6配置价格曝光:最新谍照曝光,小米6外形一览
芯片外设接口的功能
浅谈防雷铜导线