1 設計任務書本設計主要涉及的專業課程有:
1、單片機原理及應用
2、信號分析與處理
3、計算機控制技術
4、傳感器技術
5、電子線路CAD
6、數字電子技術
7、復變函數與積分變換
1、基于MEMS集成電路檢測傾斜角度案例:MEMS三軸陀螺儀的傾斜角檢測應用;知識點包括MEMS陀螺儀的檢測原理、檢測電路、常用芯片型號,常見MEMS陀螺儀應用場合及注意事項。
2、基于MEMS集成電路檢測加速度案例:MEMS三軸加速度計的加速度檢測應用;知識點包括MEMS加速度的檢測原理、檢測電路、常用芯片型號,常見MEMS加速度計應用場合及注意事項。
根據設計任務并完成以下目標
- 了解六軸傳感器MPU6050工作原理以及其工作方式。
- 熟練運用ARM完成對傳感器的操作與控制;
- 傳感器數據通過串口通信在上位機上模擬顯示;
- 系統與手機通過藍牙進行數據傳輸;
該系統主要可以完成對傾斜角及加速度的檢測、數據通過藍牙上傳到手機、與上位機進行信息交互、上位機顯示三軸方向加速度、顯示三軸方向傾角、實時顯示MPU6050的傳感器狀態曲線、數據3D模擬顯示等功能。
結合所學課程和設計任務,制定了相應的工作任務,合理規劃工作步驟。
2 設計論證及計劃市面上已經出現了眾多以陀螺儀或加速度傳感器為核心的智能設備,本次課程設計以此為課題具有可行性。
現代工業生產設備的發展正在朝著向大型化,高速化,連續化和自動化的方向發展。其復雜程度日益增加,所涉及的知識范圍廣泛,不但包括機械設計、材料科學,現在又加入了計算機技術、光學、電路技術等,其不但價格昂貴,維護也同樣麻煩。面對如此龐大的機械設備,我們必須需要一些儀器儀表來進行輔助檢查與測試,我們希望這些儀器儀表具有一定的智能,不但要具有實時檢測、自動報警、結果顯示與保存等功能,還要具有體積小、重量輕、便于攜帶等優點。然而傳統的機電儀表雖然具備某些優點,但其本身也是機、電、光、算的結合物,其使用與維護也相當的復雜,不利于當今機械設備的發展。
隨著現代網絡技術的發展和企業規模的快速擴大,功能獨立的近距離的傳統儀器測量已不能滿足工業需求,遠距離且大規模的測量儀器群將是未來發展的趨勢。由于傳統的儀器是模擬信號,不利于計算機的控制與運算,將不可能勝任現代企業管理及技術發展的需要。
由上分析,我們意識到傳統的測量儀器在成本價格、制作技術、操作簡便性等方面存在著不足,不能滿足社會的需要。而近年來發展起來的虛擬儀器技術則在成本價格、制作技術、操作簡便性方面有著不俗的表現,能很好的滿足現代科學技術發展的需要,是儀器儀表未來發展的的重要方向。
六軸傳感器MPU6050近年來廣泛應用于各個領域,是未來智能設備中不可或缺的重要元件智能型手機、平板裝置設備、手持型游戲產品、游戲機、3D遙控器、可攜式導航設備。
本課程設計是在MDK環境下完成的,采用C語言進行編程,完全采用面向對象的開發思想,具有很大的個人發揮空間,完成同一種功能可以從不同方面下手解決。MDK源自德國的KEIL公司,是RealView MDK的簡稱。在全球MDK被超過10萬的嵌入式開發工程師使用。目前最新版本為:MDK5.14,該版本為 uVision5 IDE集成開發環境,是目前針對ARM處理器,尤其是Cortex M內核處理器的最佳開發工具。
設計規劃:
針對此次課程設計,設計如下規劃,如圖2.1所示。
圖2.1 課程設計規劃
本章主要對課程設計的背景進行了介紹并對設計進行規劃,制定出合理的工作流程。
3 硬件系統設計傾角加速度檢測系統,主要要完成對溫度、加速度、傾斜角的采集、顯示等工作。傳統上采集加速度利用的是三軸加速度傳感器而采集傾斜角利用的是三軸陀螺儀,針對本次課程設計要求成本相對較高。鑒于上述原因,本系統采用MPU6050六軸陀螺儀作為核心傳感器。外部數據信號經 MPU6050將輸入的模擬信號轉換成數字信號,并通過IO口傳送到單片機系統( STM32RCT6)。單片機系統將接收的數字信號譯碼處理,通過TFTLCD將溫度及各個方向傾角顯示出來,如圖3.1說所示。
圖3.1 設計整體架構(見附件)
3.2.1MCU的選型及分析
STM32F103RCT6是ST公司推出的一款以CortexM3為核心設計的32位單片機,遠超8位51單片機,能出色完成設計任務。STM32的優異性體現在以下幾個方面。
1.超低的價格。以8位機的價格,得到32位機,是STM32最大的優勢。
2.超多的外設。STM32擁有包括:FSMC、TIMER、SPI、IIC、USB、CAN、IIS、SDIO、ADC、DAC、RTC、DMA等眾多外設及功能,具有極高的集成度。
3.豐富的型號。STM32僅M3內核就擁有F100、F101、F102、F103、F105、F107、F207、F217等8個系列上百種型號,具有QFN、LQFP、BGA等封裝可供選擇。同時STM32還推出了STM32L和STM32W等超低功耗和無線應用型的M3芯片。
4.優異的實時性能。84個中斷,16級可編程優先級,并且所有的引腳都可以作為中斷輸入。
5.杰出的功耗控制。STM32各個外設都有自己的獨立時鐘開關,可以通過關閉相應外設的時鐘來降低功耗。
6.極低的開發成本。STM32的開發不需要昂貴的仿真器,只需要一個串口即可下載代碼,并且支持SWD和JTAG兩種調試口。SWD調試可以為你的設計帶來跟多的方便,只需要2個IO口,即可實現仿真調試。

STM32F103RCT6原理圖,如圖3.2所示。
圖3.2 MCU原理圖
3.2.2 傳感器的選型及分析
設計要求完成對傾斜角、加速度和溫度的檢測,完成以上要求分別需要3軸陀螺儀、3軸加速度傳感傳感器、溫度傳感器考慮到成本等各方面因素本次課程設計選用具有多種功能的6軸傳感器(MPU6050)來完成對數據的檢測。
MPU6050 是 InvenSense 公司推出的全球首款整合性 6 軸運動處理組件,相較于多組件方案,免除了組合陀螺儀與加速器時之軸間差的問題,減少了安裝空間。MPU6050 內部整合了 3 軸陀螺儀和 3 軸加速度傳感器,并且含有一個第二 IIC 接口,可用于連接外部磁力傳感器,并利用自帶的數字運動處理器(DMP: Digital Motion Processor)硬件加速引擎,通過主 IIC 接口,向應用端輸出完整的 9 軸融合演算數據。有了 DMP,我們可以使用InvenSense 公司提供的運動處理資料庫,非常方便的實現姿態解算,降低了運動處理運算對操作系統的負荷,同時大大降低了開發難度。
MPU6050 的特點包括:
① 以數字形式輸出 6 軸或 9 軸(需外接磁傳感器)的旋轉矩陣、四元數(quaternion)、歐拉角格式的融合演算數據(需 DMP 支持)。
② 具有 131 LSBs/° /sec 敏感度與全格感測范圍為±250、±500、±1000 與±2000° /sec的 3 軸角速度感測器(陀螺儀)。
③ 集成可程序控制,范圍為±2g、±4g、±8g 和±16g 的 3 軸加速度傳感器。
④ 移除加速器與陀螺儀軸間敏感度,降低設定給予的影響與感測器的飄移。
⑤ 自帶數字運動處理(DMP: Digital Motion Processing)引擎可減少 MCU 復雜的融合演算數據、感測器同步化、姿勢感應等的負荷。
⑥ 運作時間偏差與磁力感測器校正演算技術,免除了須另外進行校正的需求
⑦ 自帶一個數字溫度傳感器。
⑧ 帶數字輸入同步引腳(Sync pin)支持視頻電子影像穩定技術與GPS。
⑨ 可程序控制的中斷(interrupt),支持姿勢識別、搖攝、畫面放大縮小、滾動、快速下降中斷、 high-G 中斷、動作感應、觸擊感應、搖動感應功能。
⑩ VDD 供電電壓為 2.5V±5%、 3.0V±5%、 3.3V±5%; VLOGIC 可低至 1.8V
⑪ 陀螺儀工作電流: 5mA,陀螺儀待機電流: 5uA;加速器工作電流: 500uA,加速器省電模式電流: 40uA@10Hz。
⑫ 自帶 1024 字節 FIFO,有助于降低系統功耗。
⑬ 高達 400Khz 的 IIC 通信接口。
⑭ 超小封裝尺寸: 4x4x0.9mm(QFN)。

MPU6050傳感器實物圖如3.3所示,其檢測軸如圖3.4所示。
3.3 MPU6050實物圖
圖3.4 MPU605檢測軸方向

MPU6050的內部框圖如圖3.5所示。
圖3.5 MPU內部框圖
其中SCL和SDA是連接MCU的IIC接口,MCU通過這個IIC接口控MPU6050,另外還有一個IIC接口:AUX_CL和AUX_DA,這個接口可用來連接外部從設備,比如磁傳感器,這樣就可以組成一個9軸傳感器。VLOGIC是IO口電壓,該引腳最低可以到1.8V,我們一般直接接VDD即可。AD0是從IIC接口(接MCU)的地址控制引腳,該引腳控制IIC地址的最低位。如果接GND,則MPU6050的IIC地址是:0X68,如果接VDD,則是0X69。MPU6050外圍電路如圖3.6所示。
圖3.6 MPU6050外圍電路圖
MPU6050工作原理:


陀螺儀檢測也不是完全精確的,存在一定的誤差。由于陀螺儀測量角度時使用積
圖3.7 積分誤差
分,會存在積分誤差,如圖3.7所示,若積分時間Dt越小,誤差就越小。這十分容易理解,例如計算路程時,假設行車時間為 1 小時,我們隨機選擇行車過程某個時刻的速度Vt乘以1小時,求出的路程誤差是極大的,因為行車的過程中并不是每個時刻都等于該時刻速度的,如果我們每5分鐘檢測一次車速,可得到Vt1、Vt2、Vt3-Vt12這12個時刻的車速,對各個時刻的速度乘以時間間隔(5分鐘),并對這12個結果求和,就可得出一個相對精確的行車路程了,不斷提高采樣頻率,就可以使積分時間Dt變小,降低誤差。
同樣地,提高陀螺儀傳感器的采樣頻率,即可減少積分誤差,目前非常普通的陀螺儀傳感器的采樣頻率都可以達到8KHz,已能滿足大部分應用的精度要求。
更難以解決的是器件本身誤差帶來的問題。例如,某種陀螺儀的誤差是0.1度/秒,當陀螺儀靜止不動時,理想的角速度應為0,無論它靜止多久,對它進行積分測量
得的旋轉角度都是0,這是理想的狀態;而由于存在0.1度/秒的誤差,當陀螺儀靜止不動時,它采樣得的角速度一直為0.1度/秒,若靜止了1分鐘,對它進行積分測量得的旋轉角度為6度,若靜止了1小時,陀螺儀進行積分測量得的旋轉角度就是360度,即轉過了一整圈。只有當正方向誤差和負方向誤差能正好互相抵消的時候,才能消除這種累計誤差。
三軸加速度傳感器檢測原理:

由于直接用陀螺儀測量角度在長時間測量時會產生累計誤差,引入了檢測傾角的傳感器。測量傾角最常見的例子是建筑中使用的水平儀,在重力的影響下,水平儀內的氣泡能大致反映水柱所在直線與重力方向的夾角關系,利用圖3.8中的T字型水平儀,可以檢測出橫滾角與俯仰角,而偏航角是無法以這樣的方式檢測的。在電子設備中,一般使用加速度傳感器來檢測傾角,它通過檢測器件在各個方向的形變情況而采樣得到受力數據,根據F=ma轉換,傳感器直接輸出加速度數據,因而被稱為加速度傳感器。由于地球存在重力場,所以重力在任何時刻都會作用于傳感器,當傳感器靜止的時候(實際上加速度為0),傳感器會在該方向檢測出加速度g,不能認為重力方向測出的加速度為g,就表示傳感器在該方向作加速度為g的運動。
圖3.8 T字型水平儀

當傳感器的姿態不同時,它在自身各個坐標軸檢測到的重力加速度是不一樣利用
各方向的測量結果,根據力的分解原理,可求出各個坐標軸與重力之間的夾角,如圖3.9所示。
圖3.9 重力檢測
因為重力方向是與地理坐標系的“天地”軸固連的,所以通過測量載體坐標系方向軸與重力方向的夾角即可求得它與地理坐標系的角度旋轉關系,從而獲知載體姿態。
加度度傳感器檢測的誤差:
由于這種傾角檢測方式是利用重力進行檢測的,它無法檢測到偏航角(Yaw),原理跟 T字型水平儀一樣,無論如何設計水平儀,水泡都無法指示這樣的角度。
另一個缺陷是加速度傳感器并不會區分重力加速度與外力加速度,當物體運動的時候,它也會在運動的方向檢測出加速度,特別在震動的狀態下,傳感器的數據會有非常大的數據變化,此時難以反應重力的實際值。
利用磁場檢測角度
為了彌補加速度傳感器無法檢測偏航角(Yaw)的問題,我們再引入磁場檢測傳感器,它可以檢測出各個方向上的磁場大小,通過檢測地球磁場,它可實現指南針的功能,所以也被稱為電子羅盤。由于地磁場與地理坐標系的“南北”軸“固聯”,利用磁場檢測傳感器的指南針功能,就可以測量出偏航角(Yaw)了。
磁場檢測器的誤差
與指南針的缺陷一樣,使用磁場傳感器會受到外部磁場干擾,如載體本身的電磁場干擾,不地理同環境的磁鐵礦干擾等等。
姿態融合與四元數
可以發現,使用陀螺儀檢測角度時,在靜止狀態下存在缺陷,且受時間影響,而加速度傳感器檢測角度時,在運動狀態下存在缺陷,且不受時間影響,剛好互補。假如我們同時使用這兩種傳感器,并設計一個濾波算法,當物體處于靜止狀態時,增大加速度數據的權重,當物體處于運動狀時, 增大陀螺儀數據的權重,從而獲得更準確的姿態數據。同理,檢測偏航角,當載體在靜止狀態時,可增大磁場檢測器數據的權重,當載體在運動狀態時,增大陀螺儀和 GPS 檢測數據的權重。這些采用多種傳感器數據來檢測姿態的處理算法被稱為姿態融合。
在姿態融合解算的時候常常使用“四元數”來表示姿態,它由三個實數及一個虛數組成,因而被稱之為四元數。使用四元數表示姿態并不直觀,但因為使用歐拉角(即前面說的偏航角、橫滾角及俯仰角)表示姿態的時候會有“萬向節死鎖”問題,且運算比較復雜,所以一般在數據處理的時候會使用四元數,處理完畢后再把四元數轉換成歐拉角。
該設計采用精英STM32F1開發板的IIC接口連接MPU6050模塊,本章實驗功能簡介:程序先初始化MPU6050等外設,然后利用DMP庫,初始化MPU6050及使DMP,最后,在死循環里面不停讀取:溫度傳感器、加速度傳感器、陀螺儀、DMP姿態解算后的歐拉角等數據,通過串口上報給上位機(溫度不上報),利用上位機軟件,可以實時顯示 MPU6050 的傳感器狀態曲線,并顯示3D姿態,可以通過KEY0 按鍵開啟/關閉數據上傳功能。同時,在 LCD 模塊上面顯示溫度和歐拉角等信息。DS0來指示程序正在運行。
MPU6050引腳說明
該模塊引出8個引腳功能說明如表3.1所示。
表3.1 MPU6050功能引腳說明

序號 引腳名稱 說明
1

VCC 3.3/5V 電源輸入
2 GND 地線
3 SCL I2C從時鐘信號線SCL(模塊上已接上拉電阻)
4 SDA I2C從數據信號線SDA(模塊上已接上拉電阻)
5 XDA I2C主串行數據信號線,用于外接傳感器
6 XCL I2C主串行數據信號線,用于外接傳感器
7 AD0 從機地址設置引腳:接地或懸空,地址為:0X68
接VCC時,地址為:0X69
8 INT 中斷輸出引腳
其中的SDA/SCL、XDA/XCL通訊引腳分別為兩組I2C信號線。當模塊與外部主機通訊時,使用SDA/SCL,如與STM32芯片通訊;而XDA/XCL則用于MPU6050芯片與其它I2C傳感器通訊時使用,例如使用它與磁場傳感器連接,MPU6050模塊可以把從主機SDA/SCL接收的數據或命令通過XDA/XCL引腳轉發到磁場傳感器中。但實際上這種功能比較雞肋,控制麻煩且效率低,一般會直接把磁場傳感器之類的I2C傳感器直接與MPU6050掛載在同一條總線上(即都連接到SDA/SCL),使用主機直接控制。

所要用到的硬件資源主要有STM32開發板和MPU6050模塊,它們的連接方式如圖3.10所示。MPU6050模塊與外部連接,引出了VCC、GND、IIC_SDA、IIC_SCL、MPU_INT和MPU_AD0等信號。其中,IIC_SDA和IIC_SCL帶了4.7K上拉電阻,外部可以不用再加上拉電阻了,另外MPU_AD0自帶了10K下拉電阻,當AD0 懸空時,默認IIC地址為(0X68)。模塊的IIC_SCL、IIC_SDA分別連接在STM32的PC12、PC11上面。XDA和XCL是用來擴展連接磁力傳感器使MPU6050轉換為“九軸傳感器”。

圖3.10 連接方式圖
本章主要介紹CMU的選型外設,以及各種傳感器測角度的原理及缺陷,MPU6050利用姿態融合算法彌補傳統傳感器設計缺陷。MPU6050各個接口的功能介紹,單片機與MPU6050連接方式的設計。
4 軟件系統設計系統軟件設計環境是MDK,軟件設計由主程序模塊、MPU6050程序模塊、串口通訊模塊以及液晶驅動程序模塊組成。
1)初始化IIC接口
MPU6050采用IIC與STM32F1通信,所以我們需要先初始化與MPU6050連接的SDA和SCL數據線。
2)復位MPU6050
這一步讓MPU6050內部所有寄存器恢復默認值,通過對電源管理寄存器1(0X6B)的bit7寫1實現。復位后,電源管理寄存器1恢復默認值(0X40),然后必須設置該寄存器為0X00,以喚醒MPU6050,進入正常工作狀態。
3)設置角速度傳感器(陀螺儀)和加速度傳感器的滿量程范圍
這一步,設置兩個傳感器的滿量程范圍(FSR),分別通過陀螺儀配置寄存器(0X1B)和加速度傳感器配置寄存器(0X1C)設置。我們一般設置陀螺儀的滿量程范圍為±2000dps,加速度傳感器的滿量程范圍位±2g。
4)設置其他參數
這里,我們還需要配置的參數有:關閉中斷、關閉AUX IIC接口、禁止FIFO、設置陀螺儀采樣率和設置數字低通濾波器(DLPF)等。本章我們不用中斷方式讀取數據,所以關閉中斷,然后也沒用到 AUX IIC 接口外接其他傳感器,所以也關閉這個接口。分別通過中斷使能寄存器(0X38)和用戶控制寄存器(0X6A)控制。MPU6050可以使用FIFO存儲傳感器數據,不過本章我們沒有用到,所以關閉所有FIFO通道,這個通過FIFO使能寄存器(0X23)控制,默認都是0(即禁止 FIFO),所以用默認值就可以了。陀螺儀采樣率通過采樣率分頻寄存器(0X19)控制,這個采樣率我們一般設置為50即可。數字低通濾波器(DLPF)則通過配置寄存器(0X1A)設置,一般設置DLPF為帶寬的1/2即可。
5)配置系統時鐘源并使能角速度傳感器和加速度傳感器
系統時鐘源同樣是通過電源管理寄存器1(0X6B)來設置,該寄存器的最低三位用于設置系統時鐘源選擇,默認值是0(內部8M RC震蕩),不過我們一般設置為1,選擇x軸陀螺PLL作為時鐘源,以獲得更高精度的時鐘。同時,使能角速度傳感器和加速度傳感器,這兩個操作通過電源管理寄存器2(0X6C)來設置,設置對應位為0即可開啟。至此,MPU6050的初始化就完成了,可以正常工作了(其他未設置的寄存器全部采用默認值即可),接下來,我們就可以讀取相關寄存器,得到加速度傳感器、角速度傳感器和溫度傳感器的數據了。