工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->综合电路图->PCA9685是一款基于IIC总线通信的12位精度和16通道PWM波输出芯片

PCA9685是一款基于IIC总线通信的12位精度和16通道PWM波输出芯片

发布人:amy2025 时间:2025-08-19 收藏

PCA9685是一款基于IIC总线通信的12位精度和16通道PWM波输出芯片。该芯片最初由恩智浦推出时,主要用于LED开关调光。

16路12位PWM信号发生器可用于控制伺服、led、电机等设备,i2c通信,节省主机资源。

供应

1. 电压

数字电路的电压范围可以接受3.3和5V的电平。此外,还有一个v+引脚,用于给伺服供电,可以连接到稍高的电压。

2. I2C地址

有6个地址控制引脚,通过它们可以控制设备的I2C地址。

7位I2C地址为:0x40 + A5:A0。如果A5到A0没有被处理,它们是0。如果你想设置一个位置为1,焊接引脚在一起。

此外,i2cdetect检测到还有一个地址0x70,这是一个可以向所有slave发出指令的通用地址。

3. Pin

该模块有一个OE反向使能引脚,该引脚在低电平启用。如果未连接,模块默认接地,可以不连接正常使用。

步骤1:每个通道的开和关寄存器

总共有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通道输出低电平。

步骤2:PRE_SCALE寄存器

这个寄存器用于设置周期。你不需要担心具体的原理,只要记住:

“频率”:要设置的周期

precaleval:要写入的参数

步骤3:外部呼叫接口

直接使用initialization和set。

如果设置后没有输出,可能是i2c写入失败。我一开始就遇到了这种情况,然后我改变了i2c库,它就工作了。它仍然主要是正确使用i2c。

/* frequency:要设置的周期

无效setPWMFreq(浮动频率);

/ *

Num:设置第Num个输出端口的输出变化

通、关:配合产生占空比0~ On为低电平,to On为高电平,to off为低电平

* /

void setPWM(u8 num, u16 on, u16 off);

以上是不方便使用的,所以封装为一个简单的。直接输入要设置的占空比。周期为50,off: 15表示1.5ms,方便伺服控制

无效set_pwm(u8 num, u8 off);

步骤4:编码

步骤5:注意

由于经常使用I2C接口,因此编写了一个库来促进移植。以后每次使用I2C时,我只需要稍微修改一下封装即可。这两个接口主要使用:I2C_BufferRead(PCA9685_SLAVE_ADDRESS, &data, reg_addr, 1);and I2C_ByteWrite(PCA9685_SLAVE_ADDRESS, reg_dat, reg_addr);



评论

技术专区