鮑長(zhǎng)君
摘要:本文設(shè)計(jì)了一種以FPGA為核心,基于AD5422實(shí)現(xiàn)多路高精度輸出的PLC模擬量擴(kuò)展單元模塊。設(shè)計(jì)先對(duì)現(xiàn)有的方案進(jìn)行了分析和討論,之后對(duì)FPGA內(nèi)部相關(guān)處理機(jī)制和實(shí)現(xiàn)方案做了詳盡的論述,經(jīng)過(guò)仿真和測(cè)試驗(yàn)證了設(shè)計(jì)的可行性。相比于傳統(tǒng)的模擬量擴(kuò)展單元模塊,本系統(tǒng)具有處理速度快、方便、靈活,電路精簡(jiǎn),抗干擾能力強(qiáng)等優(yōu)點(diǎn)。
關(guān)鍵詞:FPGA;AD5422; 串行外設(shè)接口
DOI: 10.3969/j.issn.1005-5517.2017.8.014
1 系統(tǒng)總體設(shè)計(jì)
1.1方案論述
工業(yè)自動(dòng)化控制系統(tǒng)經(jīng)常需要用到4-20mA或者±5V等模擬量信號(hào),用以控制變頻器等需要模擬信號(hào)輸入控制的設(shè)備,而模擬量擴(kuò)展單元也是PLC產(chǎn)品重要的擴(kuò)展單元之一。一個(gè)良好的模擬量擴(kuò)展單元產(chǎn)品的設(shè)計(jì)希望不僅能夠保證系統(tǒng)運(yùn)行的可靠性,還希望系統(tǒng)設(shè)計(jì)能夠非常精簡(jiǎn),有足夠的魯棒和可擴(kuò)展性,在成本性、能等各方面組合成一個(gè)最優(yōu)的結(jié)果。是PLC模擬量擴(kuò)展單元產(chǎn)品設(shè)計(jì)一直追求和努力的方向。
傳統(tǒng)的模擬量輸出擴(kuò)展單元結(jié)構(gòu)如圖1,其工作原理是:1、FPGA將擴(kuò)展通信總線上的數(shù)據(jù)通過(guò)SPI通信隔離器進(jìn)行電器隔離,然后將數(shù)據(jù)交互給MCU;2、由MCU負(fù)責(zé)數(shù)據(jù)的轉(zhuǎn)換和進(jìn)行相關(guān)的配置工作,并通過(guò)MCU的SPI接口控制輸出的DAC獲得相應(yīng)的模擬電壓或者電流輸出值。
不難看出,F(xiàn)PGA和MCU之間通過(guò)SPI通信,MCU和DAC之間也通過(guò)SPI通信,如果我們能把MCU的工作都集成到FPGA內(nèi)完成,那方案就可以省略MCU,由FPGA直接控制DAC實(shí)現(xiàn)功能。但是在省略MCU前要對(duì)現(xiàn)有方案做以下進(jìn)一步的分析。
1.2 實(shí)現(xiàn)多DAC的SPI接口級(jí)聯(lián)方式
在使用傳統(tǒng)MCU控制DAC的回路設(shè)計(jì)時(shí),MCU有足夠的IO口可以單獨(dú)或者級(jí)聯(lián)控制DAC芯片,但是如果換用FPGA來(lái)直接替換MCU控制,則會(huì)因?yàn)樾枰嗟臄?shù)據(jù)隔離通道使得物料成本上升,因此,若想FPGA直接控制DAC,則最好所有的DAC能進(jìn)行級(jí)聯(lián)設(shè)計(jì),即通過(guò)一個(gè)SPI隔離器和少數(shù)光耦實(shí)現(xiàn)全部的通信和控制功能。
參考AD5422芯片數(shù)據(jù)手冊(cè),實(shí)際上該芯片具有多片菊花鏈連接方式,只要設(shè)計(jì)得當(dāng),多個(gè)DAC就可以在同一個(gè)SPI接口上級(jí)聯(lián)工作,圖2是AD5422的原廠數(shù)據(jù)表關(guān)于菊花鏈連接的結(jié)構(gòu)圖…。
1.3 每個(gè)DAC的硬件清零信號(hào)處理方法
應(yīng)對(duì)開(kāi)機(jī)復(fù)位或者某些緊急情況,DAC需要實(shí)現(xiàn)硬件清零工作。關(guān)于DAC硬件清零腳的設(shè)計(jì),我們可以用FPGA閑置的IO腳通過(guò)光耦隔離后來(lái)控制它。當(dāng)然若想每個(gè)DAC都可以獨(dú)立完成清零的工作,則需要由軟件通信的方法控制相應(yīng)的寄存器來(lái)實(shí)現(xiàn)軟件清零。
1.4 MCU需要完成的任務(wù)內(nèi)容
從PLC編程給模擬量輸出擴(kuò)展的數(shù)據(jù)以及相應(yīng)的AD5422原廠數(shù)據(jù)表看, MCU需要在這個(gè)中間環(huán)節(jié)完成以下幾個(gè)任務(wù):
1)復(fù)位,取消復(fù)位,清零,初始化DAC芯片;
2)拆分SPI數(shù)據(jù),完成各DAC量程,輸出使能等相關(guān)的配置工作:
3)完成數(shù)據(jù)轉(zhuǎn)換:包括單極性和雙極性數(shù)據(jù)轉(zhuǎn)換,數(shù)據(jù)位數(shù)擴(kuò)充,數(shù)據(jù)加偏移量等工作;
4)完成DAC狀態(tài)相關(guān)回讀工作,包括DAC電流輸出斷線報(bào)警,芯片過(guò)熱等異常情況。
1.5 FPGA直接控制DAC的設(shè)計(jì)方案
綜合以上的設(shè)計(jì)分析,我們修改了整體硬件設(shè)計(jì)方案,由FPGA直接控制DAC的設(shè)計(jì)方案如圖3所示。這樣MCU要完成的工作就必須在FPGA內(nèi)處理完成[2]。
2 FPGA內(nèi)部具體設(shè)計(jì)實(shí)現(xiàn)的方案
2.1 FPGA的數(shù)據(jù)處理流程
表1列舉了模擬量輸出規(guī)格,包括量程、用戶分辨率、用戶編程的數(shù)據(jù)范圍等。
可見(jiàn)因?yàn)槲覀兘oPLC編程的數(shù)據(jù)和最終送給AD5422芯片的數(shù)據(jù)有一定的區(qū)別,則對(duì)于數(shù)據(jù)處理來(lái)說(shuō),我們需要完成以下幾個(gè)功能:
1)識(shí)別數(shù)據(jù)有效性:PLC給用戶1/12000的分辨率和控制字并不能占用OxOOOO-OxFFFF全部范圍內(nèi)的數(shù)據(jù),也就是說(shuō)存在一部分的輸入數(shù)據(jù)是非法的無(wú)效的,需要在經(jīng)過(guò)處理前識(shí)別出來(lái),避免后續(xù)處理出錯(cuò),F(xiàn)PGA設(shè)計(jì)通過(guò)數(shù)據(jù)比較輸出數(shù)據(jù)有效或者無(wú)效判斷,當(dāng)然設(shè)計(jì)可以選擇無(wú)效數(shù)據(jù)丟失或者輸出報(bào)警信號(hào)。
2)雙極性轉(zhuǎn)換: 對(duì)應(yīng)雙極性輸出數(shù)據(jù)中的-10-+10V的數(shù)據(jù)范圍是十六進(jìn)制的OxE890到Ox1770對(duì)應(yīng)十進(jìn)制的-6000到+6000,而AD5422的-10V-+1 0V對(duì)應(yīng)的數(shù)據(jù)范圍是十六進(jìn)制的Ox000-OxFFFF是單極性的,所以先要給雙極性的原始數(shù)據(jù)加上十進(jìn)制的6000,統(tǒng)一輸入為十六進(jìn)制的Ox0000-Ox2EEO,對(duì)應(yīng)十進(jìn)制的0-12000。
3) 數(shù)據(jù)擴(kuò)充:通過(guò)乘法器實(shí)現(xiàn)輸入數(shù)據(jù)的擴(kuò)充,從給用戶的十六進(jìn)制Ox0000-Ox2EEO需要對(duì)應(yīng)轉(zhuǎn)換到十六進(jìn)制OxOOOO-OxFFFF。特別地,對(duì)于1-5V量程來(lái)說(shuō)因?yàn)檩敵鲇袀€(gè)1V的基準(zhǔn)量,在適用AD5422的0-5V量程時(shí)通過(guò)擴(kuò)展到AD5422對(duì)應(yīng)的0-4V量程,即十六進(jìn)制的OxOOOO-OxCCCC,當(dāng)然,這一步的處理需要在FPGA內(nèi)部設(shè)計(jì)硬件乘法器,使得每個(gè)量程都能乘上響應(yīng)的系數(shù)完成數(shù)據(jù)擴(kuò)充工作。
4)添加偏移量:對(duì)于1-5V量程來(lái)說(shuō)這個(gè)1V的基準(zhǔn)量是始終存在的,這就需要在完成數(shù)據(jù)擴(kuò)充后添加偏移量,其他量程則不需要這個(gè)偏移量的添加。
2.2 FPGA其余需要添加的功能塊還包括
1)控制字識(shí)別模塊:針對(duì)獲得的命令控制字,需要能甄別,并且分離出每個(gè)通道的量程和使能信息,在獲得合法的控制字后才能通知初始化模塊開(kāi)始正常的數(shù)據(jù)運(yùn)行。對(duì)于非法的控制字信息也能報(bào)錯(cuò)并停機(jī)。endprint
2)初始化模塊:在上電后初始化每一個(gè)DAC芯片,包括復(fù)位芯片,開(kāi)啟菊花鏈?zhǔn)鼓?,清空輸出?shù)據(jù)寄存器等操作I1)。
3) SPI接口模塊:該模塊能自動(dòng)的將處理完成的數(shù)據(jù)添加字頭地址并發(fā)送,而且能夠配合初始化模塊完成DAC的初始化工作。在完成數(shù)據(jù)發(fā)送后最好還可以自動(dòng)回讀DAC的狀態(tài)信息了解DAC是否過(guò)熱,電流環(huán)開(kāi)路等信息。在處理完成所有工作后,自動(dòng)的提供一個(gè)幀復(fù)位信號(hào)給狀態(tài)機(jī)完成一幀數(shù)據(jù)的處理工作。
4)時(shí)鐘控狀態(tài)機(jī):該模塊能協(xié)調(diào)每個(gè)模塊的工作順序,使這個(gè)機(jī)制在數(shù)據(jù)幀能順利工作并且自動(dòng)復(fù)位。
5)通道識(shí)別模塊:對(duì)于多通道數(shù)據(jù)使用同一個(gè)數(shù)據(jù)處理線來(lái)說(shuō),要有效的識(shí)別通道,通知各模塊裝載對(duì)應(yīng)的量程控制字和控制SPI模塊的菊花鏈數(shù)據(jù)裝載順序。 圖4是FPGA內(nèi)部整體處理機(jī)制的結(jié)構(gòu)圖。
3 FPGA仿真測(cè)試
通過(guò)Verilog HDL語(yǔ)言編寫相關(guān)的硬件描述語(yǔ)言模塊,并綜合生成實(shí)例。圖5是FPGA內(nèi)部實(shí)現(xiàn)DAC數(shù)據(jù)轉(zhuǎn)換處理的實(shí)例模塊,也是本設(shè)計(jì)的核心模塊,其相應(yīng)的輸入端口包括:模塊復(fù)位rst-n;模塊主時(shí)鐘輸入mclki:通道1的總線送來(lái)的十六位數(shù)據(jù)BUSdatal[15:0];通道2的總線送來(lái)的十六位數(shù)據(jù)BUSdata2[15:0];2個(gè)DAC通道的配置數(shù)據(jù)(包括量程和使能信號(hào))configdata[7:0];轉(zhuǎn)換使能信號(hào)sta rt;相應(yīng)的輸出信號(hào)包括送往SPI通信模塊發(fā)送給DAC1的數(shù)據(jù)Txdatal[15:0];發(fā)送給DAC2的數(shù)據(jù)Txdata2[15:0],以及轉(zhuǎn)換完成的使能信號(hào)TXok。
使用ModeISim軟件對(duì)FPGA內(nèi)部的處理機(jī)制進(jìn)行仿真測(cè)試,圖6是SPI端口對(duì)DAC進(jìn)行初始化的時(shí)序仿真結(jié)果。包括發(fā)送Ox560001進(jìn)行復(fù)位功能,發(fā)送Ox560000取消復(fù)位功能,發(fā)送Ox550008開(kāi)啟菊花鏈?zhǔn)鼓艿炔僮鳌?/p>
圖7顯示了FPGA內(nèi)部數(shù)據(jù)轉(zhuǎn)換的仿真測(cè)試結(jié)果,我們先預(yù)設(shè)了DAC工作在-10-10V量程下,并在該模式下給FPGA送入十進(jìn)制的6000對(duì)應(yīng)Ox1770代表要求DAC輸出正10V滿量程,計(jì)算結(jié)果輸出是有符號(hào)數(shù)的Ox7FFF,說(shuō)明和預(yù)期結(jié)果一致,即這部分功能模塊可以正常工作。
樣機(jī)測(cè)試使用Microsemi的FPGA為處理核心,使用Libero SoC開(kāi)發(fā)平臺(tái)下移植了以上設(shè)計(jì)進(jìn)行實(shí)體電路的運(yùn)行,圖8為樣機(jī)的實(shí)物照片,左邊為頂層FPGA板,右邊為底層模擬量輸出板。其中模擬部分的硬件設(shè)計(jì)可以參考EVAL_AD5422[3]。另外,注意要做好輸出ESD保護(hù)對(duì)策。圖9顯示了該樣機(jī)輸出O-10V階躍信號(hào)的實(shí)測(cè)波形,驗(yàn)證了設(shè)計(jì)的可行性,完成了相關(guān)產(chǎn)品的開(kāi)發(fā)任務(wù)。
4 結(jié)論
本設(shè)計(jì)憑借FPGA強(qiáng)大的硬件可編程能力,在硬件設(shè)計(jì)方面直接省略了一顆MCU處理器及相關(guān)配套的硬件,既可以極度的精簡(jiǎn)物料表。提升整體硬件可靠性,降低系統(tǒng)功耗,又不用擔(dān)心MCU會(huì)存在死機(jī)等實(shí)際運(yùn)行的風(fēng)險(xiǎn)。
對(duì)于數(shù)據(jù)處理交由FPGA來(lái)實(shí)現(xiàn),既可更嚴(yán)格的管理完善整體系統(tǒng)運(yùn)行的時(shí)序。而且輸入輸出數(shù)據(jù)的關(guān)聯(lián)性更差,這樣整個(gè)設(shè)計(jì)具有更好的保密性。利用FPGA的靈活性,使電子設(shè)計(jì)能夠在很短的周期內(nèi)完成[4],而且FPGA內(nèi)部設(shè)計(jì)硬件乘法器,加法器等硬件模塊可以極大的提升數(shù)據(jù)處理速度,從而提升系統(tǒng)響應(yīng)時(shí)間[5]。
參考文獻(xiàn):
[1]AD5422 Datasheet[Z] Analog Devices, Inc
[2]于笑凡,費(fèi)樹(shù)岷基于FPGA與AD5422的多功能信號(hào)發(fā)生器的設(shè)計(jì)[J]信息技術(shù)與信息化,2013(6)53-55
[3]UG-422:Evaluating the AD5422 Single Channel.16Bit.Current Source and Voltage OutputDAC.HART Connectivity.[Z] Analog Devices, Inc
[4]王玨文,金偉信,蔡一兵,等基于FPGA的SPI總線接口的實(shí)現(xiàn)叫現(xiàn)代電子技術(shù),2010(14):102-104
[5]周維龍基于FPGA的智能變送器的設(shè)計(jì)與開(kāi)發(fā)[D]長(zhǎng)沙:湖南大學(xué),201018-22endprint