但成福,劉曉明
(重慶大學 通信工程學院,重慶 400030)
在工業(yè)現(xiàn)場、交通、電力系統(tǒng)等調度環(huán)境中,常常需要語音通信監(jiān)控系統(tǒng)。而大多數語音通信系統(tǒng)由傳統(tǒng)的電路交換技術、路由技術及公眾交換電話網PSTN實現(xiàn)[1]。傳統(tǒng)語音通信系統(tǒng)存在的缺陷有:當節(jié)點很多時,所需設置的地址數目就會很龐大,給設計者帶來很大的工作量;因元器件種類繁多、電纜數量大,給維護帶來繁重的負擔;通信模式單一,無法滿足多種要求。由德國Bosch公司開發(fā)的CAN總線是一種多主機局部網絡系統(tǒng),采用雙線串行通信方式工作,廣泛應用于汽車自動化、樓宇自控、工業(yè)控制等領域。CAN總線具有糾錯能力較強、傳輸距離較遠、傳輸速度快、抗干擾能力強等特點,且價格低廉、布線簡單。由CAN總線構成的語音通信系統(tǒng)能很好地適用于工業(yè)生產現(xiàn)場,具有較好的實際意義。
本文對應用于工業(yè)生產現(xiàn)場的語音通信系統(tǒng)設計了一種全新的方案,利用CAN總線進行數據傳輸,以ARM9微控制器和DSP處理芯片為核心,完成電話節(jié)點的全數字化設計。
在一個CAN通信系統(tǒng)中,CAN處理報文的過程可以看作為簡單的M/M/1排隊系統(tǒng)模型[2-3]。設T為一幀數據平均傳輸延遲,λ為節(jié)點數據發(fā)生率,μ為CAN總線傳輸速率,則根據排隊論理論可推導出如下關系[4]:
若系統(tǒng)采用擴展CAN幀傳輸,每幀CAN報文數據場為8 B,則CAN數據幀信息為128 bit。一般地,若每幀CAN報文傳輸數據字節(jié)為 Fn(取值范圍為 1,2…,8),則CAN數據幀信息為 64+8×Fn(bit),單個 CAN節(jié)點數據發(fā)生率λ與語言編碼速率Vvoice(kb/s)的關系式為:
將式(2)代入式(1)得:
式(3)表示了CAN系統(tǒng)中語音數據幀平均時延與CAN總線傳輸速率、語音編碼速率以及每幀報文傳輸數據字節(jié)數之間的關系。
(1)取 Fn=8,由式(2)得 λ=2×Vvoice。
對幾種常用的語音編碼標準進行仿真,其平均時延與CAN速率之間的關系如圖1所示。其中縱坐標小于0表示系統(tǒng)超載,沒有實際意義,在應用中應當避免這種情況。從圖1可看出,以ITU G.723標準為例,其語音壓縮速率為6 kb/s、CAN總線傳輸速率約為 12 kb/s時,語音數據傳輸平均時延迅速下降,接近 0,即在CAN總線傳輸速率≥2×Vvoice時,語音數據基本接近無延遲傳輸,與理論推導的CAN節(jié)點數據發(fā)生率在誤差范圍內是等同的。由此可以認為單個CAN節(jié)點占用系統(tǒng)最小帶寬等于其數據發(fā)生率,即:
在CAN通信系統(tǒng)中,傳輸距離與傳輸速率成反比,如表1所示。本設計要求在無中繼情況下傳輸距離不小于250 m,對應選取最大傳輸速率為250 kb/s。又因為每幀報文傳輸數據字節(jié)越大,語音數據平均延時越小,故本系統(tǒng)設定每幀報文數據字節(jié)為8 B。在滿足5對節(jié)點同時通話的情況下,單個節(jié)點占系統(tǒng)帶寬最大為250÷(5×2)=25 kb/s。由式(4)可知,語音編碼速率應不大于12.5 kb/s。為保證音質,本系統(tǒng)選用低算法時延、高壓縮比的ITU G.729A語言編碼算法進行語音編解碼。
表1 CAN總線傳輸距離與傳輸速率的關系
圖2為單個節(jié)點的系統(tǒng)框圖。節(jié)點的基本信息如CAN速率、本機電話號碼等都可以通過串口由PC設置并直接保存到EEPROM。當節(jié)點發(fā)起呼叫時,系統(tǒng)將通過話筒采集到的語音信號經立體聲音頻編解碼芯片TLV320AIC32采樣和量化后形成數字語音信號送至DSP進行壓縮編碼。MCU接收到DSP的碼流后存在SDRAM中開設的CAN數據發(fā)送緩沖區(qū),然后進行CAN數據幀組裝,最后通過CAN接口模塊發(fā)送到CAN總線,并在128×64的LCD屏幕上顯示相關信息。當某節(jié)點被呼叫時,總線上的數據通過CAN接口進行報文幀檢測濾波后存入在SDRAM中開設的CAN數據接收緩沖區(qū),并進行響鈴提示。MCU解析報文幀,將幀中語音數據送至DSP進行解碼,解碼流經TLV320AIC32處理(D/A轉換、功率放大)后由聽筒播出,即可實現(xiàn)語音通信。
本系統(tǒng)的主控制器采用Atmel公司的工業(yè)級ARM9芯片AT91SAM9260,其主頻時鐘在頻率為190 MHz時可達到210 MIPS的性能。用TI公司推出的16 bit定點高速DSP芯片TMS320VC5509A與立體聲音頻編解碼芯片TLV320AIC32共同實現(xiàn)語音編解碼算法。TLV320AIC32的編程配置由DSP通過IIC接口實現(xiàn)。數據格式選擇DSP模式,其能與DSP的多通道緩沖串口McBSP兼容。此外,這兩款芯片的I/O電壓兼容,從而使得TMS320VC5509A與TLV320AIC32可以無縫連接。TLV320AIC32接口電路如圖3所示,圖中,MIC為本地麥克風輸入,LINE為電話線輸入,可選擇采集雙、單聲道語音。
圖4為CAN接口硬件設計原理圖。圖中,MCP2515為CAN控制器,TJA1050為CAN收發(fā)器,其相互間使用高速光耦合器6N137,使總線上各CAN節(jié)點間實現(xiàn)電氣隔離,以增強總線節(jié)點抗干擾能力。每個CAN節(jié)點上CANH線和CANL線之間加一個120Ω的匹配電阻,以增加數據傳輸的抗干擾性和可靠性。CAN總線與CAN收發(fā)器之間加上TVS和自恢復保險絲,有效抑制總線上的尖峰脈沖,達到了保護節(jié)點的目的。
本系統(tǒng)中的語音編解碼部分采用DSP實現(xiàn),采用成熟的G.729A編解碼算法,其在DSP上的移植見參考文獻[5-7]。本文主要介紹CAN應用層協(xié)議設計[8-9],并分別從ID分配、幀組成、呼叫過程、被叫過程以及系統(tǒng)維護5個方面進行闡述。
2.3.1 ID分配
在ID的設計過程中,按照應用協(xié)議將29 bit ID分成不同功能的域,能大大提高系統(tǒng)的性能和效率。29 bit ID分配如下:
ID28~ID25:表示報文幀的優(yōu)先級,在總線出現(xiàn)競爭時優(yōu)先傳輸高優(yōu)先級的報文幀,可節(jié)約總線沖突檢測的仲裁時間,提高系統(tǒng)實時性。實際應用時總是將重要崗位的優(yōu)先級設為最高,使其數據優(yōu)先得到傳輸。
ID24~ID18:表示報文攜帶的指令碼,可傳輸廣播、組播、接通、忙音、掛機等多個控制指令。
ID17~ID16:表示分段標志,只在語言數據幀中有意義,控制報文不考慮。
ID15~ID14:預留備用,此域可根據具體情況作相應的變動。
ID13~ID0:表示應用程序中語音通信節(jié)點的號碼,由組號+組內號碼共同組成,約定ID13~ID0=0x0000為廣播地址,ID6~ID0=0x00為組播地址。本系統(tǒng)理論上可掛載節(jié)點數為(128-1)×(128-1)=16 129個。
2.3.2 幀組成
系統(tǒng)設計中,CAN總線上傳輸的幀主要分為控制幀和數據幀,以命令碼進行區(qū)分。控制幀的ID分段標志不用,默認為0,其數據段只填充發(fā)起命令幀的節(jié)點號碼,如圖5所示。
圖5 控制幀組成
G.729A語音壓縮算法的幀長為10 ms,數據量為10 B,而一個CAN幀最大能傳輸8 B,故需要分兩段傳輸語音壓縮數據包。分段標志為1的8 B數據在前,分段標志為2的2 B數據在后。收到的數據幀必須按前后順序存放,否則解碼出來的語音數據將出錯。數據幀如圖6所示。
2.3.3 呼叫過程
節(jié)點呼叫流程如圖7所示。呼叫時,呼叫節(jié)點將呼叫命令和目的節(jié)點的號碼分別填入ID,同時將本機號碼填入數據域組成呼叫命令幀發(fā)送到CAN總線。目的節(jié)點收到呼叫幀后,以同樣的幀格式(此時命令為應答命令)返回一個應答幀,并做好語音通信準備,同時在LCD上顯示相關信息。在通話中主動掛機的節(jié)點發(fā)送掛機命令幀,釋放連接,結束通話。
圖6 數據幀組成
圖7 呼叫流程
2.3.4 被叫過程
系統(tǒng)節(jié)點被動呼叫處理流程如圖8所示。若節(jié)點在通話過程中收到呼叫幀,則向主動呼叫節(jié)點返回一個帶忙命令的應答幀;否則返回一個帶應答命令的應答幀,與呼叫節(jié)點建立通信。在通話過程中若是主動掛機或收到對方的掛機命令幀,則結束本次通話。
2.3.5 系統(tǒng)維護
圖8 被叫流程
在一般的主從式網絡結構中,網絡的維護都靠主機節(jié)點來完成,當網絡中節(jié)點數目增加時,這種方式將極大增加主機節(jié)點的負荷。本系統(tǒng)網絡的維護依靠節(jié)點自身完成。如圖9所示,節(jié)點定期向總線廣播一個檢測幀報文,總線上除此檢測節(jié)點以外的任何節(jié)點收到此報文后,將回復一個ACK報文。若在一定時間內沒有收到ACK報文,則節(jié)點判斷自己與總線斷開了連接,通過重啟CAN接口與總線重新建立連接。若重啟后還是不能建立連接則進行語音報警提示。
CAN卡能捕獲CAN總線上的全部信息,并給出時間標識,用以對網絡的穩(wěn)定性和實時性進行分析。利用4個節(jié)點組成一個小型測試網絡,其中:節(jié)點號為1、2的節(jié)點屬于同一組內的不同節(jié)點,節(jié)點號為3、4的節(jié)點為另一組內的節(jié)點。分別進行廣播、組播、點對點通話測試,測試時通話質量較好,語音較清晰。兩個CAN卡分別接到正在通話的兩個節(jié)點,進行10次測試,相關測試數據如表2所示。
圖9 網絡節(jié)點維護過程
從表2可看出,每次測試中兩節(jié)點收發(fā)消息幀的數據差都很小,丟幀數不到0.2‰。其中單點5測試是在另外兩個節(jié)點通話的過程中完成的,故相應的時延比其他單點測試的長,組播整體時延較單點時延長,較廣播時延短。但都在可以接受的范圍內,不影響語音通話的質量。
本文在排隊論的基礎上對基于CAN總線的語音通信系統(tǒng)進行了仿真分析,得出了每幀傳輸數據字節(jié)越多語音數據幀平均延時越小的結論。同時,推導出了基于CAN總線的語音通信系統(tǒng)中,CAN節(jié)點占用系統(tǒng)帶寬與節(jié)點語音碼率之間的一般關系式,并根據此關系式確定了系統(tǒng)的編碼方案以及系統(tǒng)容量。由于CAN總線主要工作在數據鏈路層和物理層,本文重點從ID分配、幀組成、呼叫過程、被叫過程以及系統(tǒng)維護5個方面介紹了本系統(tǒng)的CAN應用層協(xié)議設計。測試結果表明,本系統(tǒng)穩(wěn)定可靠,無丟幀現(xiàn)象,無明顯語音延遲,能正常通信。本語音系統(tǒng)已在某大型工礦車間得到了應用。
表2 相關測試數據
[1]廖泉.基于CAN總線的語音通信系統(tǒng)[D].北京:北方工業(yè)大學,2006.
[2]任培,周經倫,羅鵬程.基于排隊論的數據鏈系統(tǒng)信息傳輸時間延遲分析[J].計算機科學,2008,35(8):93-94.
[3]解爭龍,李向軍.基于排隊論模型的網絡擁塞率研究[J].計算機工程與設計,2007,28(17):4172-4174.
[4]崔連成,王滿意,李彥瑋,等.基于排隊論的CAN總線語音通信系統(tǒng)建模分析[J].工礦自動化,2009,35(7):69-71.
[5]王偉,王偉達,郭恒業(yè).G_729A語音壓縮算法分析及DSP實現(xiàn)[J].計算機工程與應用,2007,43(8):99-102.
[6]周長林,肖贛峰,王玉東.基于 DSP的 G_729A編解碼的實時實現(xiàn)[J].儀器儀表學報,2007,28(10):1911-1915.
[7]鄧紅德,王博棟,吳佳楠.基于 CAN總線的雙DSP通信方案設計與實現(xiàn)[J].測控技術,2011,30(6):83-85.
[8]BOSCH R.CAN specification version2.0[EB/OL].(1991-10-10).http://www.bosch.com.
[9]王邦繼,劉慶想,李相強,等.CAN總線應用層協(xié)議的研究與實現(xiàn)[J].計算機工程與應用,2011,47(20):14-16.