PCA9685 16路12位pwm信号发生器

搬运自:https://blog.csdn.net/czhzasui/article/details/80332474
1.16路12位PWM信号发生器,可用于控制舵机、led、电机等设备,i2c通信,节省主机资源。
PCA9685 16路12位pwm信号发生器_第1张图片
一、概述和硬件
1、概述
数据手册从网上找一下很容易找到(比如http://www2.ic37.com/pdf/pdf_download.asp?id=11155998_602380),

很常见的模块板子如上图所示,这个板子也比较便宜,十几块钱一个。i2c通信,只需要几根i2c线就可以控制16路pwm,周期和占空比都可控。可以多个模块级联。可控制16路通道的四种工作模式:关、开、pwm、可变pwm。精度是12位:

工作频率 时间分辨率 通常舵机500~2500us可分成份数 通常舵机500~2500us,旋转角180°的角度分辨率 对于电调,500us对应100%的占空比分辨率
在这里插入图片描述
驱动方式可以选择开漏输出或推挽输出。

2、硬件
1、电压
数字电路电压范围可接受3.3和5v电平。
此外还有一个v+引脚,这个引脚是给舵机供电用的,可以接稍微高一点的电压。

2、i2c地址
有6个地址控制脚,通过这些引脚可以控制设备的i2c地址。
7位的I2C地址为:0x40 + A5:A0,A5到A0如果不做任何处理的话是0,想要把哪一位置1就把那个引脚焊到一起。
另外用i2cdetect检测出还有一个0x70地址一直存在,这是一个通用地址,可以给所有从机下达指令。

3、使能脚
模块有一个OE反使能脚,这个引脚低电平使能,不接的话模块内部默认已经接地使能了,所以正常使用可以不接。

二、寄存器功能
PCA9685 16路12位pwm信号发生器_第2张图片
MODE1寄存器
PCA9685 16路12位pwm信号发生器_第3张图片
各个通道的ON和OFF寄存器
总共16个通道,每个通道都有 LEDX_ON_L、LEDX_ON_H、LEDX_OFF_L、LEDX_OFF_H 四个寄存器。
系统中有一个12位的计数ACK,ACK根据PRE_SCALE寄存器设置的周期进行增加,没增加一次就会和上述四个寄存器对比:
当发现 ACK == LEDX_ON_H[3:0]:LEDX_ON_L 时,X通道输出高电平;
当发现 ACK == LEDX_OFF_H[3:0]:LEDX_OFF_L 时,X通道输出低电平。

PRE_SCALE寄存器
这个寄存器是用来设置周期的,具体原理可以不用管,只要记住这个公式:
在这里插入图片描述
其中osc_clock是时钟,根据上面的寄存器设置选择是内部25MHz时钟还是外部时钟;
update_rate是频率,比如周期是20ms,那么频率就是50。
注意:实际应用中发现有误差,需要加入校准,要把udpate_rate乘以0.915。
包括从网上下载的arduino驱动中也加入了此校准。

你可能感兴趣的:(单片机)