pca9685是16路12位PWM信號發生器,可用于控制舵機、led、電機等設備,i2c通信,節省主機資源。在那個寶上隨處可見,Arduino用它非常方便,不過STM32要想使用它必須要寫好驅動才行,本文簡述如何配置其驅動以及一些需要注意的地方。
STM32F103配置pca9685驅動
pca9685簡介
pca9685驅動
pcf8574.h:
pcf8574.c:
應用與調試
pca9685簡介
當然對于老手,看datasheet是最好的選擇pca9685datasheet
對于我這種新手,自然是看高手的文章比較容易上手了~
我在網上看到的對pca9685總結的最好的一篇文章推薦給大家:生命不息折騰不止
博主寫得非常詳細,本文某些片段也是參考博主的這篇文章,在此致謝。
pca9685用的是IIC通信,如果有師兄對IIC不熟悉,要先去了解一下~
pca9685驅動
網上有不少寫pca9685的文章,寫驅動的也有,不過我試過的大多有錯誤,我詳細地進行了修改,并且調試成功,走了不少彎路
#ifndef __PCF8574_H
#define __PCF8574_H
#include "sys.h"
#include "myiic.h"
#define PCA9685_adrr 0x80
#define PCA9685_SUBADR1 0x2
#define PCA9685_SUBADR2 0x3
#define PCA9685_SUBADR3 0x4
#define PCA9685_MODE1 0x0
#define PCA9685_PRESCALE 0xFE
#define LED0_ON_L 0x6
#define LED0_ON_H 0x7
#define LED0_OFF_L 0x8
#define LED0_OFF_H 0x9
#define ALLLED_ON_L 0xFA
#define ALLLED_ON_H 0xFB
#define ALLLED_OFF_L 0xFC
#define ALLLED_OFF_H 0xFD
void PCA9685_write(unsigned char reg,unsigned char data);
u8 PCA9685_read(unsigned char reg);
void setPWMFreq(u8 freq);
void setPWM(u8 num, u16 on, u16 off);
void down();
void up();
#endif
設置PWM波的頻率,看下面這個公式即可:
其中osc_clock是時鐘,根據上面的寄存器設置選擇是內部25MHz時鐘還是外部時鐘。
update_rate是頻率,比如周期是20ms,那么頻率就是50。
注意:實際應用中發現有誤差,需要加入校準,要把udpate_rate乘以0.915。
全部資料51hei下載地址:
f103 pca9685.7z
(207.56 KB, 下載次數: 125)
2019-12-4 16:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|