樹莓派基礎(chǔ)實(shí)驗(yàn)31:MPU6050陀螺儀加速度傳感器實(shí)驗(yàn)

一羽德、介紹

?? MPU6050是世界上第一款也是唯一一款專為智能手機(jī)、平板電腦和可穿戴傳感器的低功耗迅办、低成本和高性能要求而設(shè)計(jì)的6軸運(yùn)動(dòng)跟蹤設(shè)備宅静。
?? 它集成了3軸MEMS陀螺儀,3軸MEMS加速度計(jì)站欺,以及一個(gè)可擴(kuò)展的數(shù)字運(yùn)動(dòng)處理器 DMP( DigitalMotion Processor)姨夹,可用I2C接口連接一個(gè)第三方的數(shù)字傳感器,比如磁力計(jì)镊绪。擴(kuò)展之后就可以通過其 I2C或SPI接口輸出一個(gè)9軸的信號(hào)( SPI接口僅在MPU-6000可用)匀伏。 MPU-60X0也可以通過其I2C接口連接非慣性的數(shù)字傳感器,比如壓力傳感器蝴韭。

??其它I2C總線實(shí)驗(yàn)可以查看前面的PCF8591相關(guān)實(shí)驗(yàn)够颠,如:
??樹莓派基礎(chǔ)實(shí)驗(yàn)12:PCF8591模數(shù)轉(zhuǎn)換器實(shí)驗(yàn)

二、組件

★Raspberry Pi主板*1

★樹莓派電源*1

★40P軟排線*1

★MPU6050陀螺儀加速度傳感器模塊*1

★面包板*1

★跳線若干

三榄鉴、實(shí)驗(yàn)原理

MPU6050陀螺儀加速度傳感器
MPU6050陀螺儀加速度傳感器
MPU6050電路圖

?? MPU6050的工作原理比較復(fù)雜履磨,需要深度學(xué)習(xí)最好是學(xué)習(xí)官方手冊(cè)蛉抓,本文只做簡(jiǎn)單介紹。
?? 詳細(xì)資料可在官網(wǎng)下載最新的芯片手冊(cè):
https://invensense.tdk.com/products/motion-tracking/6-axis/mpu-6050/

官網(wǎng)下載芯片手冊(cè)
MPU6050基本性能參數(shù)

1.傳感器

?? ①陀螺儀傳感器:
?? 陀螺儀的原理就是剃诅,一個(gè)旋轉(zhuǎn)物體的旋轉(zhuǎn)軸所指的方向在不受外力影響時(shí)巷送,是不會(huì)改變的。人們根據(jù)這個(gè)道理矛辕,用它來(lái)保持方向笑跛。然后用多種方法讀取軸所指示的方向,并自動(dòng)將數(shù)據(jù)信號(hào)傳給控制系統(tǒng)聊品。我們騎自行車其實(shí)也是利用了這個(gè)原理飞蹂。輪子轉(zhuǎn)得越快越不容易倒,因?yàn)檐囕S有一股保持水平的力量翻屈。

??現(xiàn)代陀螺儀可以精確地確定運(yùn)動(dòng)物體的方位的儀器陈哑,它在現(xiàn)代航空,航海伸眶,航天和國(guó)防工業(yè)中廣泛使用的一種慣性導(dǎo)航儀器惊窖。傳統(tǒng)的慣性陀螺儀主要部分有機(jī)械式的陀螺儀,而機(jī)械式的陀螺儀對(duì)工藝結(jié)構(gòu)的要求很高厘贼。

??70年代提出了現(xiàn)代光纖陀螺儀的基本設(shè)想界酒,到八十年代以后,光纖陀螺儀就得到了非常迅速的發(fā)展涂臣,激光諧振陀螺儀也有了很大的發(fā)展盾计。光纖陀螺儀具有結(jié)構(gòu)緊湊,靈敏度高赁遗,工作可靠署辉。光纖陀螺儀在很多的領(lǐng)域已經(jīng)完全取代了機(jī)械式的傳統(tǒng)的陀螺儀,成為現(xiàn)代導(dǎo)航儀器中的關(guān)鍵部件岩四。光纖陀螺儀同時(shí)發(fā)展的除了環(huán)式激光陀螺儀外哭尝。

陀螺儀

??MPU-60X0由三個(gè)獨(dú)立的振動(dòng)MEMS速率陀螺儀組成,可檢測(cè)旋轉(zhuǎn)角度X軸剖煌,Y軸和Z軸材鹦。 當(dāng)陀螺儀圍繞任何感應(yīng)軸旋轉(zhuǎn)時(shí),科里奧利效應(yīng)就會(huì)產(chǎn)生電容式傳感器檢測(cè)到的振動(dòng)耕姊。 所得到的信號(hào)被放大桶唐,解調(diào)和濾波產(chǎn)生與角速度成比例的電壓。 該電壓使用單獨(dú)的片內(nèi)數(shù)字化16位模數(shù)轉(zhuǎn)換器(ADC)對(duì)每個(gè)軸進(jìn)行采樣茉兰。 陀螺儀傳感器可以全面范圍的被數(shù)字編程為每秒±250尤泽,±500,±1000或±2000度(dps)。 ADC樣本速率可以從每秒8,000個(gè)采樣點(diǎn)編程到每秒3.9個(gè)采樣點(diǎn)坯约,并且可由用戶選擇低通濾波器可實(shí)現(xiàn)廣泛的截止頻率熊咽。

??②加速度傳感器:
??加速度傳感器是一種能夠測(cè)量加速度的傳感器。通常由質(zhì)量塊闹丐、阻尼器横殴、彈性元件、敏感元件和適調(diào)電路等部分組成卿拴。傳感器在加速過程中衫仑,通過對(duì)質(zhì)量塊所受慣性力的測(cè)量,利用牛頓第二定律獲得加速度值巍棱。根據(jù)傳感器敏感元件的不同惑畴,常見的加速度傳感器包括電容式蛋欣、電感式航徙、應(yīng)變式、壓阻式陷虎、壓電式等到踏。

??MPU-60X0的3軸加速度計(jì)為每個(gè)軸使用單獨(dú)的檢測(cè)質(zhì)量。 加速沿著一條特定軸在相應(yīng)的檢測(cè)質(zhì)量上引起位移尚猿,并且電容式傳感器檢測(cè)到該位移位移有差別窝稿。 MPU-60X0的架構(gòu)降低了加速度計(jì)的敏感度制造變化以及熱漂移。 當(dāng)設(shè)備放置在平坦的表面上時(shí)凿掂,將進(jìn)行測(cè)量在X和Y軸上為 0g伴榔,在Z軸上為+ 1g。 加速度計(jì)的比例因子在工廠進(jìn)行校準(zhǔn)并且在名義上與電源電壓無(wú)關(guān)庄萎。 每個(gè)傳感器都有一個(gè)專用的sigma-delta ADC來(lái)提供數(shù)字輸出踪少。 數(shù)字輸出的滿量程范圍可以調(diào)整到±2g,±4g糠涛,±8g或±16g援奢。

??其實(shí)說簡(jiǎn)單點(diǎn),在mpu6050中我們用陀螺儀傳感器測(cè)角度忍捡,用加速度傳感器測(cè)加速度集漾。

?? MPU-60X0是全球首例9軸運(yùn)動(dòng)處理傳感器。它集成了3軸MEMS陀螺儀砸脊, 3軸MEMS 加速度計(jì)具篇,以及一個(gè)可擴(kuò)展的數(shù)字運(yùn)動(dòng)處理器 DMP(DigitalMotion Processor),可用 I2C 接口連接一個(gè)第三方的數(shù)字傳感器凌埂,比如磁力計(jì)驱显。擴(kuò)展之后就可以通過其 I2C 或 SPI 接口 輸出一個(gè) 9 軸的信號(hào)(SPI 接口僅在 MPU-6000 可用)。MPU-60X0 也可以通過其 I2C 接口連接非慣性的數(shù)字傳感器,比如壓力傳感器秒紧。

數(shù)字運(yùn)動(dòng)處理器(DMP):

??嵌入式數(shù)字運(yùn)動(dòng)處理器(DMP)位于MPU-60X0內(nèi)部绢陌,可從主機(jī)處理器中卸載運(yùn)動(dòng)處理算法的運(yùn)算。 DMP從加速度計(jì)熔恢,陀螺儀以及其他第三方傳感器(如磁力計(jì))獲取數(shù)據(jù)脐湾,并處理數(shù)據(jù)。結(jié)果數(shù)據(jù)可以從DMP的寄存器中讀取叙淌,或者可以在FIFO中緩沖秤掌。 DMP可以訪問其中的一個(gè)MPU的外部引腳,可用于產(chǎn)生中斷鹰霍。

??DMP的目的是卸載主機(jī)處理器的時(shí)序要求和處理能力闻鉴。通常,運(yùn)動(dòng)處理算法應(yīng)該以高速運(yùn)行茂洒,通常在200Hz左右孟岛,以提供低延遲的精確結(jié)果。即使應(yīng)用程序以更低的速率更新督勺,這也是必需的渠羞。例如,一個(gè)低功率的用戶界面可能會(huì)以5Hz的速度更新智哀,但運(yùn)動(dòng)處理仍然應(yīng)該以200Hz運(yùn)行次询。 DMP可以作為一種工具使用,以最大限度地降低功耗瓷叫,簡(jiǎn)化定時(shí)屯吊,簡(jiǎn)化軟件架構(gòu),并在主機(jī)處理器上節(jié)省寶貴的MIPS摹菠,以便在應(yīng)用中使用盒卸。

2.數(shù)據(jù)分析

(1)加速度計(jì)

??下圖標(biāo)明了傳感器的參考坐標(biāo)系( XYZ組成右手系)以及 3個(gè)測(cè)量軸和旋轉(zhuǎn)方向。旋轉(zhuǎn)的正向可用右手螺旋定則判斷

傳感器的參考坐標(biāo)系

三軸加速度計(jì):

ACCEL_XOUT 16位二進(jìn)制補(bǔ)碼值辨嗽。存儲(chǔ)最近的X軸加速計(jì)測(cè)量值世落。
ACCEL_YOUT 16位二進(jìn)制補(bǔ)碼值。存儲(chǔ)最近的Y軸加速度計(jì)測(cè)量值糟需。
ACCEL_ZOUT 16位二進(jìn)制補(bǔ)碼值屉佳。存儲(chǔ)最近的Z軸加速計(jì)測(cè)量值。

??三個(gè)加速度分量均以重力加速度 g 的倍數(shù)為單位洲押,能夠表示的加速度范圍武花,即倍率可以統(tǒng)一設(shè)定,有4個(gè)可選倍率:±2g杈帐、±4g体箕、±8g专钉、±16g。初始化MPU6050設(shè)置加速度計(jì)輸出的滿量程范圍為± 2g累铅,加速度計(jì)每個(gè) LSB 的靈敏度應(yīng)為 16384 LSB/g跃须。

滿量程范圍± 2g和靈敏度16384 LSB/g有啥關(guān)系?

??上面說了這三個(gè)加速度分量是16位的二進(jìn)制補(bǔ)碼值,且是有符號(hào)的娃兽。故而其輸出范圍 -32768~32767菇民。((2^16)/2)

??32767/2 = 16384 即加速度計(jì)的靈敏度

那這個(gè)靈敏度又有啥用呢投储?我們拿一組數(shù)據(jù)來(lái)舉個(gè)例子:

??A X: 03702 Y: 12456 Z: 06268 G X:-00023 Y:-00059 Z: 00005

??加速度計(jì) X 軸獲取原始數(shù)據(jù)位 03702第练,那么它對(duì)應(yīng)的加速度數(shù)據(jù)是:03702/16384 = 0.23g.

??g為加速度的單位,重力加速度定義為1g, 等于9.8米每平方秒玛荞。

??具體的加速度公式:加速度數(shù)據(jù) = 加速度軸原始數(shù)據(jù) / 加速度靈敏度

??或者:加速度數(shù)據(jù) = (加速度軸原始數(shù)據(jù) / 32767) X 可選倍率(即±2g娇掏、±4g、±8g勋眯、±16g)

(2)陀螺儀

三軸陀螺儀:

GYRO_XOUT 16位二進(jìn)制補(bǔ)碼值婴梧。存儲(chǔ)最新的X軸陀螺儀測(cè)量。
GYRO_YOUT 16位二進(jìn)制補(bǔ)碼值凡恍。存儲(chǔ)最新的Y軸陀螺儀測(cè)量結(jié)果志秃。
GYRO_ZOUT 16位二進(jìn)制補(bǔ)碼值。存儲(chǔ)最新的Z軸陀螺儀測(cè)量結(jié)果嚼酝。

??三個(gè)角速度分量均以“度/秒”為單位,能夠表示的角速度范圍竟坛,即倍率可統(tǒng)一設(shè)定闽巩,有4個(gè)可選倍率:±250°/s, ±500°/s担汤, ±1000°/s涎跨, ±2000°/s。初始化MPU6050設(shè)置陀螺儀輸出滿量程范圍為 ± 2000 °/s崭歧,陀螺儀每個(gè) LSB 的靈敏度為 16.4 LSB/°/s隅很。

滿量程范圍± 2000 °/s和靈敏度16.4 LSB/°/s有啥關(guān)系?
??上面說了這三個(gè)陀螺儀分量是16位的二進(jìn)制補(bǔ)碼值,且是有符號(hào)的率碾。故而其輸出范圍 -32768~32767叔营。((2^16)/2)

??32767/2000 = 16.4 即陀螺儀的靈敏度

那這個(gè)靈敏度又有啥用呢所宰?我們用一組數(shù)據(jù)來(lái)舉個(gè)例子:
??A X: 03702 Y: 12456 Z: 06268 G X:-00023 Y:-00059 Z: 00005

??陀螺儀 X 軸獲取原始數(shù)據(jù)位 -00023绒尊,那么它對(duì)應(yīng)的陀螺儀數(shù)據(jù)是:-00023/16.4 = -1.4°/s
??請(qǐng)注意,負(fù)號(hào)表示設(shè)備的旋轉(zhuǎn)方向與傳統(tǒng)的正方向相反仔粥。
??具體的陀螺儀公式:陀螺儀數(shù)據(jù) = 陀螺儀軸原始數(shù)據(jù)/陀螺儀靈敏度

??或者:陀螺儀數(shù)據(jù) = (陀螺儀軸原始數(shù)據(jù) / 32767) X 可選倍率(即±250°/s婴谱, ±500°/s蟹但, ±1000°/s, ±2000°/s)

??MPU6050 是一款姿態(tài)傳感器谭羔,使用它就是為了得到待測(cè)物體(如四軸华糖、平衡小車) x、y瘟裸、z 軸的傾角(俯仰角 Pitch缅阳、滾轉(zhuǎn)角 Roll、偏航角 Yaw) 景描。我們通過 I2C 讀取到 MPU6050 的六個(gè)數(shù)據(jù)(三軸加速度 AD 值十办、三軸角速度 AD 值)經(jīng)過姿態(tài)融合后就可以得到 Pitch、Roll超棺、Yaw 角向族。

??更多姿態(tài)融合等資料,可以參考MPU6050開發(fā)的帖子:
https://blog.csdn.net/qq_29350001/category_7303760.html

3.MPU6050寄存器

??這里說明幾個(gè)重要的寄存器棠绘,詳情查閱官方文檔件相。

(1)寄存器25 - 采樣速率分頻器(SMPRT_DIV)
采樣速率分頻器
參數(shù):

??SMPLRT_DIV 為8位無(wú)符號(hào)值。 采樣率是通過將陀螺儀輸出速率除以該值來(lái)確定的氧苍。

描述:

??該寄存器指定用于產(chǎn)生MPU-60X0采樣率的陀螺儀輸出速率的分頻器夜矗。傳感器寄存器輸出,F(xiàn)IFO輸出和DMP采樣都基于采樣率让虐。采樣率是通過將陀螺儀輸出速率除以 SMPLRT_DIV 產(chǎn)生的:
采樣率=陀螺儀輸出速率/(1 + SMPLRT_DIV)
當(dāng)DLPF禁用(DLPF_CFG = 0或7)時(shí)紊撕,陀螺儀輸出速率= 8kHz,當(dāng)DLPF使能時(shí)(見寄存器26)為1kHz赡突。
??注意:加速度計(jì)輸出速率是1kHz对扶。 這意味著對(duì)于大于1kHz的采樣率,同一個(gè)加速度計(jì)采樣可能會(huì)不止一次輸出到FIFO惭缰,DMP和傳感器寄存器浪南。

(2)寄存器26 - 配置(CONFIG)
配置

注:位7和位6保留

參數(shù):

??EXT_SYNC_SET3位無(wú)符號(hào)值。 配置FSYNC引腳采樣漱受。
??DLPF_CFG3位無(wú)符號(hào)值络凿。 配置DLPF設(shè)置

描述:

??該寄存器為陀螺儀和加速度計(jì)配置外部幀同步(FSYNC)引腳采樣和數(shù)字低通濾波器(DLPF)設(shè)置。

??連接到FSYNC引腳的外部信號(hào)可以通過配置 EXT_SYNC_SET 進(jìn)行采樣昂羡。
??FSYNC 引腳的信號(hào)變化被鎖存絮记,以便捕獲短閃光燈。 鎖存的FSYNC信號(hào)將按照寄存器 25 中定義的采樣速率進(jìn)行采樣紧憾。采樣后到千,鎖存器將復(fù)位為當(dāng)前的 FSYNC 信號(hào)狀態(tài)。
??根據(jù)下表赴穗,取樣值將被報(bào)告在由 EXT_SYNC_SET 的值確定的傳感器數(shù)據(jù)寄存器中的最低有效位的位置憔四。

??DLPF由 DLPF_CFG 配置膀息,加速度計(jì)和陀螺儀根據(jù) DLPF_CFG 的值進(jìn)行過濾,如下表所示了赵。

(3)寄存器27 - 陀螺儀配置(GYRO_CONFIG)
陀螺儀配置

注:位2到位0被保留潜支。

參數(shù):

??XG_ST設(shè)置此位將導(dǎo)致X軸陀螺儀執(zhí)行自檢。
??YG_ST設(shè)置此位將使Y軸陀螺儀執(zhí)行自檢柿汛。
??ZG_ST 設(shè)置該位使Z軸陀螺儀執(zhí)行自檢冗酿。
??FS_SEL 2位無(wú)符號(hào)值。 選擇陀螺儀的全量程范圍络断。

描述:

??該寄存器用于觸發(fā)陀螺儀自檢并配置陀螺儀的滿量程范圍裁替。
??陀螺儀自檢允許用戶測(cè)試機(jī)械和電氣部分陀螺儀。每個(gè)陀螺儀軸的自檢可通過控制該寄存器的XG_ST貌笨,YG_ST和ZG_ST位來(lái)激活弱判。每個(gè)軸的自檢可以獨(dú)立進(jìn)行,也可以同時(shí)進(jìn)行锥惋。
??當(dāng)自檢被激活時(shí)昌腰,車載電子裝置將啟動(dòng)適當(dāng)?shù)膫鞲衅鳌_@種驅(qū)動(dòng)將使傳感器的檢測(cè)質(zhì)量移動(dòng)一段相當(dāng)于預(yù)先確定的科里奧利力的距離膀跌。這種檢測(cè)質(zhì)量位移導(dǎo)致傳感器輸出發(fā)生變化遭商,這反映在輸出信號(hào)中。輸出信號(hào)用于觀察自檢響應(yīng)捅伤。
自檢響應(yīng)定義如下:

??自檢響應(yīng)=啟用自檢的傳感器輸出 - 未啟用自檢的傳感器輸出

??每個(gè)陀螺儀軸的自檢限制在MPU-6000 / MPU-6050產(chǎn)品規(guī)格文件劫流。當(dāng)自檢的價(jià)值響應(yīng)在產(chǎn)品規(guī)格的最小/最大范圍內(nèi),零件已通過自??檢暑认。當(dāng)自檢響應(yīng)超過文檔中指定的最小/最大值時(shí)困介,該部分被認(rèn)為是自檢失敗。

??FS_SEL根據(jù)下表選擇陀螺儀輸出的滿量程范圍蘸际。

(4)寄存器28 - 加速度計(jì)配置(ACCEL_CONFIG)
加速度計(jì)配置
參數(shù):

??XA_ST 當(dāng)設(shè)置為1時(shí),X軸加速度計(jì)執(zhí)行自檢徒扶。
??YA_ST當(dāng)設(shè)置為1時(shí)粮彤,Y軸加速度計(jì)執(zhí)行自檢。
??ZA_ST設(shè)置為1時(shí)姜骡,Z軸加速計(jì)執(zhí)行自檢导坟。
??AFS_SEL 2位無(wú)符號(hào)值。 選擇加速度計(jì)的全量程范圍圈澈。

描述:

??該寄存器用于觸發(fā)加速度計(jì)自檢并配置加速度計(jì)滿量程范圍惫周。該寄存器還配置數(shù)字高通濾波器(DHPF)。
??加速度計(jì)自檢允許用戶測(cè)試加速度計(jì)的機(jī)械和電子部分康栈。每個(gè)加速度計(jì)軸的自檢可通過控制該寄存器的XA_ST递递,YA_ST和ZA_ST位來(lái)激活喷橙。每個(gè)軸的自檢可以獨(dú)立進(jìn)行,也可以同時(shí)進(jìn)行登舞。
??當(dāng)自檢被激活時(shí)贰逾,車載電子裝置將啟動(dòng)適當(dāng)?shù)膫鞲衅鳌_@種致動(dòng)模擬外力菠秒。被驅(qū)動(dòng)的傳感器又將產(chǎn)生相應(yīng)的輸出信號(hào)疙剑。輸出信號(hào)用于觀察自檢響應(yīng)。
自測(cè)響應(yīng)定義如下:
??自檢響應(yīng)=啟用自檢的傳感器輸出 - 未啟用自檢的傳感器輸出
??MPU-6000 / MPU-6050產(chǎn)品規(guī)格文檔的電氣特性表中提供了每個(gè)加速度計(jì)軸的自檢限制践叠。當(dāng)自檢響應(yīng)值在產(chǎn)品規(guī)格的最小/最大范圍內(nèi)時(shí)言缤,該部件已通過自??檢。當(dāng)自測(cè)響應(yīng)超過文檔中指定的最小/最大值時(shí)禁灼,該部分被認(rèn)為是自檢失敗管挟。

??AFS_SEL 根據(jù)下表選擇加速度計(jì)輸出的滿量程范圍。

(5)寄存器59到64 - 加速度計(jì)測(cè)量
加速度計(jì)測(cè)量
參數(shù):

??ACCEL_XOUT 16位二進(jìn)制補(bǔ)碼值匾二。存儲(chǔ)最近的X軸加速計(jì)測(cè)量值哮独。
??ACCEL_YOUT 16位二進(jìn)制補(bǔ)碼值。存儲(chǔ)最近的Y軸加速度計(jì)測(cè)量值察藐。
??ACCEL_ZOUT 16位二進(jìn)制補(bǔ)碼值皮璧。存儲(chǔ)最近的Z軸加速計(jì)測(cè)量值。

描述:

??這些寄存器存儲(chǔ)最新的加速度計(jì)測(cè)量結(jié)果分飞。
??按照 寄存器25 中定義的采樣率將加速度計(jì)測(cè)量值寫入這些寄存器悴务。
??加速度計(jì)測(cè)量寄存器以及溫度測(cè)量寄存器,陀螺儀測(cè)量寄存器和外部傳感器數(shù)據(jù)寄存器由兩組寄存器組成:內(nèi)部寄存器組和面向用戶的讀取寄存器組譬猫。
??加速度計(jì)傳感器內(nèi)部寄存器組內(nèi)的數(shù)據(jù)總是以采樣率更新讯檐。同時(shí),只要串行接口空閑染服,面向用戶的讀取寄存器組就會(huì)復(fù)制內(nèi)部寄存器組的數(shù)據(jù)值别洪。這保證了傳感器寄存器的突發(fā)讀取將從相同的采樣時(shí)刻讀取測(cè)量結(jié)果。請(qǐng)注意柳刮,如果不使用突發(fā)讀取挖垛,則用戶負(fù)責(zé)通過檢查數(shù)據(jù)就緒中斷來(lái)確保一組單個(gè)字節(jié)的讀取對(duì)應(yīng)于單個(gè)采樣時(shí)刻。
??每個(gè)16位加速度計(jì)的測(cè)量結(jié)果都在 ACCEL_FS(寄存器28)中定義了一個(gè)滿量程秉颗。對(duì)于每個(gè)滿量程設(shè)置痢毒,ACCEL_xOUT 中的每個(gè) LSB 的加速度計(jì)靈敏度如下表所示。

(6)寄存器65和66 - 溫度測(cè)量(TEMP_OUT_H和TEMP_OUT_L)
溫度測(cè)量
參數(shù):

??TEMP_OUT 16位有符號(hào)值蚕甥。存儲(chǔ)最近的溫度傳感器測(cè)量值哪替。

描述:

??這些寄存器存儲(chǔ)最新的溫度傳感器測(cè)量值。
??溫度測(cè)量值按照 寄存器25 中定義的采樣率寫入這些寄存器菇怀。
??這些溫度測(cè)量寄存器以及加速度計(jì)測(cè)量寄存器凭舶,陀螺儀測(cè)量寄存器和外部傳感器數(shù)據(jù)寄存器由兩組寄存器組成:內(nèi)部寄存器組和面向用戶的讀取寄存器組晌块。
??溫度傳感器內(nèi)部寄存器組內(nèi)的數(shù)據(jù)始終以采樣率進(jìn)行更新。
??同時(shí)库快,只要串行接口空閑摸袁,面向用戶的讀取寄存器組就會(huì)復(fù)制內(nèi)部寄存器組的數(shù)據(jù)值。這保證了傳感器寄存器的突發(fā)讀取將從相同的采樣時(shí)刻讀取測(cè)量結(jié)果义屏。請(qǐng)注意靠汁,如果不使用突發(fā)讀取,則用戶負(fù)責(zé)通過檢查數(shù)據(jù)就緒中斷來(lái)確保一組單個(gè)字節(jié)的讀取對(duì)應(yīng)于單個(gè)采樣時(shí)刻闽铐。
??電氣規(guī)格表(MPU-6000 / MPU-6050產(chǎn)品規(guī)格文檔第6.4節(jié))中提供了溫度傳感器的比例因子和偏移量蝶怔。
??對(duì)于給定的寄存器值,溫度(攝氏度)可以被計(jì)算為:
以℃為單位的溫度=(TEMP_OUT寄存器值作為有符號(hào)數(shù)量)/ 340 + 36.53
??請(qǐng)注意兄墅,上述公式中的數(shù)學(xué)是十進(jìn)制的踢星。

(7)寄存器67至72 - 陀螺儀測(cè)量
陀螺儀測(cè)量
參數(shù):

??GYRO_XOUT 16位二進(jìn)制補(bǔ)碼值。存儲(chǔ)最新的X軸陀螺儀測(cè)量隙咸。
??GYRO_YOUT 16位二進(jìn)制補(bǔ)碼值沐悦。存儲(chǔ)最新的Y軸陀螺儀測(cè)量結(jié)果。
??GYRO_ZOUT16位二進(jìn)制補(bǔ)碼值五督。存儲(chǔ)最新的Z軸陀螺儀測(cè)量結(jié)果藏否。

描述:

??這些寄存器存儲(chǔ)最近的陀螺儀測(cè)量結(jié)果。
??陀螺儀測(cè)量值按寄存器25中定義的采樣率寫入這些寄存器充包。
這些陀螺儀測(cè)量寄存器以及加速度計(jì)測(cè)量寄存器副签,溫度測(cè)量寄存器和外部傳感器數(shù)據(jù)寄存器由兩組寄存器組成:內(nèi)部寄存器組和面向用戶的讀取寄存器組。
??陀螺儀傳感器內(nèi)部寄存器組內(nèi)的數(shù)據(jù)總是以采樣率更新基矮。
??同時(shí)淆储,只要串行接口空閑,面向用戶的讀取寄存器組就會(huì)復(fù)制內(nèi)部寄存器組的數(shù)據(jù)值家浇。這保證了傳感器寄存器的突發(fā)讀取將從相同的采樣時(shí)刻讀取測(cè)量結(jié)果本砰。請(qǐng)注意,如果不使用突發(fā)讀取钢悲,則用戶負(fù)責(zé)通過檢查數(shù)據(jù)就緒中斷來(lái)確保一組單個(gè)字節(jié)的讀取對(duì)應(yīng)于單個(gè)采樣時(shí)刻灌具。
??每個(gè)16位陀螺儀測(cè)量具有在 FS_SEL(寄存器27)中定義的滿量程。對(duì)于每個(gè)滿量程設(shè)置譬巫,GYRO_xOUT中陀螺儀每個(gè)LSB的靈敏度如下表所示:

(8)寄存器107 - 電源管理1 (PWR_MGMT_1)
電源管理1

注:位4保留。

參數(shù):

??DEVICE_RESET設(shè)置為1時(shí)督笆,該位將所有內(nèi)部寄存器復(fù)位為默認(rèn)值芦昔。一旦復(fù)位完成,該位自動(dòng)清零娃肿。每個(gè)寄存器的默認(rèn)值可以在第3節(jié)找到咕缎。
??SLEEP當(dāng)該位置1時(shí)珠十,該位將MPU-60X0置于睡眠模式。
??CYCLE當(dāng)該位設(shè)置為1且SLEEP被禁止時(shí)凭豪,MPU-60X0將循環(huán)焙蹭。在睡眠模式和喚醒之間以LP_WAKE_CTRL(寄存器108)確定的速率從活動(dòng)傳感器獲取單個(gè)樣本數(shù)據(jù)。
??TEMP_DIS設(shè)置為1時(shí)嫂伞,該位禁用溫度傳感器孔厉。
??CLKSEL 3位無(wú)符號(hào)值。 指定設(shè)備的時(shí)鐘源帖努。

描述:

??該寄存器允許用戶配置電源模式和時(shí)鐘源又固。它還提供了一些重置整個(gè)設(shè)備颊乘,以及一些禁用溫度傳感器。
??通過將 SLEEP 設(shè)置為1,MPU-60X0 可以進(jìn)入低功耗睡眠模式肢扯。當(dāng) CYCLE 設(shè)置為1而睡眠模式被禁用時(shí),MPU-60X0 將進(jìn)入循環(huán)模式香伴。在周期模式下揽趾,器件在休眠模式和喚醒之間循環(huán),以由 LP_WAKE_CTRL(寄存器108)確定的速率從加速計(jì)獲取單個(gè)采樣亭姥。要配置喚醒頻率稼钩,請(qǐng)使用 電源管理2寄存器(寄存器108)內(nèi)的 LP_WAKE_CTRL。
??MPU-60X0 時(shí)鐘源可選擇內(nèi)部 8MHz 振蕩器致份,基于陀螺儀的時(shí)鐘或外部時(shí)鐘源变抽。當(dāng)選擇內(nèi)部 8MHz 振蕩器或外部時(shí)鐘源作為時(shí)鐘源時(shí),MPU-60X0 可以在陀螺儀禁用的低功耗模式下工作氮块。
??上電時(shí)绍载,MPU-60X0 時(shí)鐘源默認(rèn)為內(nèi)部振蕩器。但是滔蝉,強(qiáng)烈建議將器件配置為使用其中一個(gè)陀螺儀(或外部時(shí)鐘源)作為時(shí)鐘參考击儡,以提高穩(wěn)定性。時(shí)鐘源可以按照下表進(jìn)行選擇蝠引。

(9)寄存器117 - 我是誰(shuí)(WHO_AM_I)
我是誰(shuí)

注:位0和7保留阳谍。 (硬編碼為0)

參數(shù):

??WHO_AM_I包含MPU-60X0的6位I2C地址。
??位6:位1的上電復(fù)位值為110 100螃概。

描述:

??**該寄存器用于驗(yàn)證設(shè)備的身份矫夯。 **WHO_AM_I的內(nèi)容是MPU-60X0的7位I2C地址的高6位。 MPU-60X0的I2C地址的最低有效位由AD0引腳的值決定吊洼。 該寄存器不反映AD0引腳的值训貌。
??該寄存器的默認(rèn)值是0x68。

四、實(shí)驗(yàn)步驟

??第1步:連接電路递沪。

樹莓派 T型轉(zhuǎn)接板 BMP180氣壓傳感器
SCL SCL SCL
SDA SDA SDA
5V 5V VCC
GND GND GND
MPU6050實(shí)驗(yàn)電路圖
MPU6050實(shí)驗(yàn)實(shí)物接線圖

??第2步:PCF8591模塊采用的是I2C(IIC)總線進(jìn)行通信的豺鼻,但是在樹莓派的鏡像中默認(rèn)是關(guān)閉的,在使用該傳感器的時(shí)候款慨,我們必須首先允許IIC總線通信儒飒。

打開I2C總線通信

??第3步:查詢MPU6050的地址。得出地址為0x68檩奠。

pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

??第4步:編寫控制程序桩了。使用Python 2編寫的程序比C++簡(jiǎn)潔許多,smbus函數(shù)請(qǐng)?jiān)谥暗腎2C文章中查閱笆凌。
??樹莓派基礎(chǔ)實(shí)驗(yàn)12:PCF8591模數(shù)轉(zhuǎn)換器實(shí)驗(yàn)

??實(shí)驗(yàn)結(jié)果示例:

gyro_xout :  -546  scaled:  -5
gyro_yout :  -26  scaled:  -1
gyro_zout :  82  scaled:  0
accel_xout:  1132  scaled:  0.069091796875
accel_yout:  3912  scaled:  0.23876953125
accel_zout:  14324  scaled:  0.874267578125
x rotation:  15.2301539313
y rotation:  -4.35957842715

??控制程序:

#!/usr/bin/python

import smbus
import math
import time

# 電源管理寄存器地址
power_mgmt_1 = 0x6b
power_mgmt_2 = 0x6c

def read_byte(adr):
    return bus.read_byte_data(address, adr)

def read_word(adr):
    high = bus.read_byte_data(address, adr)
    low = bus.read_byte_data(address, adr+1)
    val = (high << 8) + low
    return val

def read_word_2c(adr):
    val = read_word(adr)
    if (val >= 0x8000):
        return -((65535 - val) + 1)
    else:
        return val

def dist(a,b):
    return math.sqrt((a*a)+(b*b))
    #math.sqrt(x) 方法返回?cái)?shù)字x的平方根圣猎。

def get_y_rotation(x,y,z):
    radians = math.atan2(x, dist(y,z))
    #math.atan2(y, x) 返回給定的 X 及 Y 坐標(biāo)值的反正切值。
    return -math.degrees(radians)
    #math.degrees(x) 將弧度x轉(zhuǎn)換為角度乞而。

def get_x_rotation(x,y,z):
    radians = math.atan2(y, dist(x,z))
    return math.degrees(radians)


bus = smbus.SMBus(1) # or bus = smbus.SMBus(1) for Revision 2 boards
address = 0x68       # This is the address value read via the i2cdetect command

# Now wake the 6050 up as it starts in sleep mode
bus.write_byte_data(address, power_mgmt_1, 0)

while True:
    time.sleep(0.1)
    gyro_xout = read_word_2c(0x43)
    gyro_yout = read_word_2c(0x45)
    gyro_zout = read_word_2c(0x47)
    
    print ' '
    print "gyro_xout : ", gyro_xout, " scaled: ", (gyro_xout / 131) #倍率:±250°/s
    print "gyro_yout : ", gyro_yout, " scaled: ", (gyro_yout / 131)
    print "gyro_zout : ", gyro_zout, " scaled: ", (gyro_zout / 131)

    accel_xout = read_word_2c(0x3b)
    accel_yout = read_word_2c(0x3d)
    accel_zout = read_word_2c(0x3f)

    accel_xout_scaled = accel_xout / 16384.0 #倍率:±2g
    accel_yout_scaled = accel_yout / 16384.0
    accel_zout_scaled = accel_zout / 16384.0

    print "accel_xout: ", accel_xout, " scaled: ", accel_xout_scaled
    print "accel_yout: ", accel_yout, " scaled: ", accel_yout_scaled
    print "accel_zout: ", accel_zout, " scaled: ", accel_zout_scaled

    print "x rotation: " , get_x_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)
    print "y rotation: " , get_y_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)

    time.sleep(0.5)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末送悔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爪模,更是在濱河造成了極大的恐慌欠啤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屋灌,死亡現(xiàn)場(chǎng)離奇詭異洁段,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)共郭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門祠丝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人除嘹,你說我怎么就攤上這事写半。” “怎么了尉咕?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵叠蝇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我年缎,道長(zhǎng)悔捶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任单芜,我火速辦了婚禮蜕该,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洲鸠。我一直安慰自己蛇损,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淤齐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袜匿。 梳的紋絲不亂的頭發(fā)上更啄,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音居灯,去河邊找鬼祭务。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怪嫌,可吹牛的內(nèi)容都是我干的义锥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼岩灭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拌倍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起噪径,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柱恤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后找爱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梗顺,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年车摄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寺谤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吮播,死狀恐怖变屁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薄料,我是刑警寧澤敞贡,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站摄职,受9級(jí)特大地震影響誊役,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谷市,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一蛔垢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迫悠,春花似錦鹏漆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)括蝠。三九已至,卻和暖如春饭聚,著一層夾襖步出監(jiān)牢的瞬間忌警,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工秒梳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留法绵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓酪碘,卻偏偏與公主長(zhǎng)得像朋譬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兴垦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345