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