stm32 pca9685控制舵機機械臂

2021-08-07 09:12:09 字數 1434 閱讀 7489

pca9685是一款基於iic匯流排通訊的12位精度16通道pwm波輸出的晶元,該晶元最初由nxp推出時主要面向led開關調光,但就目前國內的形式來看,好像在被arduino在舵機控制領域使用的更廣泛。

該模組由於主要活躍在aruino周邊,所以在使用arduino開發其底層驅動庫是十分完善的,但對於微控制器開發人員就不太友好了,需要自行根據使用者手冊在微控制器上編寫底層的驅動。

其位址的分配是通過模組右上方的短接焊盤來確定的,從a0-a5表示位址的最低位到最高位,也就是最多可級聯2^5=32個模組,位址為: 1+a5+a4+a3+a2+a1+a0+rw。如果不用短接的話ax=0;短接的話ax=1;rw為寫的話rw=0;rw為讀的話rw=1;所以寫入資料不做短接則位址應該為1000 0000 =0x80,許多人包括**商家誤以為預設位址是0x40,坑爹啊。

scl接ph4,sda接ph5,vcc接3.3v,gnd接,v+單純只是供電,在驅動大功率舵機時不接,但是外接電源的兩個埠要接上正負極,否則無法供電。

首先要有iic通訊的底層驅動檔案,同時要有pca9685的驅動檔案,pca9685的驅動可以在pcf8574的驅動檔案的基礎上進行修改,關鍵在於以下兩個函式:

void setpwm(u8 num, u16 on, u16 off) 

void setpwmfreq(u8 freq)

注意用u8,不要用unsigned int。

同時有個地方要注意:

iic_send_byte(pca9685_adrr|0x01); //傳送器件位址+讀命令
pca9685_write(pca9685_mode1,0x0);

setpwmfreq(50);

setpwm(0, 0, 220);

delay_ms(2000);

setpwm(2, 0,110);

delay_ms(2000);

setpwm(1, 0,130);

delay_ms(2000);

setpwm(1, 0,150);

delay_ms(2000);

setpwm(1, 0,175);

delay_ms(2000);

setpwm(1, 0,195);

delay_ms(2000);

對於180度的舵機,只能通過延時和細分角度來防止速度過快造成衝擊過大的現象。

STM32F407配置pca9685驅動

pca9685是16路12位pwm訊號發生器,可用於控制舵機 led 電機等裝置,i2c通訊,節省主機資源。在 上隨處可見,arduino用它非常方便,不過stm32要想使用它必須要寫好驅動才行,本文簡述如何配置其驅動以及一些需要注意的地方。應用與除錯 當然對於老手,看datasheet是最好的選擇...

了解PCA9685通過IIC控制多個舵機

iic概述 i2c inter integrated circuit bus 積體電路匯流排,該匯流排由nxp 原philips 公司設計,多用於主控制器和從器件間的主從通訊,在小資料量場合使用,傳輸距離短,任意時刻只能有乙個主機等特性。經常iic和spi介面被認為指定是一種硬體裝置,但其實這樣的說...

PCA9685通過IIC協議控制舵機的方式

iic協議的概述 iic即inter integratedcircuit 積體電路匯流排 是一種多向控制匯流排,由飛利浦半導體公司在八十年代初設計,主要是用來連線整體電路 ics 在iic中,多個晶元可以連線到同一匯流排結構下,同時每個晶元都可以作為實施資料傳輸的控制源,這種方式簡化了訊號傳輸匯流排...