王琦,張?jiān)茝?qiáng),呂巖
(1.陜西省電子信息產(chǎn)品監(jiān)督檢驗(yàn)院,陜西西安,710000;2.西安市產(chǎn)品質(zhì)量監(jiān)督檢驗(yàn)院,陜西西安,710065)
在檢驗(yàn)檢測工作中,各種樣品設(shè)備的運(yùn)行狀態(tài)是檢測的重要參數(shù)。電壓作為反應(yīng)檢測樣品電氣特性之一的重要模擬量,對(duì)其的監(jiān)控需要轉(zhuǎn)換為數(shù)字信號(hào)量。國外產(chǎn)品往往價(jià)格高昂,操作復(fù)雜,無法達(dá)到本地化應(yīng)用的要求。本文嘗試?yán)靡夥ò雽?dǎo)體STM32F103ZET6 微控制器實(shí)現(xiàn)了對(duì)-3.3V~+3.3V 的近緩變直流電壓信號(hào)的采集。
電平采集系統(tǒng)的工作流程為將原始電壓信號(hào)通過集成運(yùn)放電路線性運(yùn)算處理后,達(dá)到單片機(jī)針腳0~+3.3V 的檢測范圍,內(nèi)部ADC 將獲取的電壓轉(zhuǎn)換為數(shù)字信號(hào),程序通過線性逆向運(yùn)算獲取實(shí)時(shí)電壓值,不僅能以實(shí)時(shí)數(shù)據(jù)的形式顯示在LCD 顯示屏上,還能夠通過串口發(fā)送到上位機(jī)顯示。系統(tǒng)運(yùn)行期間可以實(shí)現(xiàn)主動(dòng)按鍵校準(zhǔn),并提示校準(zhǔn)信息,可根據(jù)當(dāng)前需求擴(kuò)展功能和更改采樣頻率,并為后續(xù)的功能需求留有足夠的接口,方便功能的二次開發(fā)。實(shí)驗(yàn)環(huán)境下,系統(tǒng)最大誤差不超過0.06V,完全滿足高精度的采集需求。
電壓采集系統(tǒng)的總體構(gòu)成主要包括信號(hào)處理電路、A/D轉(zhuǎn)化電路、STM32F103ZET6單片機(jī)、復(fù)位電路、LCD顯示屏、按鍵等構(gòu)成[1-2]。它可對(duì)-3.3V~+3.3V 的近緩變直流電壓信號(hào)進(jìn)行實(shí)時(shí)讀取,將信號(hào)變換為單片機(jī)可處理的電壓范圍,然后顯示在顯示屏上,同時(shí)發(fā)送到上位機(jī)。其中信號(hào)處理單元和單片機(jī)由電源單獨(dú)供電。下面將就系統(tǒng)的各部分設(shè)計(jì)進(jìn)行具體介紹。
電壓采集系統(tǒng)電路設(shè)計(jì)包括信號(hào)處理電路、電源電路、顯示模塊電路、串口通訊電路及系統(tǒng)軟件設(shè)計(jì)。
一般的情況下,數(shù)據(jù)的采集不能對(duì)信號(hào)進(jìn)行直接測量。采集系統(tǒng)需要對(duì)信號(hào)源有一個(gè)隔離的過程,因此我們要設(shè)計(jì)一個(gè)信號(hào)處理電路。源跟隨器是一個(gè)能夠?qū)崿F(xiàn)信號(hào)隔離和信號(hào)還原的電路,輸出電壓與輸入電壓是一樣的,對(duì)前級(jí)電路隔離,對(duì)后級(jí)電路還原輸入信號(hào),提供穩(wěn)定的恒壓源功能。
LM358 是一顆雙運(yùn)算放大器,內(nèi)部有兩個(gè)獨(dú)立的運(yùn)算放大器,適合單電源工作和雙電源工作兩種模式??紤]到信號(hào)的波動(dòng)范圍在-3.3V~+3.3V 而參考電壓在+3.3V 附近,信號(hào)合成范圍在-3.3V~+6.6V 范圍內(nèi),為了保證信號(hào)的還原度和電源獲取的便捷性,電路中的LM358 采用+9V、-3.5V 雙電源供電模式。
如圖1 所示,信號(hào)由SINGAL 端口輸入,由OUTPUT端口輸出。經(jīng)過軟件仿真,具體的輸入輸出關(guān)系如公式(1)所示:
圖1 信號(hào)處理電路設(shè)計(jì)
Voutput:信號(hào)輸出電壓 Vsingal:信號(hào)輸入電壓Vref:參考電壓。
信號(hào)處理電路一共需要的電壓,分別是+9V、+5V、+3.3V 和-3.5V。9V、5V 電源在市面上能夠找到多種解決方案,在此不作討論。電源電路主要解決+3.3V和-3.5V的問題。
如圖2 所示,經(jīng)過軟件驗(yàn)證后,ICL7660 芯片在8 腳連接+5V 電壓時(shí),5 腳能夠產(chǎn)生-5V 的負(fù)電壓,由于負(fù)載電流較大,在經(jīng)過7909芯片穩(wěn)壓處理后,能夠得到穩(wěn)定的-3.5V電壓,可以直接為LM358 提供負(fù)電源供電。+3.3V 電壓由目前普遍運(yùn)用的AMS1117DT-3.3 芯片產(chǎn)生,該芯片輸入端接入+5V 電壓,輸出端能夠提供穩(wěn)定的+3.3V 電壓。
圖2 電源模塊電路
顯示屏采用的LCD R61509VN,此款顯示屏支持SPI 和8080 協(xié)議,可以自動(dòng)適應(yīng)協(xié)議改變工作模式。FSMC 是STM32單片機(jī)的可變靜態(tài)存儲(chǔ)控制器,能夠直接控制SRAM、NAND FLASH 和NOR FLASH,支持8/16/32 位數(shù)據(jù)寬度。
8080 時(shí)序也叫做英特爾時(shí)序,總線的控制線有四根,分別是RD 寫使能,向RAM 中寫入數(shù)據(jù),低電平有效;WR讀使能,向RAM 中讀數(shù)據(jù),低電平有效;CS 片選,低電平有效;RS 寄存器選擇,高電平有效,總線數(shù)據(jù)位共16 位[3]。具體信號(hào)指標(biāo)如表1 所示。
表1 8080接口功能
由于外部SRAM 接口與傳統(tǒng)8080 接口基本相似,部分不相同的線路可以通過軟件控制,此時(shí)STM32 能夠通過FSMC 將TFT-LCD 顯示接口當(dāng)作SRAM 操作,間接控制LCD 顯示功能。單片機(jī)FSMC 為TFT-LCD 預(yù)留接口,17至34 針腳作為16 位數(shù)據(jù)位,其余位作為觸控和控制位。
根據(jù)接口陣腳位的含義,就得到了FSMC 與8080 時(shí)序總線的連接方式,具體連接方式如表2 所示。片選CS 與NE4 連接,LCD 寄存器選擇RS 與A10 連接,讀使能RD 與NOE連接,寫使能WR與NEW連接,其余的數(shù)據(jù)位一一對(duì)應(yīng)。
表2 FSMC與8080接口連接方式
串口通訊電路主要將單片機(jī)經(jīng)過處理的GPIO 數(shù)據(jù)通過數(shù)字邏輯編碼轉(zhuǎn)發(fā)到串口接口上,使上位機(jī)能夠獲取到當(dāng)前的處理數(shù)據(jù)[4]。單片機(jī)的高低電平邏輯與傳統(tǒng)計(jì)算機(jī)的不同,主要是電壓上的差異,單片機(jī)的高電平大于+2.4V,對(duì)應(yīng)的上位機(jī)高電平大于+3V,低電平小于+0.4V,對(duì)應(yīng)的上位機(jī)低電平在小于-3V,該電路主要將單片機(jī)的高低電平邏輯轉(zhuǎn)換為上位機(jī)的高電平邏輯。電路如圖3 所示,由PB10 端口傳遞到DIN1 的數(shù)據(jù)通過SP3232 轉(zhuǎn)換為上位機(jī)邏輯電平從DOUT1 發(fā)送至RS-232 接口。
圖3 串口模塊電路
至此,系統(tǒng)電路部分基本設(shè)計(jì)完成,考慮到電壓采集系統(tǒng)的小型化和維持功能拓展性,本次設(shè)計(jì)將信號(hào)運(yùn)算部分和部分電源模塊進(jìn)行了整體布局,將元器件手動(dòng)布局,由軟件自動(dòng)布線,信號(hào)處理系統(tǒng)電路如圖4 所示。
圖4 信號(hào)處理系統(tǒng)電路圖
信號(hào)由SINGAL 端口輸入,單片機(jī)從SINGAL_OUTPUT端口采集數(shù)據(jù),VOLTAGE_POWER 為負(fù)電源產(chǎn)生芯片供電,AD_VCC 為LM358 芯片供電,PULL_POWER 為運(yùn)算電路參考電壓,所有信號(hào)與供電均共地。
軟件系統(tǒng)設(shè)計(jì)除了本次設(shè)計(jì)需要的功能外,還留有大量的功能接口。軟件系統(tǒng)主要由A/D 控制程序、時(shí)鐘控制程序、LCD 顯示程序、LED 控制程序、外部中斷程序及其處理函數(shù)、按鍵程序和串口通訊程序組成。整個(gè)系統(tǒng)由統(tǒng)一的時(shí)鐘控制程序控制,主程序?qū)Ω鱾€(gè)模塊進(jìn)行對(duì)應(yīng)的初始化操作并在屏幕上顯示基本顯示框架,初始化完成后即開始由A/D 控制程序?qū)π盘?hào)進(jìn)行采集,外部中斷出發(fā)后由對(duì)應(yīng)的中斷處理函數(shù)實(shí)現(xiàn)校準(zhǔn),并在顯示屏上提示用戶校準(zhǔn)成功。顯示屏數(shù)據(jù)與上位機(jī)顯示數(shù)據(jù)同步更新。
2.3.1 軟件開發(fā)語言及開發(fā)環(huán)境介紹
本系統(tǒng)在全局采用最常用的單片機(jī)高級(jí)開發(fā)語言-C 語言,由于C 語言是一門強(qiáng)靜態(tài)語言,代碼經(jīng)過預(yù)處理、編譯、鏈接后占用的空間很小以及得益于指針的使用,運(yùn)行內(nèi)存占用也很小,這完全適合單片機(jī)的資源少、功能多、使用靈活的特點(diǎn)。上位機(jī)能夠?qū)Υ谶M(jìn)行通訊的語言有很多,為了開發(fā)的便捷性,本系統(tǒng)采用Python 語言進(jìn)行串口程序接收的開發(fā)。本次設(shè)計(jì)采用集成開發(fā)環(huán)境Keil uVision 5 作為軟件開發(fā)工具,該工具被廣泛地應(yīng)用于51 單片機(jī)和ARM 核心單片機(jī)的開發(fā)。
2.3.2 單片機(jī)軟件系統(tǒng)流程
本次設(shè)計(jì)的軟件系統(tǒng)的流程比較簡單,首先進(jìn)行系統(tǒng)初始化,這里包括時(shí)鐘系統(tǒng)、中斷等級(jí)分組、串口、LCD 顯示和外部中斷的初始化,初始化完成之后立即進(jìn)入循環(huán)函數(shù),在函數(shù)中主要完成A/D 轉(zhuǎn)換、數(shù)值發(fā)送和顯示的任務(wù)。外部中斷監(jiān)控按鍵的狀態(tài),如果按鍵的狀態(tài)被觸發(fā),主循環(huán)會(huì)暫停,進(jìn)入中斷處理函數(shù)中完成數(shù)據(jù)的校準(zhǔn),完成之后返回到主循環(huán)暫停的位置繼續(xù)進(jìn)行數(shù)據(jù)的采集。中途如若發(fā)生了復(fù)位按鍵的動(dòng)作,系統(tǒng)會(huì)立即從第一個(gè)過程開始進(jìn)行。整個(gè)過程沒有退出的軟件觸發(fā)定義,只有當(dāng)電源斷開時(shí),軟件才會(huì)被動(dòng)退出。
2.3.3 軟件程序設(shè)計(jì)
軟件中的按鍵校準(zhǔn)功能需要按鍵來觸發(fā)外部中斷,其中選用開發(fā)板上的KEY-RIGHT 按鍵進(jìn)行設(shè)置,當(dāng)按鍵按下時(shí)開關(guān)處于接通狀態(tài),松開時(shí)處于斷開狀態(tài)。該按鍵接口屬于GPIOE 的第四針腳,未按下時(shí)該針腳處于低電平狀態(tài),按下后處于高電平狀態(tài)[5]。通過檢測GPIOE4 針腳電平狀態(tài)實(shí)現(xiàn)單片機(jī)系統(tǒng)對(duì)按鍵狀態(tài)的檢測,完成外部中斷標(biāo)志位的觸發(fā)動(dòng)作。初始化代碼如下所示:
A/D 轉(zhuǎn)換程序主要控制驅(qū)動(dòng)單片機(jī)內(nèi)部的ADC 模塊以規(guī)定的時(shí)序進(jìn)行模數(shù)轉(zhuǎn)換,將ADC 轉(zhuǎn)化后的12 位二進(jìn)制數(shù)值轉(zhuǎn)化為十進(jìn)制數(shù)值[6-7]。程序開始后,隨即指定轉(zhuǎn)換通道和采樣時(shí)間,這一步是規(guī)范取值的接口和時(shí)間,使能轉(zhuǎn)換功能后就能得到有效的數(shù)值,由于硬件對(duì)原始信號(hào)進(jìn)行了線性處理,獲得有效值需要逆向計(jì)算,具體數(shù)值計(jì)算如公式(2)所示:
Vreal:實(shí)際電壓值;Vadc:經(jīng)過A/D 模塊轉(zhuǎn)換后的12 位電壓值;Vref:硬件電路中的參考電壓。
檢測到轉(zhuǎn)換完成標(biāo)志后,對(duì)單次采樣值進(jìn)行累加,經(jīng)過多次采樣并且次數(shù)達(dá)到設(shè)置的采樣次數(shù)時(shí),函數(shù)返回本次采樣平均值作為有效數(shù)值。
LCD 顯示程序主要針對(duì)LCD 顯示屏設(shè)計(jì),LCD 顯示屏TFT-R61509VN 是一塊3.0 寸240×400 分辨率并且?guī)в|摸控制功能的屏幕,廠家已經(jīng)提供了對(duì)應(yīng)的驅(qū)動(dòng)模塊、函數(shù)庫以及常用的ASCII 字符顯示模塊,本次設(shè)計(jì)選用官方函數(shù)庫進(jìn)行編程,主要實(shí)現(xiàn)屏幕顯示框架、數(shù)值刷新和提示信息的顯示。
外部中斷程序簡稱EXTI,管理著單片機(jī)的中斷線或者事件線。每個(gè)中斷/事件線都有自己對(duì)應(yīng)的獨(dú)立檢測器,可以對(duì)信號(hào)陡增時(shí)檢測、信號(hào)陡降時(shí)檢測和同時(shí)對(duì)兩種情況檢測。按鍵程序定義按鍵行為會(huì)在按鍵按下時(shí)將原有的低電平瞬間變成高電平,就產(chǎn)生了一次上升沿檢測中的標(biāo)志性行為。其主要用于電壓值的校準(zhǔn),按下校準(zhǔn)按鍵,中斷檢測程序能夠?qū)⒊绦蛑苯舆M(jìn)入到中斷處理函數(shù)中去,外部中斷處理函數(shù)只有在按鍵狀態(tài)位標(biāo)志出發(fā)以后能運(yùn)行,其余時(shí)間均處于待機(jī)狀態(tài),不會(huì)對(duì)主程序產(chǎn)生任何影響。
本次設(shè)計(jì)中串口的主要功能主要完成數(shù)據(jù)的發(fā)送,在功能上只設(shè)計(jì)了數(shù)據(jù)對(duì)外發(fā)送的模塊,數(shù)據(jù)對(duì)內(nèi)接收沒有啟用。數(shù)據(jù)發(fā)送的媒介采用自定義printf 接口向上位機(jī)發(fā)送實(shí)時(shí)采集電壓值。在該接口的作用下,發(fā)送的內(nèi)容通過指針參數(shù)傳入,函數(shù)得到參數(shù)后判斷需要發(fā)送的內(nèi)容,然后將有結(jié)束符號(hào)“ 新竹市| 砚山县| 上虞市| 临海市| 宁波市| 定结县| 汨罗市| 克拉玛依市| 万山特区| 安吉县| 灵川县| 永昌县| 房产| 定远县| 德安县| 德化县| 天等县| 安岳县| 屏山县| 高要市| 句容市| 阳原县| 昌都县| 南阳市| 芷江| 潢川县| 左云县| 蓬安县| 溧阳市| 安顺市| 福鼎市| 扎囊县| 琼中| 赤城县| 辉县市| 锦屏县| 搜索| 哈尔滨市| 贞丰县| 文登市| 湖口县|