一種fpga自適應(yīng)控制rs485芯片收發(fā)方向的方法
【專利摘要】本發(fā)明公開了一種FPGA自適應(yīng)控制RS485芯片收發(fā)方向的方法,主要由數(shù)據(jù)收發(fā)主控CPU、自適應(yīng)方向控制核心FPGA、RS485芯片及外圍電路構(gòu)成,F(xiàn)PGA和RS485芯片同時接收到由CPU發(fā)出的TXD信號,從FPGA發(fā)出的RST信號給RS485芯片的收發(fā)方向控制引腳;FPGA根據(jù)收到的TXD信號電平的高低變化,迅速判斷出RTS信號為低電平/高電平,低電平時RS485芯片接收信號,高電平RS485芯片發(fā)送信號,實現(xiàn)對RS485芯片收發(fā)方向的控制。該方法便于硬件原理的設(shè)計和既有硬件的改進,且FPGA的算法穩(wěn)定可靠、易于實現(xiàn),能有效保證RS485總線數(shù)據(jù)通信的穩(wěn)定性和可靠性。
【專利說明】—種FPGA自適應(yīng)控制RS485芯片收發(fā)方向的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)字通信【技術(shù)領(lǐng)域】,具體涉及一種FPGA(即現(xiàn)場可編程門陣列)自適應(yīng)控制RS485芯片收發(fā)方向的方法。
【背景技術(shù)】
[0002]RS485通訊在實現(xiàn)主站與各主從站的信息交換中有著廣泛的應(yīng)用,如何控制RS485通訊的方向是實現(xiàn)RS485穩(wěn)定通訊很重要的一點。主要有以下幾種方法可以實現(xiàn):
(I)使用CPU的I/O 口進行控制,該方法驅(qū)動能力強,但需要有軟件配合;(2)有CPU帶RTS控制引腳(即請求發(fā)送控制引腳)的可以直接用來控制RS485的收發(fā)方向,驅(qū)動能力強且不需軟件配合,但不是所有的CPU都帶此功能,而且一般此類型引腳不多,當需要多個串口通訊的時候會不夠用;(3)使半雙工的RS485收發(fā)器實現(xiàn)自收發(fā)功能,通過TXD(數(shù)據(jù)輸出發(fā)送)信號經(jīng)過反相器產(chǎn)生RTS信號,同時在A、B端之間增加上下拉電阻配合實現(xiàn),方法實現(xiàn)簡單,成本低,但驅(qū)動能力較弱,抗干擾能力不夠;(4)在方法(3)的基礎(chǔ)上將TXD經(jīng)過反相器前的下降沿延時,在一定程度上增加了驅(qū)動能力,但是在外部環(huán)境惡劣的條件下抗干擾能力仍不行。
[0003]RS485芯片自收發(fā)是現(xiàn)在比較普遍的用法,但是這種自動控制方向的通訊機制驅(qū)動能力弱,在環(huán)境惡劣干擾嚴重的情況下,此通訊方式會帶來誤碼,造成通訊錯誤。
【發(fā)明內(nèi)容】
[0004]本發(fā)明主要的發(fā)明目的是:在已有的帶多串口通訊的系統(tǒng)上,為增加控制RS485芯片收發(fā)方向的功能或是改RS485芯片自收發(fā)為外部控制方向,可以不改動已有穩(wěn)定的CPU的軟件來實現(xiàn)。在電路上增加相對獨立的FPGA電路,實現(xiàn)RS485通訊方向控制信號,軟硬件都相對原系統(tǒng)獨立,方便快速改進,并能達到從外部可靠控制RS485通訊收發(fā)方向的目的。
[0005]本發(fā)明具體采用如下技術(shù)方案:
[0006]一種FPGA自適應(yīng)控制RS485芯片收發(fā)方向的方法,其特征在于:在一個完整的需要提供多串口的電路系統(tǒng)中,采用FPGA作為CPU發(fā)出的數(shù)據(jù)發(fā)送信號TXD的反相器,經(jīng)過FPGA后從I/O 口發(fā)出相對應(yīng)的控制RS485芯片收發(fā)方向的請求發(fā)送信號RTS送給RS485芯片發(fā)送使能引腳、接收使能引腳,實現(xiàn)對RS485芯片收發(fā)方向的控制。
[0007]所述方法包括以下步驟:
[0008](I)首先進行硬件的連接組成多串口電路系統(tǒng),CPU的普通I/O 口發(fā)出TXD信號給RS485芯片的接收端D,RS485芯片的發(fā)送端R發(fā)出數(shù)據(jù)接收信號RXD給CPU的另外的普通I/O 口 ;同時CPU還將數(shù)據(jù)傳輸信號TXD發(fā)送給FPGA,F(xiàn)PGA的I/O 口發(fā)出請求發(fā)送信號RTS給RS485芯片的發(fā)送使能引腳、接收使能引腳;
[0009](2)步驟(I)所述的多串口電路系統(tǒng)上電后,由FPGA對數(shù)據(jù)傳輸信號TXD的最小脈寬進行檢測,通過查詢波特率列表,確定TXD信號的波特率,之后通信便按此波特率產(chǎn)生收發(fā)控制信號,并以零延時電路的工作原理傳遞數(shù)據(jù);
[0010](3) FPGA重復(fù)查詢TXD信號的最小脈寬,若檢測發(fā)現(xiàn)通信波特率發(fā)生變化,則啟動復(fù)位,重復(fù)步驟(2);否則,進入正常工作模式,當FPGA收到的TXD信號持續(xù)為高電平時,F(xiàn)PGA向RS485芯片的發(fā)送使能引腳\R\E、接收使能引腳DE輸出的請求發(fā)送信號RTS為持續(xù)低電平,此時控制RS485芯片處于接收狀態(tài),當總線上有差分數(shù)據(jù)信號到達RS485芯片的差分數(shù)據(jù)傳輸接口 A、B時,該差分信號會經(jīng)RS485芯片與CPU之間的RXD信道被CPU直接接收;當RS485芯片與CPU之間TXD信道有數(shù)據(jù)傳輸,數(shù)據(jù)信號的起始位的下降沿到來時,F(xiàn)PGA向RS485芯片的發(fā)送使能引腳\R\E、接收使能引腳DE輸出的RTS信號馬上變?yōu)楦唠娖剑刂芌S485芯片處于發(fā)送狀態(tài),將TXD信道的數(shù)據(jù)流轉(zhuǎn)換為差分對信號通過RS485芯片差分數(shù)據(jù)傳輸接口 A、B發(fā)送到總線上;
[0011](4)在RS485芯片傳輸數(shù)據(jù)時,F(xiàn)PGA實時監(jiān)測TXD信號波特率的變化,當TXD信號波特率變化時,返回步驟(2),重復(fù)上述步驟,重新學習并設(shè)置正確的波特率,從而實現(xiàn)通過FPGA對RS485芯片收發(fā)方向的控制。
[0012]在本發(fā)明中,用FPGA代替接到TXD的反相器,將從CPU發(fā)出的多路TXD信號接入FPGA的普通I/O 口,經(jīng)過FPGA的操作后從I/O 口出相對應(yīng)的RTS信號,將此信號送給RS485的傳輸方向控制引腳,當TXD變化時,RTS即實現(xiàn)了對RS485的收發(fā)方向控制。
[0013]本發(fā)明具有以下有益效果:
[0014](I)通過FPGA來控制RS485通訊的收發(fā)方向能明顯的提升RS485通訊的穩(wěn)定性;
[0015](2)在有多串口通訊設(shè)計的需求下,可在已有的最小系統(tǒng)電路的基礎(chǔ)上直接補充FPGA電路,只需要修改很少的原電路系統(tǒng)的軟硬件,易于修改。
【專利附圖】
【附圖說明】
[0016]圖1給出了采用本發(fā)明方法的部分的硬件結(jié)構(gòu)圖。
[0017]圖2給出了本發(fā)明FPGA自適應(yīng)控制RS485芯片收發(fā)方向的方法流程圖。
[0018]圖3為系統(tǒng)剛上電時,F(xiàn)PGA對TXD波特率的判斷。
[0019]圖4為正常工作時FPGA控制信號RTS的產(chǎn)生。
[0020]圖5是系統(tǒng)的狀態(tài)機示意圖。
【具體實施方式】
[0021 ] 下面結(jié)合附圖,對本發(fā)明做進一步的詳細說明。
[0022]本發(fā)明是利用RS485自收發(fā)電路的原理實現(xiàn)。此方法適用于帶發(fā)送使能和接收使能功能的標準RS485芯片。圖1中RS485芯片的\R\E、DE管腳分別代表發(fā)送使能和接收使能管腳;D代表驅(qū)動器的輸出端;R代表芯片的輸出端;A、B分別代表接收和發(fā)送的差分信號端。RS485自收發(fā)功能是由控制TXD信號實現(xiàn),當接收數(shù)據(jù)時TXD信號處于高電平,將TXD信號反相后接到方向控制引腳,使RS485芯片處于接收狀態(tài),有信號來就可以實現(xiàn)接收。當發(fā)送數(shù)據(jù)位為低時TXD信號經(jīng)反相后為高,RS485芯片處于發(fā)送狀態(tài),發(fā)送的數(shù)據(jù)就是O ;當發(fā)送數(shù)據(jù)位為高時,TXD信號經(jīng)反相后為低,RS485芯片處于接收狀態(tài),不發(fā)送數(shù)據(jù),但RS485芯片的接收和發(fā)送差分信號端A、B兩端都有上下拉電阻,接收端認為是有高電平發(fā)送過來,收到的就為高。
[0023]圖2為本發(fā)明的FPGA自適應(yīng)控制RS485芯片收發(fā)方向的方法流程圖,本發(fā)明采用FPGA自適應(yīng)控制RS485芯片收發(fā)方向的方法具體包括以下步驟:
[0024]步驟1:首先進行硬件的連接組成多串口電路系統(tǒng)。如圖1為本發(fā)明的FPGA自適應(yīng)控制RS485芯片收發(fā)方向方法的硬件連接關(guān)系圖,CPU的普通I/O 口出TXD信號給RS485芯片的TXD接收端,RS485芯片的發(fā)送端發(fā)出RXD信號給CPU的I/O 口;同時將TXD信號給FPGAjFPGA的普通I/O 口發(fā)出相應(yīng)的控制RS485芯片收發(fā)方向的RTS信號給RS485芯片的發(fā)送使能引腳、接收使能引腳。
[0025]步驟2:此多串口電路系統(tǒng)上電并復(fù)位后,F(xiàn)PGA對送來的TXD信號的最小脈寬進行檢測,通過查詢常用的波特率列表,分析多個脈沖,猜測信號的波特率。圖3是系統(tǒng)上電初,F(xiàn)PGA判斷TXD信號的波特率,此時如有數(shù)據(jù)傳輸,為防止丟數(shù),將先以零延時電路的工作原理,將數(shù)據(jù)傳遞。如圖3所示,當TXD信號為O是,RTS信號處于發(fā)送狀態(tài),此時發(fā)送0,當TXD信號為I時,RTS信號仍為高,發(fā)送1,延時30uS后RTS信號變?yōu)榈停藭rRS485芯片處于接收狀態(tài),靠外部的上拉電阻使傳輸?shù)臄?shù)據(jù)仍為I。如果TXD為I的時間小于30uS,則RTS持續(xù)為發(fā)送狀態(tài)不變。
[0026]步驟3:—旦波特率確定,當再有信號送來時,就按照這種波特率產(chǎn)生收發(fā)控制信號。FPGA重復(fù)查詢TXD信號的最小脈寬,如果不是步驟2中確定的波特率,則啟動復(fù)位,重復(fù)步驟2 ;如果是步驟2中確定的波特率,則進入正常工作模式,當FPGA收到的TXD信號持續(xù)為高電平時,RTS信號為持續(xù)低電平,此時控制RS485芯片處于接收狀態(tài),有數(shù)據(jù)來就可以直接接收;當TXD信道上有數(shù)據(jù)傳輸,起始位的下降沿到來時,RTS信號馬上變?yōu)楦唠娖?,此時RS485芯片處于發(fā)送狀態(tài),可以將帶校驗位或是不帶校驗位的數(shù)據(jù)流發(fā)送給接收方。圖4為波特率識別完成,脈寬判斷完成后,RTS以整幀為周期,對TXD的數(shù)據(jù)流進行傳輸。如圖4所示,當RTS檢測到TXD的起始位后,迅速控制RS485的狀態(tài)為持續(xù)發(fā)送,在一個完整周期內(nèi)將TXD的數(shù)據(jù)流傳輸出去,如果收到的數(shù)據(jù)流帶校驗位則剛好一個周期,如果不帶校驗位則RTS會自動延時一個比特,保證傳輸數(shù)據(jù)完整。
[0027]步驟4:在RS485芯片傳輸數(shù)據(jù)時,F(xiàn)PGA仍實時監(jiān)測TXD信號波特率的變化,當TXD信號波特率變化時,重復(fù)上述步驟,重新學習。這樣就實現(xiàn)了對RS485芯片收發(fā)方向的控制,實現(xiàn)了 RS485的完整通訊,不丟失數(shù)據(jù)。
[0028]圖5為系統(tǒng)的狀態(tài)機,在板卡上電后,默認的狀態(tài)為Idle,當檢測到TXD信號有下降沿到來后,狀態(tài)進入到bpS_CheCk,開始檢測最小脈寬,在檢測到板卡支持的波特率之前,狀態(tài)機維持bps_check,直到檢測到板卡支持波特率,狀態(tài)進入到package_start,等待下一包數(shù)據(jù)包頭的到來,檢測方法是總線空閑至少一個字節(jié)的發(fā)送時間,包頭到來后,狀態(tài)進入到TX狀態(tài)(正常工作狀態(tài)),此時板卡就會按照新檢測到的波特率進行數(shù)據(jù)的發(fā)送,如果不改變數(shù)據(jù)發(fā)送端的波特率,狀態(tài)機會一直維持TX狀態(tài)發(fā)送數(shù)據(jù),當發(fā)送端數(shù)據(jù)的波特率改變,狀態(tài)機才會恢復(fù)到idle狀態(tài)重新開始。
【權(quán)利要求】
1.一種FPGA自適應(yīng)控制RS485芯片收發(fā)方向的方法,其特征在于:在一個完整的需要提供多串口的電路系統(tǒng)中,采用FPGA作為CPU發(fā)出的數(shù)據(jù)傳輸信號TXD的反相器,經(jīng)過FPGA后從FPGA的I/O 口發(fā)出相對應(yīng)的控制RS485芯片收發(fā)方向的請求發(fā)送信號RTS送給RS485芯片接收使能引腳、發(fā)送使能引腳,實現(xiàn)對RS485芯片收發(fā)方向的控制。
2.根據(jù)權(quán)利要求1所述的自適應(yīng)控制RS485芯片收發(fā)方向的方法,其特征在于,所述方法包括以下步驟: (1)首先進行硬件的連接組成多串口電路系統(tǒng),CPU的普通I/O口發(fā)出TXD信號給RS485芯片的接收端D,RS485芯片的發(fā)送端R發(fā)出數(shù)據(jù)接收信號RXD給CPU的另外的普通I/O 口 ;同時CPU還將數(shù)據(jù)傳輸信號TXD發(fā)送給FPGA,F(xiàn)PGA的I/O 口發(fā)出請求發(fā)送信號RTS給RS485芯片的發(fā)送使能引腳、接收使能引腳; (2)步驟(I)所述的多串口電路系統(tǒng)上電后,由FPGA對數(shù)據(jù)傳輸信號TXD的最小脈寬進行檢測,通過查詢波特率列表,確定TXD信號的波特率,之后通信便按此波特率產(chǎn)生收發(fā)控制信號,并以零延時電路的工作原理傳遞數(shù)據(jù); (3)FPGA重復(fù)查詢TXD信號的最小脈寬,若檢測發(fā)現(xiàn)通信波特率發(fā)生變化,則啟動復(fù)位,重復(fù)步驟(2);否則,進入正常工作模式,當FPGA收到的TXD信號持續(xù)為高電平時,F(xiàn)PGA向RS485芯片的發(fā)送使能引腳\R\E、接收使能引腳DE輸出的請求發(fā)送信號RTS為持續(xù)低電平,此時控制RS485芯片處于接收狀態(tài),當總線上有差分數(shù)據(jù)信號到達RS485芯片的差分數(shù)據(jù)傳輸接口 A、B時,該差分信號會經(jīng)RS485芯片與CPU之間的RXD信道被CPU直接接收;當RS485芯片與CPU之間TXD信道有數(shù)據(jù)傳輸,數(shù)據(jù)信號的起始位的下降沿到來時,F(xiàn)PGA向RS485芯片的發(fā)送使能引腳\R\E、接收使能引腳DE輸出的RTS信號馬上變?yōu)楦唠娖剑刂芌S485芯片處于發(fā)送狀態(tài),將TXD信道的數(shù)據(jù)流轉(zhuǎn)換為差分對信號通過RS485芯片差分數(shù)據(jù)傳輸接口 A、B發(fā)送到總線上; (4)在RS485芯片傳輸數(shù)據(jù)時,F(xiàn)PGA實時監(jiān)測TXD信號波特率的變化,當TXD信號波特率變化時,返回步驟(2),重復(fù)上述步驟,重新學習并設(shè)置正確的波特率,從而實現(xiàn)通過FPGA對RS485芯片收發(fā)方向的控制。
【文檔編號】G06F13/40GK104317762SQ201410587592
【公開日】2015年1月28日 申請日期:2014年10月28日 優(yōu)先權(quán)日:2014年10月28日
【發(fā)明者】朱啟晨, 張明宇, 任光輝, 郁驚一, 肖鯤 申請人:北京四方繼保自動化股份有限公司