PCA9685是一款基于IIC總線通信的12位精度和16通道PWM波輸出芯片
掃描二維碼
隨時(shí)隨地手機(jī)看文章
PCA9685是一款基于IIC總線通信的12位精度和16通道PWM波輸出芯片。該芯片最初由恩智浦推出時(shí),主要用于LED開(kāi)關(guān)調(diào)光。
16路12位PWM信號(hào)發(fā)生器可用于控制伺服、led、電機(jī)等設(shè)備,i2c通信,節(jié)省主機(jī)資源。
供應(yīng)
1. 電壓
數(shù)字電路的電壓范圍可以接受3.3和5V的電平。此外,還有一個(gè)v+引腳,用于給伺服供電,可以連接到稍高的電壓。
2. I2C地址
有6個(gè)地址控制引腳,通過(guò)它們可以控制設(shè)備的I2C地址。
7位I2C地址為:0x40 + A5:A0。如果A5到A0沒(méi)有被處理,它們是0。如果你想設(shè)置一個(gè)位置為1,焊接引腳在一起。
此外,i2cdetect檢測(cè)到還有一個(gè)地址0x70,這是一個(gè)可以向所有slave發(fā)出指令的通用地址。
3. Pin
該模塊有一個(gè)OE反向使能引腳,該引腳在低電平啟用。如果未連接,模塊默認(rèn)接地,可以不連接正常使用。
步驟1:每個(gè)通道的開(kāi)和關(guān)寄存器
總共有16個(gè)通道,每個(gè)通道有四個(gè)寄存器:LEDX_ON_L、LEDX_ON_H、LEDX_OFF_L和LEDX_OFF_H。
系統(tǒng)中有一個(gè)12位計(jì)數(shù)器ACK。ACK根據(jù)PRE_SCALE寄存器設(shè)置的周期增加。每次增加時(shí),將其與上述四個(gè)寄存器進(jìn)行比較:
當(dāng)找到ACK == LEDX_ON_H[3:0]:LEDX_ON_L時(shí),X通道輸出高電平;
當(dāng)找到ACK == LEDX_OFF_H[3:0]:LEDX_OFF_L時(shí),X通道輸出低電平。
步驟2:PRE_SCALE寄存器
這個(gè)寄存器用于設(shè)置周期。你不需要擔(dān)心具體的原理,只要記?。?
“頻率”:要設(shè)置的周期
precaleval:要寫入的參數(shù)
步驟3:外部呼叫接口
直接使用initialization和set。
如果設(shè)置后沒(méi)有輸出,可能是i2c寫入失敗。我一開(kāi)始就遇到了這種情況,然后我改變了i2c庫(kù),它就工作了。它仍然主要是正確使用i2c。
/* frequency:要設(shè)置的周期
無(wú)效setPWMFreq(浮動(dòng)頻率);
/ *
Num:設(shè)置第Num個(gè)輸出端口的輸出變化
通、關(guān):配合產(chǎn)生占空比0~ On為低電平,to On為高電平,to off為低電平
* /
void setPWM(u8 num, u16 on, u16 off);
以上是不方便使用的,所以封裝為一個(gè)簡(jiǎn)單的。直接輸入要設(shè)置的占空比。周期為50,off: 15表示1.5ms,方便伺服控制
無(wú)效set_pwm(u8 num, u8 off);
步驟4:編碼
步驟5:注意
由于經(jīng)常使用I2C接口,因此編寫了一個(gè)庫(kù)來(lái)促進(jìn)移植。以后每次使用I2C時(shí),我只需要稍微修改一下封裝即可。這兩個(gè)接口主要使用:I2C_BufferRead(PCA9685_SLAVE_ADDRESS, &data, reg_addr, 1);and I2C_ByteWrite(PCA9685_SLAVE_ADDRESS, reg_dat, reg_addr);
本文編譯自hackster.io