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