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