《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > I2C總線在大幅面高速彩色噴繪機中的應用
I2C總線在大幅面高速彩色噴繪機中的應用
來源:微型機與應用2011年第7期
靳祥陸,,劉 晉,張 平,,王政林,,薛凱方
(遼寧師范大學 計算機與信息技術學院,,遼寧 大連 116081)
摘要: 介紹了I2C總線的結構,、工作原理和數據傳輸方式,,詳細討論了基于I2C總線的大幅面高速彩色噴繪機軟硬件設計。經研究測試,,系統(tǒng)能夠噴繪出高精度彩色圖像,,達到了預期要求。
Abstract:
Key words :

摘  要: 介紹了I2C總線的結構,、工作原理和數據傳輸方式,詳細討論了基于I2C總線的大幅面高速彩色噴繪機軟硬件設計,。經研究測試,,系統(tǒng)能夠噴繪出高精度彩色圖像,達到了預期要求,。
關鍵詞: I2C總線,;噴繪機;ATmega8,;EEPROM,;SAA1064

 隨著大型噴繪機應用領域的拓展與普及,,人們對噴繪產品的質量要求也越來越高。為了提高噴繪產品的清晰度,,本系統(tǒng)采用分組噴頭,,每組6色或者8色,共3組~6組可選,??紤]到通信效率和電路的簡化設計,采用簡單實用的I2C總線實現主控制系統(tǒng)與多噴頭之間的數據傳輸,,同時基于I2C總線與SAA1064驅動芯片擴展了4個數碼管用于顯示和校驗,。
1 I2C總線的概念
 I2C總線是Philips公司推出的芯片間串行數據傳輸總線,軟硬件協議十分巧妙,,用兩根線(SDA,、SCL)即可實現完善的全雙工同步數據傳輸,能夠十分方便地構成單主機系統(tǒng)或者多主機系統(tǒng)[1],。任何一個具有I2C接口的器件,,不論其功能差別有多大,都能通過串行數據線SDA和串行時鐘線SCL連接到I2C總線上[2],。從而簡化了系統(tǒng)設計的復雜性,,提高了系統(tǒng)的抗干擾能力,給用戶設計應用系統(tǒng)帶來了極大地方便,。
 在I2C總線上的每一個器件都有一個唯一的識別地址,,器件之間的通信采用主從方式,主機與從機之間的通信是相互的,,但主從關系并不持久,,由數據傳輸的方向決定。發(fā)送并控制數據傳輸的器件稱為主機,,此時在I2C總線上任何被尋址的器件都稱為從機,。一般主機負責起始和終止信號的產生,當主機發(fā)送了起始信號(SCL為高電平時,,SDA產生一個下降沿)后,,再發(fā)送從機地址來選擇需要通信的器件。從機地址有7位和10位兩種,,本文僅介紹7位地址的尋址方式,。尋址信號由一個字節(jié)組成,高7位為器件的地址,,最低位為方向位,,用來表明數據傳輸的方向。當方向位為“0”時表明主機對從機的寫操作;為“1”時表明主機對從機的讀操作,。
 每一個從機在收到尋址信號后都與自己的器件地址進行匹配,,匹配成功后要向主機發(fā)送一個應答信號(ACK),主機收到應答信號后將按照一定的時序開始與從機通信,。若從機不能響應尋址或需要終止傳輸過程,,從機必須在SDA上輸出高電平。主機檢測到異常情況后產生一個終止信號或者起始信號,。
2 基于I2C總線的硬件設計
 本噴繪機系統(tǒng)采用的是主控制系統(tǒng)板(ARM板)級聯多個噴頭控制板的結構,。由于各噴頭的參數和各顏色油墨的參數不同,在系統(tǒng)初始化時要靠I2C總線逐個配置噴頭的容積電壓和油墨的溫度電壓補償表(T-V表) [3],。
噴頭的驅動電壓取決于噴頭的容積電壓和當前噴頭的溫度,,噴頭溫度的變化影響著所盛油墨的粘滯度。為了實現穩(wěn)定點火,,使噴頭所噴出的墨點大小一致,,達到提高噴繪產品的精度,需要隨著溫度的變化及油墨溫度電壓補償表實時改變噴頭的驅動電壓,。綜合多方面的考慮,,使用支持I2C總線的ATmega8來驅動噴頭。
在噴繪機的研發(fā)和使用過程中,,設置一個可視模塊不僅提高研發(fā)的速度而且給用戶的使用帶來了方便,。為了進一步簡化電路設計,采用SAA1064芯片驅動數碼管,。SAA1064是一種支持I2C協議的數碼管驅動芯片,,在采用動態(tài)模式狀態(tài)下,最多可以支持4只數碼管同時顯示,?;贗2C通信的整體結構如圖1所示。

 

 

 I2C總線支持尋址工作,,需要為每個噴頭控制板設定唯一的地址,。可以通過軟件編程的方法設置噴頭板的地址,,考慮到噴繪機的批量生產,,不可能為每一個噴頭控制板燒寫不同的程序,采用電路焊接的方式為噴頭板設置唯一的地址,,在ATmega8上留出3個引腳,,通過選擇是否焊接0 Ω電阻來區(qū)分地址。焊接為輸入0,,不焊接為輸入1。其中000為公用I2C地址,地址111留作備用,,這樣一組噴頭中有001~110共6個從機地址可選,,能夠滿足系統(tǒng)需要。
 數碼管驅動芯片SAA1064的器件從地址由高四位固定地址和低四位可編程地址組成,。其中高四位器件地址固定為0111,,低四位可編程地址由芯片引腳ADR的不同連接方式和讀/寫位決定[4]。在SAA1064中有5個寄存器單元,,分別為1個控制寄存器和4個顯示寄存器,,其中控制寄存器控制數碼管的亮度,動,、靜態(tài)模式及位亮,、暗顯示;4個顯示寄存器存儲要顯示的數據,。
 作為I2C總線器件,,SAA1064的數據操作遵循I2C協議的要求。其數據操作格式如圖2所示,。

 表中S表示起始信號,,P表示終止信號,A表示應答信號,。SLAWR為SAA1064在寫模式時的器件地址,,SUBADR為器件控制寄存器地址,COM為控制命令,。由于SAA1064內部有一個增量控制器,,在通過SDA線向其發(fā)送控制寄存器地址后,控制命令字和要顯示的數據可依次寫入相應的寄存器中[5],。
3 基于I2C總線的軟件設計
 系統(tǒng)上電初始化期間,,主控制系統(tǒng)根據噴頭所盛油墨顏色將油墨的溫度電壓補償表和噴頭容積電壓等一系列參數下載到噴頭控制板上,存儲在ATmega8內部512 B的EEPROM中,。在EEPROM中數據的存儲格式規(guī)定為:在地址0處存儲油墨的顏色,;地址1處存儲噴頭的型號;地址2~3處存儲噴頭的容積電壓,;地址4~5處存儲噴頭偏移電壓,;地址6~7處存儲A/D電壓調整標準值Vset;地址8~9處存儲A/D電壓調整值ADset,;地址10~400存儲溫度電壓補償表,。EEPROM的地址是A/D轉換值減去300,地址內存儲的是A/D對應電壓偏差值的10倍,,其中以8位補碼進行表示,。例如,,地址為100的內存里存儲的是FF,地址為105的內存存儲的值是0F,,其表示的是A/D轉換值為400時對應的電壓偏差值為-0.1 V,,A/D轉換值為405時對應的電壓偏差值為+1.5 V;地址401~507留作備用,;地址508~509存儲A/D校驗0 V電壓,;地址510~511存儲A/D校驗1.23 V電壓。
3.1 噴頭通信模塊
 ATmega8提供了實現標準兩線串行通信的硬件接口TWI(即I2C總線,,以下稱為I2C),,支持主機/從機模式,數據傳輸率最高可達400 kHz,。其I2C接口是面向字節(jié)和基于中斷的,,在所有總線事件后,如收到一個字節(jié)或發(fā)送了一個起始信號等,,都將產生一個I2C中斷,。由于I2C接口基于中斷,因此I2C接口在字節(jié)傳送和接收過程中,,不需要應用程序的干擾,,由其內部寄存器自動控制。在ATmega8中有5個I2C寄存器:(1)TWBR是I2C波特率寄存器用于產生和提供SCL引腳上的時鐘信號,;(2)TWCR是I2C的控制寄存器,,負責產生I2C的應答、起始,、終止信號和控制中斷等,;(3)TWSR是I2C的狀態(tài)寄存器,反映了I2C的邏輯狀態(tài)和總線狀態(tài),;(4)TWDR是I2C的數據寄存器,,用于存儲要發(fā)送的數據或接收到的數據;(5)TWAR是I2C的地址寄存器存放需要通信的從機地址[6],。
I2C中斷服務程序負責與主程序進行通信,。在每次噴頭溫度變化后,I2C中斷服務程序都要將溫度變化值傳給主程序,,主程序以此查找溫度電壓補償表來獲取補償電壓,。此中斷服務包括從地址+寫、從地址+讀,、收到數據,、數據發(fā)送成功、接收到起始條件或停止條件等,。由于從地址的匹配由硬件負責,,中斷服務程序僅負責將收到的數據送到接收緩沖區(qū)Rbuf及將發(fā)送的數據從發(fā)送緩沖區(qū)中取出并發(fā)送出去,。I2C中斷服務流程如圖3所示。

 中斷服務程序在接收到從機地址寫命令(TWSR=0x60)時表示主機要求寫數據到從機地址中,,因此要準備好接收緩沖區(qū)的指針RbufP,,并向主程序發(fā)出開始接收信號即將開始接受標志位bI2Cin置1,隨后應該是收到數據中斷(TWSR=0x80),,將收到的數據放入接收緩沖區(qū)中并增量接收緩沖區(qū)指針,如此反復直到接收到停止條件(TWSR=0xB8,,STA=0),,這時將數據幀完成標志bI2Cend置位。若接收到主機從機地址讀命令(TWSR=0xA8)時,,要復位發(fā)送緩沖寄存器SbufP指針,,并將發(fā)送寄存器中的第一個字節(jié)發(fā)送出去,在數據發(fā)送成功后(TWSR=0xB8),,將后續(xù)的數據發(fā)送出去,,并增量發(fā)送緩沖區(qū)指針,直到接收到停止條件,。
 無論是從機地址寫命令,、從機地址讀命令,收到數據還是數據發(fā)送成功,,I2C的傳送過程都沒有完成,,因此在返回時需要置位TWINT(TWI中斷標志),以便繼續(xù)下一步的I2C通信,。但在收到停止條件后,,表示一次完整的I2C通信完成,此時需要主程序對剛才I2C通信的數據進行處理,,因此這時不能復位TWINT,,要暫時停止I2C動作,同時向主程序發(fā)送標記bI2Cend,,通知主程序進行數據處理,。為保證下一次I2C通信能夠正常進行,主程序在處理完I2C數據后要將TWINT置位,,以便開啟下一次的I2C傳送,。
 I2C數據處理程序處于主程序的循環(huán)中,當主程序發(fā)現數據接收就緒標志bI2Cend置位時進入本處理程序中,。首先從緩沖區(qū)Rbuf的第一個單元中取出命令和地址A8,。然后對命令進行判斷,如果是寫EEPROM地址命令(Command=0000001),,則將Rbuf的第二個字節(jié)與前面獲得的A8合并構成9位地址,,等待EEPROM允許讀寫標志EEWE變?yōu)榈碗娖胶?,?位地址寫入EEPROM地址寄存器EEAR中。然后復位TWINT,,開始下一幀的傳輸,。EEWE變?yōu)榈碗娖奖硎旧弦淮蜤EPROM結束,若上一次EEPROM讀寫沒有結束就變更地址可能會發(fā)生錯誤,。
 若是EEPROM寫操作命令(Command=0000010),,則將Rbuf的第二個字節(jié)取出寫入EEPROM數據寄存器EEDR中,并置位EEPROM開始寫標志EEMWE和EEWE,,開始EEPROM的寫操作,。最后復位TWINT,開始下一幀的傳輸,。    如果是EEPROM讀操作命令(Command=0000100),,則置位EEPROM讀標志EERE,然后從EEDR中讀出數據寫入發(fā)送緩沖區(qū)Sbuf中,。真正的發(fā)送操作是當I2C中斷發(fā)生,,且I2C狀態(tài)是從機地址讀時,由I2C中斷服務程序直接將Sbuf的內容寫入TWDR中完成寫操作,。復位TWINT后,,開始下一幀的傳輸。
 其他命令作為備用,,可進行對應的操作,,但在結束后都必須復位TWINT,以便開始下一次I2C通信,。對錯誤的命令或無法識別的命令,,通過數碼管進行顯示以便及時排除故障。再復位TWINT,,開始下一次的傳送,。
3.2 數碼管顯示模塊
 數碼管僅用于顯示數據,在一般情況下I2C總線上的驅動芯片SAA1064只作為從機,,接收主機的數據,。本系統(tǒng)中用數碼管顯示EEPROM的非法操作、噴頭溫度以及初始化時的校準值,。
 MCU主程序主要有兩個狀態(tài),,系統(tǒng)啟動后首先進入初始化校準狀態(tài),校準正確后進入正常工作狀態(tài),。校準狀態(tài)負責校準各A/D轉換電路中因分壓電阻精度產生的誤差,,并將校準值顯示在數碼管上以便快速設置。進入正常工作狀態(tài)后,,數碼管顯示用于顯示噴頭的溫度,,當非法操作EEPROM時還可以顯示錯誤類型,。噴頭控制板上有兩路A/D,A/D0用于電壓調整器的輸出采樣,;A/D1用于噴頭的溫度采樣,。其A/D0的校準顯示流程如圖4所示。

 系統(tǒng)初始化開始后,,設AD0為查詢模式,、關閉AD0中斷隨后啟動AD0,經過一段時間,,停止AD0并讀取AD0采樣值,。經轉換得到電壓值,經I2C總線顯示在數碼管上,,判斷是否是需要的電壓輸出值,若不是則不斷調整ADset來獲得需求值,,若顯示正確就將ADset和需求的電壓輸出值Vcur保存到EEPROM中,,完成校準工作并返回到主程序中。
 每個噴頭控制板作為從機與主控制系統(tǒng)進行多對一的雙向數據通信,,使得系統(tǒng)布線簡捷,,傳輸效率高,降低了系統(tǒng)復雜度和成本,。經過試驗測試,,達到了預期的噴繪效果。本文的方法經簡單修改也可應用于其他類似場合,,值得推廣使用,。
參考文獻
[1] 何立民.I2C總線應用系統(tǒng)設計[M].北京:北京航空航天大學出版社,1995.
[2] 梁建華,,肖伸平.基于S3C44B0X的I2C總線設計[J],,微計算機信息,2006,,22(5):142-144.
[3] 張秋風,,劉晉.基于計算機平臺的多噴頭噴繪機控制系統(tǒng)的設計與實現[J].微型機與應用,2010,,29(24):93-95.
[4] 孫世君,,宋強.4位LED驅動芯片SAA1064的原理與應用[J],丹東紡專學報,,2004,,11(3):4-7.
[5] 周劍利,梁延貴.具有I2C總線接口的發(fā)光二極管驅動控制器[J],,電子元器件應用,,2003,,5(11):22-23.
[6] 馬潮,詹衛(wèi)前,,耿德根.ATmega8原理及應用手冊[M],,北京:清華大學出版社,2003.

此內容為AET網站原創(chuàng),,未經授權禁止轉載,。