国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

變形鏡驅(qū)動器控制電路的設(shè)計

2017-11-18 19:45李正東周志強(qiáng)袁學(xué)文劉章文
現(xiàn)代電子技術(shù) 2017年22期
關(guān)鍵詞:硬件設(shè)計軟件設(shè)計控制電路

李正東 周志強(qiáng) 袁學(xué)文 劉章文

摘 要: 96通道變形鏡驅(qū)動器內(nèi)含6個驅(qū)動模塊,每個驅(qū)動模塊含有16個輸出通道,為了更加有效地管理控制這6個驅(qū)動模塊,并實(shí)現(xiàn)與上位機(jī)、圖像處理模塊的交互通信,設(shè)計了變形鏡驅(qū)動器控制電路。該電路包含了硬件設(shè)計和軟件設(shè)計,其中硬件設(shè)計包含了電源設(shè)計、接口設(shè)計和FPGA設(shè)計,旨在實(shí)現(xiàn)高速向CPCI總線傳輸來自SPI接口的驅(qū)動矢量數(shù)據(jù),同時把這些數(shù)據(jù)以適當(dāng)?shù)乃俣劝l(fā)給上位機(jī)。軟件設(shè)計包括FPGA程序和NIOS系統(tǒng)程序設(shè)計,其中NIOS程序旨在實(shí)現(xiàn)上位機(jī)對上位機(jī)指令或數(shù)據(jù)的接收、處理和發(fā)送,以及對系統(tǒng)參數(shù)的配置以及驅(qū)動模塊參數(shù)的保存等。結(jié)果表明,該電路不僅能夠以200 f/s的速率正確接收并發(fā)送來自圖像處理模塊的驅(qū)動矢量數(shù)據(jù),還能夠正確收發(fā)來自上位機(jī)網(wǎng)口或者串口的控制指令,實(shí)現(xiàn)單通道與驅(qū)動矢量的切換、驅(qū)動矢量數(shù)據(jù)源的切換、單通道電壓設(shè)置、放大器參數(shù)調(diào)試和保存以及通道數(shù)據(jù)讀取、回傳等功能,達(dá)到了預(yù)定的設(shè)計目標(biāo)。

關(guān)鍵詞: 變形鏡; 控制電路; 硬件設(shè)計; 軟件設(shè)計; FPGA; NIOS系統(tǒng)

中圖分類號: TN911?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2017)22?0125?06

Abstract: The 96?channel deformable mirror driver includes 6 driver modules, and each module has 16 output channels. In order to manage the 6 driver modules more efficiently, and realize the interactive communication with the upper computer and image processing module, a control circuit of the deformable mirror driver was designed. The hardware design and software design of the circuit are introduced. The hardware design contains the power supply design, interface design and FPGA design, which can transmit the driving vector data from SPI to CPCI bus in high speed, and send the data to the upper computer with proper speed. The software design includes the FPGA program design and NIOS system program design. The NIOS program is used to receive, process and send the instructions or data of the upper computer, configure the system parameters, and save the parameters of the driving module. The experimental results show that the circuit can accurately receive and send the driving vector data from the image processing module with the speed of 200 f/s, correctly transmit and receive the control instructions from the network interface or serial port of the upper computer, and realize the switchover between the single channel and driving vector, switchover between the driving vector data, voltage set of single channel, amplifier parameter debugging and saving, read and postback of the channel data. It achieves the scheduled design target.

Keywords: deformable mirror; control circuit; hardware design; software design; FPGA; NIOS system

0 引 言

主動光學(xué)系統(tǒng)的目的就是改善光束質(zhì)量,其涉及到的關(guān)鍵器件是變形鏡。變形鏡是由一定數(shù)量的壓電陶瓷單元組成的面陣系統(tǒng),通過合理的改變加在壓電陶瓷單元上的電壓,從而改變壓電陶瓷單元的形變,最終達(dá)到改善光束裝量的目的。變形鏡驅(qū)動器[1]就是負(fù)責(zé)將一組對應(yīng)電壓的矢量數(shù)據(jù)施加到變形鏡上,其中的每一路電壓負(fù)責(zé)變形鏡一個陶瓷單元的驅(qū)動。但由于陶瓷單元的驅(qū)動電壓值較高,故陶瓷單元的末級電壓放大器都是高電壓模擬放大器。再考慮到放大電路的散熱要求,故每塊驅(qū)動模塊設(shè)計成僅僅輸出16通道驅(qū)動電壓的電路板。這樣96通道的變形鏡驅(qū)動器就需要6塊驅(qū)動板,這些驅(qū)動板卡通過CPCI物理總線集成在一個機(jī)箱內(nèi),并在機(jī)箱內(nèi)設(shè)計一塊控制模塊,用來為了更加有效的控制、管理這6塊驅(qū)動板卡,并實(shí)現(xiàn)與上位機(jī)、圖像處理板卡的交互通信,以及每通道放大器參數(shù)的調(diào)試和加載。

1 變形鏡驅(qū)動器的原理設(shè)計endprint

變形鏡驅(qū)動器主要由控制模塊、圖像處理模塊、驅(qū)動模塊、總線電路和電源模塊組成[2?3],其拓?fù)浣Y(jié)構(gòu)如圖1所示。它的基本框架采用CPCI總線結(jié)構(gòu),其內(nèi)含1塊控制模塊、1塊圖像處理模塊以及6塊驅(qū)動模塊,其中每個驅(qū)動模塊有16個輸出通道,每個通道可以用于驅(qū)動變形鏡的一個陶瓷單元。所以,整個驅(qū)動器可以驅(qū)動最多96單元的變形鏡。所有這些模塊均掛在CPCI總線上,其中控制模塊有兩種工作模式,當(dāng)其工作在調(diào)試模式時,通過以太網(wǎng)與上位機(jī)相連,接收并處理上位機(jī)指令后,通過CPCI總線向驅(qū)動模塊發(fā)出控制指令,從而實(shí)現(xiàn)驅(qū)動模塊驅(qū)動電壓的輸出或者驅(qū)動模塊參數(shù)的調(diào)試和設(shè)置;當(dāng)其工作在運(yùn)行模式時,控制模塊通過CPCI總線,直接接收來自圖像處理模塊的驅(qū)動矢量數(shù)據(jù),經(jīng)過整形處理后,再通過CPCI總線,發(fā)送到各驅(qū)動模塊,從而實(shí)現(xiàn)驅(qū)動模塊驅(qū)動電壓的輸出,從而實(shí)現(xiàn)對96通道變形鏡的驅(qū)動。

具體來說,其中的總線電路板相當(dāng)于整個變形鏡驅(qū)動器的主板,其提供了整個變形鏡驅(qū)動器基本的CPCI總線,電源模塊正是通過CPCI總線為變形鏡驅(qū)動器的控制模塊、圖像處理模塊和6塊驅(qū)動模塊供電,控制模塊、圖像處理模塊和6塊驅(qū)動模塊之間的控制信號、數(shù)據(jù)信號以及反饋信號也是通過該CPCI總線實(shí)現(xiàn)互聯(lián);其中的電源模塊采用了一款成熟的商業(yè)化電源模塊來實(shí)現(xiàn),其有四組輸出端子,分別輸出150 V,-50 V,15 V,

-15 V四種電壓,它們通過CPCI總線給控制模塊、圖像處理模塊和6塊驅(qū)動模塊供電,其中150 V和-50 V為6塊驅(qū)動模塊內(nèi)部的末級高壓放大器提供正、負(fù)電源,15 V電源通過CPCI總線為控制模塊、圖像處理模塊和6塊驅(qū)動模塊提供工作電源,-15 V結(jié)合15 V為驅(qū)動模塊內(nèi)含的前級放大器提供負(fù)、正電源;其中的圖像處理模塊對圖像數(shù)據(jù)處理完成后,得出一組驅(qū)動變形鏡所需的電壓驅(qū)動矢量數(shù)據(jù),并通過CPCI總線發(fā)送到控制模塊,再經(jīng)過控制模塊的處理,發(fā)送到驅(qū)動模塊,最終通過驅(qū)動模塊的輸出電壓控制變形鏡的形變,實(shí)現(xiàn)光束質(zhì)量的控制。

2 變形鏡驅(qū)動器控制模塊的硬件設(shè)計

變形鏡驅(qū)動器控制模塊硬件框架如圖2所示?;旧匣贑PCI總線結(jié)構(gòu),其設(shè)計主要包括三個部分,分別為電源部分、接口部分和FPGA部分,其中電源部分將來自CPCI總線的15 V電源,經(jīng)過不同的電壓轉(zhuǎn)換芯片給整個驅(qū)動模塊的供電。來自CPCI總線的15 V電源首先經(jīng)過過壓保護(hù)電路和由電容組成的濾波電路,再經(jīng)過兩片LMZ14201電壓轉(zhuǎn)換芯片,分別輸出5.0 V 和3.3 V的電壓,其中5.0V電壓作為控制模塊中RS 485串口芯片的工作電壓,3.3 V電壓作為控制模塊中FPGA的I/O電壓和控制模塊其他接口芯片的工作電壓。同時,3.3 V電壓再經(jīng)過NCP5661?1.2芯片輸出1.2 V的電壓用來作為FPGA的內(nèi)核電壓。圖3給出了3.3 V電壓的設(shè)計原理圖。

接口部分的設(shè)計分為兩個部分:CPCI接口設(shè)計;面板接口設(shè)計。其中CPCI接口設(shè)計包含有DSP圖像處理模塊接口設(shè)計、RS 485總線設(shè)計、并行總線設(shè)計和網(wǎng)絡(luò)接口設(shè)計,其中圖像處理模塊接口主要用來通過CPCI總線接收來自于圖像處理模塊輸出的驅(qū)動矢量數(shù)據(jù)。該矢量數(shù)據(jù)利用SPI協(xié)議傳輸,SPI的時鐘、數(shù)據(jù)和幀同步3根信號經(jīng)過SN54HC244芯片的驅(qū)動,送入到FPGA。同時,F(xiàn)PGA發(fā)往圖像處理模塊的反饋信號也經(jīng)過SN54HC244芯片的驅(qū)動,發(fā)往CPCI總線;RS 485總線主要用來實(shí)現(xiàn)控制模塊和其他6塊驅(qū)動模塊在調(diào)試工作模式下的信息交互,尤其在逐個對放大器參數(shù)進(jìn)行標(biāo)定時,上位機(jī)的通道切換指令、通道電壓設(shè)置指令等均是通過本總線發(fā)往各驅(qū)動模塊,各驅(qū)動模塊的反饋信號也是通過本總線經(jīng)控制模塊傳回上位機(jī)。此功能由SP485EL芯片來實(shí)現(xiàn)??刂颇K的FPGA為RS 485總線的主設(shè)備,6塊驅(qū)動模塊為RS 485總線的從設(shè)備。其中SP485EL_B和SP485EL_A為一對差分信號,連接至CPCI總線上,其他信號連接到FPGA。并行總線主要用來實(shí)現(xiàn)控制模塊在運(yùn)行工作模式下,采用全硬件方式,將來自圖像處理模塊或者來自上位機(jī)的驅(qū)動矢量數(shù)據(jù)高速地通過CPCI總線,再發(fā)往各驅(qū)動模塊。此功能主要由DS91M040芯片來實(shí)現(xiàn)。電路設(shè)計上,通RS 485總線設(shè)計一致,即DS91M040的單端信號為信號輸入端,包括數(shù)據(jù)信號和控制信號,均接入到FPGA。其4對差分信號為輸出端,均接到CPCI總線上。這樣有利于提高總線數(shù)據(jù)傳輸?shù)乃俣群涂煽啃裕?dāng)然,具體的數(shù)據(jù)傳輸協(xié)議由用戶制定。圖3僅給出總線電路的設(shè)計。

網(wǎng)絡(luò)接口設(shè)計主要用來實(shí)現(xiàn)控制模塊在調(diào)試工作模式下,接收上位機(jī)指令,并將指令進(jìn)行解析處理,然后發(fā)往各驅(qū)動模塊,或者將各驅(qū)動模塊的狀態(tài)數(shù)據(jù)收集打包并通過網(wǎng)口返回給上位機(jī)等功能,此功能由DP83848芯片來實(shí)現(xiàn),具體的實(shí)現(xiàn)電路如圖4所示。面板接口設(shè)計則相對比較簡單,它主要用于顯示控制模塊的工作狀態(tài),包含控制模塊的3.3 V電源狀態(tài)顯示、通信狀態(tài)顯示、故障顯示以及蜂鳴器報警設(shè)計。另外,面板上還備用了RS 422串口,在網(wǎng)絡(luò)不方便的時候,可利用串口進(jìn)行網(wǎng)絡(luò)調(diào)試。RS 422功能利用ADM2582EBRW2芯片來實(shí)現(xiàn),芯片的單端信號接入FPGA,差分信號輸出到面板的DB15接頭,在此不再贅述。

FPGA是整個控制模塊的核心部件,實(shí)現(xiàn)對控制模塊所有指令和數(shù)據(jù)的控制和交互。FPGA部分的設(shè)計主要包含F(xiàn)PGA電源設(shè)計、時鐘設(shè)計、JTAG口設(shè)計、配置芯片設(shè)計和存儲器設(shè)計。其中存儲器包含1片SDRAM芯片和1片EPCS16;而這里的EPCS16作為EPROM不同于FPGA的配置芯片,它主要存儲控制模塊的所有配置參數(shù),上電后,NIOS系統(tǒng)先要從該EPROM中讀取參數(shù),并利用這些參數(shù)進(jìn)行系統(tǒng)的初始化,這些工作完成后,矢量數(shù)據(jù)通道都切換正常后,系統(tǒng)才進(jìn)入工作模式。網(wǎng)絡(luò)接口原理圖如圖5所示。

3 變形鏡驅(qū)動器控制模塊的軟件設(shè)計endprint

變形鏡驅(qū)動器控制模塊的軟件設(shè)計包含兩個部分:FPGA的設(shè)計;NIOS程序設(shè)計。FPGA程序的主要目的是當(dāng)變形鏡驅(qū)動器工作在運(yùn)行模式時,使用硬件完成來自圖像處理模塊或者經(jīng)NIOS來自上位機(jī)的驅(qū)動矢量數(shù)據(jù)的處理后,以較高的速度向CPCI總線發(fā)送,驅(qū)動模塊從CPCI總線接收驅(qū)動矢量數(shù)據(jù),實(shí)現(xiàn)對變形鏡的驅(qū)動;NIOS程序的主要目的是當(dāng)變形鏡驅(qū)動器工作在調(diào)試模式時,接收并解析上位機(jī)命令,并將相應(yīng)的指令或數(shù)據(jù)通過CPCI總線上發(fā)送到驅(qū)動模塊中去,實(shí)現(xiàn)對驅(qū)動模塊每個通道放大器參數(shù)的標(biāo)定,并給各驅(qū)動模塊發(fā)送命令,把這些參數(shù)存儲各驅(qū)動模塊的EPROM中,供驅(qū)動模塊上電時調(diào)用裝載,同時NIOS程序,還根據(jù)上位機(jī)指令,收集驅(qū)動模塊的狀態(tài)信息并上傳給上位機(jī)。下面分別介紹FPGA和NIOS程序的設(shè)計。

3.1 FPGA的程序設(shè)計

控制模塊對驅(qū)動矢量數(shù)據(jù)的接收有兩個途徑,一個途徑是通過CPCI總線接收來自圖像處理模塊發(fā)出的驅(qū)動矢量數(shù)據(jù);另一個途徑是通過NIOS接收來自上位機(jī)的驅(qū)動矢量數(shù)據(jù)。當(dāng)接收到驅(qū)動矢量數(shù)據(jù)后,F(xiàn)PGA利用硬件把驅(qū)動矢量數(shù)據(jù)通過CPCI總線發(fā)往掛在CPCI總線的驅(qū)動模塊中,F(xiàn)PGA程序的邏輯框圖如圖6所示。

圖6中圖像處理模塊有DSPA和DSPB兩路輸出,其中DSPB的輸出作為系統(tǒng)備份之用,兩路輸出數(shù)據(jù)格式、傳輸協(xié)議均相同,故這里僅對DSPA輸出的數(shù)據(jù)做出說明,圖像處理模塊輸出的每幀驅(qū)動矢量數(shù)據(jù)含有106個數(shù)據(jù),每個數(shù)據(jù)含有16 b數(shù)據(jù),16 b的數(shù)據(jù)采用SPI協(xié)議傳輸,幀數(shù)據(jù)協(xié)議如圖7所示。

幀協(xié)議中,幀頭包括4個FFFF和1個FFFE,長度項(xiàng)表示每幀中所含的16 b字的數(shù)目,具體為0x0065(不包含幀頭),長度反碼為0xFF9A,命令字為0x0840,表示本幀數(shù)據(jù)為驅(qū)動矢量數(shù)據(jù)。幀計數(shù)主要是為了檢測是否存在丟幀現(xiàn)象而設(shè)置的。相鄰幀計數(shù)之差為1,則說明不存在丟幀現(xiàn)象。幀計數(shù)之后是96個驅(qū)動電壓的數(shù)值,每個驅(qū)動電壓對應(yīng)驅(qū)動器的一個輸出通道。最后是一個16 b的校驗(yàn)碼,校驗(yàn)碼是從幀長度開始計算,按字節(jié)相加的方式進(jìn)行計算,直至最后一個電壓數(shù)據(jù),其中超出16 b的高位數(shù)據(jù)做舍棄處理。

SPI數(shù)據(jù)存儲控制模塊主要用來實(shí)現(xiàn)對來自CPCI總線的SPI數(shù)據(jù)的接受和存儲。為了兼顧上位機(jī)對SPI驅(qū)動矢量數(shù)據(jù)的監(jiān)控,SPI數(shù)據(jù)存儲控制后端設(shè)置了兩個存儲器DPRAM1和DPRAM2。其中DPRAM2是為上位機(jī)監(jiān)視查詢而設(shè)置的,其存儲容量為128個16 b的字,足可以存儲驅(qū)動矢量數(shù)據(jù)中的96個驅(qū)動電壓值。由于這僅僅為是為了滿足監(jiān)視要求,故只當(dāng)上位機(jī)設(shè)置成讀完成標(biāo)志后,才容許SPI數(shù)據(jù)存儲控制模塊向DPRAM2寫入新的驅(qū)動矢量數(shù)據(jù);并在寫入完成后,向NIOS系統(tǒng)發(fā)送中斷;NIOS再利用SPI數(shù)據(jù)上傳讀控制模塊進(jìn)行驅(qū)動矢量數(shù)據(jù)的讀取,再通過NIOS的網(wǎng)絡(luò)內(nèi)核,上傳給上位機(jī)。而DPRAM1是SPI數(shù)據(jù)存儲控制模塊發(fā)往CPCI總線上的驅(qū)動矢量存儲器,為了提高系統(tǒng)工作頻率,SPI存儲器容量設(shè)置為256個16 b的字,分為A,B兩個半?yún)^(qū),分別為128個字,讀/寫操作均采用乒乓操作,由此提高了系統(tǒng)的帶寬。當(dāng)系統(tǒng)開始工作時,SPI數(shù)據(jù)存儲控制向A區(qū)寫入數(shù)據(jù),當(dāng)A區(qū)數(shù)據(jù)寫操作完成時,SPI數(shù)據(jù)存儲控制模塊通知SPI數(shù)據(jù)發(fā)送讀控制模塊A區(qū)寫入完成,同時準(zhǔn)備將下一幀的驅(qū)動矢量數(shù)據(jù)寫入B區(qū),SPI數(shù)據(jù)發(fā)送讀控制模塊收到SPI數(shù)據(jù)存儲控制模塊的A區(qū)寫完成信號后,從A區(qū)讀取驅(qū)動矢量數(shù)據(jù),并按照總線協(xié)議把這些數(shù)據(jù)發(fā)送到CPCI總線。反之亦然,不再贅述,SPI數(shù)據(jù)存儲控制流程圖如圖8所示。

SPI數(shù)據(jù)發(fā)送讀模塊的功能是將驅(qū)動矢量數(shù)據(jù)發(fā)送到CPCI總線上,采用4對差分信號實(shí)現(xiàn)輸出的傳輸。其中一對差分信號作為時鐘信號;另外三對差分信號作為數(shù)據(jù)線,以字節(jié)方式從DPRAM1中讀出數(shù)據(jù),在字節(jié)數(shù)的最高位前再填一個0,組成9 b數(shù)據(jù),依據(jù)高位先傳,低位后傳的原則實(shí)現(xiàn)傳輸,這樣一個字節(jié)的數(shù)據(jù)需要3個周期完成傳輸。當(dāng)SPI數(shù)據(jù)發(fā)送讀模塊檢測到幀數(shù)據(jù)有效時時,首先在6個時鐘周期傳輸2組幀頭,即“111_111_111”和“111_010_101”,然后從DPRAM1的有效地址開始以字節(jié)方式讀出數(shù)據(jù),組成9 b數(shù)據(jù)開始傳輸,直至1幀的96個字傳輸完成,由此完成1幀驅(qū)動矢量數(shù)據(jù)的發(fā)送。圖6中的上位機(jī)矢量數(shù)據(jù)發(fā)送讀模塊采用和SPI數(shù)據(jù)發(fā)送讀模塊完全相同的協(xié)議,二者的主要區(qū)別是驅(qū)動矢量數(shù)據(jù)來源不同,在此不做另外的說明。SPI數(shù)據(jù)發(fā)送讀模塊的FPGA框圖如圖9所示。

3.2 NIOS的設(shè)計

NIOS的設(shè)計包括QSYS組件定制和程序設(shè)計[4?5],其中QSYS組件定制除一些必要的JTAG、定時器、配置存儲器等內(nèi)核外,還包含其他一些內(nèi)核,具體介紹如下。QSYS組件定制界面如圖10所示。

在NIOS系統(tǒng)中clk_0為處理器內(nèi)核,onchip_ram_descriptor為片內(nèi)存儲器內(nèi)核,用于存儲程序代碼以及程序運(yùn)行空間,在系統(tǒng)中設(shè)置其為復(fù)位地址。sdram_0為SDRAM控制器內(nèi)核,它用于實(shí)現(xiàn)和外部SDRAM的通信,從而為應(yīng)用程序提供運(yùn)行空間,為NIOS系統(tǒng)的異常地址。po_0為并行輸入/輸出類型內(nèi)核,它用于實(shí)現(xiàn)NIOS系統(tǒng)對輸入/輸出I/O的電平控制,從而通過FPGA,在面板顯示控制模塊電源、通信、報錯以及蜂鳴器的工作狀態(tài),同時還通過FPGA,實(shí)現(xiàn)對驅(qū)動矢量數(shù)據(jù)源的開/關(guān)切換。tse_mac為三速以太網(wǎng)內(nèi)核,用于實(shí)現(xiàn)NIOS系統(tǒng)和DP83848硬件的通信功能,進(jìn)而實(shí)現(xiàn)和上位機(jī)通信。epcs_config為EPCS內(nèi)核,對應(yīng)于配置芯片EPCS16,用于存儲PFGA配置數(shù)據(jù)。而epcs_flash_controller_0也為EPCS內(nèi)核,但在本系統(tǒng)中配置為EPROM使用,用于存儲程序所需的一些全局配置參數(shù),包括輸出最大電壓、最低電壓等。DPRAM16_DrvVecIn和DPRAM16_DrvVecOut為雙口RAM內(nèi)核。其中前者實(shí)現(xiàn)與FPGA中DPRAM2的通信,當(dāng)FPGA程序?qū)碜詧D像處理模塊的驅(qū)動矢量數(shù)據(jù)寫入DPRAM2后,中斷通知NIOS系統(tǒng),NIOS通過讀取DPRAM2中的數(shù)據(jù),進(jìn)而通過網(wǎng)口上傳給上位機(jī),用來監(jiān)視來自圖像處理模塊的工作狀況;后者實(shí)現(xiàn)與FPGA中DPRAM3的通信,在調(diào)試模式下,NIOS利用它把來自網(wǎng)口的上位機(jī)驅(qū)動矢量數(shù)據(jù)寫入DPRAM3,再通知FPGA讀取并發(fā)往CPCI總線,寫另一個存儲模塊用于將圖像處理模塊通過SPI協(xié)議發(fā)送到FPGA的驅(qū)動矢量寫入模塊。uart_0和uart_0均為串口內(nèi)核,其中前者用于實(shí)現(xiàn)與CPCI總線測RS 485芯片的通信,繼而通過CPCI總線與掛在總線上的全部驅(qū)動模塊通信,而后者用于實(shí)現(xiàn)與面板側(cè)RS422芯片的通信,用于實(shí)現(xiàn)控制模塊工作在串口調(diào)試模式時,與上位機(jī)串口的通信,由此構(gòu)成了NIOS系統(tǒng)的內(nèi)核設(shè)計。endprint

NIOS程序設(shè)計上則以UCOS嵌入式操作系統(tǒng)運(yùn)行輕量級的TCP/IP協(xié)議為基礎(chǔ)[6],創(chuàng)建了taskUdpRecv,taskUdpSend和taskTelnetServer三個任務(wù),分別代表UDP接收任務(wù)、UDP發(fā)送任務(wù)以及網(wǎng)絡(luò)服務(wù)任務(wù)。其中taskUdpRecv用于接收處理來自上位機(jī)網(wǎng)口的指令或者數(shù)據(jù),taskUdpSend用于將控制模塊或者驅(qū)動模塊的狀態(tài)信息,以及通過CPCI總線來自圖像處理系統(tǒng)SPI接口的驅(qū)動矢量數(shù)據(jù)傳回上位機(jī)。在taskUdpSend中首先利用wtInit()函數(shù)進(jìn)行系統(tǒng)初始化。初始化包含禁止任何來自FPGA的硬件中斷、DPRAM16_DrvVecIn、DPRAM16_DrvVecOut和po_0內(nèi)核初始化、所有串口初始化、控制模塊對各驅(qū)動模塊的呼叫應(yīng)答以及FPGA程序中斷信號的使能等。系統(tǒng)初始化完成后,進(jìn)入UDP發(fā)送任務(wù)的主循環(huán),即wtMainloop()函數(shù)。

在wtMainloop()函數(shù)中,該函數(shù)首先判斷是否有來自上位機(jī)新的字符串指令,若有新的字符串指令,則調(diào)用procNetCommand()對新的字符串指令進(jìn)行處理。字符串指令大體分為3類:一類為set類命令,包括驅(qū)動矢量數(shù)據(jù)源在SPI(圖像處理模塊)和NIOS(上位機(jī))之間的切換,配置參數(shù)中電壓極值設(shè)置,通道映射設(shè)置,單通道電壓設(shè)置與驅(qū)動矢量數(shù)據(jù)切換等;一類為get類指令,這類指令主要是為了確認(rèn)set類命令執(zhí)行結(jié)果是否正確而設(shè)置的,基本對應(yīng)著set指令;最后一類指令為其他指令,如save指令,設(shè)計這個指令主要是因?yàn)轵?qū)動模塊每個通道的末級電壓放大器含有兩個參數(shù),這些參數(shù)需在單通道電壓調(diào)試模式下通過調(diào)試獲得,并最終通過控制模塊的save命令將這些參數(shù)固化到相應(yīng)驅(qū)動模塊的ROM中,上電工作時加載。例如<0.0/set_ vec _source:0>指令,其中<>為字符串指令的首尾標(biāo)志;0.0表示指令接收方為第一個機(jī)箱的控制模塊;set_vec_source表示驅(qū)動矢量數(shù)據(jù)的來源;0表示驅(qū)動矢量源來自圖像處理模塊輸出的SPI接口;1則表示驅(qū)動矢量源來自上位機(jī)通過網(wǎng)絡(luò)送到的NIOS系統(tǒng)的DPRAM3,又如<0.2/set_DA:12=43525>。其中:0.2表示操作的對象為第1個機(jī)箱的第2個驅(qū)動模塊;set_DA表示本指令是設(shè)置通道的電壓值;12=43 525表示將本驅(qū)動模塊的12通道的電壓設(shè)置為43 525(65 535對應(yīng)電壓最大值),這個通道映射為驅(qū)動器系統(tǒng)的第28號通道,即(2-1)×16+12=28。相反<0.0/get_ vec _source>表示獲取驅(qū)動矢量的數(shù)據(jù)源,<0.2/get_DA:12>表示獲取第28號通道的設(shè)置電壓值。這些指令執(zhí)行完成后,調(diào)用netSendStrCommand()函數(shù)將獲得的字符串指令的反饋信息打包,組成符合UDP協(xié)議的數(shù)據(jù)包,發(fā)往上位機(jī)以供監(jiān)視。

在wtMainloop()函數(shù)中,還設(shè)計有串口字符串指令處理函數(shù)procSuartCommand(),它主要用于接收處理來自面板串口的上位機(jī)調(diào)試指令。其處理過程幾乎和procNetCommand()函數(shù)一樣,不同之處在于其操作對象是來自面板側(cè)的RS 422串口,接收指令或發(fā)送反饋信息均通過該串口來實(shí)現(xiàn),由于受速度限制,串口指令集中不涉及驅(qū)動矢量的操作。

在wtMainloop()函數(shù)中,還設(shè)計有netSendVec()函數(shù),其用來實(shí)現(xiàn)對存儲在DPRAM2中的SPI接口提供的驅(qū)動矢量數(shù)據(jù)的讀取,并通過網(wǎng)絡(luò)上傳給上位機(jī)。當(dāng)DPRAM2寫操作有效時,且FPGA程序?qū)碜許PI的驅(qū)動矢量數(shù)據(jù)寫入DPRAM2后,F(xiàn)PGA將DPRAM16_DrvVecIn內(nèi)核的DPRAM2ReadBufReady[0]信號設(shè)置為高電平,并向DPRAM16_DrvVecIn發(fā)送一個中斷信號,DPRAM16_DrvVecIn接收到中斷后,拷貝DPRAM2的數(shù)據(jù)到內(nèi)核,并設(shè)置hasNewVecFromBus為true,當(dāng)netSendVec()判斷hasNewVecFromBus為true后,將數(shù)據(jù)打包,并發(fā)往上位機(jī)。

taskUdpRecv首先偵聽本地端口,判斷是否有上位機(jī)數(shù)據(jù)包,如果有上位機(jī)數(shù)據(jù)包,則判斷數(shù)據(jù)包是連接指令、斷開連接指令、數(shù)據(jù)或字符串指令和應(yīng)答指令(沒有數(shù)據(jù)傳輸時,判斷并告知上位機(jī),網(wǎng)絡(luò)是否連通)四種類型中的那一種類型。如果是數(shù)據(jù)或字符串指令類型,則再判斷是字符串指令,還是驅(qū)動矢量數(shù)據(jù);如果是來自上位機(jī)的驅(qū)動矢量數(shù)據(jù),則調(diào)用dpramWriteBlock()函數(shù)。首先從網(wǎng)絡(luò)數(shù)據(jù)包中讀出驅(qū)動矢量數(shù)據(jù),再通過DPRAM16_DrvVecOut內(nèi)核把驅(qū)動矢量數(shù)據(jù)寫入DPRAM3。當(dāng)寫入完成后,設(shè)置dpramDrvOut_WriteBufReady信號線,使其發(fā)出一個正脈沖觸發(fā)FPGA程序。FPGA程序識別到這個脈沖后,開始讀取DPRAM3中的驅(qū)動矢量數(shù)據(jù),再發(fā)往CPCI總線,供驅(qū)動模塊讀取。如果是字符串矢量,則調(diào)用scmdParsetStr()函數(shù)檢查數(shù)據(jù)包是否符合命令格式協(xié)議,若符合字符串指令的格式協(xié)議,則提取出字符串指令供taskUdpSend調(diào)用,同時設(shè)置新的網(wǎng)絡(luò)命令標(biāo)志變量netHasNewStrCommand為True, 當(dāng)taskUdpSend中的主循環(huán)Mainloop()函數(shù)判斷此變量為true時,調(diào)用上述procNetCommand()對新的字符串指令進(jìn)行處理。圖11為NIOS程序中taskUdpRecv和taskUdpSend兩個主要任務(wù)的流程圖。

4 結(jié) 論

根據(jù)上述設(shè)計原理,研制了集成在96通道變形鏡驅(qū)動器內(nèi)的控制電路板,該電路板不僅能夠以200 f/s的速率正確接收并發(fā)送來自SPI的驅(qū)動矢量數(shù)據(jù),而且能夠正確收發(fā)來自上位機(jī)網(wǎng)口或者串口的控制指令,實(shí)現(xiàn)單通道與驅(qū)動矢量的切換、驅(qū)動矢量數(shù)據(jù)源的切換、單通道電壓設(shè)置、放大器參數(shù)調(diào)試和保存以及通道數(shù)據(jù)讀取、回傳等功能,達(dá)到了預(yù)定的設(shè)計目標(biāo)。當(dāng)然,相對變形鏡的響應(yīng)速度而言,如何在后續(xù)工作中進(jìn)一步提高系統(tǒng)帶寬,提高數(shù)據(jù)頻率仍有許多工作要做。

參考文獻(xiàn)

[1] 董理治,雷翔,劉文勁,等.腔內(nèi)雙壓電變形鏡光強(qiáng)分布優(yōu)化[J].強(qiáng)激光與粒子束,2012,24(7):1691?1694.

[2] 朱曉錦,曹浩.基于PA95功放芯片的壓電功率放大器開發(fā)[J].壓電與聲光,2008,30(5):561?563.

[3] 王慧,宮赤坤,王宏峰.基于PA95的新型壓電陶瓷驅(qū)動電源[J].微計算機(jī)信息,2011,27(12):58?59.

[4] 周立功.SOPC嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2006.

[5] 潘松,黃繼業(yè).SOPC技術(shù)實(shí)用教程[M].北京:清華大學(xué)出版社,2005.

[6] 任哲.嵌入式實(shí)時操作系統(tǒng)μC/OS?Ⅱ原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2005.

[7] 譚浩強(qiáng).C程序設(shè)計[M].北京:清華大學(xué)出版社,1991.endprint

猜你喜歡
硬件設(shè)計軟件設(shè)計控制電路
2017款本田雅閣車控制電路(二)
2014款雷克薩斯CT200h車控制電路(一)
2018款別克GL8車控制電路(二)
2016款邁騰B8L車控制電路(一)
基于STM8S903K3的序列打螺絲夾具的軟件設(shè)計
基于中藥自動配藥PLC系統(tǒng)的設(shè)計方案的研究
一種VHDL語言代碼重用的方法
沙雅县| 安龙县| 库伦旗| 延吉市| 咸丰县| 云和县| 通道| 开阳县| 新沂市| 广西| 永川市| 广昌县| 英吉沙县| 聂荣县| 建阳市| 龙门县| 博白县| 北流市| 苗栗市| 神池县| 浙江省| 靖宇县| 长子县| 观塘区| 丹巴县| 仁化县| 蒙城县| 柏乡县| 那坡县| 驻马店市| 宜丰县| 屏边| 崇左市| 伊金霍洛旗| 沾化县| 宁城县| 平远县| 轮台县| 龙井市| 邳州市| 鹤山市|