摘 要: 描述了基于I2C總線多步進(jìn)電機(jī)平臺(tái)的設(shè)計(jì),介紹了I2C總線通信協(xié)議的特點(diǎn),給出了I2C總線在1片主MSP430G2553和8片從MSP430G2553之間數(shù)據(jù)傳輸程序流程圖和整個(gè)平臺(tái)的硬件結(jié)構(gòu)框架,完成了基于I2C總線的單主多從通信,最終實(shí)現(xiàn)了對(duì)多路步進(jìn)電機(jī)的控制。
關(guān)鍵詞: I2C總線;MSP430G2553;單主多從;步進(jìn)電機(jī)
0 引言
I2C總線是兩線式串行總線,用于連接微控制器及其外圍設(shè)備,是微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。它是同步通信的一種特殊形式,具有接口線少、控制方式簡單、器件封裝形式小、通信速率較高等優(yōu)點(diǎn)。本文介紹一種利用I2C總線協(xié)議,通過單主多從模式,利用1段音頻信號(hào)控制8個(gè)單片機(jī)實(shí)現(xiàn)不同方向、速率的轉(zhuǎn)動(dòng)。
1 I2C總線技術(shù)
1.1 I2C總線接口
本文所用的芯片主要為TI公司的MSP430G2553芯片,其中的I2C模式是通過USCI_Bx模塊來進(jìn)行配置的,本文主要應(yīng)用了USCI_B0模塊[1]。在I2C模式中,USCI通過兩線式I2C串行總線提供了MSP430與I2C兼容器件的連接。外部器件串行依附在I2C總線上,通過2-線I2C接口為USCI模塊發(fā)送數(shù)據(jù)或從USCI接收數(shù)據(jù)。如圖1所示,I2C總線由時(shí)鐘線SCL和數(shù)據(jù)線SDA構(gòu)成,在時(shí)鐘線SCL保持高電平期間,數(shù)據(jù)線SDA上的電平被拉低(即負(fù)跳變),為I2C的開始信號(hào)[2]。在時(shí)鐘線SCL保持高電平期間,數(shù)據(jù)線SDA被釋放,是I2C的終止信號(hào)。
如圖2所示,進(jìn)行數(shù)據(jù)傳送時(shí),在SCL呈現(xiàn)高電平期間,SDA上的電平必須保持穩(wěn)定,只有在SCL為低電平期間,才允許SDA上的電平改變狀態(tài)。
關(guān)于傳輸速度,I2C總線在標(biāo)準(zhǔn)模式最高為100 kb/s,高速模式最高為400 kb/s。
1.2 I2C總線數(shù)據(jù)傳輸
I2C總線傳輸數(shù)據(jù)必須遵循規(guī)定的數(shù)據(jù)傳輸格式[2],主機(jī)給每個(gè)數(shù)據(jù)傳輸位產(chǎn)生一個(gè)時(shí)鐘脈沖,I2C模式對(duì)數(shù)據(jù)位進(jìn)行操作。在主機(jī)設(shè)置好I2C為發(fā)送模式后,USCI模塊會(huì)檢測(cè)總線是否可用,產(chǎn)生START條件。本文中將音頻信號(hào)依據(jù)頻率分為8段,并且每段對(duì)應(yīng)不同的從機(jī)地址,如此便可依據(jù)不同頻率將音頻信號(hào)發(fā)送給不同的從機(jī)。I2C模式支持7位和10位尋址模式[3],本文運(yùn)用了7位尋址模式。如圖3所示,在7位尋址模式中,第一個(gè)字節(jié)是7位從機(jī)地址和R/W位。接收器在每個(gè)字節(jié)結(jié)束后發(fā)送ACK位。
所有掛到I2C總線的外圍器件各自都有一個(gè)唯一確定的地址[2]。任何時(shí)刻總線上只有一個(gè)主控器件對(duì)總線實(shí)行控制權(quán),分時(shí)實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)傳送。I2C總線上所有外圍器件都有規(guī)范的器件地址,器件地址由7位組成,它和1位方向位(R/W)構(gòu)成了I2C總線器件的尋址字節(jié)SLA,格式如圖4所示。
其中高4位(A6、A5、A4、A3)是I2C總線外圍接口器件固有地址編碼,器件出廠時(shí)已固化好。A0~A2是對(duì)從機(jī)分配的不同地址,本文中MSP430G2553的高4位為0100[1],一共可以掛接8個(gè)單片機(jī)。而最低位R/W為數(shù)據(jù)方向位,當(dāng)R/W為0時(shí),主機(jī)發(fā)送數(shù)據(jù),當(dāng)R/W為1時(shí),主機(jī)接收數(shù)據(jù)。本文中主機(jī)只用于發(fā)送數(shù)據(jù),故R/W位一直為0。本文中的8個(gè)從機(jī)地址分別為:40H、42H、44H、46H、48H、4AH、4CH和4EH。
故總線上的數(shù)據(jù)傳輸過程[4]是:(1)主控制器發(fā)送開始信號(hào)S;(2)主控制器發(fā)送芯片尋址字節(jié);(3)從器件發(fā)出應(yīng)答信號(hào)ACK;(4)主控制器發(fā)送數(shù)據(jù)尋址字節(jié);(5)發(fā)送者發(fā)送數(shù)據(jù),接受者接收數(shù)據(jù);(6)主控制器發(fā)送停止信號(hào)P終止數(shù)據(jù)傳輸。其流程圖如圖5所示。
2 I2C的系統(tǒng)硬件結(jié)構(gòu)
圖6是本文所研究平臺(tái)的整體框圖,在此系統(tǒng)中8個(gè)從機(jī)對(duì)應(yīng)8種不同音符頻段,分別控制8個(gè)電機(jī)的轉(zhuǎn)速。系統(tǒng)的主要功能是通過PC由MATLAB對(duì)給定音頻進(jìn)行編碼[5],產(chǎn)生單片機(jī)可用的曲譜編碼,然后通過串口將所產(chǎn)生的編碼發(fā)送給主MSP430G2553,主機(jī)在尋址時(shí)先判斷編碼范圍,然后通過I2C總線尋址相應(yīng)的從機(jī),并向被尋址的MSP430G2553發(fā)送相應(yīng)的音頻編碼。從機(jī)將所接收到的音頻編碼作為定時(shí)器的定時(shí)周期,利用定時(shí)器產(chǎn)生相應(yīng)的脈沖信號(hào),從而驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)。
為實(shí)現(xiàn)單主多從單片機(jī)MSP430G2553之間的通信,將主機(jī)I2C總線上的SCL(P1.6)和SDA(P1.7)分別與從機(jī)的SCL(P1.6)和SDA(P1.7)相連接,并且在VCC與SCL、SDA兩個(gè)信號(hào)之間分別接上10 k?贅的上拉電阻,如圖7所示。由此從機(jī)的P1.6就成了時(shí)鐘接收端,P1.7為數(shù)據(jù)接收端。通過編程將主機(jī)發(fā)送的數(shù)據(jù)送入Buff,從機(jī)通過讀Buff中的數(shù)據(jù)將其實(shí)時(shí)轉(zhuǎn)換為頻率改變的方波,并通過P1.5口將其發(fā)送給電機(jī)驅(qū)動(dòng)器,從而實(shí)現(xiàn)控制步進(jìn)電機(jī)的功能。
3 I2C單主多從通信
首先將USCI模塊初始化,使主機(jī)/從機(jī)可以進(jìn)行接收/發(fā)送操作,初始化過程如下[6]:將USCI中軟件復(fù)位位UCSWRST置位來初始化所有的USCI寄存器,配置P1.6和P1.7分別為I2C的SCL端口和SDA端口,通過UCMST和UCMODEx選擇I2C模式和主機(jī)或從機(jī)模式。然后通過置位UCSEEL_2來選擇主機(jī)時(shí)鐘為SMCLK (1 MHz),并將主時(shí)鐘12分頻為100 kHz作為主機(jī)中的SCL時(shí)鐘[1]。上述模塊初始化完成后,清除UCSWRST,釋放USCI,使能發(fā)送中斷。
對(duì)于主發(fā)送模塊,初始化之后需要把從地址設(shè)置為7 bit,再將目標(biāo)從地址寫入寄存器UCB0I2CSA中。本系統(tǒng)將所給的音頻信號(hào)按照頻率分為8段,每段對(duì)應(yīng)不同的從機(jī)地址,使主機(jī)通過判斷與不同的從機(jī)地址相匹配。初始化完成后通過置位UCRT和UCTXSTT,使主機(jī)工作在發(fā)送模式并產(chǎn)生一個(gè)起始條件。當(dāng)?shù)刂纷x入U(xiǎn)CB0I2CSA中后,硬件會(huì)自動(dòng)識(shí)別并找到與之相對(duì)應(yīng)的從機(jī),一旦地址匹配則UCSTTIFG置位,主機(jī)進(jìn)入LPM0模式并且觸發(fā)中斷,將要發(fā)送的數(shù)據(jù)寫入U(xiǎn)CB0TXBUF中,當(dāng)從機(jī)地址被應(yīng)答時(shí)UCTXSTT位即刻清零。本文中將音頻信號(hào)裝入數(shù)組中,當(dāng)所有數(shù)據(jù)發(fā)送完畢后產(chǎn)生一個(gè)STOP條件,并將UCB0TXIFG清零同時(shí)退出低功耗模式。圖8為主機(jī)發(fā)送模式流程圖。
對(duì)于從接收模塊,由于要對(duì)主機(jī)中讀取的數(shù)據(jù)進(jìn)行處理,本文中選用定時(shí)器A將其數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的脈沖波,從而達(dá)到控制電機(jī)的目的。因此需要先將定時(shí)器A初始化[7],為了不影響主機(jī)中SMCLK,本文使定時(shí)器A工作在ACLK時(shí)鐘下。隨后將其USCI模塊設(shè)置為I2C接收模式,并且無需設(shè)置USCI時(shí)鐘。一旦從設(shè)備中UCB0RXBUF接收到的新數(shù)據(jù)被讀走,從設(shè)備即發(fā)送一個(gè)應(yīng)答信號(hào)給主設(shè)備,然后開始下一個(gè)數(shù)據(jù)的接收。定時(shí)器A將接收到的數(shù)據(jù)通過定時(shí)器中斷產(chǎn)生頻率改變的方波,并通過P1.5口輸出,從而控制步進(jìn)電機(jī)依據(jù)音頻信號(hào)的不同頻率來變速轉(zhuǎn)動(dòng)。圖9為從機(jī)接收模式流程圖。
4 結(jié)論
本文介紹的I2C總線單主多從通信系統(tǒng)占用I/O資源少,功耗低,傳輸速率高,能夠以較高性能控制步進(jìn)電機(jī)隨音樂轉(zhuǎn)動(dòng)。從實(shí)驗(yàn)結(jié)果來看,主從單片機(jī)可以通過該總線系統(tǒng)進(jìn)行非常可靠的通信,進(jìn)而可在各個(gè)領(lǐng)域取得廣泛應(yīng)用。
參考文獻(xiàn)
[1] MSP430x2xx Users′ guide[Z].2004.
[2] 沈建華,楊艷琴,翟驍曙.MSP430系列16位超低功耗單片機(jī)原理與應(yīng)用[M].北京:清華大學(xué)出版社,2004.
[3] 賈朱紅,張曉冬.基于I2C總線的單主多從單片機(jī)之間的通信[J].微計(jì)算機(jī)信息,2009(8):101-102.
[4] 鄧忠華,李霞,陳浩.I2C總線技術(shù)在單片機(jī)串行擴(kuò)展中的應(yīng)用[J].武漢理工大學(xué)學(xué)報(bào)(交通科學(xué)與工程版),2005(2):227-229,247.
[5] 孫金中,馮炳軍.基于I2C總線控制的音頻處理電路設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2009(18):85-88.
[6] 吳小平,李莉,何鑫,等.I2C總線及其數(shù)據(jù)通信編程[J].微計(jì)算機(jī)信息,2000(2):11-13.
[7] 陳光建,賈金玲.基于單片機(jī)的I2C總線系統(tǒng)設(shè)計(jì)[J].儀器儀表學(xué)報(bào),2006(S3):2465-2466,2472.