JetBot 小車使用的電機驅動模塊上用了 PCA9685 擴展 I/O ,一邊與主控通過 I2C 總線通信,另一邊連接 TB6612 馬達驅動芯片。
本篇 Sugar 就來有根有據地說一說 PCA9685 的使用,以及 RT-Thread PCA9685 驅動組件。
硬件特點
1、每路 12 位分辨率(4096 級)的 PWM;
2、最多 16 路 PWM 輸出,所有路 PWM 頻率統(tǒng)一,每路占空比可以獨立控制;
3、I2C 通信方式;
4、支持 2.3V~5.5V 電壓,邏輯電平 3.3V;
5、復位方式:上電復位、軟件復位。
用于舵機控制的 PWM
一、明確控制信號
1、用于舵機控制的 PWM 頻率是 50Hz(周期 20000us)
2、對于 12 位分辨率而言,時間控制精度(即:時間分辨率)就是
3、舵機的控制脈寬是0.5ms ~ 2.5ms,時間伸縮范圍是 2000us
4、伸縮范圍在 4.88us 時間分辨率下可以分成近 410 份。
5、時間伸縮范圍 2000us 對應舵機轉動范圍 0~180 度,因此舵機的角度分辨率約為 0.439 度
二、在 PCA9685 手冊里查芯片用法
1、芯片長什么樣
2、引腳功能
3、I2C 地址
地址引腳由 A0 ~ A5 組成,因此最多可以有 64 個地址。由于芯片本身保留 All Call 7 位地址 0xE0 以及 Software Reset 7位地址 0x06,所以有 62 個地址可用。
在默認情況下(即:A0 ~ A5 全部接地),其 7 位地址為 0x40。
4、目標寄存器
(1) MODE1 寄存器,地址0x00,可讀、可寫。
(2) MODE2 寄存器,地址0x01,可讀、可寫。
(3) 每路 PWM 有 4 個 8 位控制寄存器,地址見 datasheet,可讀、可寫。
4 個 8 位寄存器在手冊上說成:2 路 12 位寄存器。2 個 12 位寄存器分別控制該路輸出的高、低電平時間,最大數值是 4095。
根據下面的 Example 1 不難了解到這 2 個 12 位寄存器的意思是:每個周期從第幾個 count 開始置 1,則 LEDx_ON 寄存器寫幾(十六進制形式);每個周期從第幾個 count 開始清 0,則 LEDx_OFF 寄存器寫幾。
下圖的 4 個 example 表示了一般情況下 2 個 12 位寄存器設置情況與輸出的關系。
下圖的 4 個 example 表示了 ON 寄存器值 《 OFF 寄存器值情況下的輸出。
下圖的 4 個 example 表示了 ON 寄存器值 》 OFF 寄存器值情況下的輸出。
(4) PWM 頻率設置寄存器 PRE_SCALE,地址0xFE,可讀、可寫。
芯片內置 25MHz 的晶振,update_rate 是以 Hz 為單位的頻率值。因此,對于 50Hz 的 PWM 來講此寄存器應設置為 121。
RT-Thread 的 PCA9685 驅動組件
硬件連接如上圖,Sugar 使用了最常見的 PCA9658 舵機控制模塊,接上邏輯分析儀看數據。
一、第 1 段
展開第一段通信內容,如下圖:
上圖黃色框中“向 40 號地址寫兩個 0 ”的意思是:向地址為 40 的設備地址為 0 的寄存器寫入數據 0。
相應的,后面藍色框就解讀為:讀取地址為 40 的設備地址為 0 的寄存器值,設備反回目標寄存器里的數據值為 0。
下面到代碼里去找這段通信的相關內容,如下:
二、第 2 段
根據 PCA9685 的 datasheet 所述,設置 PWM 輸出頻率的時候要先進入 SLEEP 模式。并且從 SLEEP 模式重啟的流程是在 datasheet 里指定的。
在 RT-Thread 的 PCA9685 的組件包里,把設置頻率相關的一干操作都封裝到了一個函數 pca9685_set_pwm_freq() 里面。
三、第 3 段
上面已經把研究方法說透了,這里就不再把邏輯分析儀的圖放上來了。通過對代碼的分析,Sugar 發(fā)現 RT-Thread 這個 PCA9685 的驅動組件包傳承了 RT-Thread 本身小而美的特點,按照 PCA9685 的 datasheet 封裝函數,這樣使得對 PCA9685 的了解容易很多。
以 Arduino “以使用方便”為目的不同,PCA9685 組件包傾向于真正讓人弄懂 PCA9685 的用法。在懂了之后,個人就有能力自己“以使用方便”為目的再次做一遍封裝。很多玩過 Arduino 的人都覺得做起來真簡單,離了 Arduino 的環(huán)境真不會。
Arduino 面對的是小白,以方便體驗為主,而 RT-Thread 和其一眾組件能夠讓人真正了解深層次的本源,搞懂這些能讓人在成為高手的路上走得更輕松。當成為高手之后,再回頭看 Arduino 才能體會到 Arduino 封裝的真正智慧。
-
PCA9685
+關注
關注
5文章
7瀏覽量
16364 -
RT-Thread
+關注
關注
31文章
1285瀏覽量
40081
發(fā)布評論請先 登錄
相關推薦
評論