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