MAX1487是用于RS-485與RS-422通信的低功耗收發(fā)器,每個器件中都具有一個驅(qū)動器和一個接收器。MAX1487的驅(qū)動器擺率不受限制,可以實現(xiàn)最高2.5Mbps的傳輸速率。
MAX1487收發(fā)器在驅(qū)動器禁用的空載或滿載狀態(tài)下,吸取的電源電流在120μA至500μA之間。所有器件都工作在5V單電源下。
驅(qū)動器具有短路電流限制,并可以通過熱關(guān)斷電路將驅(qū)動器輸出置為高阻狀態(tài),防止過度的功率損耗。接收器輸入具有失效保護特性,當輸入開路時,可以確保邏輯高電平輸出。
具有1/4單位負載的接收器輸入阻抗,使得總線上最多可以有128個MAX1487收發(fā)器。MAX1487為半雙工應(yīng)用設(shè)計,其組成的差分平衡系統(tǒng)抗干擾能力強,接收器可檢測低達200mv的信號,是一種高速,低功耗,控制方便的異步通訊接口芯片。
MAX1487引腳配置和典型工作電路
圖表
MAX1487的管腳及內(nèi)部結(jié)構(gòu)框圖如上圖所示。
腳1 RO:接收器輸出(A―B≥+0.2V,RO=“1”:A―B≤―0.2V ,RO=“1”);
腳2 RE:接收器使能;
腳3 DE:驅(qū)動器使能;
腳4 DI:驅(qū)動器輸入;
腳5 GND:地;
腳6 A:接收器非反相輸入
或驅(qū)動器非反相輸出;
腳7 B:接收器反相輸入
或驅(qū)動器反相輸出;
腳8 VCC:電源
1. 供電電壓 4.75V≤VCC≤5.25V
2. 供電電流 120μA—500μA,靜態(tài)電流 230μA
3. 共模輸入電壓范圍 ―7V——+12V
4. 通訊傳輸線最多可掛128個收發(fā)器
5. 傳輸速率 2.5MB/S
6. 傳輸延時 30ns
7. 跳變坡度 5 ns
8. 工作溫度 0°C——+70°C
MAX1487的輸入腳DI可直接與單片機CPU的TXD腳相連,輸出腳RO與單片機CPU的RXD腳相連。MAX1487內(nèi)部的驅(qū)動器與接收器是三態(tài)的,通過DE(驅(qū)動器輸出高電平使能)和RE(接收器低電平使能)進行發(fā)送與接收,發(fā)送與接收的兩種控制信號是反相的。可將二者接同一控制信號(如圖2中P3.5),即“1”電平控制發(fā)送,“0”電平控制接收。A、B端實現(xiàn)多機聯(lián)網(wǎng)。
MAX1487特性說明
關(guān)鍵特性
容錯應(yīng)用
MAX3430:±80V故障保護、失效保護、1/4單位負載、+3.3V、RS-485收發(fā)器
MAX3440E–MAX3444E:±15kV ESD保護、±60V故障保護、10Mbps、失效保護、RS-485/J1708收發(fā)器
對于空間受限應(yīng)用
MAX3460–MAX3464:+5V、失效保護、20Mbps、PROFIBUS RS-485/RS-422收發(fā)器
MAX3362:+3.3V、高速、RS-485/RS-422收發(fā)器,采用SOT23封裝
MAX3280E–MAX3284E:±15kV ESD保護、52Mbps、+3V至+5.5V、SOT23、RS-485/RS-422、真失效保護接收器
MAX3293/MAX3294/MAX3295:20Mbps、+3.3V、SOT23、RS-485/RS-422發(fā)送器
對于多通道收發(fā)器應(yīng)用
MAX3030E–MAX3033E:±15kV ESD保護、+3.3V、四路RS-422發(fā)送器
對于失效保護應(yīng)用
MAX3080–MAX3089:失效保護、高速(10Mbps)、限擺率RS-485/RS-422收發(fā)器
對于低電壓應(yīng)用
MAX3483E/MAX3485E/MAX3486E/MAX3488E/MAX3490E/MAX3491E:+3.3V供電、±15kV ESD保護、12Mbps、限擺率、真正的RS-485/RS-422收發(fā)器
MAX1487芯片應(yīng)用舉例
一、基于MAX1487芯片的遠程多機通訊應(yīng)用
1.應(yīng)用電路
在多機通信中,一般PC機作為上位機只有RS232標準的通訊接口,要實現(xiàn)RS485標準接口通信,須通過RS232/RS485轉(zhuǎn)換接口電路,完成由EIA電平到TTL電平的轉(zhuǎn)換。可用專門的帶隔離RS232/485轉(zhuǎn)換器來實現(xiàn)。
MAX1487的RE與DE連接同一控制信號,如下實際電路(下圖)中8031的P3.5,可嚴格保證收發(fā)信號在時間上錯開。
2.通訊協(xié)議
MCS51中串行控制寄存器SCON設(shè)有多機通訊控制位SM2(SCON.5),在編程前,定義各從機的地址編號,如分別為00H,01H,02H等等。從機系統(tǒng)在初始化程序中將串行口編程為約定的接收方式,且置位SM2,允許串行口中斷。在主機和某一從機通訊之前,先向所有從機發(fā)出所選從機的地址,以設(shè)置第9位TB8為1表示為地址幀,這時SM2作為地址監(jiān)聽位,所有從機當接收到的第9位RB8為1則置位中斷標志RI,中斷后判斷主機送來的地址與本從機是否相同,若為本地址,則清SM2為0,準備接收主機送來的數(shù)據(jù)幀;其他從機保持SM2為1狀態(tài)。接著主機發(fā)送數(shù)據(jù)幀(TB8=0表示),各串行口同時接收到了數(shù)據(jù)幀,而只有已選中的從機(SM2=0)才能產(chǎn)生中斷并接收該數(shù)據(jù),其余從機收到(SM2=1,RB8=0)不產(chǎn)生中斷響應(yīng),將數(shù)據(jù)丟掉。這樣就實現(xiàn)了多機一對一通訊。
一般的程序設(shè)計是中斷一次接收一個字節(jié)數(shù)據(jù),這里我們將使一次中斷接收一個完整的數(shù)據(jù)包。數(shù)據(jù)包由五部分組成:從機地址(1Byte);命令字節(jié)(1Byte);數(shù)據(jù)字節(jié)數(shù)(1Byte);傳送數(shù)據(jù)(0-256Byte);校驗和(2Byte)。主機向下先發(fā)送從機地址,從機進入中斷接收程序,如地址相符,再以查詢方式接收命令字節(jié)、數(shù)據(jù)字節(jié)數(shù)、數(shù)據(jù)、校驗和。從機根據(jù)接收到的校驗和判斷接收正確與否,這時從機由接收狀態(tài)置成發(fā)送狀態(tài),若接收正確則向主機回發(fā)“A5H”信號及其它回應(yīng)信息,否則發(fā)“5AH”信號,中斷返回前從機再置成接收狀態(tài)。在主從機收發(fā)程序中做了超時處理,若經(jīng)過一段時間收不到信息,則此次通訊失敗。
3 軟件設(shè)計
1.單片機部分
工作方式:定時器1為工作方式2,串行口為工作方式3;
傳送方式:中斷接收與發(fā)送響應(yīng)信息;
數(shù)據(jù)格式:一個起始位,八個數(shù)據(jù)位,一個TB8或RB8,一個停止位;
波特率:9600bps
從機中斷子程序流程圖略。
下面給出單片機通訊程序采用Franklin/Keil C51語言編制。
main()
{ //初始化
TMOD=0x20;
TL1=0xFD; //設(shè)定波特率為9600bit
TH1=0xFD;
PCON=0x80;
TCON=0x00;
SMOD=0x00;
SCON=0xF0;
TR1=1;
REN=1;
ES=1;
EA=1;
P35=1; //處于接收狀態(tài)
}
//串行口中斷程序
void serial() interrupt 4 using 1 {
unsigned char address;
RI=0; //關(guān)中斷
address=SBUF;
//判斷是否符合本機地址,如1號機
if (address= =0x01)
{ P35=0;
SM2=0; //清SM2位,準備接收數(shù)據(jù)
……
//接收數(shù)據(jù)及相應(yīng)處理
(發(fā)送功能可在此部分完成)
……
SM2=1;
}
else SM2=1; //不是發(fā)給本機數(shù)據(jù),
置位SM2,退出
}
2.PC機部分
傳送方式:查詢方式接收和發(fā)送數(shù)據(jù);
數(shù)據(jù)格式:一個起始位,八個數(shù)據(jù)位,一個可編程位(類似TB8或RB8),一個停止位;
波特率:9600bps
上位PC機通信程序的開發(fā)環(huán)境采用Borland C++ Builder5.0可視化編程工具,它是基于C++語言的快速應(yīng)用程序開發(fā)(RAD)工具,是最先進的開發(fā)應(yīng)用程序組件思想和面向?qū)ο蟮腃++語言融合的產(chǎn)物,C++ Builder5.0內(nèi)置了近200個完全封裝了Windows 9x公用特性且具有擴展性的可重用控件,這就使得利用C++ Builder開發(fā)應(yīng)用程序非常方便、快捷。
在Windows98/95環(huán)境中,編寫串行通信應(yīng)用程序,一般采用如下兩種方法:其一是通過調(diào)用Win32 API提供的串行通信函數(shù),這種方法實現(xiàn)相當繁瑣;另一種方法則是利用專門處理串行通信的控件來編程,用戶只需在自己的應(yīng)用程序中嵌入這一類控件,編寫少量代碼便可輕松高效地完成任務(wù)。在本系統(tǒng)中,我們選擇一個名為Comm的第三方控件來實現(xiàn)串口的通信管理。
表1 Comm控件的重要屬性和事件列表
屬性(事件)名稱 用 途
BaudRate 設(shè)置串行通信波特率
Databits 設(shè)置有效數(shù)據(jù)位長度
DeviceAddress 設(shè)置串行口地址
DeviceName 選擇串行口
Parity 奇偶校驗位設(shè)置
OnBreak 通信中斷時激活
OnError 數(shù)據(jù)傳輸有誤時激活
Comm控件的一些重要屬性(Property)和事件(Event)如表1所示。串行端口的選擇、波特率的設(shè)定以及數(shù)據(jù)格式的定義等都可通過設(shè)置相應(yīng)的屬性來完成。在由計算機和多個單片機應(yīng)用系統(tǒng)構(gòu)成的多機環(huán)境中,一般把通信數(shù)據(jù)分為“地址幀”和 “數(shù)據(jù)幀”來傳送,PC機的串行通信本身并不具備多機通信功能,也不能產(chǎn)生TB8或者RB8,但可以通過靈活設(shè)置Comm控件中的“Parity”屬性來形成正確的地址/數(shù)據(jù)標志位,從而使PC機與單片機之間實現(xiàn)多機通信。
PC機與某一下位機通信,在對話框中選擇下位機的地址號、設(shè)定通信命令,在“連接”按鈕(Button)的OnClick事件處理函數(shù)中編寫代碼實現(xiàn)與下位機的數(shù)據(jù)通信。另外在通信被中斷或數(shù)據(jù)傳輸有誤時,分別激活Comm控件的OnBreak事件和OnError事件。在OnBreak或者OnError的事件處理函數(shù)中加入代碼用來完成是否重發(fā)或取消本次通信等操作。
二、MAX1487/485芯片DE控制端的設(shè)計方案解析
1 問題的提出
在分布系統(tǒng)的設(shè)計中,RS-485半雙工異步通信總線是被各個廠家廣泛采用的數(shù)據(jù)通信總線。在售飯管理系統(tǒng)的設(shè)計中也不例外,它往往應(yīng)用在主控機房與各個食堂的分機之間。系統(tǒng)拓撲結(jié)構(gòu)如圖1所示。
由于實際工程中,分機數(shù)量較多,分布較遠,所處的環(huán)境較惡劣,現(xiàn)場的各種干擾也較大,所以,往往通信的可靠性及質(zhì)量不高,再加上軟硬件設(shè)計得不完善,使得實際工程應(yīng)用中485總線的通信質(zhì)量總是不盡人意。
在使用RS-485總線時,如果簡單地按常規(guī)方式設(shè)計電路,在實際應(yīng)用中可能會出現(xiàn)以下兩個問題:一是數(shù)據(jù)傳輸?shù)目煽啃詥栴};二是在多機通信方式下,一個節(jié)點發(fā)生故障往往會導(dǎo)致整個系統(tǒng)的通信陷入癱瘓,而且故障點的定位也非常不容易,給系統(tǒng)維護帶來困難。
針對上述問題,我們對485總線的軟件和硬件分別采取了一些必要的改進措施。
2 硬件電路的設(shè)計現(xiàn)以8031單片機、單片機監(jiān)控芯片MAX691A,外接485總線通訊芯片MAX1487為例。電路原理圖如圖2所示。在電路設(shè)計中注意了上述兩個問題。
2.1 MAX1487 485芯片DE控制端的設(shè)計由于在售飯系統(tǒng)中,主控機房與各個食堂相隔較遠,而分機系統(tǒng)上電復(fù)位又常常不是在同一個時刻完成。8031在復(fù)位期間,I/O口輸出高電平,此時該分機的MAX1487的DE端電位為“1”,那么它將會處于發(fā)送狀態(tài),也就是占用了通信總線,這樣,就影響其它分機與主機進行通信。因此,在電路設(shè)計時,應(yīng)保證系統(tǒng)上電復(fù)位時不占用總線。圖2電路的接法可以有效地解決復(fù)位期間分機“拉死”總線的問題。
另外,當某個分機出現(xiàn)異常情況(如死機)時,若此時MAX1487的DE端電位恰好為“1”,則該分機將一直占用通信總線,造成整個系統(tǒng)通信的崩潰。因此,在電路中應(yīng)考慮監(jiān)控MAX1487的DE端的電平,如該端持續(xù)為“1”時,應(yīng)使分機復(fù)位以解除異常情況。圖2電路可有效地解決這種情況。此外,該電路還能咻 下不工作的窗口機(分機)能自行脫離通訊網(wǎng)絡(luò)。
2.2 485總線輸出電路部分的設(shè)計輸出電路的設(shè)計要充分考慮到線路上的各種干擾及線路特性阻抗的匹配。由于工程環(huán)境比較復(fù)雜,現(xiàn)場常有各種形式的干擾源,所以,485總線的傳輸端一定要加有保護措施。在電路設(shè)計中采用穩(wěn)壓管Z1、Z2組成的吸收回路,也可以選用能夠抗浪涌的TVS瞬態(tài)雜波抑制器件,或者直接選用能抗雷擊的485芯片(如MAX1487E等),以消除線路浪涌干擾。
考慮到線路的特殊情況(如某一臺分機的485芯片被擊穿短路),為防止總線中其它分機的通信受到影響,必須在其A、B輸出端與485總線之間進行隔離。一種簡單可行的方法是:在MAX1487的信號輸出端串聯(lián)兩個10~30Ω的電阻R1、R2,這樣一來,一方面,本機的硬件故障就不會使整個總線的通信受到影響;另一方面,與Z1、Z2配合,進一步保護了485總線通訊芯片。
在售飯系統(tǒng)產(chǎn)品的現(xiàn)場施工中,一般采用雙絞線來連接,它的特性阻抗為120Ω左右,所以,線路設(shè)計時,在整個485網(wǎng)絡(luò)傳輸線兩端應(yīng)各接1只120Ω的匹配電阻(如圖2中R7),以減少線路上傳輸信號的反射。
由RS-485芯片的特性可知,接收器的檢測靈敏度為±200mV,即差分輸入端的電位差的絕對值大或等于200mV時,輸出狀態(tài)不確定。如果總線上所有發(fā)送器被禁止時,總線處于空閑狀態(tài),接收器的輸出狀態(tài)是不定的。如處于邏輯“0”,這會被誤認為是通信幀的起始位而引起工作不正常。解決這個問題的辦法是人為地使A端電位高于B端電位,這樣接收端的電平在485總線不發(fā)送期間(總線空閑時(呈現(xiàn)唯一的高電平,8031單片機就不會被誤中斷而收到亂字符。通過在485電路的A、B輸出端加接上拉、下拉電阻R5、R6,即可很好地解決這個問題。需要注意的是,在整個網(wǎng)絡(luò)中只需在一處接入這兩只電阻,通常在主機中接入。
有些資料中提到,在施工中不能將主機安裝在網(wǎng)絡(luò)的中間形成T型分布,而應(yīng)將主機放在總線的一端。由485總線規(guī)范指出,最大通訊距離可達1.2km,筆者在現(xiàn)場施工中,為了增加通訊距離,將主機設(shè)置在網(wǎng)絡(luò)的中央,由于分機間無需進行通訊,兩臺分機之間的最大距離可達到2.4km。實際應(yīng)用中可達到2km而保證通訊正常。
3 軟件的編程RS-485通常應(yīng)用于一對多點的主從應(yīng)答式通信系統(tǒng)中,相對于RS-232等全雙工總線,效率低了許多,因此選用合適的通信協(xié)議及控制方式就顯得非常重要。
3.1 總線穩(wěn)態(tài)控制大多數(shù)使用者選擇在數(shù)據(jù)發(fā)送前1ms將收發(fā)控制端DE置成高電平,使總線進入穩(wěn)定的發(fā)送狀態(tài)后才發(fā)送數(shù)據(jù),數(shù)據(jù)發(fā)送完畢再延遲1ms后置TC端成低電平,使數(shù)據(jù)可靠發(fā)送完畢后才轉(zhuǎn)入接收狀態(tài)。如按這樣的要求來做,系統(tǒng)的通訊效率將大大降低。據(jù)筆者使用的經(jīng)驗,DE端有10個機器周期的延時已滿足要求。
3.2 通訊協(xié)議制定由于485總線是半雙工異步通信總線,在某一個時刻,總線只可能呈現(xiàn)一種狀態(tài),所以,這種方式一般適用于主機對分機的查詢方式通信,總線上必然有一臺始終處于主機地位的設(shè)備在巡檢其它的分機,所以需要制定一套合理的通信協(xié)議來協(xié)調(diào)總線的分時共用。這里采用的是數(shù)據(jù)包通信方式。為保證數(shù)據(jù)傳輸質(zhì)量,對每個字節(jié)進行校驗的同時,應(yīng)盡量減少特征字和校驗字。慣用的數(shù)據(jù)包括格式由引導(dǎo)碼、長度碼、地址碼、命令碼、數(shù)據(jù)、校驗碼、尾碼組成,每個數(shù)據(jù)包長度達20~30字節(jié)。在RS-485系統(tǒng)中這樣的協(xié)議不太簡練,筆者采用了如下協(xié)議:上位機數(shù)據(jù)包格式由地址碼、長度碼、命令(或數(shù)據(jù))碼、CRC校驗碼組成;下位機應(yīng)答幀由長度碼、狀態(tài)碼、數(shù)據(jù)碼和CRC校驗碼組成。實際使用效果良好。
4 結(jié)束語經(jīng)過上述的軟硬件共同處理,485總線在售飯系統(tǒng)應(yīng)用中的可靠性大大提高,在食堂比較惡劣的環(huán)境條件下,系統(tǒng)的通信始終處于正常狀態(tài),整機性能滿足了現(xiàn)場工程的需要。
評論