PCA9685是一款基于IIC总线通信的12位精度和16通道PWM波输出芯片
扫描二维码
随时随地手机看文章
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);
本文编译自hackster.io