關鍵詞:編/解碼器 雙口RAM PC 串行通信 UM3758-108
在遙測、遙控領域中,常常使用工業(yè)PC機與單片機組成的多機系統(tǒng)完成測控任務。PC機因其豐富的軟硬件資源和友好的人機界面而被用作上位機,而單片機則因其優(yōu)越的性價比和靈活的功能配置而被用作下位機。上位 機和下位機之間通過串行數(shù)據(jù)總線(如CAN總線、RS485總線等)連接,具體結(jié)構(gòu)如圖1所示。在進行數(shù)據(jù)傳輸時,一般先由上位機發(fā)出地址幀對指定的下位機尋址,在得到確認以后向選中的下位機發(fā)送命令和參數(shù),或者接收該下位機采集的數(shù)據(jù)。但在多機系統(tǒng)中,進行數(shù)據(jù)通信遇到的一個首要問題是如何區(qū)分總線的地址信息和其它的數(shù)據(jù)信息,這也是各類通信協(xié)議和通信規(guī)約中的一項重要內(nèi)容。由于目前所使用的通信協(xié)議和通信規(guī)約比較復雜,因此在一個簡單的主從式多機系統(tǒng)中,往往由開發(fā)人員自行定義一些簡單的通信協(xié)議來解決上述問題。本文介紹一種基于編/解碼器的通信方案,較好地解決了多機系統(tǒng)中作為上位機的工控機對各下位機的尋址問題。
1 編/解碼芯片UM3758-108A
專用編/解碼芯片UM3758-108A屬大規(guī)模CMOS器件,其引腳排列如圖2所示:A0~A9為三態(tài)編碼地址輸入;D0~D7為二態(tài)鎖存式編碼數(shù)據(jù)輸入或輸出;OSC引腳外接振蕩電阻和電容,其值決定發(fā)送頻率;VSS為電源地;T/R為編碼發(fā)送與編碼收選擇引腳,接高電平時為編碼發(fā)送,接低電平時為接收編碼;IN為編碼脈沖輸入引腳(接收解碼時);TX/RX外接驅(qū)動電路,為編碼發(fā)送輸出端,該引腳也可作為爭碼接收正確標志顯示(RX輸出低電平);VDD為電源正端(3~12V)。
單片UM3758-108A芯片是一個完整的接口電路,集編碼發(fā)送和解碼輸出于一身。當T/R端接高電平時,地址碼A0~A9和數(shù)據(jù)碼D0~D7構(gòu)成一個18位的數(shù)據(jù)幀,從TX/RX端循環(huán)不斷地串行發(fā)送出去;當T/R端接低電平時,編碼脈沖由IN端輸入,如果接收的地址碼連續(xù)兩次與本地地址碼一致,接收數(shù)據(jù)將按位傳送到輸出鎖存器中,由D0~D7引腳輸出。同時TX/RX引腳輸出低電平,表示接收正確。
2 UM3758-108A在多機通信中的具體應用
使用編/解碼器實現(xiàn)PC機與單片機的通信時,需要在PC機和單片機上分別配置編/解碼器,以便完成數(shù)據(jù)信息的發(fā)送和接收。由于上位機不僅承擔與下位機的通信任務,還要進行數(shù)據(jù)處理,并以表格或各種圖形方式顯示出來。如果讓上位機直接控制編/解碼芯片,通過并行口進行數(shù)據(jù)收發(fā),在通信量較大的情況下,勢必會占用上位機的大部分工作時間,導致整機性能下降。因此在通信量較大的情況下,應在上位機端設計一個智能I/O擴展卡,該卡可插到上位機底板的擴展槽上。為了上位機和擴屏卡之間達到更快的信息交換速度,可以采用共享存儲器方式進行數(shù)據(jù)交換。傳統(tǒng)的共用存儲器硬件設計比較復雜,應用范圍較小。本文采用Maxim公司生產(chǎn)的雙端口存儲器DS1609,大大簡化了共用存儲器硬件電路設計。如圖3所示,DS1609為256字節(jié)雙端口RAM,屬大規(guī)模CMOS器件;具有兩個獨立的端口,各自擁有一套相應的數(shù)據(jù)/地址復用總線和控制總線;控制信號只有讀、寫和片選,尤其適合于和Intel公司的CPU相連;硬件電路設計非常簡單。該器件允許兩個端口獨立地對存儲器單元進行存取操作,且由于存儲器內(nèi)部特殊的單元電路設計,端口雙方同時對同一個單元進行讀操作時無需促裁邏輯;但當端以方同時對同一單元進行讀/寫或?qū)?寫操作時,仍會發(fā)生競爭。解決讀/寫沖突的一個簡單辦法是執(zhí)行冗余的讀周期,也可使用“郵箱”傳送狀態(tài)信息方式進行軟件仲裁,這種方法需給每個端口分配一個字節(jié),用以寫入狀態(tài)信息,以告知對本端正在進行的操作。對于寫/寫沖突,可給雙方分配固定的單元空間,另外,再給每一組數(shù)據(jù)分配校驗和字節(jié),以確保正確的數(shù)據(jù)交換。圖3中DS1609一側(cè)與89C51 CPU相連,另一側(cè)通過三態(tài)緩沖器與擴展總線相連。
圖4為PC機與80C51單片機使用編/解碼器實現(xiàn)通信的示意圖。UM3758-108A的A0~A9是地址輸入端,每位可有三種狀態(tài):高電平、低電平、開路。利用其不同的組合可產(chǎn)生3 10種不同的編碼。二態(tài)時也有2 10種不同的編碼。智能擴展卡需不斷尋址各個下位機,所以利用鎖存器將數(shù)據(jù)輸出給編/解碼器的地址端,以此可靈活地尋址各個下位機。為了簡化起見,圖4中省去了一個鎖存器,將A8、A9直接懸空。UM3758-108A片內(nèi)具有數(shù)據(jù)鎖存能力,無需加鎖存器,但需加雙向緩沖器以收發(fā)數(shù)據(jù)。下位機端的編碼地址用微型開關SW設置,也可用鎖存器輸出編碼地址;但這樣做需在下位機工作前,將編碼地址由面板輸入,和其它需要設定的參數(shù)一起保存在存儲器(如EEPROM)中,然后再由鎖存器輸出。后者增加了下位機地址編碼的靈活性,但也加重了編程負擔。圖4中,智能I/O擴展卡用74LS273作為擴展接口,以鎖存要尋址的下位機地址,用74LS245收發(fā)數(shù)據(jù)。P1.0為發(fā)送數(shù)據(jù)選擇端:P1.0為低電平時,接口處于接收狀態(tài);為高電平時,處于發(fā)送狀態(tài)。因此,初始化時,上、下位機的兩個接口均應置成接收狀態(tài)。每個接口的TX/RX端除了作為發(fā)送端外,還作為該接口接收正確與否的狀態(tài)指示端。如果接收正確,該接口輸出低電平;否則,為高電平。此端口可作為向CPU發(fā)出中斷請求的信號。為此,發(fā)送數(shù)據(jù)時,應先關閉接收中斷,發(fā)送完畢,再打開接收中斷。
該通信為半雙工方式,且只能由上位機發(fā)起,下位機不主動申請通信。當處于輪詢狀態(tài)時,上位機根據(jù)下位機的編碼地址,向下位機發(fā)送呼叫幀。每臺下位機都由編/解碼器接收并判斷,但只有地址相符的下位機才發(fā)生中斷接收數(shù)據(jù),并建立和上位機的聯(lián)系,以此接收上位機的命令和參數(shù),或?qū)⒉杉臄?shù)據(jù)上傳。由于這種通信方式無差錯控制,因此應根據(jù)傳輸速率,精確定時,保證每個發(fā)送周期相同的編碼信號連續(xù)發(fā)送3次,以提高通信的可靠性。
使用編/解碼器實現(xiàn)PC機與單片機的通信,波特率設置為2400baud,通信距離可達5km以上;不僅可用于數(shù)據(jù)采集系統(tǒng)、LED屏幕顯示系統(tǒng)等有線通信方式,也可采用紅外(IR)、超聲波(US)等用于無線通信方式,以此可突破地理因素的局限。這種通信方式不僅傳輸距離遠、抗干擾性通強、可靠性高、成本低,而且連接簡單、使用方便;通信過程僅僅是讀寫I/O口的簡單操作,編程簡單,易于實現(xiàn)。
圖4
結(jié)語
本文提出了一種適用于PC機與多單片機之間的串行通信實現(xiàn)方法。該方法采用UM3758-108A編/解碼芯片實現(xiàn)雙工傳輸,采用DS1609芯片實現(xiàn)智能卡和上位機的批量數(shù)據(jù)交換,實現(xiàn)了數(shù)據(jù)傳輸與數(shù)據(jù)處理功能的分離,使它們各司其職,保證了系統(tǒng)的實時性,也有效解決了上位機對下位機的尋址問題。另外,該方式有很寬的適用范圍,具有一定的應用價值。