一直想本身作個四軸飛行器,卻無從下手,終於狠下決心,拿出塵封已久的MPU6050模塊,開始摸索着數據手冊分析,一步一步地實現了MPU6050模塊的功能,從MPU6050模塊中讀取出加速度值和陀螺儀採樣值。html
模塊以下圖所示:編程
MPU-60X0將3軸陀螺儀,3軸加速度計和數字運動處理器(DMP)組合在一塊兒。經過I2C總線能夠接受外部3軸羅盤的輸入,提供9軸輸出。學習
MPU-60X0具備三個用於數字化陀螺儀輸出的16位ADC轉換器和三個用於數字化加速度計輸出的16位ADC轉換器。
對於快速和慢速運動的精確跟蹤,這些器件具備用戶可編程的滿量程±250,±500,±1000和±2000°/秒(dps)的用戶可編程陀螺儀和用戶可編程加速度計滿量程 範圍爲±2g,±4g,±8g和±16g。code
I2C通信速率400KHz,SPI通信速率1MHz(僅MPU-6000)。高速通信SPI通信速率20MHz(僅MPU-6000)。htm
MPU-60X0電源電壓範圍:2.375V ~ 3.46Vblog
MPU-6000和MPU-6050相同,只是MPU-6050僅支持I2C接口,並具備單獨的VLOGIC參考引腳。MPU-6000支持I2C和SPI接口,並具備單電源引腳VDD。接口
MPU-60X0具備16位ADC和信號調理的三軸MEMS陀螺儀
MPU-60X0由三個獨立的振動MEMS速率陀螺儀組成,可檢測繞X軸,Y軸和Z軸的旋轉。 當陀螺儀圍繞任何感應軸旋轉時,科里奧利效應會引發由電容感應檢測到的振動。 所獲得的信號被放大,解調和濾波以產生與角速率成比例的電壓。 使用單獨的片內16位模數轉換器(ADC)對該電壓進行數字化,以對每一個軸進行採樣。 陀螺儀傳感器的滿量程範圍能夠數字編程爲±250,±500,±1000或±2000度/秒(dps)。 ADC採樣速率能夠從每秒8,000個採樣點編程到每秒3.9個採樣點,用戶可選的低通濾波器可實現寬範圍的截止頻率。ip
MPU-60X0的座標軸關係以下圖所示:ci
參考I2C通訊協議get
I2C通信中,主處理器芯片做爲主設備,MPU6050做爲從設備。
MPU6050做爲從設備使用時,有一個芯片自身的7位的設備地址,該地址爲:0b110100X,7位地址的LSB位由引腳AD0的值決定,這樣在一個板子的同一個I2C總線上能夠同時使用兩個MPU6050芯片,因此MPU6050的從設備地址爲:0b1101000(0x68,AD0爲低)或者0b1101001(0x69,AD0爲高)。
主設備發送一個起始位(S),再發送I2C的從設備地址數據(由從7bit設備地址和1bit讀標誌位0組成),在第9個時鐘SCL爲高電平時,從設備發送應答信號(ACK)。接着,主設備發送從設備的寄存器地址(RA,8bit),等待從設備應答(ACK)後,主設備再發送要在寄存器中寫入的數據(8bit),等待從設備應答(ACK)後,能夠發送中止位(P)結束數據傳輸。 若是要寫多個寄存器,在上一步中能夠先不發中止位(P),而是繼續發送數據(8bit),這樣就能夠實現連續寫入多個寄存器數據了。MPU6050芯片會自動增長寄存器地址,並將連續寫入的數據字節,按順序依次寫入到相鄰的寄存器中。
兩種寫數據的格式以下圖所示:
主設備發送一個起始位(S),再發送I2C的從設備地址數據(由從7bit設備地址和1bit寫標誌位0組成),在第9個時鐘SCL爲高電平時,從設備發送應答信號(ACK)。而後發送要讀取的寄存器地址,在接收到從設備發送的應答信號(ACK)後,主設備發送一個起始位(Sr),再發送從設備地址(由從7bit設備地址和1bit讀標誌位1組成 )。從設備會發送一個應答信號(ACK),再發送寄存器中的數據(8bit)。主設備發送一個非應答信號(NOACK),和一箇中止位(P),中止I2C傳輸。 若是要讀取多個連續的寄存器,在上一步中不能發送非應答信號(NOACK)和中止位(P),而是要發送一個應答信號(ACK),等待下一個從設備發送的數據,直到最後一個數據接收完成後,主設備發送一個非應答信號(NOACK),和一箇中止位(P),中止I2C傳輸。
兩種讀寄存器數據的格式以下圖所示:
至此,I2C總線通信協議及MPU6050寄存器的讀寫已經介紹完畢,下一步就是用程序實現I2C通信,並經過I2C讀寫MPU6050的寄存器數據。具體內容,請參考下一節。
MPU-6000 and MPU-6050 Product Specification Revision 3.4(MPU-6050_DataSheet_V3 4.pdf) MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2(MPU-6000-Register-Map1.pdf)