鄭傳堯
摘要:STM32模擬IIC,實現與QMC5883L電子羅盤通信,經過數學計算得到最終數據并顯示在LCD屏上的指定位置,通過數值判斷方向,實現簡單指南針的功能。
關鍵詞:STM32;電子羅盤;IIC;軟件模擬
中圖分類號:TP391? ? ? ? 文獻標識碼:A? ? ? ? 文章編號:1009-3044(2019)03-0218-03
人機交互(HMI)已經獨立為一門學科。人機界面(HCI)指出,HCI是人與計算機之間傳遞、交換信息的媒介和對話接口。手機是人機交互的完美體現。從古代的司南到近代的實體指南針,再到手機界面上的虛擬指南針,在這個過程中,指南針賦予時代發展的意義重大。電子羅盤在虛擬指南針實現上起到了信息采集者的作用。信息采集完后需要信息運輸者進行傳輸,IIC總線起到了信息運輸者的作用。在運輸過程中為了保證運輸效率,正確率,必須對傳輸過程制定約束, IIC總線協議起到約束的作用。只有保證信息采集者、信息運輸者能夠正常運作,才能實現數據最后的視覺呈現。
1 IIC介紹
物理結構上,SDA和SCL構成IIC的通信線路,其中SDA為數據線,提供數據傳輸,SCL為時鐘線,提供傳輸時鐘。連接在IIC總線上的設備,既可以作為數據發送端,同時也可以作為數據接收端。當主控器為Master時,被控器為Slave時,并聯在總線上,他們各自都有唯一的地址,這些地址就是打開IIC總線上連接設備大門的鑰匙。在信息傳輸過程中,連接在IIC總線上的每一個器件都可作為Master、Slave使用,也可作為發送端、接收端使用。CPU發出的控制信號分為地址碼和數據碼兩個部分:地址碼用來選址,數據碼是通信的內容,這樣各個器件的控制電路雖然掛在同一條總線上,卻彼此獨立。圖1為IIC總線設備連接硬件結構圖。
圖2為IIC總線時序圖,從圖中得知IIC總線在傳送數據的過程中共有三種類型信號,分別是:開始信號(START)、應答信號(ACK)和結束信號(STOP)。SCL為高電平時,SDA由高電平跳變為低電平,這個過程定義為開始信號;Master(Slave)在接收到8位數據后,將發送數據的Slave(Master)發出特定的低電平脈沖(ACK=0),表示已接收到數據,這個過程定義為應答信號;SCL為高電平時,SDA由低電平調變為高電平,這個過程定義為結束信號。在進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩定,另外IIC總線協議規定,每傳送一個字節數據(含地址及命令字)后都要有一個應答信號,已確定數據傳送是否被對方收到。
2電子羅盤介紹
電子羅盤,別名數字指南針,它是利用地磁場來定北極的裝置。與傳統指針式相比,它功耗低,體積小,精度高,最重要的是它的輸出信號通過處理后生成的數字信號可以用來實現機械控制。
2.1 QMC5883L介紹
QMC5883L是一款高精度三軸AMR(AMR:全稱Anisotropic Magnetoresistance,各向異性磁電阻)傳感器,采用7位尋址(寫地址: 0x1a,讀地址:0x1b)自帶溫控補償功能保證信號輸出的穩定性。它憑借其優異的性能,可以被廣泛應用于無人機、高精度工業和汽車電子領域。
QMC5883L有兩種操作模式,分別是Standby Mode和Continuous Mode,通過寄存器(09H)的模式位控制。當傳感器處于Standby Mode,傳感器本身很少功能被激活,功耗低,并且在這種模式下沒有磁力計測量,內部時鐘也停止,當傳感器處于Continous Mode(模式位:01)下,磁傳感器連續進行測量并將測量數據放入數據輸出寄存器中。
2.2 QMC5883L模式設置介紹
如圖3IIC寫操作順序圖,可以理解Master執行寫操作設置Slave為Continous Mode的流程。首先Master發送START信號后緊接著發送8位2進制信號(Slave地址+R/W模式位),等待Slave發出的ACK,收到ACK后證明Master與從機已經建立好通信,緊接著Master又發送8位2進制數來選擇需要設置從機某一個寄存器的地址(這里寄存器地址位0x09),收到Slave發出的ACK后,Master馬上發送所選擇Slave寄存器需要設置的內容,收到Slave發出的ACK后,Master發送STOP信號,斷開與Slave的通信,此時Slave的工作模式已經被設置好了。
如圖4IIC讀操作順序圖,可以理解Master讀取地址0x00H~0x07H內容的流程。首先通過寫操作確定讀取內容的首地址為0x00H,接下來通過IIC總線設置模塊為讀模式,每接收一個8位數據,Master產生一個ACK,直到接收到0x07H內容后發送NACK信號,緊接著發送STOP信號完成讀取操作。
3單片機模擬IIC通信
在這里選擇軟件模擬IIC的最大好處就是便移植,任何一個單片機,只要有IO口,這段代碼就可以很好的移植過去。相比較而言,硬件IIC每換一款MCU,就得重新編碼,移植麻煩。
本次采用設備為正點原子STM32F7開發板、QMC5883L電子羅盤、12V電源適配器、TFTLCD屏、杜邦線。
3.1結構設計
圖5為所選開發板的部分IO外設資源分布圖(開發板和裸機不能相提并論,開發板IO已經資源分配好,亂用會導致意外錯誤產生)。本次設計需要使用開發板的PH4(SCL)和PH5(SDA)這兩個GPIO口。表1為QMC5883L的IO資源分配表,以此來確定開發板與電子羅盤的硬件連接方式。從表1得知QMC5883L的SCL與SDA的序號分別位1號和16號,即在硬件連接的時候,PH4與1號相連,PH5與16號相連,2號口與11號口分別與開發板上的VDD(3.3V)與GND相連。LCD屏直接與STM32F7開發板對應的接口相連。
3.2原理實現
此處通過代碼來分析STM32模擬IIC通信和QMC5883交流系統實現的過程。以下均為封裝好的函數體,分別定義起始信號函數為void IIC_Start(void);結束信號函數為void IIC_Stop(void);產生應答信號函數為void IIC_Ack(void);不產生應答信號函數為void NAck(void);發送一個字節函數為void IIC_Send_Byte(u8 tad);接收一個字節函數為u8 IIC_Read_Byte(void)。
QMC5883L電子羅盤必須進行初始化操作才能正常使用,初始化操作中包含設置電子羅盤為ContinousMode的過程,其他配置內容均按照用戶手冊來書寫。根據圖3寫操作順序圖,調用定義好的函數,完成初始化操作
完成QMC5883L初始化操作后,緊接著就是實現STM32獲取QMC5883L傳回來數據。通過QMC5883L數據手冊得知我們需要的數據連續存放在0x00H~0x05H這6個地址中。首先通過寫操作設置QMC5883L設置讀取的起始地址為0x00H,然后通過IIC總線設置QMC5883L為讀模式,讀取起始地址為0x00H的內容。
完成以上步驟QMC5883L采集得數據已經存放在QMCBUF這個數組里面,這些數據是原始數據,不可以拿來直接使用,需要做數學處理。得到最后的Angle_XY、Angle_XZ、Angel_YZ這個三個變量是我們可以直接使用的。
3.3結論
通過與手機指南針對比,當Angle_XY的結果為0.000000或者360.000000時,QMC5883L上的X軸指向正南方;當Angle_XY的結果為90.000000時,X軸指向正西方;當Angle_XY的結果為180.000000時,X軸指向正北方;當Angle_XY的結果為270.000000時,X軸指向正東方。通過這個結果得出,QMC5883L是順時針計數的。
QMC5883L是各向異性磁電阻傳感器,易受周圍磁場干擾,所以使用之前需要做參數校準。
4拓展應用
QMC5883L和GPS聯合使用可以實現低速設備的簡單定位導航功能。
理念介紹:以電子羅盤X軸指向為低速設備的初始前進方向,得到一個初始的Angle_XY值,利用GPS模塊得到低速設備當前點A的經緯度,和目的點B的經緯度聯合使用,通過數學計算算出A、B兩點與正南方的夾角[Θ],然后算出[Θ]與Angle_XY的差值[Δ]。我們只需要判斷[Δ]的值是否為0,若為0說明低速設備朝向是目的點方向。通過這種方式,低速設備可以主動巡航到目標點。
5結束語
文章介紹了IIC總線的物理結構和通信協議,并實現了STM32與QMC5883L電子羅盤的通信,得出IIC通信占用的IO資源少,操作方便的結論。IIC總線協議是實現IIC總線傳輸的必要條件,把器件的地址當成器件的標識符是保證傳輸正確率的前提。IIC只是眾多通信方式的其中一種,另外如SPI通信、CAN通信、無線通信、藍牙通信等等在我們的日常生活中都可以碰得到,它們利用各自優勢服務于物聯網,豐富了人類物質精神需求,推進人機交互的發展。
參考文獻:
[1] 郭天祥.51單片機C語言教程[M].北京:電子工業出版社,2012:178-192.
[2] 張洋,左忠凱,劉軍.STM32F7原理與應用:HAL庫版.上[M].北京:北京航空航天大學出版社,2017:465-484.
【通聯編輯:唐一東】