余夢(mèng)新,吳銀川
(西安石油大學(xué) 陜西省油氣井測(cè)控技術(shù)重點(diǎn)實(shí)驗(yàn)室,西安 710065)
在實(shí)際應(yīng)用中,除了需要一些規(guī)則的信號(hào),如正弦波、三角波、方波等,還需要一種能夠產(chǎn)生各種不規(guī)則波形的儀器,如生物電子工程中常見(jiàn)的各種生物電波、人體產(chǎn)生的各種信號(hào)波,如心臟跳動(dòng)過(guò)程,電子設(shè)備產(chǎn)生的各種干擾雜波、模擬電路各種瞬變波形等。這類波形不僅不規(guī)則,且無(wú)法直接獲取,普通信號(hào)發(fā)生器很難產(chǎn)生[1]。此時(shí),設(shè)計(jì)任意信號(hào)發(fā)生器具有重要意義。
與傳統(tǒng)的信號(hào)發(fā)生器相比,任意信號(hào)發(fā)生器的最大優(yōu)勢(shì)在于產(chǎn)生信號(hào)的方式靈活多變,它可以根據(jù)用戶的測(cè)試需求進(jìn)行仿真。目前,市面上任意信號(hào)發(fā)生器常見(jiàn)的波形信號(hào)合成技術(shù)有直接數(shù)字波形合成技術(shù)(Direct Digital Waveform Synthesis,DDWS)和直接數(shù)字頻率合成技術(shù)(Direct Digital Frequency Synthesizer,DDFS)。該技術(shù)均是通過(guò)改變采樣時(shí)鐘和波形點(diǎn)數(shù)改變輸出波形頻率,再利用D/A 轉(zhuǎn)換器進(jìn)行數(shù)模轉(zhuǎn)換,完成波形輸出。但該方法面臨著模擬通道內(nèi)低通濾波器設(shè)計(jì)困難以及波形易受模擬通道內(nèi)的元器件的影響,因此在輸出波形時(shí)幅度不夠平坦[2,3],影響波形質(zhì)量。而且目前常見(jiàn)的任意信號(hào)發(fā)生器大多數(shù)是通過(guò)外接電路進(jìn)行介入,沒(méi)有獨(dú)立的系統(tǒng)[4]。因此,本文在該背景下,設(shè)計(jì)任意信號(hào)發(fā)生器的自適應(yīng)閉環(huán)控制系統(tǒng),通過(guò)上位機(jī)結(jié)合下位機(jī)的方式,設(shè)計(jì)一個(gè)獨(dú)立的任意信號(hào)發(fā)生器系統(tǒng)。
系統(tǒng)主要由上位機(jī)與下位機(jī)兩部分組成,上位機(jī)軟件主要是實(shí)現(xiàn)任意波形數(shù)據(jù)的產(chǎn)生、采集、顯示功能。下位機(jī)由以STM32F407 為核心的控制模塊、D/A 轉(zhuǎn)換模塊、A/D 轉(zhuǎn)換模塊以及信號(hào)調(diào)理模塊組成。
任意信號(hào)發(fā)生器系統(tǒng)框圖如圖1 所示。用戶利用上位機(jī)產(chǎn)生任意模擬信號(hào)波形數(shù)據(jù),通過(guò)串口轉(zhuǎn)USB 模塊送至單片機(jī)。單片機(jī)完成信號(hào)接收與存儲(chǔ),并送至D/A 轉(zhuǎn)換模塊進(jìn)行數(shù)模轉(zhuǎn)換,經(jīng)過(guò)信號(hào)調(diào)理等操作,輸出用戶所需要的波形信號(hào)。單片機(jī)再將輸出波形進(jìn)行采集,經(jīng)過(guò)A/D 轉(zhuǎn)換模塊,完成模數(shù)轉(zhuǎn)換。利用USB 或者串口上傳至上位機(jī)軟件顯示,從而實(shí)現(xiàn)信號(hào)的自適應(yīng)閉環(huán)控制。
圖1 任意信號(hào)發(fā)生器系統(tǒng)框圖Fig.1 Block diagram of any signal generator system
任意波形合成框圖如圖2 所示,上位機(jī)軟件通過(guò)函數(shù)計(jì)算得到波形數(shù)據(jù)點(diǎn),其長(zhǎng)度可以根據(jù)波形的復(fù)雜程度或者用戶對(duì)波形的精度要求而改變。采樣點(diǎn)數(shù)越多[5,6],波形的還原度越高,顯示的波形就越完美。數(shù)據(jù)位數(shù)選用D/A轉(zhuǎn)換器的位數(shù),本文采用12 位寬的DAC。將已經(jīng)采樣好的波形數(shù)據(jù)通過(guò)串口下傳至單片機(jī)進(jìn)行處理,完成D/A 轉(zhuǎn)換,將數(shù)字量轉(zhuǎn)換為模擬量,經(jīng)過(guò)濾波等信號(hào)調(diào)理獲得需要的波形。
圖2 任意信號(hào)波形數(shù)據(jù)合成原理框圖Fig.2 Schematic block diagram of arbitrary signal waveform data synthesis
輸出信號(hào)自適應(yīng)流程圖如圖3 所示。其中,Vin是輸入波形各點(diǎn)電壓,Von是波形輸出實(shí)際電壓,Kn是自適應(yīng)系數(shù),取值范圍為[0,1]。通過(guò)計(jì)算特征點(diǎn)的相對(duì)誤差,判斷是否完成自適應(yīng)處理。具體步驟如圖3。
圖3 輸出信號(hào)自適應(yīng)流程Fig.3 Output signal adaptation process
Step1:設(shè)置輸入數(shù)據(jù)特征值Vin。
Step2:測(cè)量實(shí)際輸出數(shù)據(jù)特征值Von。
Step3:判斷特征點(diǎn)相對(duì)誤差|Von-Vin|/Vin×100%≤0.1%;若該點(diǎn)的相對(duì)誤差小于等于0.1%,則迭代結(jié)束,轉(zhuǎn)入Step6;若該點(diǎn)的相對(duì)誤差大于0.1%,則轉(zhuǎn)入Step4。
Step4:計(jì)算ΔVn=Von-Vin,并設(shè)定自適應(yīng)系數(shù)Kn,Kn∈[0,1]。
Step5:迭代輸出Vi(n+1)=Vin-KnΔVn,轉(zhuǎn)入Step2。
Step6:自適應(yīng)結(jié)束。
接口電路設(shè)計(jì)如圖4 所示。單片機(jī)STM32F407 作為下位機(jī)的控制端,需要接收上位機(jī)(計(jì)算機(jī))傳來(lái)的指令,對(duì)指令進(jìn)行解析,然后根據(jù)解析內(nèi)容執(zhí)行或協(xié)調(diào)其他模塊的工作。它主要依靠TXD、RXD 兩個(gè)管腳進(jìn)行通訊。該系統(tǒng)計(jì)算機(jī)選擇USB 接口與單片機(jī)進(jìn)行數(shù)據(jù)傳輸。所以,要實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)的串行通信,需要在控制電路中設(shè)計(jì)一個(gè)通信接口電路來(lái)實(shí)現(xiàn)串口與USB 接口的數(shù)據(jù)傳輸[7]。因此,需要借助芯片CH340 完成串口與USB 兩處接口的電平轉(zhuǎn)換,芯片CH340 無(wú)需外掛晶振,且能自行產(chǎn)生時(shí)鐘,數(shù)據(jù)傳輸波特率最高達(dá)12500Mbps。
圖4 串口轉(zhuǎn)USB接口設(shè)計(jì)Fig.4 Design of serial port to USB interface
圖5 ADC時(shí)序圖Fig.5 ADC Timing diagram
STM32F407 的DAC 模塊(數(shù)字/模擬轉(zhuǎn)換模塊)是12位數(shù)字輸入,電壓輸出型的DAC。它可以配置8 位或者12位模式,也可以與DMA 控制器配合使用,DAC 工作在12位模式時(shí),數(shù)據(jù)可以設(shè)置成左對(duì)齊或者右對(duì)齊數(shù)據(jù)格式,DAC 模塊有兩個(gè)輸出通道,每個(gè)通道都有單獨(dú)的轉(zhuǎn)換器。本系統(tǒng)就是使用單個(gè)DAC 通道1 進(jìn)行數(shù)模轉(zhuǎn)換的。采用12 位的右對(duì)齊方式,不采用硬件觸發(fā),存入寄存器DAC_DHRx 的數(shù)據(jù)會(huì)在一個(gè)APB1 時(shí)鐘周期后自動(dòng)傳入寄存器DAC_DORx[8]。當(dāng)DAC 的參考電壓為VREF+的時(shí)候,即3.3V,它的輸出電壓也是線性的,電壓范圍為0 ~VREF+。
DAC 配置如下:
1)開(kāi)啟PA5 時(shí)鐘和ADC1 時(shí)鐘,設(shè)置PA5 為模擬輸入。
2)設(shè)置DAC 的工作模式,該部分設(shè)置包括:DAC 通道1 使能,DAC 通道1 輸出緩存關(guān)閉,不使用波形發(fā)生器,不使用硬件觸發(fā)等。
3)設(shè)置DAC 輸出值,配置好上述3 個(gè)步驟,DAC 就可以開(kāi)始工作了,這里使用12 位的右對(duì)齊數(shù)據(jù)格式,在DAC 的輸出引腳(PA5)可以得到不同的電壓值。
ADC 時(shí)序圖如5 所示。STM32F407 具有12 位逐次趨近型模數(shù)轉(zhuǎn)換器(ADC)。它具有多達(dá)19 個(gè)復(fù)用通道,可測(cè)量來(lái)自16 個(gè)外部源、2 個(gè)內(nèi)部源和V BAT 通道信號(hào)。這些通道的A/D 轉(zhuǎn)換可在單次、連續(xù)、掃描或不連續(xù)采樣模式下進(jìn)行。ADC 的結(jié)果存儲(chǔ)在一個(gè)左對(duì)齊或者右對(duì)齊的16位數(shù)字寄存器中[9]。該系統(tǒng)設(shè)計(jì)采用STM32F407 內(nèi)部的ADC 進(jìn)行波形數(shù)據(jù)采集,配置如下:
1)開(kāi)啟ADC1 時(shí)鐘和PA5 時(shí)鐘,設(shè)置PA5 為模擬輸入。
2) 配置ADC 輸入時(shí)鐘分頻,模式為獨(dú)立模式,以及設(shè)置ADC 的通用控制寄存器CCR 等。
在系統(tǒng)設(shè)計(jì)中,由于ADC 的總線時(shí)鐘為84M,但是當(dāng)ADC 的采樣時(shí)鐘超過(guò)36M 時(shí),采樣數(shù)據(jù)失真程度較大。因此,需要對(duì)該總線時(shí)鐘進(jìn)行分頻處理。為了滿足最大時(shí)鐘頻率不超過(guò)36M 的要求,這里設(shè)置對(duì)ADC 總線時(shí)鐘進(jìn)行4分頻,就能得到ADC 的采樣時(shí)鐘為24M。
3)對(duì)ADC 參數(shù)進(jìn)行初始化處理并設(shè)置ADC1 的轉(zhuǎn)換分辨率、轉(zhuǎn)換方式、對(duì)齊方式,以及規(guī)則的序列等相關(guān)信息。
ADC 的轉(zhuǎn)換分辨率就是采樣數(shù)據(jù)的位數(shù),可以進(jìn)行多種位數(shù)的配置,但采樣周期與之息息相關(guān),轉(zhuǎn)換分辨率較高時(shí),采樣周期較長(zhǎng);反之,轉(zhuǎn)換分辨率較低時(shí),采樣周期較短。本系統(tǒng)采用中斷觸發(fā)模式,邊沿觸發(fā)設(shè)置為上升沿觸發(fā),這樣當(dāng)模數(shù)轉(zhuǎn)換器檢測(cè)到外部脈沖信號(hào)的上升沿時(shí),就會(huì)啟動(dòng)ADC 進(jìn)行一次采樣。在轉(zhuǎn)換結(jié)束后,便可以讀取ADC 規(guī)則數(shù)字寄存器中的值了。
A/D 轉(zhuǎn)換流程圖如圖6 所示。首先對(duì)AD 寄存器進(jìn)行初始化處理,然后啟動(dòng)A/D 轉(zhuǎn)換器,等待中斷服務(wù),依次讀出A/D 轉(zhuǎn)換結(jié)果,最后停止A/D 轉(zhuǎn)換。
圖6 A/D轉(zhuǎn)換流程圖Fig.6 A/D Conversion flowchart
D/A 轉(zhuǎn)換流程如圖7 所示,首先啟動(dòng)D/A 轉(zhuǎn)換器并完成參數(shù)配置,將所有波形點(diǎn)數(shù)據(jù)經(jīng)過(guò)數(shù)模轉(zhuǎn)換后,并保存至文件中,最后停止D/A 轉(zhuǎn)換器。
圖7 D/A轉(zhuǎn)換流程圖Fig.7 D/A Conversion flowchart
上位機(jī)程序流程圖如圖8 所示,首先上位機(jī)配置并打開(kāi)串口,設(shè)置串口的工作方式為默認(rèn)方式,然后向下位機(jī)發(fā)送模擬信號(hào)數(shù)據(jù),等待下位機(jī)接收與處理,最后完成波形顯示。
圖8 上位機(jī)程序流程圖Fig.8 Upper computer program flowchart
上位機(jī)軟件界面設(shè)計(jì)框圖如圖9 所示。本文基于Visual Studio 2022 開(kāi)發(fā)環(huán)境,采用C#語(yǔ)言對(duì)任意信號(hào)發(fā)生器系統(tǒng)進(jìn)行開(kāi)發(fā)與設(shè)計(jì)[10-12],根據(jù)系統(tǒng)所需要的功能將上位機(jī)軟件界面區(qū)域劃分為以下部分:串口配置區(qū)域、波形繪制區(qū)域、波形調(diào)制區(qū)域、結(jié)果顯示區(qū)域、數(shù)據(jù)讀取區(qū)域。
圖9 上位機(jī)軟件界面設(shè)計(jì)框圖Fig.9 Design block diagram of upper computer software interface
串口配置區(qū)域負(fù)責(zé)配置串口端口、波特率、數(shù)據(jù)位、停止位、校驗(yàn)位;波形繪制區(qū)域負(fù)責(zé)描繪輸出波形以及采集波形;波形調(diào)制區(qū)域負(fù)責(zé)波形的縮小、波形的放大以及波形的回放。結(jié)果顯示區(qū)域負(fù)責(zé)顯示輸出波形的頻率與幅度,數(shù)據(jù)讀取區(qū)域負(fù)責(zé)讀取輸出波形各點(diǎn)電壓值。
上位機(jī)軟件設(shè)計(jì)如圖10 所示。首先進(jìn)行串口及軟件界面初始化,然后上位機(jī)產(chǎn)生任意波形數(shù)據(jù)并存入波形文件中,下位機(jī)接收到指令,對(duì)文件讀取并進(jìn)行信號(hào)處理,完成波形輸出。再將輸出波形采集,并進(jìn)行自適應(yīng)處理,最后使用Chart 圖表繪制波形圖。
圖10 上位機(jī)軟件設(shè)計(jì)圖Fig.10 Upper computer software design diagram
通過(guò)實(shí)驗(yàn)室內(nèi)驗(yàn)證該系統(tǒng)原理,充分證明了該系統(tǒng)的可靠性,從中得到以下結(jié)論:
1)該系統(tǒng)設(shè)計(jì)輸出任意信號(hào)穩(wěn)定可靠,上位機(jī)軟件編程及控制能力良好,下位機(jī)執(zhí)行狀況良好,滿足系統(tǒng)的自適應(yīng)閉環(huán)控制。
2)上位機(jī)軟件測(cè)試圖如圖11 所示。該系統(tǒng)具有輸出任意信號(hào)波形的能力,通過(guò)上位機(jī)可以產(chǎn)生正弦波、三角波、方波以及用戶需要的任意波形數(shù)組,下位機(jī)完成信號(hào)接收與處理,輸出波形在上位機(jī)上顯示。
圖11 上位機(jī)軟件測(cè)試圖Fig.11 Upper computer software testing diagram
3)輸出信號(hào)電壓范圍是0V ~3.3V,電壓最大相對(duì)誤差不大于0.1%。
本設(shè)計(jì)不僅可以輸出任意信號(hào),同時(shí)也具有輸出頻率穩(wěn)定、輸出波形連續(xù)等優(yōu)點(diǎn)。波形合成過(guò)程中存在一定的誤差,如幅度量化誤差,通過(guò)提出輸出波形自適應(yīng)原理,對(duì)特征點(diǎn)電壓進(jìn)行自適應(yīng)處理,控制其電壓相對(duì)誤差在0.1%以內(nèi),觀察結(jié)果并發(fā)現(xiàn)波形質(zhì)量明顯改善,精確度也有提高。該設(shè)計(jì)利用上位機(jī)軟件也可以對(duì)信號(hào)波形進(jìn)行存儲(chǔ)與再現(xiàn),也為測(cè)量結(jié)果進(jìn)一步分析提供了方便。系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)簡(jiǎn)單,拓展性能好,易于操作,設(shè)計(jì)成本低,為模擬實(shí)際工程需要信號(hào)提供了一種輔助手段。