基于微機保護的電力系統(tǒng)繼電保護的設計-畢業(yè)論文_第1頁
基于微機保護的電力系統(tǒng)繼電保護的設計-畢業(yè)論文_第2頁
基于微機保護的電力系統(tǒng)繼電保護的設計-畢業(yè)論文_第3頁
基于微機保護的電力系統(tǒng)繼電保護的設計-畢業(yè)論文_第4頁
基于微機保護的電力系統(tǒng)繼電保護的設計-畢業(yè)論文_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

青島農(nóng)業(yè)大學畢業(yè)論文(設計)題目:基于微機保護的電力系統(tǒng)繼電保護的設計畢業(yè)論文(設計)誠信聲明本人聲明:所呈交的畢業(yè)論文(設計)是在導師指導下進行的研究工作及取得的研究成果,論文中引用他人的文獻、數(shù)據(jù)、圖表、資料均已作明確標注,論文中的結論和成果為本人獨立完成,真實可靠,不包含他人成果及已獲得青島農(nóng)業(yè)大學或其他教育機構的學位或證書使用過的材料。與我一同工作的同志對本研究所做的任何貢獻均已在論文中作了明確的說明并表示了謝意。論文(設計)作者簽名:日期:年月日畢業(yè)論文(設計)版權使用授權書本畢業(yè)論文(設計)作者同意學校保留并向國家有關部門或機構送交論文(設計)的復印件和電子版,允許論文(設計)被查閱和借閱。本人授權青島農(nóng)業(yè)大學可以將本畢業(yè)論文(設計)全部或部分內(nèi)容編入有關數(shù)據(jù)庫進行檢索,可以采用影印、縮印或掃描等復制手段保存和匯編本畢業(yè)論文(設計)。本人離校后發(fā)表或使用該畢業(yè)論文(設計)或與該論文(設計)直接相關的學術論文或成果時,單位署名為青島農(nóng)業(yè)大學。論文(設計)作者簽名:日期:年月日指導教師簽名:日期:年月日目錄TOC\o"1-3"\h\u摘要 基于微機保護的電力系統(tǒng)繼電保護的設計摘要本設計主要完成了一套基于微機保護的新型繼電保護整體設計方案,在分析了我國微機保護發(fā)展的歷史和現(xiàn)狀并結合了工作效率和器件性價比后,確定了C#+STM32的系統(tǒng)設計解決方案。本設計以意法半導體公司生產(chǎn)的STM32F407芯片制作成測控板實現(xiàn)保護邏輯與信息傳遞功能,該測控板主要負責電流測量變換及電壓形成、A/D采樣、繼電保護邏輯判斷和輸出、有效值計算、TFT屏幕顯示測量值、與上位機通信。上位機采用Microsoft公司開發(fā)的設計語言C#和開發(fā)環(huán)境VisualStudio2013設計上位機監(jiān)視控制界面,主要實現(xiàn)采樣數(shù)據(jù)的接收與采樣波形顯示功能和遠程控制斷路器跳合閘功能。本文詳細闡述了各部分功能的設計思路和設計方法,稍作改進便可用于實際電力系統(tǒng)保護當中,也可另用作繼電保護實驗教學裝置。關鍵詞:微機保護;電流保護;C#;STM32

TheDesignofPowerSystemRelayProtectionBasedonMicrocomputerProtectionAbstractThroughtheanalysisofthehistoryandcurrentsituationofthedevelopmentofmicrocomputerprotectioninourcountry,andconsiderthefactorssuchasworkefficiency,developmentefficiencyanddeviceperformance.UltimatelydeterminetheuseofC#+STM32technologyofanewrelayprotectionschemebasedonmicrocomputerprotection.STM32F407chipproducedbytheStSemiconductorCorporationismadeintothemeasurementandcontrolboardtorealizethefunctionofprotectionlogicandinformationtransfer.Furthermore,themeasurementandcontrolboardismainlyresponsibleforthecurrentmeasurementtransformationandvoltageformation,A/Dsampling,relayprotectionlogicjudgmentandoutput,RMSvalueofthecalculation,TFTscreenreal-timedisplayofmeasuredvaluesandcommunicationwiththeuppercomputer.Specifically,usingthedesignlanguageofC#developedbytheMicrosoftcompanyanddevelopmentenvironmentofvisualstudio2013bothdesigntheuppercomputermonitoringandcontrolinterface,themainachievementofsamplingdatareceivingandsamplingwaveformdisplayfunctionandremotecontrolcircuitbreakerjumpclosingfunction.Inthispaper,thedesignideaandmethodofeachpartofthefunctionaredescribedindetail.Thesimulatedrelayprotectiondevicewithaslightimprovementcanbeusedintheactualpowersystemprotection,andcanbeusedasarelayprotectionexperimentteachingdeviceforteaching.Keywords:MicrocomputerProtection;CurrentProtection;C#;STM32青島農(nóng)業(yè)大學機電工程學院本科畢業(yè)設計(論文)1緒論1.1選題背景及研究意義為了保障電力系統(tǒng)安全運行,需要實時地監(jiān)視其運行狀況,及時發(fā)現(xiàn)電力系統(tǒng)的不正常狀態(tài)及故障狀態(tài)。而繼電保護裝置能檢測電力系統(tǒng)的故障及不正常運行狀態(tài),快速地通過繼電保護裝置進行故障的切除并通知運行人員。因此,繼電保護是保障電力系統(tǒng)供電優(yōu)質運行穩(wěn)定極其重要的手段[1]。當前在實際應用中,絕大部分低壓配電網(wǎng)或者農(nóng)村電網(wǎng)并沒有故障點定位系統(tǒng),所以電力系統(tǒng)發(fā)生故障如接地故障這種難以發(fā)現(xiàn)的故障通常是斷路器自動跳閘后人工去排查,由巡線員去現(xiàn)場一根線一根線的尋找故障點在哪兒,然后采取措施解決問題。這樣一來,不僅耗費了大量的人力,還導致故障排除效率低下,停電時間過長造成經(jīng)濟損失等問題。當前電力系統(tǒng)需要一套能夠自動精確判斷故障點經(jīng)濟高效的互聯(lián)網(wǎng)繼電保護裝置。隨著電力系統(tǒng)規(guī)模不斷的擴大和電壓等級的提高,保護裝置芯片也從8位微處理器一直發(fā)展到32位處理器,處理器的運算速度越來越快[2],執(zhí)行的功能也越來越多,越來越復雜。本設計中采用意法半導體公司生產(chǎn)的32位低功耗STM32F407芯片作為核心處理器,可極大的提高處理效率并生產(chǎn)和使用節(jié)約成本。而上位機采用Microsoft公司開發(fā)的C#編程語言和VisualStudio2013開發(fā)環(huán)境,這種編程語言目前被各大公司廣泛使用,因為該語言極大的簡化了計算機軟件的開發(fā)過程,降低了開發(fā)難度,并且該語言基于Windows系統(tǒng)開發(fā)出的界面簡潔美觀,使開發(fā)者不用了解晦澀難懂的底層操作方法就可以方便的調(diào)用Windows提供的各種API。本設計的主要意義在于能夠聯(lián)網(wǎng)遠程精確反映電力系統(tǒng)的各類故障,減少人力物力的投資,使電力系統(tǒng)更加智能化、自動化、節(jié)約化。另一方面,由于當前教科書上幾乎沒有微機保護的實踐性教程,學生所學的理論知識無法通過實踐來轉化為自己對微機保護深刻的認知,因此本設計不僅可以用在實際電力系統(tǒng)中用作電力系統(tǒng)的繼電保護,還可以應用于繼電保護的實踐教學。1.2繼電保護裝置在國內(nèi)外發(fā)展現(xiàn)狀我國計算機繼電保護的研究是從70年代末才開始的,隨后國內(nèi)設計出很多優(yōu)秀的繼電保護裝置。從90年代開始我國繼電保護技術進入了微機保護的時代,隨著單片機工藝的成熟和硬件制造水平的大大提高,微機保護在軟件、算法等方面取得了很多成果,并逐步應用于實踐之中[3]?,F(xiàn)在國內(nèi)外微機保護均應用了計算機技術領域的先進技術:大規(guī)模集成電路,A/D模數(shù)轉換、數(shù)字濾波技術和抗干擾技術,使微機保護在速動性、可靠性等方面均遠遠優(yōu)于電磁型等傳統(tǒng)保護。ARM處理器在速度方面DSP不相上下,甚至超過DSP。而且ARM集成了豐富的外圍控制接口,用戶幾乎不用再添加外圍器件就能實現(xiàn)需要的功能,既節(jié)約硬件成本,又降低了設計錯誤率[4]。國外微機保護經(jīng)歷了三代保護設計上的更新?lián)Q代,并以微處理器技術與多種已被提出并被可靠證明和廣泛應用的算法相結合為基礎,不斷為新型微機保護的完善創(chuàng)造良好的實現(xiàn)條件[5]。雖然國內(nèi)外在電力系統(tǒng)繼電保護裝置的研究上取得了不錯的成績,但是在實際應用中依然存在著問題,主要就是保護和監(jiān)控的一體化和保護裝置的經(jīng)濟性問題[6]。1.3研究目標及內(nèi)容本設計的研究方向是基于微機保護的繼電保護的設計,在總結了國內(nèi)外研究成果的基礎上,結合不斷發(fā)展的嵌入式技術,采用STM32芯片作為核心處理器,設計出具有低成本、低功耗、高速度、遠程化操作的繼電保護裝置。研究目標:該系統(tǒng)能夠遠程監(jiān)視控制系統(tǒng)運行,在正常運行時精確地顯示電力系統(tǒng)的運行狀態(tài),電流值、波形等電力系統(tǒng)參數(shù),發(fā)生故障時能精確反映,并自動執(zhí)行跳閘或發(fā)出信號等操作,最終保護整個電力系統(tǒng)的安全運行。研究內(nèi)容:利用以ARM為核心的處理器搭建硬件電路,設計出電流繼電保護保護裝置。硬件系統(tǒng)的設計主要包括:測量電路、以STM32為核心的主電路板、信號電路、跳閘電路。軟件程序的設計主要包括:LCD顯示屏界面的設計、信號的采集、繼電保護邏輯的判斷、對于采集數(shù)據(jù)的處理算法、利用串口實現(xiàn)下位機與上位機的通信等,利用Keil軟件實現(xiàn)下位機程序的開發(fā)設計。利用C#語言完成上位機監(jiān)控軟件的設計,實現(xiàn)顯示電流有效值,電流波形,并可以控制斷路器開合閘的上位機軟件。本設計的特色:以STM32F407ZGT6處理器為核心的保護裝置,實現(xiàn)了低成本、低功耗、高效率處理的設計,利用C#語言和語言設計了上位機監(jiān)控界面,實現(xiàn)了下位機和上位機兩種方式的監(jiān)控。上位機使用軟件操作,下位機將所有器件封裝到一個配電箱里,使保護裝置的移動和安裝都變得極為方便。1.4本文的總體結構本文的總體結構如下:1緒論介紹了本設計的研究背景、意義,介紹了國內(nèi)外電力系統(tǒng)繼電保護領域的研究現(xiàn)狀,重點闡述了本設計的研究目標和研究內(nèi)容。2系統(tǒng)硬件電路設計詳細介紹了系統(tǒng)硬件電路的設計,分析了硬件設計需要實現(xiàn)的功能和實現(xiàn)功能所使用的器件,并詳細說明了每個器件的參數(shù)和使用方法。3下位機系統(tǒng)程序設計承接了上一章節(jié)提到的下位機硬件應該實現(xiàn)的功能,對STM32單片機的程序做了詳細的講解。4上位機監(jiān)控系統(tǒng)的設計介紹了設計上位機三相電力系統(tǒng)電流保護系統(tǒng)的軟件環(huán)境,并詳細說明了所設計的各個界面的詳細功能和設計方法。5總結與展望總結研究成果以及展望下一步研究的工作。

2系統(tǒng)硬件電路設計2.1系統(tǒng)測控部分硬件的整體設計測控部分由測量部分和控制與信息傳遞部分兩部分組成。但這兩部分不完全是相互獨立的,這兩部分的聯(lián)結靠的是主控芯片,就是在緒論中提及的意法半導體公司生產(chǎn)的STM32F407ZG芯片作為核心處理器。測量部分實現(xiàn)的功能有輸入變換及電壓形成、有源低通濾波ALF、采樣保持S/H、A/D變換采集。控制與信息傳遞部分實現(xiàn)的功能有數(shù)據(jù)處理、TFT屏幕顯示實時電流有效值、繼電器信號輸出、通過串口與上位機進行數(shù)據(jù)傳遞。串行通信數(shù)據(jù)線STM32串行通信數(shù)據(jù)線STM32主控芯片帶光電隔離的跳合閘信號繼電器輸入變換及電壓形成有源低通濾波三相交變電流輸入ADCCPU定時器上位機保護功能通信接口開關量輸出部件串行通信數(shù)據(jù)線STM32主控芯片帶光電隔離的跳合閘信號繼電器輸入變換及電壓形成有源低通濾波三相交變電流輸入ADCCPU定時器上位機保護功能通信接口開關量輸出部件圖2-1硬件系統(tǒng)的整體框圖2.2系統(tǒng)硬件設計中使用的各部分功能模塊介紹2.2.1主控芯片STM32由意法半導體生產(chǎn)的STM32系列單片機性價比超高,應該沒有之一,而且功能極其強大。該系列單片機中的STM32F407芯片擁有為需要高性能、低成本、低功耗的嵌入式應用專門設計的ARMCortex-M4內(nèi)核,其強大的功能主要表現(xiàn)在:集成了DSP和FPU指令,168MHz的高速性能使得數(shù)字信號控制器應用達到了極高的水平,提升了控制算法的執(zhí)行速度和代碼效率[7]。多重AHB總線矩陣和多通道DMA支持程序執(zhí)行和數(shù)據(jù)傳輸并行處理,數(shù)據(jù)傳輸速率非???,由于采用了ST的ART加速器,程序從FLASH運行相當于0等待。PWM高速定時器:168MHz最大頻率帶有日歷功能的32位RTC:<1μA的實時時鐘,1秒精度高速USART,可達10.5Mbits/s它能工作在活躍和休眠兩個狀態(tài),最大程度的降低了功耗。同時由于其內(nèi)部集成了12位模擬數(shù)字轉換器(ADC):0.41us轉換/2.4Msps,使外部硬件電路可以變得更為簡化。鑒于上述優(yōu)點,本設計采用這款芯片作為繼電保護裝置核心處理器。其圖片和引腳資料如圖2-2所示:圖2-2STM32F407ZGT6引腳圖本設計使用該芯片實現(xiàn)的主要功能是A/D采樣(使用內(nèi)置ADC)、繼電保護邏輯判斷(編程判斷)、繼電保護邏輯輸出(使用STM32的GPIO引腳)、有效值計算(算法編程)、TFT屏幕實時顯示測量值(編程顯示)、與上位機通信(串行接口通信)。2.2.2霍爾電流傳感器本設計采用國內(nèi)厚施公司生產(chǎn)的HBC-LSP型號閉環(huán)霍爾電流傳感器,表2-1是該傳感器的電氣特性:表2-1霍爾電流傳感器電氣特性額定電流Ipn(A)測量范圍Ip(A)線圈匝比Ns(T)輸出電壓Vo(V)供電電源Vc(V)6-6~+66002.5±2.0±5VDC±5%霍爾電流傳感器的工作原理是原邊電流Ip產(chǎn)生的磁通量與霍爾電壓經(jīng)過放大產(chǎn)生的副邊電流Is通過副邊線圈所產(chǎn)生的磁通量相等,副邊電流Is能精確地反應原邊電流。該傳感器有三個引腳,分別為+5V輸入引腳,GND引腳和信號輸出引腳,其最大的特點是經(jīng)過傳感器的原邊電流,在輸出端直接輸出的是以2.5V為基準的電壓。簡單來說,就是當原邊輸入電流為0A時,副邊輸出電壓為2.5V,當原邊輸入電流為最大值+6A時,副邊輸出電壓為2.5+2.0=4.5V,當原邊輸入電流為最小值-6A時,副邊輸出電壓為2.5-2.0=0.5V。這樣一來極大的簡化了采集電路的設計,由于單片機ADC的輸入電壓范圍是0~3.3V,所以在 設計中就不必擔心由于原邊正弦電流當其值為負的時候副邊感應電壓小于零的情況,只需要設計限幅電路,令副邊感應電壓超過3.3V時讀入單片機的電壓保持在3.3V不再升高,以免電壓過大燒壞單片機。霍爾電流傳感器原理圖如圖2-3:圖2-3霍爾電流傳感器原理圖2.2.3限壓電路設計如上一節(jié)所述,為避免讀入電壓過大燒壞單片機,在電流傳感器和單片機ADC中間要加入限幅電路。限幅電路的設計原理是,在單片機的輸入端并聯(lián)一個帶有肖特基二極管和反向電源而且末端接地的電路,當電壓小于3.3V時,由于管壓降和反向電壓的作用,二極管處于截至狀態(tài),信號無法從限幅支路中流通,只能傳遞到單片機內(nèi)。當電壓大于3.3V時,由于已經(jīng)超過限幅支路中反向電壓和管壓降之和,于是二極管導通高出部分的電壓就會通過限幅電路濾掉。以使單片機采入的電壓一直保持在3.3V不再升高。限幅電路中使用的元件:肖特基二極管1N58173只1.25~22.5V可調(diào)輸出穩(wěn)壓電源5AMK1751只由于要限制電壓在3.3V所以管壓降與反向電壓之和應為3.3V,經(jīng)實測,肖特基二極管的管壓降大約在0.1~0.2V這個范圍內(nèi),所以反向電壓就應調(diào)節(jié)到3.1V。圖2-4是在Multisim電路仿真軟件中繪制的電路原理圖,圖2-5是仿真后顯示的效果圖,其中紅線代表限幅后的電壓曲線,藍線代表輸入電壓曲線。可以明顯看到,大于3.3V的部分已經(jīng)被濾除。圖2-4限幅電路原理圖圖2-5限幅電路示波器仿真顯示效果圖2.2.4有源低通濾波電路設計要通過ADC將連續(xù)的模擬信號轉換為離散的數(shù)字信號,其中最重要的一點就是香農(nóng)采樣定理,即保證采樣值能完整、正確和唯一的恢復輸入連續(xù)信號的充分必要條件是,采樣頻率應大于信號的最高頻率的2倍[8]。而在真實的電力系統(tǒng)中大量的高次諧波,為了滿足采樣定理并使采樣到的波形精準顯示,就必須加入濾波裝置。本設計采用的是BB(Burr-Brown)公司生產(chǎn)的UAF42有源濾波器制作成的有源濾波器模塊。芯片內(nèi)部原理圖:圖2-6UAF42有源濾波器內(nèi)部原理圖通帶增益確定方法:公式(2-1)其中R1值確定,Rg在左上角滑動變阻器上可以調(diào)節(jié)。中心頻率:公式(2-2)其中R1和R2為固定值且相等,C1,C2也是固定值,就是說,增大就可以減小中心頻率,減小就可以增大中心頻率。Rf1和Rf2的值在濾波器模塊的右邊兩個滑動變阻器上可以調(diào)節(jié)。品質因數(shù)Q值:公式(2-3)當用和調(diào)節(jié)好中心頻率以后,應當調(diào)節(jié)與的值以改變Q值。應注意的是,Q值和通帶增益無法同時取到最大值,調(diào)節(jié)滑動變阻器時,應當在兩者之間取得一定的平衡。UAF42模塊如圖2-7所示圖2-7UAF42有源濾波器模塊實物圖供電: ±5V~±18V信號輸入:幅值在20mV到略低于供電電壓之間信號輸出:可配置為低通、高通、帶通形式輸出,中心頻率可高至40kHz內(nèi)部放大:可調(diào)至100倍放大輸出2.2.5TFT觸摸屏的介紹及電路設計TFT-LCD即薄膜晶體管液晶顯示器也被叫做真彩液晶顯示器。薄膜晶體管(TFT)設置在液晶顯示屏的每一個象素上,有效地解決了非選通時的串擾問題,使掃描線數(shù)不再影響屏幕的靜態(tài)特性,極大大程度上提高了圖像質量。本設計中使用的是正點原子公司的3.5英寸TFTLCD模塊,該模塊原理圖和實物圖如下圖所示:圖2-8TFT模塊原理圖和實物圖TFTLCD模塊的使用流程如下:圖2-9TFT模塊原理圖和實物圖2.2.6跳合閘信號繼電器的設計電力系統(tǒng)中,斷路器的合閘和跳閘需要由單片機采集到輸入電流之后經(jīng)過邏輯判斷,然后控制短路器跳閘或合閘。然而單片機無法直接控制斷路器的開合,一個原因是單片機本身無法輸出那么大的驅動電流使斷路器動作,更重要的是在微機保護中,強電和弱電部分應該嚴格隔離分開,這樣做的目的是為了保護弱電部分不受強電部分的干擾,假若斷路器發(fā)生了故障,因為隔離的存在,弱電部分不會被泄露過來的高電壓大電流造成不可恢復的損壞。鑒于以上思路,本設計采用的是4路帶光耦隔離5V繼電器模塊作為跳合閘信號輸出模塊。該模塊采用光電隔離和二極管續(xù)流保護,一共4個小型繼電器,每個繼電器都引出常開常閉兩組觸點,每個觸點容量為AC250V10A和DC30V10A。圖2-x是該繼電器的原理圖和實物圖:圖2-104路帶光耦隔離5V繼電器模塊原理圖圖2-114路帶光耦隔離5V繼電器模塊實物圖2.3配電箱設計由于本設計是作為一套能夠應用在實際電力系統(tǒng)中的繼電保護裝置,因此需要高度集成化封閉化,所以需要將其封裝成配電箱。該配電箱主要實現(xiàn)顯示屏的人機交互、指示燈信號、三相電流的輸入輸出和啟動關停整套系統(tǒng)的功能。考慮到以上功能的實現(xiàn),該配電箱在箱門上開有一個鑲嵌顯示屏的矩形孔、兩個鑲嵌啟動開關和急停開關的圓形孔還有三個指示燈圓形孔用于顯示三相電路每相的通斷。在箱體下側面開有一個矩形孔用于三相電流的輸入輸出,在上側面上開有一個鑲嵌散熱風扇的散熱孔。在配電箱內(nèi)部,左側面固定好單片機主控板,通過排線與箱門上的TFT顯示屏連接在一起,右側面固定了一個能夠將交流220V轉換為直流+5V、直流+12V和直流-12V的開關電源,該電源采用外部交流供電,不使用引入的三相電,轉換成直流后直接供給主控芯片和測控版。底層側面固定著接線端子排,向外引出了7根線,分別為三相電流輸入線和PE線與三相電流輸出線。在底面上安裝了測控版和一個導軌,導軌上固定了3個中間繼電器作為模擬斷路器,一個交流接觸器作為電力系統(tǒng)的供電控制,與箱門上鑲嵌的啟動開關和急停開關連接,當啟動開關按下時斷路器控制部分就開始供電。配電箱實物圖如下:(a)(b)圖2-12配電箱實物圖(a)配電箱實物外部正視圖;(b)配電箱內(nèi)部實物圖2.4模擬三相系統(tǒng)設計本設計中的使用的三相電源使用三相插頭直接從電網(wǎng)中取電,使用空氣開關作為三相電路的總開關,開關后引出4根帶插頭的線,可以直接與配電箱引出的三相電流輸入線相連,配電箱的三相電流輸出線又可以接到負載上。本系統(tǒng)中的負載用了兩臺三相異步電動機作為系統(tǒng)模擬負載,每臺電機均采用星形接線以降低啟動電流,減少對電網(wǎng)的沖擊和對繼電保護裝置的干擾。模擬三相系統(tǒng)實物圖如下:圖2-13三相系統(tǒng)實物圖

3下位機系統(tǒng)程序設計3.1程序總流程下位機實現(xiàn)功能的流程是STM32中一個ADC的三個通道不斷循環(huán)采集數(shù)據(jù),DMA不占用CPU運行時間在硬件上將ADC采集到的值存儲到設定的數(shù)組變量中,變量的每一位經(jīng)過ADC的采樣值轉換計算得到電流傳感器傳出的每相電流真實值,此時真實值是三相電流的瞬時值。程序會判斷每相電流值的大小,電流值大于整定值時,單片機會發(fā)出跳閘信號當瞬時值采樣到一個正弦周期后,程序就會調(diào)用有效值計算函數(shù),計算出每相的電流有效值,隨后程序會將每相的有效值顯示在LCD顯示屏上,LCD屏幕上還會同步顯示當前日期和時間。與此同時,單片機還會將所采集到的數(shù)據(jù)通過串行通信接口同步發(fā)送到上位機上,發(fā)送的數(shù)據(jù)有三類,分別是電流瞬時值(用于在上位機軟件上顯示電流波形)、有效值(在上位機上顯示有效值)和斷路器狀態(tài)(用于在上位機軟件上顯示下位機斷路器上的當前工作狀態(tài))。YES上電啟動系統(tǒng)初始化YES上電啟動系統(tǒng)初始化A/D采樣獲取每相電流采樣值單相采樣值大于大于整定值對應相跳閘定時發(fā)送電流有效值DMA傳輸有效值算法LCD顯示電流有效值圖3-1系統(tǒng)的主界面流程圖系統(tǒng)上電后的主界面顯示如圖:圖3-2系統(tǒng)的主界面3.2主程序功能詳細介紹意法半導體公司在設計STM32時,同時提供了一套開發(fā)全面的固件開發(fā)包,這套開發(fā)包中包含了開發(fā)所需要的所有底層操作,這套開發(fā)包就是STM32的庫函數(shù)包,隨著STM32的更新?lián)Q代和廣泛推行,開發(fā)者們根據(jù)官方的庫函數(shù)包又開發(fā)了大量的內(nèi)設外設拓展包用于STM32各種內(nèi)設外設的初始化和調(diào)用方法。由于庫函數(shù)包和拓展包的存在,極大的節(jié)省了設計者的入門難度和設計難度,把設計者從復雜的底層寄存器操作中解放出來,將更多的精力放到應用程序的開發(fā)上。主程序中主要實現(xiàn)的就是上一節(jié)提到的程序總流程,主程序的執(zhí)行步驟如下:①在程序中首先引用了程序所需要的庫函數(shù)頭文件和自己編寫的各種外設頭文件。②定義程序中所用到的各種變量。這里要注意的是程序定義了存放ADC采樣值的數(shù)組ADC_ConveredValue,定義語句是extern__IOu16ADC_ConvertedValue[3];這條語句中extern代表這個變量在別的子程序塊中也會使用并賦值,防止程序編譯出現(xiàn)錯誤,__IO在STM32中代表類型修飾符volatile,作用就是指示編譯器不要因優(yōu)化而省略此指令,必須每次都直接讀寫其值,被修飾的變量一般是隨時變化的量,這樣做的意義在于保證將這個變量里的值賦給別的變量時是正確的值。③初始化各種庫函數(shù)和子程序函數(shù)④使LCD屏幕顯示復位狀態(tài)界面⑤在死循環(huán)中執(zhí)行ADC采樣值的變換、當前采樣值與整定值的對比判斷、有效值計算、有效值在LCD顯示屏上顯示、串口接收和發(fā)送。3.2.1主程序中繼電器邏輯判斷輸出程序的設計繼電器邏輯判斷輸出程序寫在while死循環(huán)里面,目的是當發(fā)生短路時,單片機能第一時間作出反應。繼電器發(fā)生跳閘的情況有兩個,一個是上位機發(fā)送跳閘信號遠程控制跳閘,另一個就是當電流過大超過整定值時自動跳閘。程序如下:if(adNum1>2||state1==0) //adNum1是a相電流瞬時值整定值為3A,state代表上位 RELAY1=0;//機發(fā)送的跳閘信號標志位,當state=0時,斷路器跳閘if(adNum2>2||state2==0) RELAY2=0; //RELAY2代表b相繼電器,=0時跳閘,=1時合閘if(adNum3>2||state3==0) RELAY3=0;繼電器跳閘后,想要執(zhí)行合閘操作,只有在排除故障之后電流恢復到整定值以下才允許再次合閘,合閘方式有兩種,一個是上位機發(fā)出指令遠程合閘,再一個就是重啟下位機系統(tǒng),這樣做的目的是保證電力系統(tǒng)的安全性,線路不恢復正常不供電,而且不在配電箱上設計每相跳閘開關是為了防止各種異常狀況導致的開關誤觸而使系統(tǒng)出線不必要的斷電。3.2.2主程序中有效值計算子程序的設計有效值計算采用了求真有效值的算法,即采樣一個周期內(nèi)的瞬時電流值,將每個值的平方累加,求平均后再開方[9]。由于液晶屏顯示的是有效值,因此本設計直接將有效值計算函數(shù)和液晶屏數(shù)字顯示函數(shù)集成為一個子函數(shù)Filter(),程序示意代碼如下:voidFilter(void){ if(times<20)//取20次平均 { sum1=sum1+adNum1*adNum1;//瞬時值的平方和 times++; } else { times=0; sum1=sqrt(sum1/n);//計算出均方根值,也就是有效值 ed=sum1; LCD_ShowxNum(158,180,ed,1,16,0);//顯示采樣值的整數(shù)部分 pump=(sum1-ed)*100; LCD_ShowxNum(174,180,pump,2,16,0X80);//顯示小數(shù)部分 SendBuff[0]='I';//給有效值發(fā)送緩沖數(shù)組賦值 SendBuff[1]=('0'+ed); SendBuff[2]='.'; SendBuff[3]=('0'+(u16)pump/10); SendBuff[4]=('0'+(u16)pump%10); sum1=0; }}3.2.3主程序中串口接收發(fā)送程序的設計本設計中的串口接受和發(fā)送均采用了中斷方式,下位機接收上位機傳來的數(shù)據(jù)使用了串口中斷,當發(fā)生中斷便執(zhí)行接收中斷程序,通過判斷接收的數(shù)據(jù)從而控制斷路器的狀態(tài)。下位機向上位機發(fā)送數(shù)據(jù)使用了定時器中斷,定時器當計時500ms便向上位機發(fā)送一次數(shù)據(jù),發(fā)送的數(shù)據(jù)是下位機采集到的電流有效值數(shù)據(jù),上位機可以通過下位機發(fā)送的電流有效值來顯示采集到的有效值數(shù)據(jù)、計算出電流波形并判斷出斷路器的狀態(tài)。待發(fā)送的數(shù)據(jù)是存到了char型數(shù)組SendBuff[14]中,以“I”為數(shù)據(jù)報頭,以“\0”作為數(shù)據(jù)的結束標志,采集的三相電流有效值就存到了中間的數(shù)組位中。串口發(fā)送方法如下:u8t;for(t=0;t<14;t++) { USART_SendData(USART1,SendBuff1[t]);//向串口1發(fā)送數(shù)據(jù) while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發(fā)送結束 }當上位機向下位機發(fā)送數(shù)據(jù)時就會引起下位機的串口中斷,下位機只有當接收到0x0d作為結尾的數(shù)據(jù)才能執(zhí)行中斷程序,數(shù)據(jù)接收完畢,下位機USART_RX_STA寄存器的最高位將會置1,從而執(zhí)行中斷程序,接收到的數(shù)據(jù)會存到接收緩存器中,STM32定義為一個USART_RX_BUF數(shù)組,由于本設計中上位機設置發(fā)送的數(shù)據(jù)只有一位,所以,數(shù)據(jù)將會存到接收緩沖器USART_RX_BUF[0]位中。接下來程序就會判斷接收的數(shù)據(jù)是什么,從而執(zhí)行相應的操作。串口接收部分程序如下:switch(USART_RX_BUF[0]){ case'O':state1=1,state2=1,state3=1,GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);break; case'S':GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);break; case'1':state1=0;break; case'2':state1=1,RELAY1=1;break; case'3':state2=0;break; case'4':state2=1,RELAY2=1;break; case'5':state3=0;break; case'6':state3=1,RELAY3=1;break; default:break;}USART_RX_STA=0;3.3各子程序模塊功能詳細介紹3.3.1ADC初始化子程序塊設計本設計采集的是頻率為50Hz的交變電流,變化很快,而且使用ADC的三個通道循環(huán)輪流采樣。為了保證精度和采樣速度,在ADC子程序的設計上結合了DMA傳輸方式。本來所有的外設和存儲器之間的數(shù)據(jù)傳遞都要通過CPU,當需要傳輸數(shù)據(jù)量太大或者外設數(shù)目太多時,CPU即便速度再快也無法協(xié)調(diào)好其他功能和外設與存儲間的數(shù)據(jù)傳遞。為了解決這個問題,就加入了DMA。DMA即直接存儲器訪問,DMA傳輸方式通過硬件為RAM與外設開辟一條直接傳送數(shù)據(jù)的通路,無需CPU的介入,使CPU的工作效率大為提高。ADC程序初始化方法:voidAD_Init(){ ①初始化ADC3、DMA2和ADC3對應的GPIOC引腳時鐘方法:調(diào)用RCCCLOCKCMD庫函數(shù)將對應模塊和引腳使能 ②DMA的初始化設置方法:主要確定DMA的數(shù)據(jù)流、通道、外設基地址、內(nèi)存基地址、數(shù)據(jù)傳輸方向、數(shù)據(jù)大小、是否循環(huán)采集等。 ③ADC3的通道選擇與引腳設置方法:選擇ADC的輸入通道、引腳設置為模擬輸入通道,不帶上下拉。 ④ADC通用設置方法:設置ADC的模式、ADC的工作頻率等。 ⑤ADC初始化設置方法:設置ADC的位數(shù)、開啟掃描模式、開啟連續(xù)轉換模式、觸發(fā)方式、數(shù)據(jù)對齊方式、轉換通道數(shù)。 ⑥ADC循環(huán)通道設置方法:將需要采樣的通道通過ADC_RegularChannelConfig函數(shù)設置采樣排序和采樣周期數(shù)。 ⑦源數(shù)據(jù)變化時開啟DMA傳輸 ⑧使能ADC3的DMA功能 ⑨使能ADC3⑩開啟軟件轉換} 主程序中調(diào)用了在子程序編寫好的初始化函數(shù)AD_Init()后,ADC就會自動的循環(huán)采樣,而DMA在數(shù)組采樣值變化后會將當前采樣值存入到在主程序里聲明好的ADC采樣值數(shù)組變量中。3.3.2LCD顯示屏初始化和數(shù)據(jù)寫入子程序塊設計本設計中實現(xiàn)LCD顯示屏的初始化和數(shù)據(jù)的寫入直接使用了STM32開發(fā)者開發(fā)的LCD程序塊,該程序塊集成了LCD顯示屏的初始化功能、字符顯示函數(shù)、字符串顯示函數(shù)、單數(shù)字顯示函數(shù)、多數(shù)字顯示函數(shù)、畫點函數(shù)、矩形繪制函數(shù)等常用函數(shù)。初始化方法:LCD_Init();字符串顯示函數(shù):LCD_ShowString(u16x,u16y,u16width,u16height,u8size,u8*p);其中x,y分別為文字顯示的起始坐標,width,hight,size分別是其寬、高和字體大小,最后一個參數(shù)就是要顯示的字符串。多個數(shù)字顯示函數(shù):LCD_ShowxNum(u16x,u16y,u32num,u8len,u8size,u8mode);x,y同樣是起始坐標,num是要顯示的數(shù)字,len、size代表要顯示的數(shù)字長度和字體大小,mode參數(shù)有0,1兩個選項,0代表非疊加顯示,就是不覆蓋原來該位置的顯示的數(shù)據(jù),1代表疊加顯示,即覆蓋原有區(qū)域顯示的數(shù)據(jù)。3.3.3定時器子程序塊設計設計中使用了定時器的中斷功能來使下位機串口向上位機發(fā)送數(shù)據(jù)。每當定時器發(fā)生一次中斷,便執(zhí)行一次串口發(fā)送程序。以下程序就是定時器的初始化程序:voidTIM3_Int_Init(u16arr,u16psc){ TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure; NVIC_InitTypeDefNVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);///使能TIM3時鐘 TIM_TimeBaseInitStructure.TIM_Period=arr; //自動重裝載值 TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//定時器分頻 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上計數(shù)模式 TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//允許定時器3更新中斷 TIM_Cmd(TIM3,ENABLE);//使能定時器3 NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//定時器3中斷 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;//搶占優(yōu)先級1 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;//子優(yōu)先級3 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);}3.3.4信號繼電器初始化子程序塊設計信號繼電器初始化子程序塊的設計主要使用了STM32的GPIO口,即初始化所需要的GPIO引腳。本設計所用到的跳合閘信號繼電器是高電平觸發(fā),控制3個繼電器,所以用了GPIOB的PB0、PB1、PB2引腳。下面就是初始化這三個引腳,并設置引腳的屬性。voidRELAY_Init(void){ GPIO_InitTypeDefGPIO_InitStructure;//使能GPIOB時鐘 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//設置引腳屬性 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//普通輸出模式 GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化//在初始化之后,給所有引腳置位,即讓所有引腳都為高電平 GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);}3.3.5實時時鐘顯示子程序塊設計本設計還要實現(xiàn)LCD屏幕實時顯示當前時間的功能,STM32單片機中帶有實時時鐘功能,兩個32位寄存器包含二進碼十進數(shù)格式的秒、分鐘、小時、星期、日期、月份和年份。STM32F4的RTC可以自動將月份的天數(shù)補償為28、29(閏年)、30和31天。并且還可以進行夏令時補償。RTC模塊和時鐘配置是在后備區(qū)域,由片上后備電池供電,即使在系統(tǒng)復位或從待機模式喚醒后RTC的設置依然維持不變,而且時間依然保持當前時間,只要后備區(qū)域供電正常,那么RTC將可以一直運行。在本設計中直接使用了STM32自帶的RTC初始化程序,只要將RTC子程序中的初始日期時間設置好執(zhí)行初始化,便可以精確的提供當前時間,然后再調(diào)用LCD顯示屏寫入函數(shù)將日期時間寫到指定的位置即可。

4上位機監(jiān)控系統(tǒng)的設計4.1C#編程語言和MicrosoftVisualStudio2013集成開發(fā)環(huán)境簡介在本設計中整個上位機監(jiān)控系統(tǒng)都是在MicrosoftVisualStudio2013(以下簡稱VS2013)這個軟件環(huán)境中采用C#編程語言開發(fā)的,VisualStudio是微軟公司推出的集成開發(fā)環(huán)境,它支持多種程序語言的開發(fā)如C#、VisualC++、VisualBasic和VisualF#等。它可以通過拖拽控件的方式非常簡單方便的創(chuàng)建Windows平臺下的Windows窗口應用程序,是目前最流行的Windows平臺應用程序開發(fā)環(huán)境[10-12]。本設計中用VisualStudio中的WinForm設計上位機界面,采用C#編程語言編寫后臺代碼,整套程序的設計直觀流暢簡單。4.2三相電流繼電保護系統(tǒng)Windows窗體設計本設計中,上位機系統(tǒng)設計了3個界面,分別為系統(tǒng)登陸界面、保護系統(tǒng)主界面和修改密碼界面。下面將依次對這些界面進行介紹。4.2.1登錄界面的設計登錄界面的設計主要用了兩個TextBox控件作為用戶名和密碼的輸入框,每個框前對應有Lable控件顯示文字指示“用戶名”和“密碼”,在輸入框下面添加了兩個Button控件作為登陸確認或退出登錄,分別用“登陸”和“取消”表示。登錄界面如圖5-4所示:圖4-1系統(tǒng)登錄界面本設計在密碼框部分的屬性設置中,UseSysTemPasswordChar屬性設置為True,這樣,在輸入密碼時,密碼就變?yōu)?**來代替原密碼,這保證了輸入時的隱私性。同時后臺還會判斷用戶名和密碼是否有輸入,如果沒有輸入界面上會在輸入框后出現(xiàn)ErrorWarning組件提示用戶名或密碼沒有輸入。當用戶名和密碼輸入完畢時,如果用戶名和密碼正確,點擊登陸按鈕便可以登陸進系統(tǒng)主界面,如果不正確就會彈出提示框提示用戶名或密碼輸入錯誤。這使用了登陸按鈕的Button_Click事件。為了登陸方便快捷,不用每次都用鼠標點擊登陸按鈕登陸,在登陸界面的AcceptButten屬性中將登陸按鈕的Name寫入,即可每次輸入完用戶密碼后敲擊回車就可以實現(xiàn)登陸按鈕的點擊。登陸界面的后臺代碼詳見附錄。4.2.2三相電流繼電保護系統(tǒng)主界面設計系統(tǒng)主界面主要實現(xiàn)的功能有:系統(tǒng)的重新登錄、進入登陸密碼修改界面、進入數(shù)據(jù)庫界面、串口設置、系統(tǒng)的啟動和關閉、采樣電流有效值的顯示、斷路器控制、采樣電流波形的顯示、顯示當前登錄用戶、顯示當前的串口號、顯示通信是否正常。圖5-5是系統(tǒng)的主界面圖:圖4-2系統(tǒng)主界面圖自上而下介紹,首先是菜單界面,有系統(tǒng)管理、數(shù)據(jù)庫、串口設置、幫助四個菜單項,每個菜單項都可以通過后面標注的快捷鍵打開。系統(tǒng)管理菜單項中有三個子菜單項,分別為重新登錄、修改密碼、退出系統(tǒng)。點擊數(shù)據(jù)庫菜單項就可以直接進入系統(tǒng)運行信息數(shù)據(jù)庫界面。串口設置菜單項是設置串口號、串口波特率、數(shù)據(jù)位、停止位、奇偶校驗位的單選菜單項,著重介紹一下串口設置菜單項。圖4-3串口設置菜單項詳細內(nèi)容如圖所示,串口設置菜單項可以設置串口通信的所有內(nèi)容,而且本設計將其設置為單選菜單,即一次只能選擇一項,保證了串口各項設置的正確,考慮到每次啟動系統(tǒng)的時候人們都不會想到去設置串口,所以本系統(tǒng)啟動時默認打開COM4口(因為在本設計中下位機默認連在上位機的COM4口),波特率為115200,數(shù)據(jù)位8位,停止位1位,無奇偶校驗。而且每次打開系統(tǒng)的時候,在界面底部一欄會顯示用戶選擇的COM口,當開始接收數(shù)據(jù)時,如果串口設置錯誤,在底部會用紅字顯示串口錯誤信息。打開系統(tǒng)主界面后,斷路器控制一欄的所有按鈕都顯示不可用狀態(tài),當點擊啟動系統(tǒng)按鈕后用戶就可以控制每相斷路器的跳合閘,同時系統(tǒng)開始接受下位機傳過來的數(shù)據(jù),并繪制波形曲線,而且啟動系統(tǒng)按鈕被設為不可用,這是因為啟動按鈕的Button_Click事件中寫入了開啟串口語句,為了防止多次開啟串口發(fā)生錯誤,于是只允許啟動按鈕按下一次,直到關閉系統(tǒng)按鈕按下才可以重置系統(tǒng)狀態(tài),啟動系統(tǒng)按鈕可以重新使用。參數(shù)監(jiān)控一欄可以顯示下位機傳來的三相電流有效值,并顯示三相狀態(tài),正常運行時狀態(tài)欄顯示“正?!保斏衔粰C控制跳閘時,對應的狀態(tài)輸出框會顯示“手動跳閘”,當系統(tǒng)由于電流過大自動跳閘時,對應跳閘相會顯示“發(fā)生故障”,而且對應斷路器合閘控制按鈕會被設置為不可用,直到線路恢復正常,合閘按鈕才重新變?yōu)榭捎脿顟B(tài),控制斷路器合閘。上位機系統(tǒng)還可以繪制實時的電流波形,本設計在波形顯示一欄中,添加了3個PictureBox,每個PictureBox通過下位機傳入的電流瞬時值和編寫的波形繪制后臺代碼可以顯示一相的波形。顯示效果如圖4-7:圖4-4電流波形顯示效果圖4.2.3修改密碼界面設計點擊主界面中系統(tǒng)管理菜單項的修改密碼菜單可以彈出修改密碼界面,由于本設計中沒有加入數(shù)據(jù)庫,修改密碼只實現(xiàn)了界面功能,并不能真正的修改密碼。修改密碼界面如下:圖4-5修改密碼界面當什么都不輸入點擊確認,程序會彈出提示框,告訴用戶“請輸入原密碼”。如果輸入用戶名和密碼,但密碼和原密碼不是同一個時,程序會彈出提示框提示“原密碼輸入不正確,請重新輸入”。最后是判斷新密碼的一致性,當用戶名和原密碼都輸入正確,但新密碼的兩次輸入不一致時,程序會彈出提示框提示“請輸入新密碼,并且兩次輸入的新密碼必須相同”。4.3三相電流繼電保護系統(tǒng)上位機部分底層功能的設計實現(xiàn)這一小節(jié)主要介紹的就是上位機后臺程序中串口通訊思路與方法和波形繪制方法。在C#編程語言中,實現(xiàn)串口通訊只要使用serialport組件就可以。一般而言,要想實現(xiàn)串口高速大量數(shù)據(jù)通訊,需要使用serialport的datarecieved事件,但由于使用該事件需要涉及到多線程操作思想和委托方法,受能力限制,本設計擬不采用此方法。本設計中采用的方法是使用定時器中斷的方法,每發(fā)生一次定時器中斷便進行一次串口數(shù)據(jù)的接收。串口數(shù)據(jù)接收部分程序如下:privatevoidReceiveData(){ if(serialPort.IsOpen==true)//判斷串口是否打開 { serialPort.Read(bt,0,14);//從串口接收14位的數(shù)據(jù) serialPort.Close();//關閉一次串口(不知道為什么,但是是必須的) if(bt[0]=='I'&&bt[13]=='\0')//判斷報頭和報尾 { I1Recieve[0]=bt[1];//從接收的數(shù)據(jù)中分離出a相電流有效值 I1Recieve[1]=bt[2]; I1Recieve[2]=bt[3]; I1Recieve[3]=bt[4]; I2Recieve[0]=bt[5];//從接收的數(shù)據(jù)中分離出b相電流有效值 I2Recieve[1]=bt[6]; I2Recieve[2]=bt[7]; I2Recieve[3]=bt[8]; I3Recieve[0]=bt[9];//從接收的數(shù)據(jù)中分離出c相電流有效值 I3Recieve[1]=bt[10]; I3Recieve[2]=bt[11]; I3Recieve[3]=bt[12]; } serialPort.Open();//打開之前關閉的串口 }}串口發(fā)送直接調(diào)用的串口發(fā)送方法,觸發(fā)串口中斷向下位機發(fā)送數(shù)據(jù),由于下位機的要求,數(shù)據(jù)結尾一定要有0x0d,即回車換行符。串口發(fā)送程序如下:privatevoidSendData(stringstr){ if(serialPort.IsOpen==false)//判斷如果串口關閉則打開串口 { serialPort.Open(); serialPort.Write(str+"\r\n");//串口發(fā)送(寫入)函數(shù),數(shù)據(jù)尾一定為回車換行符(\r\n) } else { serialPort.Write(str+"\r\n"); }}在上位機系統(tǒng)的設計中,波形的繪制方法采用了每次刷新一個繪圖數(shù)組畫點連線的方式。在上面小節(jié)中介紹到,上位機的波形繪制使用了三個PictureBox,每個PictureBox都使用了Paint事件來繪圖中定義了三個繪圖數(shù)組,數(shù)組的元素個數(shù)正好是每個繪圖窗口橫坐標點的個數(shù)。主程序定時啟動串口接收函數(shù),每執(zhí)行一次串口接收程序,就會將當前的每相的采樣值加入到每相繪圖數(shù)組的當前位中,使用this.Refresh()函數(shù)觸發(fā)PictureBox的Paint事件。隨后,Paint事件就會畫出數(shù)組中的所有點并將其連線。當數(shù)組的元素記滿后,會清零當前數(shù)組標號,重新填充數(shù)組。從效果上看就是波形繪制到窗口右邊緣時,就會重新回到窗口左邊緣繪制。波形繪制部分程序如下:privatevoidwavePaint(intch){for(intx=0;x<20;x++){ sin[x]=Convert.ToSingle(Math.Sin(Math.PI*x/10)*I1*Math.Sqrt(2));

data1[ia]=sin[x];ia++;if(ia==n) ia=0;}this.Refresh();//刷新,導致窗口重繪}privatevoidaPhaseWaveForm_Paint(objectsender,PaintEventArgse){for(inti=0;i<n;i++) { points1[i].X=aPhaseWaveForm.Width/n*i;points1[i].Y=(aPhaseWaveForm.Height-data1[i]*aPhaseWaveForm.Height/vMax1)/2; } RectangleFrect=newRectangleF(points1[ia].X-r,points1[ia].Y-r,r+r,r+r); e.Graphics.DrawLine(newPen(Color.Green,2),0,aPhaseWaveForm.Height/2,aPhaseWaveForm.Width,aPhaseWaveForm.Height/2); e.Graphics.FillEllipse(newSolidBrush(Color.Red),rect); e.Graphics.DrawLines(newPen(Color.Yellow,1),points1);}上位機另一個重要的底層功能是合閘限制,其工作原理是當系統(tǒng)由于電流過大自動跳閘時,上位機能夠鎖住合閘按鈕,不允許上位機監(jiān)控人員手動合閘,只有當線路修復后,由下位機通過重啟系統(tǒng)來合閘,上位機當判斷到下位機線路修復完畢,才允許上位機合閘。當上位機手動跳閘時,便不會出現(xiàn)鎖合閘按鈕現(xiàn)象,允許手動再次合閘。

5總結與下一步的工作整個設計完成了對于電力系統(tǒng)電流保護裝置上位機和下位機兩部分的設計,經(jīng)過測試可以很好的完成預想的功能,能夠對故障迅速精確的反應。同時整個裝置設計了兩種監(jiān)控方式,下位機上的TFT顯示屏能夠實時迅速的顯示三相電流的有效值和當前日期時間,上位機能夠快速精確地接收下位機傳來的信息,并能夠顯示每相電流的大致波形曲線,另外還可以模擬遠程控制斷路器跳閘。經(jīng)過測試它可以在WindowsXP和Windows7系統(tǒng)上正常運行。在整個畢業(yè)設計的設計過程中,遇到了很多問題,從電力系統(tǒng)繼電保護的理論知識的學習到下位機實驗電路的設計,從電路的整定計算到軟件算法的設計,每一個過程都是在不斷的遇到問題然后解決問題。在此次設計中用到的下位機控制芯片STM32和上位機編程語言C#都是第一次使用,在設計的過程中,邊學邊做,完成了整個系統(tǒng)的設計。在設計的過程中遇到的問題經(jīng)過鉆研和搜索都得到了解決,在這期間自己的專業(yè)知識和專業(yè)技能提高得很多,更積攢了項目開發(fā)的經(jīng)驗,為以后的工作打下了良好的基礎。在時間倉促之下,使用了電力系統(tǒng)電流保護、ARM處理器、C#上位機編程語言等多方面的專業(yè)知識,加上本來自己就是現(xiàn)學現(xiàn)賣,能力所限,整個系統(tǒng)難免存在不足和需要改進之處。今后還會繼續(xù)學習繼續(xù)改進,使該設計更加完善。本設計在未來擬加入Internet互聯(lián)網(wǎng)部分,管理者可以隨時隨地通過網(wǎng)頁查看電力系統(tǒng)運行信息。而且在上位機上加入數(shù)據(jù)庫,真正的實現(xiàn)保存實時運行數(shù)據(jù)。在上下位機的通信上,打算把原有的串口數(shù)據(jù)線通信改為3G-DTU模塊通信,上位機與下位機之間使用3G數(shù)據(jù)信號通過移動運營商進行通信,真正的實現(xiàn)遠程監(jiān)控。

參考文獻[1]張保會,尹項根.電力系統(tǒng)繼電保護(第二版)[M].北京:中國電力出版社,2010:1-2[2]劉震.基于DSP的微機距離保護的研究與開發(fā)[D].濟南:山東大學碩士學位論文,2009.[3]景勝.我國微機保護的現(xiàn)狀與發(fā)展[J].繼電器,2001,29(10):1-4.[4]張旭,亓學廣.基于STM32電力系統(tǒng)數(shù)據(jù)采集系統(tǒng)的設計[J].電子測量技術,2010,33(11):90-92.[5]劉益青,高偉聰,魏鵬.基于MCU+DSP多處理器構架的微機保護硬件平臺設計[J].電力系統(tǒng)保護與控制,2010,38(10):89-95.[6]賀家李,李永麗.電力系統(tǒng)繼電保護原理與實用技術[M].北京:中國電力出版社,2009:18-20.[7]Grahampitcher.MCUsfollowM4[J].NewElectronics,2011,44(17):62-66.[8]胡壽松.自動控制原理(第六版)[M].北京:科學出版社,2013:420-425.[9]龐吉耀.一種獲得交流信號真有效值方法[P].中國專利:CN102539892A,2012-07-04.[10]何偉,陳永強.C#的文件處理研究與實例分析[J].電腦知識與技術,2009,21:35-38.[11]張藝超.對.NET平臺核心服務的應用研究[D].廣東:廣東工業(yè)大學碩士學位論文,2007.[12]CharlesPetzold.ProgrammingMicrosoftWindowswithC#[M].NewYork:MicrosoftPress,2002:46.

致謝在此次的研究設計和撰寫畢業(yè)論文的過程中,我最感謝的是我的導師尊敬的白皓然副教授,他在我的整個設計中給予了我無微不至的關懷和悉心的指導。我從大二便進入了白皓然老師的實驗室,在此期間,受白老師的鼓勵和引導,我學習到課堂上學不到的大量的理論和實踐知識,然后在本次畢業(yè)設計中學以致用。白老師扎實的學習態(tài)度,嚴謹?shù)闹螌W精神,精益求精的工作作風,平易近人的人格魅力都深深的感染和激勵著我。同時我也要感謝學校和學院提供的優(yōu)良實驗環(huán)境和實驗平臺,讓我能學習到更多的知識并完成畢業(yè)設計。感謝各位曾經(jīng)指導過我的老師們,也感謝能在百忙之中抽出時間來審閱這篇論文的老師們,感謝你們能給我四年的大學生涯畫上圓滿的句號。這次畢業(yè)設計我受益良多,不僅學習到了更多的知識,還發(fā)現(xiàn)了自己的不足。無論在知識方面和思想方面都有了很大的進步。最后,祝愿母校能夠越來越好,祝愿白皓然老師和各位老師身體健康,桃李滿天下!

附錄1下位機系統(tǒng)部分代碼#include"sys.h"#include"usart.h"#include"delay.h"#include"lcd.h"#include"adc.h"#include"relay.h"#include"timer.h"#include"rtc.h"#include"key.h"#include"math.h"extern__IOu16ADC_ConvertedValue[3];extern__IOu8SendBuff[14];extern u8state1,state2,state3;u16ed,times=0;floatpump;floatsum1=0,sum2=0,sum3=0,adNum1,adNum2,adNum3;//求采樣值的有效值voidCalEfct(void){ if(times<20000) { sum1=sum1+adNum1*adNum1; sum2=sum2+adNum2*adNum2; sum3=sum3+adNum3*adNum3; times++; } else { sum1=sqrt(sum1/times); if(sum1<=(float)0.17) sum1=0; ed=sum1; LCD_ShowxNum(292,140,ed,1,24,0);//顯示電壓值的整數(shù)部分,3.1111的話,這里就是顯示3 pump=(sum1-ed)*100; LCD_ShowxNum(316,140,pump,2,24,0X80);//顯示小數(shù)部分(前面轉換為了整形顯示),這里顯示的就是111. SendBuff[0]='I'; SendBuff[1]=('0'+ed); SendBuff[2]='.'; SendBuff[3]=('0'+(u16)pump/10); SendBuff[4]=('0'+(u16)pump%10); sum2=sqrt(sum2/times); if(sum2<=(float)0.15) sum2=0; ed=sum2; LCD_ShowxNum(292,180,ed,1,24,0);//顯示電壓值的整數(shù)部分,3.1111的話,這里就是顯示3 pump=(sum2-ed)*100; LCD_ShowxNum(316,180,pump,2,24,0X80);//顯示小數(shù)部分(前面轉換為了整形顯示),這里顯示的就是111. SendBuff[5]=('0'+ed); SendBuff[6]='.'; SendBuff[7]=('0'+(u16)pump/10); SendBuff[8]=('0'+(u16)pump%10); sum3=sqrt(sum3/times); if(sum3<=(float)0.15) sum3=0; ed=sum3; LCD_ShowxNum(292,220,ed,1,24,0);//顯示電壓值的整數(shù)部分,3.1111的話,這里就是顯示3 pump=(sum3-ed)*100; LCD_ShowxNum(316,220,pump,2,24,0X80);//顯示小數(shù)部分(前面轉換為了整形顯示),這里顯示的就是111. SendBuff[9]=('0'+ed); SendBuff[10]='.'; SendBuff[11]=('0'+(u16)pump/10); SendBuff[12]=('0'+(u16)pump%10); SendBuff[13]='\0'; sum1=0;sum2=0;sum3=0,times=0; }}intmain(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//設置系統(tǒng)中斷優(yōu)先級分組2 delay_init(168);//初始化延時函數(shù) uart_init(115200); //初始化串口波特率為115200 LCD_Init();//初始化LCD接口 RELAY_Init();//初始化繼電器 AD_Init();//初始化ADC My_RTC_Init(); RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0); //配置WAKEUP中斷,1秒鐘中斷一次 TIM3_Int_Init(5000-1,8400-1); //定時器時鐘84M,分頻系數(shù)8400,所以84M/8400=10Khz的計數(shù)頻率,計數(shù)5000次為500ms POINT_COLOR=RED; LCD_ShowString(140,25,200,24,24,"CurrentADCData"); POINT_COLOR=BLUE;//設置字體為藍色 LCD_ShowString(100,140,300,24,24,"APhaseCurrent:0.00A");//先在固定位置顯示小數(shù)點 LCD_ShowString(100,180,300,24,24,"BPhaseCurrent:0.00A"); LCD_ShowString(100,220,300,24,24,"CPhaseCurrent:0.00A"); while(1) { adNum1=((float)ADC_ConvertedValue[0]*(3.3/4096)-2.62)*3;//原來應為3.3/4096*3原因是互感器變比為600:1 adNum2=((float)ADC_ConvertedValue[1]*(3.3/4096)-2.63)*3; adNum3=((float)ADC_ConvertedValue[2]*(3.3/4096)-2.58)*3; if(adNum1>2||adNum1<(-2)||state1==0) RELAY1=0; if(adNum2>2||adNum1<(-2)||state2==0) RELAY2=0; if(adNum3>2||adNum1<(-2)||state3==0) RELAY3=0; CalEfct(); if(WK_UP==1)//跳閘后的合閘按鍵 { delay_ms(10);//去抖動 if(WK_UP==1) { if((adNum1<2&&adNum1>(-2))||(adNum2<2&&adNum2>(-2))||(adNum3<2&&adNum3>(-2))) state1=1,state2=1,state3=1,GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2); } } } }//RTCWAKEUP中斷服務函數(shù)voidRTC_WKUP_IRQHandler(void){ if(RTC_GetFlagStatus(RTC_FLAG_WUTF)==SET)//WK_UP中斷 { POINT_COLOR=BLACK; RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct); sprintf((char*)tbuf,"Time:%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds); LCD_ShowString(280,60,210,24,24,tbuf); RTC_GetDate(RTC_Format_BIN,&RTC_DateStruct); sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date); LCD_ShowString(280,90,210,24,24,tbuf); POINT_COLOR=BLUE; RTC_ClearFlag(RTC_FLAG_WUTF); //清除中斷標志 } EXTI_ClearITPendingBit(EXTI_Line22);//清除中斷線22的中斷標志 }voidUSART1_IRQHandler(void) //串口1中斷服務程序{ u8Res; if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//接收中斷(接收到的數(shù)據(jù)必須是0x0d0x0a結尾) { Res=USART_ReceiveData(USART1);//(USART1->DR); //讀取接收到的數(shù)據(jù) if((USART_RX_STA&0x8000)==0)//接收未完成 { if(USART_RX_STA&0x4000)//接收到了0x0d { if(Res!=0x0a)USART_RX_STA=0;//接收錯誤,重新開始 else//接收完成了 { switch(USART_RX_BUF[0]) { case'O':state1=1,state2=1,state3=1,GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);break; case'S':GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);break; case'1':state1=0;break; case'2':state1=1,RELAY1=1;break; case'3':state2=0;break; case'4':state2=1,RELAY2=1;break; case'5':state3=0;break; case'6':s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論