PCA9685使用:I2C转16路PWM

原文链接: https://blog.csdn.net/asmallwhite/article/details/83048091

PCA9685:I2C转16路PWM,助力你的系统

1 基本介绍

1.1 该IC主要参数特征如下:

  • I2C接口,支持高达16路PWM输出,每路12位分辨率(4096级)
  • 内置25MHz晶振,可不连接外部晶振,也可以连接外部晶振,最大50MHz
  • 支持2.3V-5.5V电压,最大耐压值5.5V,逻辑电平3.3V
  • 具有上电复位,以及软件复位等功能

    :本教程侧重PCA9685的PWM输出,但PCA9685亦可用于WS2812等LED颜色控制等。

1.2 控制精度

假设舵机为50HZ的控制频率,脉宽为0.5ms~2.5ms,12位分辨率(4096级),相关精度计算如下:

  • PWM周期:

  • 时间分辨率:

  • 最大脉宽时间:

  • 最大脉宽时间可分成的份数:

  • 0-180度的舵机,角度分辨率:

  • 2 硬件参数

    2.1 封装及引脚排列

    PCA9685有两种封装:TSSOP28, HVQFN28,其相应的引脚排列如下图所示:

    引脚功能描述如下图所示:

    2.2 器件地址

    PCA9685的器件地址是由引脚A0,A1,A2,A3,A4,A5共同决定,并且该引脚不可悬空,由于有6个引脚共同决定器件地址,因此,可以有64个器件地址,由于该IC上电便保留LED All Call address (E0h,1110 000)以及Software Reset address(06h,0000 0110),实际仅有62个可用器件地址,因此,理论上,1个I2C接口可控制16*62=992路PWM,其引脚控制器件地址的示意图如下图所示:

    默认情况下,若将A0-A5全部接地,则其器件地址为:0x40。

    2.3 寄存器及其地址

    默认情况下,上电复位后,寄存器地址的默认值均为0,寄存器地址及其用途见下图所示:


    图中节选的部分寄存器地址中,主要关心以下寄存器:

  • 模式设置寄存器:MODE1,MODE2。

  • 脉宽(占空比)设置寄存器:LED0_ON_L,LED0_ON_H,LED0_OFF_L,LED0_OFF_H……LED15……每一路PWM通道占用4个寄存器。
  • 周期(频率)设置寄存器:PRE_SCALE。
    接下来介绍以上寄存器的使用及其注意事项。

  • 2.4 模式设置寄存器

    2.4.1 MODE1寄存器

    首先介绍MODE1寄存器,如下图:

    在使用该寄存器的时候要注意:

  • 如果未停止所有PWM输出就将其进入到睡眠模式,那么,所有输出通道在下一轮都将输出高电平。

  • 睡眠后重新启动PWM的操作为:

  • 注意,在设置PWM频率(写PRESCALE寄存器)的时候,要先设置为Sleep模式,请参考后面源码部分。

  • 2.4.2 MODE2寄存器

    该寄存器的各位功能如下图所示:

    2.5 PWM通道寄存器及其占空比设置

    PWM通道寄存器如下图:

    由图可知,对于每一个通道,有4个寄存器,每个寄存器图解如下图所示:

    在设置PWM占空比的时候,首先,配置舵机的示例如下图所示(ON < OFF的情况):

    当特殊情况下,PWM周期大于定时器一次计数时,如下图所示(ON>OFF的情况):

    2.6 PWM周期(频率)寄存器及其周期(频率)设置

    接下来介绍配置PWM频率的寄存器:
    一般情况下,在用内置晶振,为25MHZ,通过配置PRE_SCALE寄存器进行配置,配置的PRE_SCALE寄存器的值与PWM频率的关系如下图所示:

    如果在舵机控制中,采用内置晶振,取osc_clock=25000000,update_rate=50(舵机控制频率50Hz)

    2.7 推荐硬件设计

    首先,OE引脚须接低电平以确保IC使能,如果连接LED灯,则推荐以下几种连接方式,如下图所示:

    你可能感兴趣的:(教程)