一、概述
PCA9685设计之初是I2C控制的16通道LED控制器(现在广泛用于舵机控制),可针对红色/绿色/蓝色/琥珀色颜色背光应用进行优化。每个LED输出都有其自己的12位分辨率(=4096步)固定频率个体PWM控制器,其占空比可将LED从0%调节至100%,以允许将LED设置为特定的亮度值,并且每个LED输出可以关闭或打开(无需PWM控件)。
特性总结:16个LED驱动通道(每个通道可以:开 / 关 / 可编程的LED亮度(4096步))
二、原理框图与封装
各个模块的分析:
模块名称 | 功能描述 |
---|---|
I²C-BUS CONTROL | 负责通过I²C接口与外部微控制器进行通信。 |
INPUT FILTER | 减少I²C通信中的噪声干扰。 |
POWER-ON RESET | 确保芯片在上电时处于已知状态。 |
A0-A5(地址引脚) | 设置PCA9685的I²C地址,允许多个PCA9685芯片在同一I²C总线上工作。 |
LED STATE SELECT REGISTER | 控制每个LED通道的开关状态,可以设置为“0”(永久关闭)或“1”(永久开启)。 |
MUX/CONTROL | 负责将PWM信号输出到LED通道,根据LED状态选择寄存器的设置决定是否将PWM信号输出。 |
PWM REGISTER X BRIGHTNESS CONTROL | 包含16个PWM寄存器,每个寄存器控制一个LED通道的亮度。 |
PRESCALE | 用于调整内部25MHz振荡器的频率,从而影响PWM频率。 |
25 MHz OSCILLATOR | 提供内部时钟源,用于生成PWM信号。 |
CLOCK SWITCH | 允许选择使用内部25MHz振荡器还是外部时钟源(EXTCLK)。 |
EXTCLK | 外部时钟输入引脚。 |
OE | 输出使能引脚,控制PCA9685的输出使能,当OE引脚为低电平时,PCA9685的输出被使能。 |
VDD和VSS | 电源引脚,为PCA9685提供工作电压,VDD为电源正极,VSS为电源负极。 |
LEDn(LED输出引脚) | 连接到LED的正极,通过MUX/CONTROL模块控制LED的开关状态。 |
三、LED控制示例
示例 1:(假设使用了 LED0 输出,并且(延迟时间)+(PWM 占空比)≤100%)
控制需求:延迟时间 = 10%;PWM 占空比 = 20%(LED 亮的时间 = 20%;LED 灭的时间 = 80%)。
控制方法:
延迟时间 = 10% * 4096 = 409.6 ~ 410 个计数 = 19Ah(410的十六进制表示)。
由于计数器从 0 开始,到 4095 结束,因此需要减去 1,所以延迟时间 = 199h 计数。
LED0_ON_H = 1h;LED0_ON_L = 99h(LED 在这个延迟计数后开始点亮,计数到 409)
注:(LED0_ON_H 存储高字节(High byte),LED0_ON_L 存储低字节(Low byte))
LED 亮的时间 = 20% * 4096 = 819.2 ~ 819 个计数。
LED 灭的时间 = 4CCh(十进制 410 + 819 - 1 = 1228)。
LED0_OFF_H = 4h;LED0_OFF_L = CCh(LED 在这个计数后开始熄灭,计数到 1228)。
示例 2:(假设使用了 LED4 输出,并且(延迟时间)+(PWM 占空比)> 100%)
控制需求:延迟时间 = 90%;PWM 占空比 = 90%(LED 亮的时间 = 90%;LED 灭的时间 = 10%)。
控制方法:
延迟时间 = 90% * 4096 = 3686.4 ~ 3686 个计数 (3686 - 1= 3685 = E65h)。
LED4_ON_H = Eh;LED4_ON_L = 65h(LED 在这个延迟计数后开始点亮,计数到 3685)。
LED 亮的时间 = 90% * 4096= 3686 个计数。
由于延迟时间和占空比的亮期间大于 4096 个计数,因此 LED4_OFF 计数将出现在下一个周期。因此,从 LED4_OFF 计数中减去 4096,以获得正确的 LED4_OFF 计数。
LED 灭的时间 = CCBh(十进制 3685 + 3686 = 7372 - 4096 = 3275)
LED4_OFF_H = Ch;LED4_OFF_L = CBh(下一个周期,LED 在这个计数后开始熄灭,计数到 3275)。
四、舵机控制



各组件模块功能分析:
编号 | 组件名称 | 描述 | 功能 | 备注 |
---|---|---|---|---|
1 | I2C Address | I2C地址选择电路 | 通过A0-A5引脚设置PCA9685的I2C地址 | 使用跳线选择 |
2 | PCA9685 (U1) | 16通道12位PWM控制器 | 提供16路PWM信号输出 | 支持I2C通信 |
3 | VDD | 电源输入 | 为PCA9685提供工作电压 | 电压范围3-5V |
4 | VSS | 地 | 电路的公共地 | - |
5 | SDA/SCL | I2C数据和时钟线 | 用于PCA9685的I2C通信 | - |
6 | OE | 输出使能 | 控制PCA9685的输出使能 | 低电平有效 |
7 | EXTCLK | 外部时钟输入 | 提供外部时钟信号 | 当不使用时接地 |
8 | A0-A5 | I2C地址选择引脚 | 用于设置PCA9685的I2C地址 | 通过跳线选择 |
9 | PWM0-PWM15 | PWM输出通道 | 提供16路PWM输出 | 每路最大25mA电流 |
10 | JP1, 2,5,6 | PWM输出跳线 | 连接PWM输出通道 | 用于连接外部设备 |
11 | J1 | 电源插座 | 连接外部电源(舵机驱动电源) | 提供+5V电源 |
12 | D1 | 二极管 | 反向电压保护 | 防止电源反接 |
13 | C1, C2 | 电容 | 电源滤波 | 减少电源噪声 |
14 | LED1 | 指示灯 | 指示电路工作状态 | 通过R1限流 |
15 | R10 | 电阻 | 限流 | 保护LED1 |
16 | SJ_A0-SJ_A5 | 跳线开关 | 设置I2C地址 | 开关状态决定引脚电平 |
舵机的控制原理与前面介绍的LED灯控制类似,PCA9685支持16个独立的PWM通道,每个通道连接一个舵机或其他PWM控制设备。每个通道有三个引脚:V+(连接到舵机电源)、PWM输出(用于输出PWM信号,控制舵机位置)、GND(连接到舵机地线)。
五、参考文献
1.PCA9685 16-channel, 12-bit PWM Fm+ I2C-bus LED controller
2.https://learn.adafruit.com/16-channel-pwm-servo-driver?view=all