電特性測量系統軟件設計_第1頁
電特性測量系統軟件設計_第2頁
電特性測量系統軟件設計_第3頁
電特性測量系統軟件設計_第4頁
電特性測量系統軟件設計_第5頁
已閱讀5頁,還剩86頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

本科畢業設計(論文)題目:電特性測量系統軟件設計院(系)電子信息工程學院專業自動化班級姓名學號導師2012年6畢業設計(論文)原創性聲明和使用授權說明原創性聲明本人鄭重承諾:所呈交的畢業設計(論文),是我個人在指導教師的指導下進行的研究工作及取得的成果。盡我所知,除文中特別加以標注和致謝的地方外,不包含其他人或組織已經發表或公布過的研究成果,也不包含我為獲得及其它教育機構的學位或學歷而使用過的材料。對本研究提供過幫助和做出過貢獻的個人或集體,均已在文中作了明確的說明并表示了謝意。作者簽名:日期:指導教師簽名:日期:使用授權說明本人完全了解大學關于收集、保存、使用畢業設計(論文)的規定,即:按照學校要求提交畢業設計(論文)的印刷本和電子版本;學校有權保存畢業設計(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務;學校可以采用影印、縮印、數字化或其它復制手段保存論文;在不以贏利為目的前提下,學??梢怨颊撐牡牟糠只蛉績热荨W髡吆灻喝掌冢?

學位論文原創性聲明本人鄭重聲明:所呈交的論文是本人在導師的指導下獨立進行研究所取得的研究成果。除了文中特別加以標注引用的內容外,本論文不包含任何其他個人或集體已經發表或撰寫的成果作品。對本文的研究做出重要貢獻的個人和集體,均已在文中以明確方式標明。本人完全意識到本聲明的法律后果由本人承擔。作者簽名: 日期:年月日學位論文版權使用授權書本學位論文作者完全了解學校有關保留、使用學位論文的規定,同意學校保留并向國家有關部門或機構送交論文的復印件和電子版,允許論文被查閱和借閱。本人授權大學可以將本學位論文的全部或部分內容編入有關數據庫進行檢索,可以采用影印、縮印或掃描等復制手段保存和匯編本學位論文。涉密論文按學校規定處理。作者簽名: 日期:年月日導師簽名:日期:年月日

注意事項1.設計(論文)的內容包括:1)封面(按教務處制定的標準封面格式制作)2)原創性聲明3)中文摘要(300字左右)、關鍵詞4)外文摘要、關鍵詞5)目次頁(附件不統一編入)6)論文主體部分:引言(或緒論)、正文、結論7)參考文獻8)致謝9)附錄(對論文支持必要時)2.論文字數要求:理工類設計(論文)正文字數不少于1萬字(不包括圖紙、程序清單等),文科類論文正文字數不少于1.2萬字。3.附件包括:任務書、開題報告、外文譯文、譯文原文(復印件)。4.文字、圖表要求:1)文字通順,語言流暢,書寫字跡工整,打印字體及大小符合要求,無錯別字,不準請他人代寫2)工程設計類題目的圖紙,要求部分用尺規繪制,部分用計算機繪制,所有圖紙應符合國家技術標準規范。圖表整潔,布局合理,文字注釋必須使用工程字書寫,不準用徒手畫3)畢業論文須用A4單面打印,論文50頁以上的雙面打印4)圖表應繪制于無格子的頁面上5)軟件工程類課題應有程序清單,并提供電子文檔5.裝訂順序1)設計(論文)2)附件:按照任務書、開題報告、外文譯文、譯文原文(復印件)次序裝訂

指導教師評閱書指導教師評價:一、撰寫(設計)過程1、學生在論文(設計)過程中的治學態度、工作精神□優□良□中□及格□不及格2、學生掌握專業知識、技能的扎實程度□優□良□中□及格□不及格3、學生綜合運用所學知識和專業技能分析和解決問題的能力□優□良□中□及格□不及格4、研究方法的科學性;技術線路的可行性;設計方案的合理性□優□良□中□及格□不及格5、完成畢業論文(設計)期間的出勤情況□優□良□中□及格□不及格二、論文(設計)質量1、論文(設計)的整體結構是否符合撰寫規范?□優□良□中□及格□不及格2、是否完成指定的論文(設計)任務(包括裝訂及附件)?□優□良□中□及格□不及格三、論文(設計)水平1、論文(設計)的理論意義或對解決實際問題的指導意義□優□良□中□及格□不及格2、論文的觀念是否有新意?設計是否有創意?□優□良□中□及格□不及格3、論文(設計說明書)所體現的整體水平□優□良□中□及格□不及格建議成績:□優□良□中□及格□不及格(在所選等級前的□內畫“√”)指導教師:(簽名)單位:(蓋章)年月日

評閱教師評閱書評閱教師評價:一、論文(設計)質量1、論文(設計)的整體結構是否符合撰寫規范?□優□良□中□及格□不及格2、是否完成指定的論文(設計)任務(包括裝訂及附件)?□優□良□中□及格□不及格二、論文(設計)水平1、論文(設計)的理論意義或對解決實際問題的指導意義□優□良□中□及格□不及格2、論文的觀念是否有新意?設計是否有創意?□優□良□中□及格□不及格3、論文(設計說明書)所體現的整體水平□優□良□中□及格□不及格建議成績:□優□良□中□及格□不及格(在所選等級前的□內畫“√”)評閱教師:(簽名)單位:(蓋章)年月日教研室(或答辯小組)及教學系意見教研室(或答辯小組)評價:一、答辯過程1、畢業論文(設計)的基本要點和見解的敘述情況□優□良□中□及格□不及格2、對答辯問題的反應、理解、表達情況□優□良□中□及格□不及格3、學生答辯過程中的精神狀態□優□良□中□及格□不及格二、論文(設計)質量1、論文(設計)的整體結構是否符合撰寫規范?□優□良□中□及格□不及格2、是否完成指定的論文(設計)任務(包括裝訂及附件)?□優□良□中□及格□不及格三、論文(設計)水平1、論文(設計)的理論意義或對解決實際問題的指導意義□優□良□中□及格□不及格2、論文的觀念是否有新意?設計是否有創意?□優□良□中□及格□不及格3、論文(設計說明書)所體現的整體水平□優□良□中□及格□不及格評定成績:□優□良□中□及格□不及格教研室主任(或答辯小組組長):(簽名)年月日教學系意見:系主任:(簽名)年月日

三相電特性測試軟件設計摘要近年來隨著社會對電力需求量的不斷增長,電能緊缺問題日趨嚴重,極大地制約著社會經濟的發展。我國電力工業的迅速發展,電能質量對于電網的安全經濟運行,保證工業產品質量和科學實驗的正常進行以及降低能耗等均有重要意義。為做到節約電能并合理高效地利用電能,這就需要對電力參數進行準確、實時地監測;此外,對于電力參數進行高精度、多參數的測量,又是充分了解電網的運行狀況,尋找并解決電力系統中出現問題的重要途徑。因此,對于電力參數的測量,尤其是高精度、多參數、低價格、便攜、穩定的實時測量就顯得尤為重要,也一直是人們研究的一個重要的方向。為解決以上問題,本設計選用ARM7核的LPC2124芯片為測量系統的核心,主要針對我國電力系統供配電的實際情況,通過ARM7單片機為核心,配以相應的外圍電路和功能軟件,采用交流采樣技術實現多種電力參數的在線實時測量和數據分析,為電網的安全經濟運行提供可靠保證。以提高三相電參數的測量速度和精度。關鍵字:三相電;交流采樣;實時測量ThreephaseelectriccharacteristicmeasurementsoftwaredesignAbstractInrecentyearsalongwiththesocialdemandofelectricpowerincreasing,energyshortageisbecomingmoreandmoreserious,whichrestrictsthedevelopmentofsocialeconomy.Therapiddevelopmentofpowerindustry,powerqualityforpowersystemsafeandeconomicoperation,ensurequalityofindustrialproductsandscientificexperimentwithnormalandreducedenergyconsumptionhasimportantsignificance.Inordertoachieveenergysavingandhighefficientuseofenergy,whichisneededforpowerparametersforaccurate,real-timemonitoring;inaddition,theelectricparameterswithhighaccuracy,multiparametermeasurement,andfullyunderstandtheoperationofpowersystem,findandsolveemerginginpowersystemtheimportantwayoftheproblem.Therefore,forthemeasurementofelectricpowerparameters,especiallyhighaccuracy,multiparameter,lowprice,portable,stableandreal-timemeasurementisparticularlyimportant,peoplehasalwaysbeenanimportantdirectioninthestudy.Inordertosolvetheproblemabove,thisdesignusesARM7nuclearLPC2124chipmeasurementsystemforthecore,mainlyforthepowersystemofourcountrydistributionoftheactualsituation,throughtheARM7single-chipmicrocomputerasthecore,withacorrespondingperipheralcircuitandsoftware,adoptingACsamplingtechnologytoachieveavarietyofelectricalparameteron-linereal-timemeasurementanddataanalysis,asthepowersystemsafeandeconomicoperationtoprovideareliableguarantee.Inordertoimprovetheelectricparametermeasuringspeedandaccuracy.Keywords:three-phase;ACsampling;measurement目錄摘要 iAbstract ii1緒論 11.1前言 11.2本課題的研究背景、研究意義及國內外相關研究情況 12三項電特性測量軟件設計方案 12.1基本功能要求 12.2總體方案設計 12.2.1硬件平臺 12.2.2開發環境與仿真 12.2.3開發語言 12.2.4軟件總體結構 13系統的初始化 13.1系統的初始化的含義 13.1.1初始化的執行順序 13.1.2系統的啟動代碼 14數據采集程序和數據處理 14.1數據采集技術簡介 14.2A/D寄存器的描述 14.2.1A/D控制寄存器ADCR 14.2.2A/D數據寄存器ADDR 24.3A/D的基本操作 34.4數據處理 34.5A/D采集功能介紹及軟件編程 75鍵盤顯示模塊 125.1關于鍵盤使用的簡單介紹 125.2鍵盤控制模塊的功能介紹及程序 135.2.1鍵盤掃描頭文件Keyboard.h 145.2.2按鍵掃描去抖程序 146液晶顯示模塊 176.1液晶簡介 176.1.1LCD介紹 176.1.2LCD顯示的原理 176.1.3LCD的分類 186.2液晶顯示模塊 186.2.1點陣式液晶顯示器LM12864簡介 186.2.2液晶顯示流程圖以及LCD驅動 196.3LCD顯示的應用程序 296.3.1LCD的簡單GUI實現 296.3.2LCD實時時鐘顯示模塊 306.3.3LCD的實時時鐘軟件編程 316.3.4外部擴展I2C 356.3.5LCD顯示電特性參數 377電特性參數的計算 417.1電特性參數 417.2采用過零點檢測測量周期的軟件編程Guolindian.C 427.3電特性參數軟件程序 448Proteus仿真 458.1proteus簡介 458.2電路仿真 458.3分散加載文件 468.4系統的電路圖以及proteus中的仿真結果 488.4.1系統的電路圖 488.4.2proteus中的仿真結果 48結束語 51致謝 52參考文獻 53畢業設計(論文)知識產權聲明 54畢業設計(論文)獨創性聲明 551緒論1.1前言能源是人類社會賴于生存和發展的基礎,電能作為能源的第二次形式,具有簡單、方便、可靠等特點,是現代社會運行的主要能源之一。充足、可靠的能源是提高經濟高速發展、社會正常運行的基本前提。上世紀六十年代以來,微電子、計算機、電力電子技術在各個領域廣泛應用,位現代工業的自動化、提高勞動生產率開辟了廣闊的前景。近年來隨著大功率電力電子技術的發展以及它們的廣泛應用,使得非線性負載大量的增加,給供電設備造成了很大的影響。本文主要研究基于數字采樣測量的三相電參數測量系統,主要包括電壓、電流、頻率、相位、功率因數、有功功率、無功功率,視在功率,電能等的測量。1.2本課題的研究背景、研究意義及國內外相關研究情況電力是國家經濟發展的命脈,隨著社會對電力需求量的不斷增長,工業、農業、商業、居民用電的日益增長,供電量日益增加,電能作為一種具有多種參數指標、直接反映電力企業經濟效益的商品備受重視。隨著工業技術的不斷進步,對電力的需要越來越大,電能緊缺問題日趨嚴重,極大地制約著社會經濟的發展。近年來,我國電力負荷急劇增大,各種非線性負載,特別是新型電力電子器件在電力系統、工業各部門和家用電器產品中的日益廣泛應用,給供電設備的電能質量造成了極大的影響。因此,在大多數情況下,電力信號己不是標準的正弦信號,而是一種復雜的周期信號。國內電力參數檢測技術的研究和開發起步較晚,目前對電力參數測量的方式基本上可分為芯片轉化為有效值測量,直接離散時序測量和多諧波測量等。相對國內而言,國外對電能質量的研究起步就比較早,也已經取得了很多關于這方面的研究和應用成果,世界對電能質量的認識程度也越來越高,每隔兩年就召開一次電能質量與電力諧波學術會議。在電能質量檢測產品研究領域,尤其是這些領域的高端產品在全球市場的份額,幾乎是被美國的FLUKE公司、瑞士的LEM公司、瑞典的UNIPOWER公司等國際知名公司占據,這些公司的技術水平為國際最先進,當然價格也非常昂電能質量對于電網的安全經濟運行,保證工業產品的質量和科學實驗的正常進行以及降低能耗等均有重要意義。為了改善這一狀況,對電力系統進行完整分析和監測是成功的關鍵。此外,對于電力參數進行高精度、多參數的測量,又是充分了解電網的運行狀況,尋找并解決電力系統中出現的問題的重要途徑。因此,對于電力參數的測量,尤其是高精度、多參數、低價格、便攜、穩定的實時測量就顯得尤為重要,也一直是人們研究的一個重要方向。在我國電力工業領域,電網質量的問題已經成為關鍵,電力參數的分析和監測已經成為國際上討論和研究的重點。2三項電特性測量軟件設計方案2.1基本功能要求(1)熟悉工廠供電技術;(2)熟悉測量系統硬件電路原理;(3)設計軟件結構;(4)掌握ADS1.2開發工具;(5)熟練運用PROTEUS仿真;(6)編寫程序代碼及調試;(7)軟、硬件系統聯調。2.2總體方案設計2.2.1硬件平臺課題主要研究電特性測量系統的軟件程序設計。選用的是ARM為核的LPC2000系列的芯片,LPC2000系列是NXP公司生產的以ARM7TDMI-S核為基礎的嵌入式處理器,在芯片內部配置了大量的接口及功能模塊。本設計選用的是LPC2124芯片,LPC2124具有較小的64引腳封裝,低功耗的特點,以及多個片內外設(如32位定時器、A/D轉換器、外部中斷等),多個32位定時器,4路10位ADC,內置多種串行通信接口以及多達9個外部中斷,因此特別適用于工業控制、醫療系統訪問控制、通信網關、協議轉換器、嵌入式MODEM等各種類型的應用。2.2.2開發環境與仿真本課題選用的是ADS1.2開發工具,ADS1.2是ARM公司推出的ARM集成開發工具,具有用戶多、編譯效率高、支持的ARM內核多的特點。ARMADS全稱為ARMdeveloperSuite,是ARM公司推出的ARM集成開發工具,成熟版本為ADS1.2,他的前身是SDT,SDT是ARM公司幾年前的開發環境軟件。ADS1.2支持ARM10之前的所有ARM系列微控制器,支持軟件調試,支持匯編、C語言、C++源程序,具有編譯效率高、系統庫功能強等特點。本課題用ADS1.2開發工具圍繞LPC2124片上的基本功能模塊實現三相電特性的測試,最終通過了PROTEUS的仿真驗證。PROTEUS是英國Labcenter公司推出的適合嵌入式設計仿真與開發的仿真軟件,使用PROTEUS軟件可以完全脫離硬件平臺來學習嵌入式系統,可以說是嵌入式學習的一次革命。2.2.3開發語言本課題軟件用的語言主要有C語言,還有啟動代碼中所用到的匯編語言。本文選用C語言主要是由于C語言有以下優點:(1)寄存器分配,數據類型等由編譯器管理;(2)編程及調試的時間減少,大大縮短開發周期;(3)明顯增加軟件可讀性,便于改進和擴展。2.2.4軟件總體結構本系統主要針對我國電力系統供配電的實際情況,通過ARM7單片機為核心,配以相應的外圍電路和功能軟件,采用交流采樣技術實現多種電力參數的在線實時測量和數據分析,為電網的安全經濟運行提供可靠保證。本課題主要研究電特性測量系統的軟件程序設計。本課題的軟件部分主要是通過實時采樣電流電壓的瞬時值,以及過零檢測,進而計算出電流電壓的有效值、頻率值、有用功率、無用功率、視在功率、功率因數等電力參數。本測量系統的軟件設計主要分為以下幾個模塊:(1)主程序模塊(2)電壓、電流采集程序(3)頻率采集程序(4)數據處理程序(5)時鐘日歷程序(6)鍵盤服務程序(7)顯示服務程序本設計擬采用ADS1.2集成開發工具編寫C語言程序實現測量系統的相關功能。數據的處理與計算是程序設計的主要部分。系統基本測量的參數主要包括:電流有效值、電壓有效值、有功功率、無功功率、視在功率、功率因數等。首要環節是對輸入的電氣信號進行離散化,即采樣。根據被采集信號的不同,數據采集可分為直流采樣和交流采樣兩大類。對比分析后,系統選用交流采樣,數值的計算采用離散的電壓電流有效值計算公式來實現。為了提高ARM7核的LPC2124芯片程序編寫效率,系統軟件采用了分模塊編寫的方法,用C語言和匯編語言混合編寫。對于LPC2124和各模塊的初始化、數據采集程序采用匯編編程,對于主程序、鍵盤顯示等通用性較強程序,采用C語言編寫。本系統的主要功能模塊有數據采集模塊、數據處理模塊、時鐘模塊,按鍵顯示模塊等。所有軟件模塊的功能都在主控模塊的調配下協調執行,主控模塊首先對系統進行初始化操作,包括CPU初始化、I/O初始化、A/D初始化、LCD初始化、時鐘初始化、異步通訊初始化等。隨即對數據進行采集、處理、顯示。然后判斷是否有鍵按下,根據判斷結果,執行相應按鍵服務程序。系統的主要電特性參量介紹:(1)電壓有效值:讓恒定電壓和交變電壓分別加在阻值相等的電阻上,使它們在相同時間內產生的熱量相等,就可以把該恒定電壓的數值規定為這個交變電壓的有效值.(2)電流有效值:將一直流電與一交流電分別通過相同阻值的電阻,如果相同時間內兩電流通過電阻產生的熱量相同,就說這一直流電的電流值是這一交流電的有效值。(3)有功功率:在交流電路中,電源在一個周期內發出瞬時功率的平均值(或負載電阻所消耗的功率),稱為"有功功率"。(4)無功功率:在正弦電流電路中,復功率的虛部:,且供給電感的無功功率為正值。(5)視在功率:在電工技術中,將單口網絡端鈕電壓和電流有效值的乘積,稱為視在功率(apparentpower),記為S=UI。(6)功率因數:在交流電路中,電壓與電流之間的相位差(Φ)的余弦叫做功率因數,用符號cosΦ表示,在數值上,功率因數是有功功率和視在功率的比值,即cosΦ=P/S。系統主程序流程圖如2.1圖所示。3系統的初始化3.1系統的初始化的含義首先來講講系統初始化,什么是系統初始化呢?初始化就是把變量(variable)賦為默認值,把控件設為默認狀態,把沒準備的準備好。但是如果是整個系統初始化那就不一樣了。每個軟件,或是工具,系統等都有一個初始化。如系統的初始化就是將你的系統還原到一開始做的備份的狀態。把設置等都還原至那個位置。如果是一個軟件的初始化,基本都是將一些功能的設置都還原為開始設置,意思就和恢復默認設置差不多。3.1.1初始化的執行順序每一個初始化部分里面的代碼在程序運行后,或庫的begin-end塊運行之前。delphi使用對單元相關樹的深度優先遍歷來運行初始化部分。換句話說,就只在一個單元的初始化代碼運行前,delphi就運行了特他使用的每一個單元的初始化部分。每一個單元僅初始化一次。程序代碼當中可以有Initialization聲明部分。這部分里面的代碼的執行,是在windows加載包含該單元(指Initialization所屬單元)的模塊(應用程序,DLL或者包)時運行的。一般來說是:先Initialization單元,然后interface單元,然后implementation單元。程序中Intialize過程??梢栽谶@里初始化字符串、動態數組、接口和Variants系統為什么要初始化呢?第一,信息系統是以數據庫為主的軟件系統,是數據庫應用系統,必須設定數據庫應用的安全體系否則無法保證數據安全;第二,信息系統是組織的管理方法,必須具備組織使用的共享數據才能供組織使用;第三,初始化的核心是數據準備,沒有歷史數據不能實現系統切換,無法使用;第四,數據必須定期存檔和更新才能使信息系統有較高的運轉效率;3.1.2系統的啟動代碼系統初始化主要是由軟件來完成的,一般在32位ARM應用系統中,大多數軟件采用C語言來進行編程,并且以嵌入式操作系統作為平臺,這樣能大大提升開發效率及軟件性能。但是,由于C語言生成的代碼不能上電后立馬運行的,因為此時還不具備運行條件,比如全局變量還沒有初始化,系統堆棧還沒有設置等。因此從系統上電,到正式運行用戶的main函數之前,要運行一段代碼,這段代碼就稱為啟動代碼。啟動代碼大部分由匯編指令構成,它可以實現向量表定義、堆棧初始化、系統變量初始化、中斷初始化、外圍初始化、地址重映射等操作。見圖2-2。圖2.2首先是應該完成頭文件的編寫,下面就是系統初試化的頭文件(target.h)和系統的初始化軟件(target.c)、(Startup.s)。(1)系統初試化的頭文件(target.h)#ifndef__TARGET_H#define__TARGET_H#ifdef__cplusplusextern"C"{#endif#ifndefIN_TARGETexternvoidReset(void);externvoidTargetInit(void);#endif#ifdef__cplusplus}#endif#endi(2)系統的初始化軟件(Startup.s);definethestacksize;定義堆棧的大小SVC_STACK_LEGTHEQU0FIQ_STACK_LEGTHEQU0IRQ_STACK_LEGTHEQU256ABT_STACK_LEGTHEQU0UND_STACK_LEGTHEQU0NoIntEQU0x80NoFIQ EQU 0x40USR32ModeEQU0x10SVC32ModeEQU0x13SYS32ModeEQU0x1fIRQ32ModeEQU0x12FIQ32ModeEQU0x11;IMPORT__use_no_semihosting_swi;Theimportedlabels;引入的外部標號在這聲明IMPORTFIQ_Exception;快速中斷異常處理程序IMPORT__main;C語言主程序入口IMPORTTargetResetInit;目標板基本初始化 ;Theemportedlabels;給外部使用的標號在這聲明EXPORTbottom_of_heapEXPORTStackUsrEXPORTResetEXPORT__user_initial_stackheapCODE32AREAvectors,CODE,READONLYENTRY;interruptvectors;中斷向量表ResetLDRPC,ResetAddrLDRPC,UndefinedAddrLDRPC,SWI_AddrLDRPC,PrefetchAddrLDRPC,DataAbortAddrDCD0xb9205f80LDRPC,[PC,#-0xff0]LDRPC,FIQ_AddrResetAddrDCDResetInitUndefinedAddrDCDUndefinedSWI_AddrDCDSoftwareInterruptPrefetchAddrDCDPrefetchAbortDataAbortAddrDCDDataAbortNouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_Handler;未定義指令UndefinedBUndefined;軟中斷SoftwareInterrupt ;BSoftwareInterruptCMPR0,#4LDRLOPC,[PC,R0,LSL#2]MOVSPC,LRSwiFunctionDCDIRQDisable;0DCDIRQEnable;1DCD FIQDisable ;2DCD FIQEnable ;3IRQDisable;關IRQ中斷MRSR0,SPSRORRR0,R0,#NoIntMSRSPSR_c,R0MOVSPC,LRIRQEnable;開IRQ中斷MRSR0,SPSRBICR0,R0,#NoIntMSRSPSR_c,R0MOVSPC,LRFIQDisable;關FIQ中斷MRSR0,SPSRORRR0,R0,#NoFIQMSRSPSR_c,R0MOVSPC,LRFIQEnable;開FIQ中斷MRSR0,SPSRBICR0,R0,#NoFIQMSRSPSR_c,R0MOVSPC,LR;取指令中止PrefetchAbortBPrefetchAbort;取數據中止DataAbortBDataAbort;快速中斷FIQ_HandlerSTMFDSP!,{R0-R3,LR}BLFIQ_ExceptionLDMFDSP!,{R0-R3,LR}SUBSPC,LR,#4InitStackMOVR0,LR;BuildtheSVCstack;設置管理模式堆棧MSRCPSR_c,#0xd3 LDRSP,StackSvc ;BuildtheIRQstack ;設置中斷模式堆棧MSRCPSR_c,#0xd2LDRSP,StackIrq;BuildtheFIQstack;設置快速中斷模式堆棧MSRCPSR_c,#0xd1LDRSP,StackFiq;BuildtheDATAABORTstack;設置中止模式堆棧MSRCPSR_c,#0xd7LDRSP,StackAbt;BuildtheUDFstack;設置未定義模式堆棧MSRCPSR_c,#0xdbLDRSP,StackUnd;BuildtheSYSstack;設置系統模式堆棧MSRCPSR_c,#0xdfLDRSP,=StackUsrMOVPC,R0ResetInitBLInitStack;初始化堆棧BLTargetResetInit;目標板基本初始化;跳轉到c語言入口B__main__user_initial_stackheapLDRr0,=bottom_of_heap;LDRr1,=StackUsrMOVpc,lrStackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4IF:DEF:EN_CRPIF.>=0x1fcINFO1,"\nThedataat0x000001fcmustbe0x87654321.\nPleasedeletesomesourcebeforethisline."ENDIFCrpDataWHILE.<0x1fcNOPWENDCrpData1DCD0x87654321;/*WhentheDatais為0x87654321,usercodebeprotected.當此數為0x87654321時,用戶程序被保護*/ENDIF;/*分配堆??臻g*/AREAMyStacks,DATA,NOINIT,ALIGN=2SvcStackSpaceSPACESVC_STACK_LEGTH*4;管理模式堆??臻gIrqStackSpaceSPACEIRQ_STACK_LEGTH*4;中斷模式堆??臻gFiqStackSpaceSPACEFIQ_STACK_LEGTH*4;快速中斷模式堆棧空間AbtStackSpaceSPACEABT_STACK_LEGTH*4;中止模式堆棧空間UndtStackSpaceSPACEUND_STACK_LEGTH*4;未定義模式堆棧AREAHeap,DATA,NOINITbottom_of_heapSPACE1AREAStacks,DATA,NOINITStackUsrEND(3)系統的初始化軟件(target.c)#defineIN_TARGET#include"config.h"#include"guolindian.h"voidTargetResetInit(void);voidIRQ_Exception(void){while(1);}voidFIQ_Exception(void){while(1);}voidTimer0_Exception(void){T0IR=0x01;VICVectAddr=0;//通知中斷控制器中斷結束}voidVICInit(void){}/*過零點檢測功能初試化函數*/voidGuoLinDianInit(void){ PINSEL1=0x00000001; EXTMODE=0x01;//邊沿觸發 VICIntSelect=0x00000000; VICDefVectAddr=(int)IRQ_Eint1; EXTINT=0x01; VICIntEnable=0x00004000;}#defineTARGET_DEBUG_BY_LCMvoidTargetInit(void){#ifdefTARGET_DEBUG_BY_LCM TargetResetInit(); GuoLinDianInit();GUI_Initialize();//初始化LCM GUI_SetColor(1,0); //設置前景色和背景色#endif }voidInitialiseUART0(uint32bps){ }voidTargetResetInit(void){#ifdef__DEBUG_RAMMEMMAP=0x2;//remap#endif#ifdef__DEBUG_FLASHMEMMAP=0x1;//remap#endif#ifdef__IN_CHIPMEMMAP=0x1;//remap#endif/*設置系統各部分時鐘*//*Setsystemtimersforeachcomponent*/PLLCON=1;#if(Fpclk/(Fcclk/4))==1VPBDIV=0;#endif#if(Fpclk/(Fcclk/4))==2VPBDIV=2;#endif#if(Fpclk/(Fcclk/4))==4VPBDIV=1;#endif#if(Fcco/Fcclk)==2PLLCFG=((Fcclk/Fosc)-1)|(0<<5);#endif#if(Fcco/Fcclk)==4PLLCFG=((Fcclk/Fosc)-1)|(1<<5);#endif#if(Fcco/Fcclk)==8PLLCFG=((Fcclk/Fosc)-1)|(2<<5);#endif#if(Fcco/Fcclk)==16PLLCFG=((Fcclk/Fosc)-1)|(3<<5);#endifPLLFEED=0xaa;PLLFEED=0x55;while((PLLSTAT&(1<<10))==0);PLLCON=3;PLLFEED=0xaa;PLLFEED=0x55;/*設置存儲器加速模塊*//*Setmemoryacceleratermodule*/MAMCR=0;#ifFcclk<20000000MAMTIM=1;#else#ifFcclk<40000000MAMTIM=2;#elseMAMTIM=3;#endif#endifMAMCR=2;/*設置串行口*//*initializeUART*/CCR=1;PREINT=Fpclk/32768-1;PREFRAC=Fpclk-(Fpclk/32768)*32768;YEAR=2012;MONTH=4;DOM=26;HOUR=21;MIN=10;SEC=0;}#include"rt_sys.h"#include"stdio.h"4數據采集程序和數據處理4.1數據采集技術簡介從廣義上來講,數據采集(DAQ),是指從傳感器和其它待測設備等模擬和數字被測單元中自動采非電量或者電量信號,送到上位機中進行分析,處理。數據采集系統是結合基于計算機或者其他專用測試平臺的測量軟硬件產品來實現靈活的、用戶自定義的測量系統。采集又稱取樣、抽樣,對模擬信號在時間上的離散化、幅值離散化,這樣用在電參量測量中可以克服模擬運算準確度較低且模擬器件易受各種干擾影響的缺點,從同一批數據中可獲得許多電參量信息。本文所述的數字采樣技術主要應用于電參量測量領域。就是對周期或非周期交流待測信號,在CPU的控制下,由采樣保持器進行采樣和保持,再送給A/D轉換器進行模數轉換,量化處理,將模擬量變為數字量,送存儲器存儲,最后由CPU進行一系列運算,處理,得到結果送到LCD顯示。本文用的是LPC2124,LPC2124具有一個A/D轉換器,A/D轉換器的基本時鐘由VPB時鐘提供??删幊谭诸l器可將時鐘調整至4.5MHZ(逐步逼近最大時鐘)。10位精度要求的轉換需要11個A/D轉換時鐘。LPC2124具有一個A/D轉換器。A/D轉換具有如下特性:(1)10位逐次逼近模式轉換器;(2)測量范圍:0~3.3V;(3)10位轉換時間≥2.4us;(4)轉換觸發信號可選擇:輸入引腳的跳變或定時器匹配;(5)具有掉電模式。4.2A/D寄存器的描述A/D寄存器包含控制寄存器ADCR和數據寄存器ADDR。A/D寄存器的使用情況詳見下表4.1。表4.1A名稱描述訪問復位值地址ADCRA/D控制寄存器。A/D轉換開始前,必須寫入ADCR寄存器來選擇工作模式R/W0x000000010xE0034000ADDRA/D數據寄存器。該寄存器包含ADC的DONE標志位和10位的轉換結果(當前DONE位為1時,轉換結果才是有效的)R/WNA0xE00340004.2.1A/D控制寄存器ADCRADCR寄存器描述如表4.2所列。表4.2A/D控制寄存器ADCR名稱功能復位值7:0SEL從AIN3~AIN0中選擇采樣引腳。SEL段中的bit0~bit3分別對應AIN3~AIN0引腳,為1表示選中。在64腳封裝的LPC2124有bit0~bit3可置位。軟件控制模式下,只有一位可被置位;硬件掃描模式下,SEL可為1~0x0F中的任何一個值。SEL為0時,等效于0x01。0x0115:8CLKDIV將VPB時鐘(PCLK)進行(CLKDIV的值加1)分頻得到A/D轉換時鐘,該時鐘必須小于或等于45MHz。016BURST如果該位為0,轉換由軟件控制,需要11個時鐘方能完成。如果該位為1,A/D轉換器以CLKS字段選擇的速率重復執行轉換,并從SEL字段為1的位對應的引腳開始掃描。A/D轉換器啟動后,第一次轉換的時SEL字段中為1的位中的最低有效位程度模擬輸入,然后時為1的更高有效為對應的模擬輸入(如果可用)。重復轉換通過清零該位終止,但該位被清零時并不會中止正在進行的轉換。019:7CLKS該字段用來選擇Burst模式下每次轉換使用的時鐘數和所得ADDR轉換結果放入LS位中可確保精度的位的數目,CLKS可在11個時鐘(10位)~4個時鐘(3位)之間選擇:000=11個時鐘/10位,……,111=4個時鐘/3位。00021PDN1:A/D轉換器處于正常模式。0:A/D轉換器處于掉電模式。023:22TEST[1:0]這些位用于器件測試,00為正常測試,01為數字測試模式,10為DAC測試模式,11為一次轉換測試模式。026:24START當BURST為0時,這些位控制著A/D轉換是否啟動和何時啟動;000:不啟動001:立即啟動轉換010:當ADCR寄存器bit27選擇的邊沿出現P0.1/ENT0/MAT0.2/CAP0.2腳時啟動轉換注意:START選擇100~111時,MAT信號不必輸出到引腳上100:當ADCR寄存器bit27選擇的邊沿在MAT0.1出現時啟動轉換101:當ADCR寄存器bit27選擇的邊沿在MAT0.3出現時啟動轉換110:當ADCR寄存器bit27選擇的邊沿在MAT1.0出現時啟動轉換111:當ADCR寄存器bit27選擇的邊沿在MAT1.1出現時啟動轉換00027EDGE該位只有在START字段為010~111時有效0:在所選CAP/MAT信號的下降沿啟動轉換1:在所選CAP/MAT信號的上升沿啟動轉換04.2.2A/D數據寄存器ADDRADDR寄存器描述見表4.3。其中ADDR[15:6]為10位的A/D轉換結果,bit5為最高位。表4.3數據寄存器ADDRADDR名稱功能復位值31DONEA/D轉換完成標志位,當A/D轉換結束時該位置位。該位在ADDR被讀出和ADCR被寫入時清零。如果ADCR在轉換過程中被寫入,并啟動一次新的轉換。030OVERUNBrust模式下,如果產生LS位結果前,一個或多個轉換結果被丟失和覆蓋,該位置位。讀位通過讀ADDR寄存器清零。029:27這些位讀出為0.他們用于未來CHN字段的擴展,使之兼容包含更多通道的轉換器。026:24CHN這些位包含的是LS位的轉換通道X23:16這些位讀出時為0.他們允許連續A/D值的累加,而不需要使用與門屏蔽處理,使得至少有256個值不溢出到CHN字段015:6V/Vdda當DONE為時,該字段包含一個二進制數,用來代表SEL字段選中的Ain腳的電壓接近于、等于或大于VddaX5:0這些位讀出時為0.專門用于未來的擴展和功能更強大的A/D轉換器。04.3A/D的基本操作ADC(模數轉換器)轉換時鐘分頻計算公式如下:CLKDIV=Fpclk/Fadclk-1其中Fpclk為所要設置的ADC時鐘,其值不能大于4.5MH值。ADC轉換的基本操作方法:(1)將測量通道引腳設置為AINx功能;(2)通過ADCR寄存器設置ADC的工作模式,ADC轉換通道,轉換時鐘(CLKDIV時鐘分頻值);(3)啟動ADC轉換;(4)通過查詢或中斷方式等待ADC轉換完畢,轉換數據存在ADDR寄存器中。4.4數據處理由于本課題用的是交流采樣,所以就要進行數據處理,數據處理主要是進行濾波,然而濾波的方法是多種多樣的,本文對常用的幾種方法進行比較:(1)限幅濾波法(又稱程序判斷濾波法)a.方法:根據經驗判斷,確定兩次采樣允許的最大偏差值(設為A),每次檢測到新值時判斷:如果本次值與上次值之差<=A,則本次值有效;如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值。b.優點:能有效克服因偶然因素引起的脈沖干擾c.缺點:無法抑制那種周期性的干擾;平滑度差。濾波方法:/*A值可根據實際情況調整value為有效值,new_value為當前采樣值濾波程序返回有效的實際值*/#defineA10charvalue;charfilter(){charnew_value;new_value=get_ad();if((new_value-value>A)||(value-new_value>A)returnvalue;returnnew_value;}(2)中位值濾波法a.方法:連續采樣N次(N取奇數),把N次采樣值按大小排列,取中間值為本次有效值。b.優點:能有效克服因偶然因素引起的波動干擾;對溫度、液位的變化緩慢的被測參數有良好的濾波效果。c.缺點:對流量、速度等快速變化的參數不宜。濾波方法:/*N值可根據實際情況調整排序采用冒泡法*/#defineN11charfilter(){charvalue_buf[N];charcount,i,j,temp;for(count=0;count<N;count++){value_buf[count]=get_ad();delay();}for(j=0;j<N-1;j++){for(i=0;i<N-j;i++){if(value_buf>value_buf[i+1]){temp=value_buf;value_buf=value_buf[i+1];value_buf[i+1]=temp;}}}returnvalue_buf[(N-1)/2];}(3)算術平均濾波法a.方法:連續取N個采樣值進行算術平均運算,N值較大時,信號平滑度較高,但靈敏度較低;N值較小時,信號平滑度較低,但靈敏度較高。N值的選?。阂话懔髁?,N=12;壓力:N=4。b.優點:適用于對一般具有隨機干擾的信號進行濾波;這樣信號的特點是有一個平均值,信號在某一數值范圍附近上下波動。c.缺點:對于測量速度較慢或要求數據計算速度較快的實時控制不適用;比較浪費RAM濾波方法:#defineN12charfilter(){intsum=0;for(count=0;count<N;count++){sum+=get_ad();delay();}return(char)(sum/N);}(4)遞推平均濾波法(又稱滑動平均濾波法)a.方法:把連續取N個采樣值看成一個隊列,隊列的長度固定為N,每次采樣到一個新數據放入隊尾,并扔掉原來隊首的一次數據(先進先出原則)。把隊列中的N個數據進行算術平均運算,就可獲得新的濾波結果。N值的選?。毫髁浚琋=12;壓力:N=4;液面,N=4~12;溫度,N=1~4。b.優點:對周期性干擾有良好的抑制作用,平滑度高;適用于高頻振蕩的系統。c.缺點:靈敏度低;對偶然出現的脈沖性干擾的抑制作用較差;不易消除由于脈沖干擾所引起的采樣值偏差;不適用于脈沖干擾比較嚴重的場合;比較浪費RAM。濾波方法:#defineN12charvalue_buf[N];chari=0;charfilter(){charcount;intsum=0;value_buf[i++]=get_ad();if(i==N)i=0;for(count=0;count<N,count++)sum=value_buf[count];return(char)(sum/N);}(5)中位值平均濾波法(又稱防脈沖干擾平均濾波法)a.方法:此方法相當于“中位值濾波法”+“算術平均濾波法”,連續采樣N個數據,去掉一個最大值和一個最小值,然后計算N-2個數據的算術平均值。N值的選?。?~14。b.優點:融合了兩種濾波法的優點;對于偶然出現的脈沖性干擾,可消除由于脈沖干擾所引起的采樣值偏差。c.缺點:測量速度較慢,和算術平均濾波法一樣;比較浪費RAM。濾波方法:#defineN12charfilter(){charcount,i,j;charvalue_buf[N];intsum=0;for(count=0;count<N;count++){value_buf[count]=get_ad();delay();}for(j=0;j<N-1;j++){for(i=0;i<N-j;i++){if(value_buf>value_buf[i+1]){temp=value_buf;value_buf=value_buf[i+1];value_buf[i+1]=temp;}}}for(count=1;count<N-1;count++)sum+=value[count];return(char)(sum/(N-2));}經過比較,所以選擇了一種比較簡單容易實現的濾波方法—限幅濾波。4.5A/D采集功能介紹及軟件編程首先對A/D進行初始化,初始化的詳細設置見表4.2-2。初始化后,A/D就開始選擇通道,選擇通道1,并進行第一次轉換,等待轉換結束,再啟動,再轉換;讀取ADC結果,提取AD轉換值;最后進行數值轉換。以此選擇2、3、4等通道,并重復上述操作。采集電流和電壓值各3路,進行濾波,最后顯示。具體的實現見流程圖4.1。圖4.1A/D采集以及濾波處理的軟件編程:#include"config.h"#include"stdlib.h"#include<math.h>uint8F_flag;#defineA10uint32value_IA;uint32value_IB;uint32value_IC;uint32value_VA;uint32value_VB;uint32value_VC;uint32filer(uint32adVlaueNew,uint32adVlaueOld){uint32new_value;new_value=adVlaueNew;if((new_value-adVlaueOld>A)||(adVlaueOld-new_value>A))returnadVlaueNew;returnadVlaueOld;}VoidFunction_1_ADC(void){externuint8*title2[11];uint32ADC_Data;uint32i;charstr[14];if((F_flag&0x01)==0){PINSEL1=PINSEL1|0x01400000;ADCR=(1<<0)|//SEL=1,選擇通道0((Fpclk/1000000-1)<<8)|//CLKDIV=Fpclk/1000000-1,即轉換時鐘為1MHz(0<<16)|//BURST=0,軟件控制轉換操作(0<<17)|//CLKS=0,使用11clock轉換(1<<21)|//PDN=1,正常工作模式(非掉電轉換模式)(0<<22)|//TEST1:0=00,正常工作模式(非測試模式)(0<<24)|//START=1,直接啟動ADC轉換Q(0<<27);//EDGE=0(CAP/MAT引腳下降沿觸發ADC轉換)}F_flag=0x01;ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x01|(1<<24);//設置通道1,并進行第一次轉換while((ADDR&0x80000000)==0);//等待轉換結束ADCR=ADCR|(1<<24);//再次啟運轉換while((ADDR&0x80000000)==0);//等待轉換結束ADC_Data=ADDR;//讀取ADC結果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉換值ADC_Data=filer(ADC_Data,value_IA);ADC_Data=ADC_Data*3300/1024;//數值轉換F_flag=0;ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data//顯示GUI_PutString(60,16,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x02|(1<<24);//設置通道2,并進行第一次轉換while((ADDR&0x80000000)==0);//等待轉換結束ADCR=ADCR|(1<<24);//再次啟運轉換while((ADDR&0x80000000)==0); //等待轉換結束ADC_Data=ADDR;//讀取ADC結果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉換值ADC_Data=ADC_Data*3300/1024;//數值轉換ADC_Data=filer(ADC_Data,value_IB);ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data);//顯示GUI_PutString(60,32,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x03|(1<<24);//設置通道3,并進行第一次轉換while((ADDR&0x80000000)==0);//等待轉換結束ADCR=ADCR|(1<<24);//再次啟運轉換while((ADDR&0x80000000)==0);//等待轉換結束ADC_Data=ADDR;//讀取ADC結果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉換值ADC_Data=ADC_Data*3300/1024;//數值轉換ADC_Data=filer(ADC_Data,value_IC);ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data);//顯示GUI_PutString(60,48,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x04|(1<<24);//設置通道4,并進行第一次轉換while((ADDR&0x80000000)==0);//等待轉換結束ADCR=ADCR|(1<<24);//再次啟運轉換while((ADDR&0x80000000)==0);//等待轉換結束ADC_Data=ADDR;//讀取ADC結果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉換值ADC_Data=ADC_Data*3300/1024;//數值轉換ADC_Data=filer(ADC_Data,value_VA);ADC_Data=ADC_Data-200;sprintf(str,":%dV\r",ADC_Data);//顯示GUI_PutString(60,82,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x05|(1<<24);//設置通道5,并進行第一次轉換while((ADDR&0x80000000)==0); //等待轉換結束ADCR=ADCR|(1<<24);//再次啟運轉換while((ADDR&0x80000000)==0);//等待轉換結束ADC_Data=ADDR;//讀取ADC結果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉換值ADC_Data=ADC_Data*3300/1024;//數值轉換ADC_Data=filer(ADC_Data,value_VB);ADC_Data=ADC_Data-200;sprintf(str,":%dV\r",ADC_Data);//顯示GUI_PutString(60,98,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x06|(1<<24);//設置通道6,并進行第一次轉換while

溫馨提示

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

評論

0/150

提交評論