王琦,張云強,呂巖
(1.陜西省電子信息產(chǎn)品監(jiān)督檢驗院,陜西西安,710000;2.西安市產(chǎn)品質(zhì)量監(jiān)督檢驗院,陜西西安,710065)
在檢驗檢測工作中,各種樣品設(shè)備的運行狀態(tài)是檢測的重要參數(shù)。電壓作為反應(yīng)檢測樣品電氣特性之一的重要模擬量,對其的監(jiān)控需要轉(zhuǎn)換為數(shù)字信號量。國外產(chǎn)品往往價格高昂,操作復(fù)雜,無法達到本地化應(yīng)用的要求。本文嘗試?yán)靡夥ò雽?dǎo)體STM32F103ZET6 微控制器實現(xiàn)了對-3.3V~+3.3V 的近緩變直流電壓信號的采集。
1 電平采集系統(tǒng)設(shè)計簡介
電平采集系統(tǒng)的工作流程為將原始電壓信號通過集成運放電路線性運算處理后,達到單片機針腳0~+3.3V 的檢測范圍,內(nèi)部ADC 將獲取的電壓轉(zhuǎn)換為數(shù)字信號,程序通過線性逆向運算獲取實時電壓值,不僅能以實時數(shù)據(jù)的形式顯示在LCD 顯示屏上,還能夠通過串口發(fā)送到上位機顯示。系統(tǒng)運行期間可以實現(xiàn)主動按鍵校準(zhǔn),并提示校準(zhǔn)信息,可根據(jù)當(dāng)前需求擴展功能和更改采樣頻率,并為后續(xù)的功能需求留有足夠的接口,方便功能的二次開發(fā)。實驗環(huán)境下,系統(tǒng)最大誤差不超過0.06V,完全滿足高精度的采集需求。
電壓采集系統(tǒng)的總體構(gòu)成主要包括信號處理電路、A/D轉(zhuǎn)化電路、STM32F103ZET6單片機、復(fù)位電路、LCD顯示屏、按鍵等構(gòu)成[1-2]。它可對-3.3V~+3.3V 的近緩變直流電壓信號進行實時讀取,將信號變換為單片機可處理的電壓范圍,然后顯示在顯示屏上,同時發(fā)送到上位機。其中信號處理單元和單片機由電源單獨供電。下面將就系統(tǒng)的各部分設(shè)計進行具體介紹。
2 電壓采集系統(tǒng)電路設(shè)計
電壓采集系統(tǒng)電路設(shè)計包括信號處理電路、電源電路、顯示模塊電路、串口通訊電路及系統(tǒng)軟件設(shè)計。
■2.1 信號處理電路與電源電路設(shè)計
一般的情況下,數(shù)據(jù)的采集不能對信號進行直接測量。采集系統(tǒng)需要對信號源有一個隔離的過程,因此我們要設(shè)計一個信號處理電路。源跟隨器是一個能夠?qū)崿F(xiàn)信號隔離和信號還原的電路,輸出電壓與輸入電壓是一樣的,對前級電路隔離,對后級電路還原輸入信號,提供穩(wěn)定的恒壓源功能。
LM358 是一顆雙運算放大器,內(nèi)部有兩個獨立的運算放大器,適合單電源工作和雙電源工作兩種模式??紤]到信號的波動范圍在-3.3V~+3.3V 而參考電壓在+3.3V 附近,信號合成范圍在-3.3V~+6.6V 范圍內(nèi),為了保證信號的還原度和電源獲取的便捷性,電路中的LM358 采用+9V、-3.5V 雙電源供電模式。
如圖1 所示,信號由SINGAL 端口輸入,由OUTPUT端口輸出。經(jīng)過軟件仿真,具體的輸入輸出關(guān)系如公式(1)所示:

圖1 信號處理電路設(shè)計

Voutput:信號輸出電壓 Vsingal:信號輸入電壓Vref:參考電壓。
信號處理電路一共需要的電壓,分別是+9V、+5V、+3.3V 和-3.5V。9V、5V 電源在市面上能夠找到多種解決方案,在此不作討論。電源電路主要解決+3.3V和-3.5V的問題。
如圖2 所示,經(jīng)過軟件驗證后,ICL7660 芯片在8 腳連接+5V 電壓時,5 腳能夠產(chǎn)生-5V 的負(fù)電壓,由于負(fù)載電流較大,在經(jīng)過7909芯片穩(wěn)壓處理后,能夠得到穩(wěn)定的-3.5V電壓,可以直接為LM358 提供負(fù)電源供電。+3.3V 電壓由目前普遍運用的AMS1117DT-3.3 芯片產(chǎn)生,該芯片輸入端接入+5V 電壓,輸出端能夠提供穩(wěn)定的+3.3V 電壓。

圖2 電源模塊電路
■2.2 顯示模塊電路與串口通訊電路設(shè)計
顯示屏采用的LCD R61509VN,此款顯示屏支持SPI 和8080 協(xié)議,可以自動適應(yīng)協(xié)議改變工作模式。FSMC 是STM32單片機的可變靜態(tài)存儲控制器,能夠直接控制SRAM、NAND FLASH 和NOR FLASH,支持8/16/32 位數(shù)據(jù)寬度。
8080 時序也叫做英特爾時序,總線的控制線有四根,分別是RD 寫使能,向RAM 中寫入數(shù)據(jù),低電平有效;WR讀使能,向RAM 中讀數(shù)據(jù),低電平有效;CS 片選,低電平有效;RS 寄存器選擇,高電平有效,總線數(shù)據(jù)位共16 位[3]。具體信號指標(biāo)如表1 所示。

表1 8080接口功能
由于外部SRAM 接口與傳統(tǒng)8080 接口基本相似,部分不相同的線路可以通過軟件控制,此時STM32 能夠通過FSMC 將TFT-LCD 顯示接口當(dāng)作SRAM 操作,間接控制LCD 顯示功能。單片機FSMC 為TFT-LCD 預(yù)留接口,17至34 針腳作為16 位數(shù)據(jù)位,其余位作為觸控和控制位。
根據(jù)接口陣腳位的含義,就得到了FSMC 與8080 時序總線的連接方式,具體連接方式如表2 所示。片選CS 與NE4 連接,LCD 寄存器選擇RS 與A10 連接,讀使能RD 與NOE連接,寫使能WR與NEW連接,其余的數(shù)據(jù)位一一對應(yīng)。

表2 FSMC與8080接口連接方式
串口通訊電路主要將單片機經(jīng)過處理的GPIO 數(shù)據(jù)通過數(shù)字邏輯編碼轉(zhuǎn)發(fā)到串口接口上,使上位機能夠獲取到當(dāng)前的處理數(shù)據(jù)[4]。單片機的高低電平邏輯與傳統(tǒng)計算機的不同,主要是電壓上的差異,單片機的高電平大于+2.4V,對應(yīng)的上位機高電平大于+3V,低電平小于+0.4V,對應(yīng)的上位機低電平在小于-3V,該電路主要將單片機的高低電平邏輯轉(zhuǎn)換為上位機的高電平邏輯。電路如圖3 所示,由PB10 端口傳遞到DIN1 的數(shù)據(jù)通過SP3232 轉(zhuǎn)換為上位機邏輯電平從DOUT1 發(fā)送至RS-232 接口。

圖3 串口模塊電路
至此,系統(tǒng)電路部分基本設(shè)計完成,考慮到電壓采集系統(tǒng)的小型化和維持功能拓展性,本次設(shè)計將信號運算部分和部分電源模塊進行了整體布局,將元器件手動布局,由軟件自動布線,信號處理系統(tǒng)電路如圖4 所示。

圖4 信號處理系統(tǒng)電路圖
信號由SINGAL 端口輸入,單片機從SINGAL_OUTPUT端口采集數(shù)據(jù),VOLTAGE_POWER 為負(fù)電源產(chǎn)生芯片供電,AD_VCC 為LM358 芯片供電,PULL_POWER 為運算電路參考電壓,所有信號與供電均共地。
■2.3 軟件系統(tǒng)設(shè)計
軟件系統(tǒng)設(shè)計除了本次設(shè)計需要的功能外,還留有大量的功能接口。軟件系統(tǒng)主要由A/D 控制程序、時鐘控制程序、LCD 顯示程序、LED 控制程序、外部中斷程序及其處理函數(shù)、按鍵程序和串口通訊程序組成。整個系統(tǒng)由統(tǒng)一的時鐘控制程序控制,主程序?qū)Ω鱾€模塊進行對應(yīng)的初始化操作并在屏幕上顯示基本顯示框架,初始化完成后即開始由A/D 控制程序?qū)π盘栠M行采集,外部中斷出發(fā)后由對應(yīng)的中斷處理函數(shù)實現(xiàn)校準(zhǔn),并在顯示屏上提示用戶校準(zhǔn)成功。顯示屏數(shù)據(jù)與上位機顯示數(shù)據(jù)同步更新。
2.3.1 軟件開發(fā)語言及開發(fā)環(huán)境介紹
本系統(tǒng)在全局采用最常用的單片機高級開發(fā)語言-C 語言,由于C 語言是一門強靜態(tài)語言,代碼經(jīng)過預(yù)處理、編譯、鏈接后占用的空間很小以及得益于指針的使用,運行內(nèi)存占用也很小,這完全適合單片機的資源少、功能多、使用靈活的特點。上位機能夠?qū)Υ谶M行通訊的語言有很多,為了開發(fā)的便捷性,本系統(tǒng)采用Python 語言進行串口程序接收的開發(fā)。本次設(shè)計采用集成開發(fā)環(huán)境Keil uVision 5 作為軟件開發(fā)工具,該工具被廣泛地應(yīng)用于51 單片機和ARM 核心單片機的開發(fā)。
2.3.2 單片機軟件系統(tǒng)流程
本次設(shè)計的軟件系統(tǒng)的流程比較簡單,首先進行系統(tǒng)初始化,這里包括時鐘系統(tǒng)、中斷等級分組、串口、LCD 顯示和外部中斷的初始化,初始化完成之后立即進入循環(huán)函數(shù),在函數(shù)中主要完成A/D 轉(zhuǎn)換、數(shù)值發(fā)送和顯示的任務(wù)。外部中斷監(jiān)控按鍵的狀態(tài),如果按鍵的狀態(tài)被觸發(fā),主循環(huán)會暫停,進入中斷處理函數(shù)中完成數(shù)據(jù)的校準(zhǔn),完成之后返回到主循環(huán)暫停的位置繼續(xù)進行數(shù)據(jù)的采集。中途如若發(fā)生了復(fù)位按鍵的動作,系統(tǒng)會立即從第一個過程開始進行。整個過程沒有退出的軟件觸發(fā)定義,只有當(dāng)電源斷開時,軟件才會被動退出。
2.3.3 軟件程序設(shè)計
軟件中的按鍵校準(zhǔn)功能需要按鍵來觸發(fā)外部中斷,其中選用開發(fā)板上的KEY-RIGHT 按鍵進行設(shè)置,當(dāng)按鍵按下時開關(guān)處于接通狀態(tài),松開時處于斷開狀態(tài)。該按鍵接口屬于GPIOE 的第四針腳,未按下時該針腳處于低電平狀態(tài),按下后處于高電平狀態(tài)[5]。通過檢測GPIOE4 針腳電平狀態(tài)實現(xiàn)單片機系統(tǒng)對按鍵狀態(tài)的檢測,完成外部中斷標(biāo)志位的觸發(fā)動作。初始化代碼如下所示:

A/D 轉(zhuǎn)換程序主要控制驅(qū)動單片機內(nèi)部的ADC 模塊以規(guī)定的時序進行模數(shù)轉(zhuǎn)換,將ADC 轉(zhuǎn)化后的12 位二進制數(shù)值轉(zhuǎn)化為十進制數(shù)值[6-7]。程序開始后,隨即指定轉(zhuǎn)換通道和采樣時間,這一步是規(guī)范取值的接口和時間,使能轉(zhuǎn)換功能后就能得到有效的數(shù)值,由于硬件對原始信號進行了線性處理,獲得有效值需要逆向計算,具體數(shù)值計算如公式(2)所示:

Vreal:實際電壓值;Vadc:經(jīng)過A/D 模塊轉(zhuǎn)換后的12 位電壓值;Vref:硬件電路中的參考電壓。
檢測到轉(zhuǎn)換完成標(biāo)志后,對單次采樣值進行累加,經(jīng)過多次采樣并且次數(shù)達到設(shè)置的采樣次數(shù)時,函數(shù)返回本次采樣平均值作為有效數(shù)值。
LCD 顯示程序主要針對LCD 顯示屏設(shè)計,LCD 顯示屏TFT-R61509VN 是一塊3.0 寸240×400 分辨率并且?guī)в|摸控制功能的屏幕,廠家已經(jīng)提供了對應(yīng)的驅(qū)動模塊、函數(shù)庫以及常用的ASCII 字符顯示模塊,本次設(shè)計選用官方函數(shù)庫進行編程,主要實現(xiàn)屏幕顯示框架、數(shù)值刷新和提示信息的顯示。
外部中斷程序簡稱EXTI,管理著單片機的中斷線或者事件線。每個中斷/事件線都有自己對應(yīng)的獨立檢測器,可以對信號陡增時檢測、信號陡降時檢測和同時對兩種情況檢測。按鍵程序定義按鍵行為會在按鍵按下時將原有的低電平瞬間變成高電平,就產(chǎn)生了一次上升沿檢測中的標(biāo)志性行為。其主要用于電壓值的校準(zhǔn),按下校準(zhǔn)按鍵,中斷檢測程序能夠?qū)⒊绦蛑苯舆M入到中斷處理函數(shù)中去,外部中斷處理函數(shù)只有在按鍵狀態(tài)位標(biāo)志出發(fā)以后能運行,其余時間均處于待機狀態(tài),不會對主程序產(chǎn)生任何影響。
本次設(shè)計中串口的主要功能主要完成數(shù)據(jù)的發(fā)送,在功能上只設(shè)計了數(shù)據(jù)對外發(fā)送的模塊,數(shù)據(jù)對內(nèi)接收沒有啟用。數(shù)據(jù)發(fā)送的媒介采用自定義printf 接口向上位機發(fā)送實時采集電壓值。在該接口的作用下,發(fā)送的內(nèi)容通過指針參數(shù)傳入,函數(shù)得到參數(shù)后判斷需要發(fā)送的內(nèi)容,然后將有結(jié)束符號“