LonWorks總線是由美國Echelon公司推出的一種現場總線技術,由于LonWorks控制網絡的開放性、高速性、互操作性及其對現場環境的適應性,它已廣泛應用于樓宇自動化、家庭自動化、保安系統、辦公設備、交通運輸、工業過程控制等行業。LON總線的現場節點間采用LonTalk協議。當工程師使用便攜設備對現場節點進行檢測或進行現場數據采集時,往往只能使用RS232串口。眾所周知,RS232的傳輸速度最高只能達到9600kbps,這對實時性要求很高的現場數據采集來說遠遠不能滿足要求。針對這一情況,筆者開發研制了LON總線的USB2.0接口卡。該卡提供的USB2.0接口使得數據的傳輸速度能提高到480Mbps.并且向下完全兼容流行的USBl.1協議。
1 USB2.0的主要特點
??? USB協議的2.0版本于2000年4月推出,支持以下3種速度模式:低速模式(low speed)1.5Mb/s;全速模式(full speedl 12Mb/s;高速模式(high speed)480Mb/s。它支持現存的所有USB設備.可以把USB1.1設備插入USB1.1的PC機接口,并且在電氣上兼容USB1.1的連接線。
??? 1.1 USB總線特點
??? ◆數據傳輸速率高;
??? ◆數據傳輸可靠;
??? ◆同時掛接多個USB設備;
??? ◆USB接口能為設備供電;
??? ◆支持熱插拔。
??? 1.2 USB的新特性
??? USB還具有一些新的特性。如:實時性(可以實現和一個設備之間有效的實時通信)、動態性(可以實現接口間的動態切換)、聯合性(不同的而又有相近特性的接口可以聯臺起來)和多能性(各個不同的接口可以使用不同的供電模式)。
2 LonWorks接口卡硬件設計
??? 2.1 LonWorks接口卡通信原理及硬件結構
該接口卡的工作原理如下:接口卡由LON網接口模塊和USB2.0接口模塊組成,如圖1所示,它采用雙CPU技術,主CPU為USB2.0控制器CY7C68013內置的增強8051內核(該內核的運行速度是普通8051的5倍),主要作為協議的轉換模塊,用來完成USB2.0協議與LonTalk協議之間的轉換,向上與便攜PC機(或其它具有USB接口的便攜設備)進行通信,向下與3150進行并口通信,輔CPU為TMPN3l50,主要起LON網接口的功能,作為通信協處理器使用,將從主CPU接收到的來自便攜PC機(或其它具有USB接口的便攜設備)的報文解析成Lontalk協議報文并通過Lonworks收發器傳向LON網,或將從LON網上接收到的Lontalk協議報文轉發給主CPU,再由主CPU傳向便攜PC機(或其它具有USB接口的便攜設備)。51CPU與Neuron3150采用并行方式通信。Neuron芯片的11個I/O有34種可選工作模式,其中包括并行I/O方式,該方式數據的最大傳送速率可達3.3Mbps。并口工作方式在數據傳送速度方面的優勢,使得Neuron芯片與51CPU完成大數據量的傳送成為可能。它們之間的數據傳輸是通過運用“虛寫令牌傳遞機制”實現的,擁有令牌的一方擁有對數據總線的寫控制權。
2. 2 LonWOrks接口卡硬件電路設計
??? 該接口卡中,USB2.O控制器采用Cypress公司推出的USB2.0控制器CY7C68013,它是USB2.0的完整解決方案。該芯片包括帶8.5KB片上RAM的高速8051單片機、4KB FIFO存儲器以及通用可編程接口(GPIF)、串行接口引擎(SIE)和USB2.O收發器。它無需外加芯片即可完成高速USB傳輸,性價比較高。智能串行接口引擎(SIE)執行所有基本的USB功能,將嵌入式MCU解放出來用于實現專用的功能,井保證其持續高性能的傳輸速率。通用可編程接口(GPIF)允許它“無膠粘接”,即可與任何ASIC或DSP進行連接,并且還支持所有通用總線標準,包括ATA、UTOPIA、EPP和PCMCIA。它完全適用于USB2.0,并向下兼容USB1.1。
???? 3150芯片選用Toshiba公司生產的TMPN3150。3150片內存儲器的地址范圍是E800H~F
FFH,包括2KB的SRAM和512B的EEPROM。3150可以外接存儲器,如RAM、ROM、EEPROM或Flash,其地址范圍是0000H~7FFH。根據一般應用的性能和成本要求,3l50的外部存儲器采用Flash和RAM。Flash選用IS61C256AH-15N,RAM選用AT29C512。61C256和29C512的地址范圍通過邏輯門電路根據Neuron芯片的地址線和控制線E來確定。51與3l50采用3150的并口通信方式,將Neuron芯片的IO0~IO7作為8根數據線與51CPu的PB(PB0-PB7)口相連-108作為片選信號線e§)與51CPU的PCO口相連.IO9作為數據讀/寫信號線(R/W)與51CPU的PC6口(寫信號)相連。IO10作為握手信號線(HS)與51CPU的PC1口相連。
為提高增加接口卡的可靠性及穩定性,本設計增加了一個鎖存器,完成復位接口的功能。當3150芯片復位時,通過鎖存器將復位信號傳送給CY7C68013內置的8051處理器,8051接到復位信號自動復位,并馬上清鎖存器,其接線如圖2所示。在并口通信中,8051與3150同步非常重要,要完成并口通信,8051首先要與3150達到同步且同步操作必須在3150復位時進行。8051只在初始化程序時才與3150進行同步操作。因此完成同步后,每當3l50由于誤操作或錯誤運行而造成復位時,3150與8051將會失去同步,而8051無法檢測到,從而造成并口通信失敗。加入鎖存器之后,8051就能檢測到3150的復位信號并自動復位自己的程序,使得8051與3150再次達到同步。這將使適配器的可靠性和穩定性都得到加強。
??? Neuron芯片與LON網絡介質的接口采用一種LonWorks自由拓撲型收發器FTT-IOA。FTT-IOA是一種變壓器耦臺收發器,可提供一個與雙絞線的無極性接口,且支持網絡的自由拓撲結構。網絡通信介質采用最常用的雙絞線。
??? 2.3 接口卡的抗干擾設計
??? 工業現場的環境一般來說較為惡劣.存在多種干擾。為保證通信的準確無誤,延長硬件使用壽命,該適配器除采用通常的供電和接地抗干擾措施外,主要是要避免和消除來自網絡介質的靜電泄放(ESD)和電磁干擾(EMI),即主要針對FTT-IOA來設計抗干擾電路。
??? 對于ESD,在印刷電路板(PCB)設計中應提供一個導入大地的通道.還要不致引起整個PCB電壓的升降。具體采用火花放電隙和箝位二極管來實現。對于EMI,因為FTT-IOA對垂直雜散電磁場最不敏感,而對水平雜散電磁場最敏感。所以在PCB設計中應使FTT-IOA盡量遠離水平雜散電磁場區域。對于不可避免的雜散電磁場,應使其相對于FTT-IOA垂直分布。
3 LOnWorks接口卡軟件設計
??? 3.1 Neuron芯片的編程語言——Neouron C
??? Neuron芯片有一套專門的開發語言——Neuron C。Neuron C派生于ANSI C,并增加了對I/O、事件處理、報文傳送和分市式數據對象的支持,是開發Neuron芯片應用程序的重要工具。其語法擴展包括軟件定時器、網絡變量、顯式報文、多任務調度、EEPROM變量和附加功能等。其中,顯示報文的使用為LON節點間的通信及互操作提供了基礎。通過對不同節點分配網絡地址,即可實現節點之間的數據傳遞。也就是說,LON接口卡中的3150通過構造和解析報文實現了與LON網用戶節點的通信。
??? 3.2 CY7C6801 3的開發工具
??? Cypress公司對CY7C680 1 3提供了較為完備的開發套件CY3681。它包括帶128腳CY7C68013的硬件開發板、相應的控制面板(Control panel)和GPIF代碼自動生成軟件(GPIFT001)。對于內核8051的開發采用Keil開發工具。
??? 3.3 LonWorks接口卡的軟件設計
??? 該接口卡的程序包含兩大部分:一是存儲在CY7C68013中的USB驅動程序和與3150的并口通信程序:二是存儲在3150外部Flash中的并口通信程序以及LonTalk協議轉換程序。USB驅動程序在開發套件CY368 1中已有支持用戶,只要調用即可。而與31 50的并口通信程序則采用Keil C51語言編寫,并通
過USB口下載到CY7C68013的8051內核中。3150外部Flash中的并口通信程序以及LonTalk協議轉換程序采用Neuron C語言編寫,并采用LonWorks開發工具——LonBuilder中的Neuron C編譯器對程序進行編譯,生成ROM映像文件,最后下載到片外Flash中。
在8051的并口通信程序中,需要模擬3150的并口通信從A方式。以下為并口通信程序中主要模塊的C51程序,包括同步模塊(sync—loop());握手模塊(hndshkO);并口數據傳送接收模塊(pio read();pio write(void));令牌傳遞模塊(pass token())。
void sync-loop(void)
{unsigned char rb;
do{RW=0;hndshk();PB=CMD RESYNC;CS=0;CS=I;hndshk();
PB=EOM;CS=0;CS=1;hndshk();PB=0xff;RW=I;CS=0;rb=PB;
CS=I;}while(rb!=CMD ACKSYNC);token=MASTER;}
void hndshk(void)
{while((hs=INTO)==1);}
void pio_read(void)
{unsigned char cmd;unsigned char i;
PB=0xff;hndshk();RW=1;cmd=PB;CS=0;CS=1;
if(cmd==CMD—XFER){hndshk();pio.1en=PB;CS=0;CS=1;}
else pio.1en=o=pass—token();}
void pio-write(void)
{unsigned char sd;
hndshk();RW=0;PB=CMD—XFER;CS=0;CS=1;hndshk0;PB=pio.
1en;CS=0;CS=1:
for(sd=0;sd
pass_token();RW=1;}
void pass_token(void)
{ifftoken==MASTER){hndshk();RW=0;PB=EOM;CS=0;CS=1:
token=SLAVE;}
else token=MASTER;}
??? 根據硬件設計,將3150芯片的I/O定義為并行(parallel)I/O對象類型。定義并行I/O對象的Neuron C源代碼為IO 0 parallel slave P BUS,其中,P BUS為所定義的I/O對象名稱。Neuron將從并口得到的報文解析,再利用Neuron C的消息傳送機制,將解析的消息傳送給適配器下層的應用節點。讀取數據的Neuron C函數為io_in(),其格式如下:io in(P BUS,addressl);
??? 其中,P_BUS為并口IO對象名稱,addressl為接收并口數據的地址。發消息的Neuron C函數為msg send()。
??? 值得注意的是,Neuron芯片的應用CPU在執行該io_in()函數時會處于等待狀態,也就是說等待數據時應用CPU不能處理其它I/O事件、定時器終止、網絡變量更新或報文到達事件。如果2 0字符時間內尚沒有接收到數據,則可能使Wat Chdog定時器產生超時錯。在10MHz的輸入時鐘下,watchdog的超時時間是0.84s(該時間隨輸入時鐘而改變)。通常情況下,調度程序(scheduler)會周期性地對watchdog定時器進行復位,但當程序處理一個較長的任務(task)如io in()時,則有可能終止watChdog定時器,這將導致整個節點的復位。為避免產生這種情況,同時使程序盡可能多地接收到達的數據,本節點程序在接收數據這個任務中周期性地調用函數watchdog update()。
4 結論
??? 本文所設計接口卡的主要目的是為帶有USB接口的便攜設備進行現場數據測量和現場監測提供高速、安全的通信接口。解決了令工程師頭痛的便攜設備與現場設備采用通用串口通信時傳輸速率低、經常掉線、連接不可靠的問題。
評論
查看更多