RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PCA9685的使用及RT-Thread PCA9685驅動組件詳解

RTThread物聯網操作系統(tǒng) ? 來源:CSDN博客 ? 作者:CSDN博客 ? 2020-09-26 09:49 ? 次閱讀

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 封裝的真正智慧。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • PCA9685
    +關注

    關注

    5

    文章

    7

    瀏覽量

    16364
  • RT-Thread
    +關注

    關注

    31

    文章

    1285

    瀏覽量

    40081
收藏 人收藏

    評論

    相關推薦

    C51單片機如何使用PCA9685舵機驅動

    最近購買了一個PCA9685的舵機驅動板,苦于沒有PCA9685的相關資料,不知哪位有相關資料可以share一下?多謝多謝。
    發(fā)表于 08-13 22:29

    PCA9685智能LED控制器內部框圖及功能介紹

    PCA9685 16-Channel12-BitPWMLEDDimmer 特點16-LED驅動–On,Off,獨立的PWM控制4096步(12-bit)線性的可編程亮度可編程輸出延遲控制1MHzI2C總線。
    發(fā)表于 05-06 12:26

    如何用PCA9685去完成無刷電機的驅動方法?

    怎樣去編寫i2c驅動的函數?如何用PCA9685去完成無刷電機的驅動方法?
    發(fā)表于 07-21 07:02

    STM32F103控制PCA9685模塊驅動多個舵機 精選資料分享

    之前在做假手的控制時,驅動用的是舵機。因為要實現假手的多自由度動作,所以需要用到8個舵機。而我用的主控板只有兩路pwm輸出,不能滿足要求,所以在查閱了相關資料后,找到了PCA9685模塊。因為網上
    發(fā)表于 07-21 06:36

    pca9685芯片手冊 stm32 hal iic

    pca9685芯片手冊 stm32 hal iic#ifndefpca9685#definepca9685#include"main.h"typedefstruct
    發(fā)表于 08-10 07:24

    如何使用編程PCA9685

    這篇教程與網上的大部分教程都不相同,著重講述如何使用編程PCA9685,而不是著重講述原理,最后你還是一頭霧水。這是一篇教你如何如何輸出固定舵機角度,如何移植程序,從PCA9685的原理到如何移植
    發(fā)表于 09-02 08:08

    怎樣使用PCA9685模塊去控制舵機呢

    PCA9685的寄存器可分為哪幾種類型?怎樣使用PCA9685模塊去控制舵機呢?
    發(fā)表于 10-25 08:46

    請問PCA9685如何通過IIC協議控制多個舵機?

    請問PCA9685如何通過IIC協議控制多個舵機?
    發(fā)表于 10-27 06:11

    怎么使用PCA9685擴展PWM端口呢

    一直在用NXP的單片機做各種開發(fā), 最近遇到了這么個問題,就是單片機的PWM端口不夠用,公司硬件工程師推薦使用NXP的PCA9685芯片擴展,一個芯片可以擴展出16路PWM,我們用了兩個,成功擴展
    發(fā)表于 11-23 08:14

    PCA9685擴展I/O的應用是什么?

    PCA9685怎么使用?PCA9685擴展I/O的應用是什么?
    發(fā)表于 01-17 07:38

    STM32使用PCA9685控制舵機的過程分享

    首先聲明我寫的代碼主要參考了這位仁兄的,非常感謝他把自己的源代碼奉獻出來。他的代碼是基于標準庫函數的,代碼過程簡單明了,非常適合移植。STM32 使用 PCA9685 控制舵機,控制機械臂,控制
    發(fā)表于 02-21 06:19

    PCA9685芯片的模擬的IIC需要加上拉電阻嗎?

    pca9685用的是IIC通訊,如果用的是模擬的IIC,需要加上拉電阻嗎?
    發(fā)表于 10-18 06:59

    PCA9685設計的16路12位LED驅動控制方案

    本文介紹了PCA9685主要特性和優(yōu)勢,方框圖以及典型應用電路圖和LCD背光應用電路圖.NXP公司的PCA9685是16路12位PWM不是Fm+I2C總
    發(fā)表于 09-11 15:05 ?8965次閱讀
    <b class='flag-5'>PCA9685</b>設計的16路12位LED<b class='flag-5'>驅動</b>控制方案

    PCA9685使用說明【寄存器地址】

    PCA9685
    發(fā)表于 04-05 11:38 ?0次下載

    PCA9685與STC12C5A60S2單片機突然不能工作了!

    1.癥狀:PCA9685工作的好好的突然不能工作了?芯片型號:單片機STC12C5A60S參數:sbit PCA9685_sda = P0^4; //數據輸入/輸出端
    發(fā)表于 12-23 19:14 ?8次下載
    <b class='flag-5'>PCA9685</b>與STC12C5A60S2單片機突然不能工作了!
    RM新时代网站-首页