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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PCA9685的使用及RT-Thread PCA9685驅(qū)動組件詳解

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

JetBot 小車使用的電機(jī)驅(qū)動模塊上用了 PCA9685 擴(kuò)展 I/O ,一邊與主控通過 I2C 總線通信,另一邊連接 TB6612 馬達(dá)驅(qū)動芯片。

本篇 Sugar 就來有根有據(jù)地說一說 PCA9685 的使用,以及 RT-Thread PCA9685 驅(qū)動組件。

硬件特點

1、每路 12 位分辨率(4096 級)的 PWM;

2、最多 16 路 PWM 輸出,所有路 PWM 頻率統(tǒng)一,每路占空比可以獨(dú)立控制;

3、I2C 通信方式;

4、支持 2.3V~5.5V 電壓,邏輯電平 3.3V;

5、復(fù)位方式:上電復(fù)位、軟件復(fù)位。

用于舵機(jī)控制的 PWM

一、明確控制信號

1、用于舵機(jī)控制的 PWM 頻率是 50Hz(周期 20000us)

2、對于 12 位分辨率而言,時間控制精度(即:時間分辨率)就是

3、舵機(jī)的控制脈寬是0.5ms ~ 2.5ms,時間伸縮范圍是 2000us

4、伸縮范圍在 4.88us 時間分辨率下可以分成近 410 份。

5、時間伸縮范圍 2000us 對應(yīng)舵機(jī)轉(zhuǎn)動范圍 0~180 度,因此舵機(jī)的角度分辨率約為 0.439 度

二、在 PCA9685 手冊里查芯片用法

1、芯片長什么樣

2、引腳功能

3、I2C 地址

地址引腳由 A0 ~ A5 組成,因此最多可以有 64 個地址。由于芯片本身保留 All Call 7 位地址 0xE0 以及 Software Reset 7位地址 0x06,所以有 62 個地址可用。

在默認(rèn)情況下(即:A0 ~ A5 全部接地),其 7 位地址為 0x40。

4、目標(biāo)寄存器

(1) MODE1 寄存器,地址0x00,可讀、可寫。

(2) MODE2 寄存器,地址0x01,可讀、可寫。

(3) 每路 PWM 有 4 個 8 位控制寄存器,地址見 datasheet,可讀、可寫。

4 個 8 位寄存器在手冊上說成:2 路 12 位寄存器。2 個 12 位寄存器分別控制該路輸出的高、低電平時間,最大數(shù)值是 4095。

根據(jù)下面的 Example 1 不難了解到這 2 個 12 位寄存器的意思是:每個周期從第幾個 count 開始置 1,則 LEDx_ON 寄存器寫幾(十六進(jìn)制形式);每個周期從第幾個 count 開始清 0,則 LEDx_OFF 寄存器寫幾。

下圖的 4 個 example 表示了一般情況下 2 個 12 位寄存器設(shè)置情況與輸出的關(guān)系。

下圖的 4 個 example 表示了 ON 寄存器值 《 OFF 寄存器值情況下的輸出。

下圖的 4 個 example 表示了 ON 寄存器值 》 OFF 寄存器值情況下的輸出。

(4) PWM 頻率設(shè)置寄存器 PRE_SCALE,地址0xFE,可讀、可寫。

芯片內(nèi)置 25MHz 的晶振,update_rate 是以 Hz 為單位的頻率值。因此,對于 50Hz 的 PWM 來講此寄存器應(yīng)設(shè)置為 121。

RT-Thread 的 PCA9685 驅(qū)動組件

硬件連接如上圖,Sugar 使用了最常見的 PCA9658 舵機(jī)控制模塊,接上邏輯分析儀看數(shù)據(jù)。

一、第 1 段

展開第一段通信內(nèi)容,如下圖:

上圖黃色框中“向 40 號地址寫兩個 0 ”的意思是:向地址為 40 的設(shè)備地址為 0 的寄存器寫入數(shù)據(jù) 0。

相應(yīng)的,后面藍(lán)色框就解讀為:讀取地址為 40 的設(shè)備地址為 0 的寄存器值,設(shè)備反回目標(biāo)寄存器里的數(shù)據(jù)值為 0。

下面到代碼里去找這段通信的相關(guān)內(nèi)容,如下:

二、第 2 段

根據(jù) PCA9685 的 datasheet 所述,設(shè)置 PWM 輸出頻率的時候要先進(jìn)入 SLEEP 模式。并且從 SLEEP 模式重啟的流程是在 datasheet 里指定的。

在 RT-Thread 的 PCA9685 的組件包里,把設(shè)置頻率相關(guān)的一干操作都封裝到了一個函數(shù) pca9685_set_pwm_freq() 里面。

三、第 3 段

上面已經(jīng)把研究方法說透了,這里就不再把邏輯分析儀的圖放上來了。通過對代碼的分析,Sugar 發(fā)現(xiàn) RT-Thread 這個 PCA9685 的驅(qū)動組件包傳承了 RT-Thread 本身小而美的特點,按照 PCA9685 的 datasheet 封裝函數(shù),這樣使得對 PCA9685 的了解容易很多。

Arduino “以使用方便”為目的不同,PCA9685 組件包傾向于真正讓人弄懂 PCA9685 的用法。在懂了之后,個人就有能力自己“以使用方便”為目的再次做一遍封裝。很多玩過 Arduino 的人都覺得做起來真簡單,離了 Arduino 的環(huán)境真不會。

Arduino 面對的是小白,以方便體驗為主,而 RT-Thread 和其一眾組件能夠讓人真正了解深層次的本源,搞懂這些能讓人在成為高手的路上走得更輕松。當(dāng)成為高手之后,再回頭看 Arduino 才能體會到 Arduino 封裝的真正智慧。

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

    關(guān)注

    5

    文章

    7

    瀏覽量

    16340
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1249

    瀏覽量

    39718
收藏 人收藏

    評論

    相關(guān)推薦

    C51單片機(jī)如何使用PCA9685舵機(jī)驅(qū)動

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

    PCA9685智能LED控制器內(nèi)部框圖及功能介紹

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

    如何用PCA9685去完成無刷電機(jī)的驅(qū)動方法?

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

    STM32F103控制PCA9685模塊驅(qū)動多個舵機(jī) 精選資料分享

    之前在做假手的控制時,驅(qū)動用的是舵機(jī)。因為要實現(xiàn)假手的多自由度動作,所以需要用到8個舵機(jī)。而我用的主控板只有兩路pwm輸出,不能滿足要求,所以在查閱了相關(guān)資料后,找到了PCA9685模塊。因為網(wǎng)上
    發(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

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

    怎樣使用PCA9685模塊去控制舵機(jī)呢

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

    請問PCA9685如何通過IIC協(xié)議控制多個舵機(jī)?

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

    怎么使用PCA9685擴(kuò)展PWM端口呢

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

    PCA9685擴(kuò)展I/O的應(yīng)用是什么?

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

    STM32使用PCA9685控制舵機(jī)的過程分享

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

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

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

    PCA9685設(shè)計的16路12位LED驅(qū)動控制方案

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

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

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

    PCA9685與STC12C5A60S2單片機(jī)突然不能工作了!

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