0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PCA9685的使用及RT-Thread PCA9685驱动组件详解

RTThread物联网操作系统 来源:CSDN博客 作者:CSDN博客 2020-09-26 09:49 次阅读

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 封装的真正智慧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PCA9685
    +关注

    关注

    5

    文章

    7

    浏览量

    16364
  • RT-Thread
    +关注

    关注

    31

    文章

    1285

    浏览量

    40078
收藏 人收藏

    评论

    相关推荐

    C51单片机如何使用PCA9685舵机驱动

    最近购买了一个PCA9685的舵机驱动板,苦于没有PCA9685的相关资料,不知哪位有相关资料可以share一下?多谢多谢。
    发表于 08-13 22:29

    PCA9685智能LED控制器内部框图及功能介绍

    PCA9685 16-Channel12-BitPWMLEDDimmer 特点16-LED驱动–On,Off,独立的PWM控制4096步(12-bit)线性的可编程亮度可编程输出延迟控制1MHzI2C总线。
    发表于 05-06 12:26

    如何用PCA9685去完成无刷电机的驱动方法?

    怎样去编写i2c驱动的函数?如何用PCA9685去完成无刷电机的驱动方法?
    发表于 07-21 07:02

    STM32F103控制PCA9685模块驱动多个舵机 精选资料分享

    之前在做假手的控制时,驱动用的是舵机。因为要实现假手的多自由度动作,所以需要用到8个舵机。而我用的主控板只有两路pwm输出,不能满足要求,所以在查阅了相关资料后,找到了PCA9685模块。因为网上
    发表于 07-21 06:36

    pca9685芯片手册 stm32 hal iic

    pca9685芯片手册 stm32 hal iic#ifndefpca9685#definepca9685#include"main.h"typedefstruct
    发表于 08-10 07:24

    如何使用编程PCA9685

    这篇教程与网上的大部分教程都不相同,着重讲述如何使用编程PCA9685,而不是着重讲述原理,最后你还是一头雾水。这是一篇教你如何如何输出固定舵机角度,如何移植程序,从PCA9685的原理到如何移植
    发表于 09-02 08:08

    怎样使用PCA9685模块去控制舵机呢

    PCA9685的寄存器可分为哪几种类型?怎样使用PCA9685模块去控制舵机呢?
    发表于 10-25 08:46

    请问PCA9685如何通过IIC协议控制多个舵机?

    请问PCA9685如何通过IIC协议控制多个舵机?
    发表于 10-27 06:11

    怎么使用PCA9685扩展PWM端口呢

    一直在用NXP的单片机做各种开发, 最近遇到了这么个问题,就是单片机的PWM端口不够用,公司硬件工程师推荐使用NXP的PCA9685芯片扩展,一个芯片可以扩展出16路PWM,我们用了两个,成功扩展
    发表于 11-23 08:14

    PCA9685扩展I/O的应用是什么?

    PCA9685怎么使用?PCA9685扩展I/O的应用是什么?
    发表于 01-17 07:38

    STM32使用PCA9685控制舵机的过程分享

    首先声明我写的代码主要参考了这位仁兄的,非常感谢他把自己的源代码奉献出来。他的代码是基于标准库函数的,代码过程简单明了,非常适合移植。STM32 使用 PCA9685 控制舵机,控制机械臂,控制
    发表于 02-21 06:19

    PCA9685芯片的模拟的IIC需要加上拉电阻吗?

    pca9685用的是IIC通讯,如果用的是模拟的IIC,需要加上拉电阻吗?
    发表于 10-18 06:59

    PCA9685设计的16路12位LED驱动控制方案

    本文介绍了PCA9685主要特性和优势,方框图以及典型应用电路图和LCD背光应用电路图.NXP公司的PCA9685是16路12位PWM不是Fm+I2C总
    发表于 09-11 15:05 8965次阅读
    <b class='flag-5'>PCA9685</b>设计的16路12位LED<b class='flag-5'>驱动</b>控制方案

    PCA9685使用说明【寄存器地址】

    PCA9685
    发表于 04-05 11:38 0次下载

    PCA9685与STC12C5A60S2单片机突然不能工作了!

    1.症状:PCA9685工作的好好的突然不能工作了?芯片型号:单片机STC12C5A60S参数:sbit PCA9685_sda = P0^4; //数据输入/输出端
    发表于 12-23 19:14 8次下载
    <b class='flag-5'>PCA9685</b>与STC12C5A60S2单片机突然不能工作了!