chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

使用IIC去驅動MPU6050時為什么總讀取失敗

strongerHuang ? 來源:知曉編程 ? 作者:Firefly ? 2021-11-06 10:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01概述

在之前的文章中《I2C基礎原理及協(xié)議》中詳細講解了IIC協(xié)議,并且使用是NXP的官方手冊,demo示例使用IIC讀取RTC芯片,運行正常,沒有任何問題。并且更新了《IIC踩過的坑》,講述了在使用IIC讀取RTC芯片時遇到的問題,并成功解決。

我以為我已經完全學會了IIC,但現(xiàn)實卻打了臉,我在使用《STM32IIC詳解》文中的IIC驅動,去驅動MPU6050時,總是讀取失敗。這個驅動明明是驗證過的,為什么會有問題。讓我一度很是郁悶。

02問題

不賣關子,直接說問題,是我之前的IIC驅動有問題。

問題1:

錯誤將CLK信號GPIO設置為推挽輸出。應該設置為開漏輸出。

042908fa-3dfe-11ec-82a9-dac502259ad0.png

問題2:

讀取函數(shù)有bug。1處應該先左移再讀取SDA的數(shù)據(jù),然后刪除2處的數(shù)據(jù)。

0464f400-3dfe-11ec-82a9-dac502259ad0.png

問題2:這個就是純粹的bug了,大家應該看出來了。在RTC的驅動沒有觸發(fā)bug的原因是:在RTC的IIC接收數(shù)據(jù)中,實際應用中最高位為0,觸發(fā)不了這個bug。而在MPU6050的IIC接收數(shù)據(jù)中就觸發(fā)了這個bug。我也在感慨,有時候不是程序沒有bug,而是可能沒有觸發(fā)。

問題1:這個問題,其實很簡單,IIC協(xié)議中也提到過,很多大神也知道需要將MCU的IIC引腳設置為開漏輸出。這一方面我也了解,但是沒有在意,因為一直讀取RTC一直“沒有bug”。接下來我將細細和大家分享一下IIC為什么需要開漏輸出,開漏輸出和推挽輸出有什么區(qū)別。精通的大佬可以出門左轉了,想了解一下的同學歡迎繼續(xù)往下看。

03開漏輸出

STM32F207的GPIO框圖如下

04c588b0-3dfe-11ec-82a9-dac502259ad0.png

普通輸入模式下,上拉和下拉電阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分為下列兩種模式

開漏模式:輸出寄存器是 0 時,激活 N-MOS,而輸出寄存器是 1 時,端口保持高阻態(tài)(P-MOS 不會被使能)

推挽輸出:輸出寄存器是 0 時,激活 N-MOS,而輸出寄存器是 1 時,激活 P-MOS。

上面是我的在文章《STM32 GPIO詳解》中的說明,GPIO的其他模式請看文章《STM32 GPIO詳解》。上文說到開漏模式輸出1時,端口保持高阻態(tài),這個時候如果端口外上拉電阻,就可以輸出電平1。

開漏輸出的作用:

1:防止短路,在一些應用中,兩個GPIO鏈接在一起(中間沒有串電阻),或者在總線應用中,需要將MCU的多個GPIO連接在一起。如果都設置成推挽輸出,當一個GPIO輸出1,另一個輸出0,那么就短路了,直接涼涼。如下圖

如果換成開漏輸出,GPIO的高電平是靠上拉電阻的,也就是VCC和GND之間會有個電阻,不會出現(xiàn)短路的問題。這樣的電路就安全一些,所以部分總線采用開路輸出。

2:線與:開漏輸出還能實現(xiàn)線與,減少一個與門,簡化電路。這個問題下文講到。

04開漏輸出在IIC的應用

IIC為什么需要開漏輸出,除了上文說的到的防止短路,還有一個重要的因素就是線與。

首先我們先說一下線與功能:

線與邏輯,即兩個輸出端(包括兩個以上)直接互連就可以實現(xiàn)“AND”的邏輯功能。在總線傳輸?shù)葘嶋H應用中需要多個門的輸出端并聯(lián)連接使用,而一般TTL門輸出端并不能直接并接使用,否則這些門的輸出管之間由于低阻抗形成很大的短路電流(灌電流),而燒壞器件。

在硬件上,可用集電極開路門(OC門)或三態(tài)門(TS門)來實現(xiàn)。用OC門實現(xiàn)線與,應同時在輸出端口加一個上拉電阻。

上面是數(shù)電知識,我的個人簡單理解是:就是a,b兩條線,兩端接一塊做輸出,另兩端做輸入。如果輸入都是高電平,那輸出就是高電平,否則輸出就是低電平。

那么線與在IIC中的應用是什么呢?

答案是:多主設備搶占總線的仲裁。

在之前IIC讀取RTC或IIC讀取MPU6050的情況,都是一個主機,一個從機。但IIC設計中可以支持多主機模式,那么就面臨一個問題,當多個主機同時啟動總線時,如果仲裁的問題。線與邏輯就起到了作用。

假設主設備A需要啟動IIC,它需要在SCL高電平時,將SDA由高電平轉換為低電平作為啟動信號。主設備A在把SDA拉高后,它需要再檢查一下SDA的電平。

SDA是高電平,說明主設備A可以占用總線,然后主設備A將SDA拉低,開始通信。

SDA是低電平,說明有人已經捷足先登了,主設備A不能占用總線,結束通信。

如果主設備A拉高SDA時,已經有其他主設備將SDA拉低了。由于1 & 0 = 0 那么主設備A在檢查SDA電平時,會發(fā)現(xiàn)不是高電平,而是低電平,說明其他主設備搶占總線的時間比它早,設備A只能放棄占用總線。如果是高電平, 則可以占用。

這就是IIC通信開漏輸出的原因。上拉電阻的原因就是由于開漏輸出的特性,需要上拉電阻在輸出1時,提高驅動力。

05最后補充

最后說一下為什么之前使用推挽輸出的IIC讀取RTC沒有問題,這個因為上拉電阻的阻值不同,RTC的上拉電阻即使推挽輸出也可以正常拉高拉低電平。這個根據(jù)上文講述的,可以查MCU的datasheet,確認IO的PMOS和NMOS的阻抗,計算一下電壓。

還有一個簡單粗暴的辦法,直接使用示波器看波形也可以發(fā)現(xiàn)問題。

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

    關注

    462

    文章

    53491

    瀏覽量

    458386
  • 通信
    +關注

    關注

    18

    文章

    6311

    瀏覽量

    139517
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1547

    瀏覽量

    130417

原文標題:I2C通信中的坑

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    TT電機,Arduino Uno,L298N 5AD ,MPU6050最簡自平衡機器人資料

    ;MPU6050_6Axis_MotionApps20.h\" //https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050 MPU6050
    發(fā)表于 10-06 13:12

    【RA4M2-SENSOR】串口傳輸MPU6050陀螺儀數(shù)據(jù)測評

    ); printf(\"hollow Acce\"); 接著配置mpu6050讀取數(shù)據(jù)代碼,將如下文件復制到工程中,并且添加到項目中: 配置I2C引腳: 代碼主要在bsp_iic.h中進行修改
    發(fā)表于 09-14 11:41

    小安派BW21-CBV-Kit入門教程之DMP6讀取MPU6050數(shù)據(jù)

    本示例將演示使用 DMP6 從 MPU6050 獲取數(shù)據(jù)。MPU6050 配備了數(shù)字運動處理器 (DMP),用于處理運動算法的計算,如轉換為三軸偏航/俯仰/滾動平面、轉換為四元數(shù)或轉換為歐拉角。
    的頭像 發(fā)表于 06-19 14:20 ?609次閱讀
    小安派BW21-CBV-Kit入門教程之DMP6<b class='flag-5'>讀取</b><b class='flag-5'>MPU6050</b>數(shù)據(jù)

    MPU-6000和MPU-6050產品規(guī)格書

    電子發(fā)燒友網(wǎng)站提供《MPU-6000和MPU-6050產品規(guī)格書.pdf》資料免費下載
    發(fā)表于 04-29 16:52 ?3次下載

    STM32F103對ADS1298和MPU6050同時采集數(shù)據(jù)會出現(xiàn)ADS1298數(shù)據(jù)丟失

    你好,請問我用STM32F103對ADS1298和MPU6050同時采集數(shù)據(jù)為何會出現(xiàn)ADS1298數(shù)據(jù)丟失,而單獨對期中任何一個傳感器單獨進行數(shù)據(jù)采集就沒有任何問題
    發(fā)表于 03-22 17:29

    使用iicmpu9250進行讀取數(shù)據(jù),讀取磁力計數(shù)據(jù)時采用的是主控iic方式,但是讀取的速度特別慢,為什么?

    使用iicmpu9250進行讀取數(shù)據(jù),讀取磁力計數(shù)據(jù)時采用的是主控iic方式,但是讀取的速度特
    發(fā)表于 03-14 07:40

    關于mpu6050問題

    我很早之前買了一個,我現(xiàn)在使用這個mpu6050,我在調mpu6050數(shù)據(jù)時候,數(shù)據(jù)抖動特別大,我沒動這個mpu6050,它自己都有抖動,然后本來放在水平,他的機械中值是2.5,但是我水平抖動后,機械中值突然變成了-258,這是
    發(fā)表于 03-09 17:17

    mpu6050航向角漂移很嚴重的原因及解決方法

    mpu6050航向角漂移很嚴重的原因及解決方案
    的頭像 發(fā)表于 03-01 11:47 ?4114次閱讀

    vofa+獲取MPU6050運動姿態(tài)數(shù)據(jù)

    數(shù)據(jù)
    PCB56242069
    發(fā)布于 :2025年02月20日 17:55:37

    零知開源——ESP8266+MPU6050 實現(xiàn)運動姿態(tài)檢測

    零知ESP8266的I2C通信 ? ? ? ?在運動姿態(tài)檢測、機器人平衡控制、VR頭戴設備等應用中,MPU6050(三軸加速度計+三軸陀螺儀)是一個常見的姿態(tài)傳感器。而ESP8266作為一款低功耗
    的頭像 發(fā)表于 02-20 17:54 ?2764次閱讀
    零知開源——ESP8266+<b class='flag-5'>MPU6050</b> 實現(xiàn)運動姿態(tài)檢測

    零知開源——ESP8266+MPU6050 實現(xiàn)運動姿態(tài)檢測

    ?零知ESP8266學習教程 在運動姿態(tài)檢測、機器人平衡控制、VR頭戴設備等應用中,MPU6050(三軸加速度計+三軸陀螺儀)是一個常見的姿態(tài)傳感器。而ESP8266作為一款低功耗Wi-Fi模塊
    發(fā)表于 02-20 17:44

    零知開源——MPU6050六軸傳感器模塊實踐教程,輕松實現(xiàn)運動檢測!

    運動。 ? ? ? 通過本教程,您將學習如何讀取并處理這些數(shù)據(jù),為您的項目添加運動檢測和姿態(tài)控制功能。 一、硬件連接 ? ? ? ?在開始編程之前,首先需要正確連接MPU6050模塊到零知增強板。 1.所需材料: 零知增強板 MPU60
    的頭像 發(fā)表于 02-20 16:17 ?1762次閱讀
    零知開源——<b class='flag-5'>MPU6050</b>六軸傳感器模塊實踐教程,輕松實現(xiàn)運動檢測!

    零知開源——MPU6050六軸傳感器模塊實踐教程,輕松實現(xiàn)運動檢測!

    。MPU6050是一款含有三軸加速度計和三軸陀螺儀的傳感器,能夠測量設備的傾斜情況和旋轉運動。 通過本教程,您將學習如何讀取并處理這些數(shù)據(jù),為您的項目添加運動檢測和姿態(tài)控制功能。 一、硬件連接 在開始編程
    發(fā)表于 02-20 15:53

    STM32單片機+MPU6050設計一個電子水平儀

    本項目基于STM32F103C8T6單片機設計一款電子水平儀。STM32F103C8T6作為一種性能強大的微控制器,具有較高的計算能力和豐富的外設接口,能夠滿足項目對實時數(shù)據(jù)處理和顯示控制的需求。該單片機將與MPU6050傳感器相結合,利用其內置的加速度計和陀螺儀,實現(xiàn)設備的傾斜角度測量。
    的頭像 發(fā)表于 01-09 11:14 ?2591次閱讀
    STM32單片機+<b class='flag-5'>MPU6050</b>設計一個電子水平儀

    MPU6050讀取數(shù)據(jù)有問題

    在調試MPU6050讀取原始數(shù)據(jù)只有X軸在變化,Y軸和Z軸的數(shù)據(jù)一直沒有變化,已經調試兩天了,這個是讀取的數(shù)據(jù)
    發(fā)表于 12-09 10:40