二次儀表頻率計設(shè)計_第1頁
二次儀表頻率計設(shè)計_第2頁
二次儀表頻率計設(shè)計_第3頁
二次儀表頻率計設(shè)計_第4頁
二次儀表頻率計設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢業(yè)論文(設(shè)計)論文題目:二次儀表頻率計設(shè)計學生姓名:范存永學 號:1008020205所在院系:電氣信息工程學院專業(yè)名稱:自動化屆 次:2014 屆指導教師:苗磊目 錄 前 言21.總體方案設(shè)計21.1 系統(tǒng)方案實現(xiàn)框圖21.2軟硬件開發(fā)環(huán)境和工具32.硬件電路設(shè)計32.1 單片機模塊設(shè)計42.2 信號輸入電路62.3 人機界面設(shè)計73.系統(tǒng)軟件設(shè)計93.1 系統(tǒng)軟件實現(xiàn)框圖93.2頻率信號采集和測量程序設(shè)計103.3 人機界面程序設(shè)計134.系統(tǒng)測試154.1 軟硬件調(diào)試154.2 調(diào)試總結(jié)175.總結(jié)17參考文獻:18 淮南師范學院2014屆本科畢業(yè)論文二次儀表頻率計設(shè)計學生:范存永(指

2、導老師:苗磊)(淮南師范學院電氣信息工程學院)摘要:本課題是基于stm32單片機設(shè)計的一個二次儀表頻率計。通常,在工業(yè)生產(chǎn)中,各種現(xiàn)場信號如壓力、溫度、流量等都是通過相應(yīng)壓力變送器、溫度變送器、流量變送器傳送出來,即特定傳感器把物理量變?yōu)閷?yīng)的200-800HZ的頻率信號。二次儀表頻率計用來檢測其對應(yīng)頻率,并將其轉(zhuǎn)換為對應(yīng)的實際物理量顯示出來。關(guān)鍵字: stm32;二次儀表;頻率計;傳感器;實際物理量;頻率信號Design Of Secondary Instrument Frequency MeterStudent: Fan Cunyong (Guidance Teacher: Miao Le

3、i)(College of Electrical and Information Engineering ,Huainan Normal University)Abstract: This study designed a secondary instrument frequency meter based on the STM32 MCU (Micro Controller Unit).Generally, in the industrial production ,many spot signals like pressure and temperature and flux are se

4、nd out by homologous pressure transmitter and temperature transmitter and flux transmitter respectively. All in all, the physical quantity is transfered by specific sensor into a frequency signal rated from 200HZ to 1000HZ.Secondary instrument frequency meter is used to detect the corresponding freq

5、uency and transfer it into corresponding physical quantity ,then display it.Keywords: stm32, secondary instrument, frequency meter, sensor, actual physical quantity, frequency signal前 言通常工業(yè)生產(chǎn)中,各種現(xiàn)場物理量如壓力、溫度、流量等都是通過相應(yīng)壓力變送器、溫度變送器、流量變送器傳送出來的。這些變送器是把物理量轉(zhuǎn)變成對應(yīng)的200Hz-800Hz的頻率信號,為了準確讀出這些物理量的值,就需要通過頻率計準確無誤的測

6、量出變送頻率并換算成實際的物理數(shù)值。無論是在科技研究中還是在實際應(yīng)用中,毫無疑問,頻率測量的作用都顯得尤為重要。但傳統(tǒng)的頻率計通常采用組合電路和時序電路等大量的硬件電路構(gòu)成,不僅產(chǎn)品體積較大,運行速度慢,而且測量低頻信號時不宜直接使用。與傳統(tǒng)的測量方式相比,運用單片機頻率計有著體積更小,運算速度更快,測量范圍更寬的優(yōu)點,而且電路簡單,開發(fā)周期和成本都降低。在傳統(tǒng)的頻率計中有許多功能是依靠硬件來實現(xiàn)的,而采用單片機測量頻率之后,有許多以前需要用硬件才能實現(xiàn)的功能現(xiàn)在僅僅依靠軟件編程就能實現(xiàn),而且不同的軟件編程能夠?qū)崿F(xiàn)不同的功能,因此使得制作成本大大降低?;趯嶋H應(yīng)用需求和當前技術(shù)發(fā)展,本文設(shè)計出

7、以STM32單片機為測量和控制核心的頻率計方案。該設(shè)計能夠檢測出200Hz-800Hz的頻率信號,并能根據(jù)現(xiàn)場需要換算成與一次儀表相同的物理數(shù)值,具有頻率顯示、按鍵設(shè)置、LED狀態(tài)顯示功能。1.總體方案設(shè)計1.1 系統(tǒng)方案實現(xiàn)框圖本系統(tǒng)的方案框圖如圖1所示,包括信號輸入端的濾波整形電路、STM32單片機部分和人機交互部分。圖1 系統(tǒng)方案圖為了去除包括工頻干擾在內(nèi)的其他低頻干擾,在信號輸入端設(shè)計了高通濾波器,濾除200Hz以下的低頻干擾。信號整形電路能將輸入的三角波、正弦波、鋸齒波整形為單片機可以識別的矩形波。STM32單片機通過輸入捕獲/比較功能捕獲到脈沖信號,運算處理后得到脈沖頻率,在LCD

8、128128上顯示。通過按鍵設(shè)置頻率和溫度、濕度等物理量的關(guān)系,就能現(xiàn)場得到一次儀表相同的物理數(shù)值。此外,電源部分提供系統(tǒng)需要的5V和3.3V電壓,下載接口用來下載程序和在線仿真,LED指示燈用來指示系統(tǒng)運行狀態(tài)。1.2軟硬件開發(fā)環(huán)境和工具設(shè)計工具分為:硬件設(shè)計工具、軟件設(shè)計工具。硬件電路原理圖和PCB的繪制使用的是Altium Designer winter 09;軟件開發(fā)工具是Keil MDK V4.1。Altium Designer 是從Protel發(fā)展過來的,是將原理圖編輯、電路仿真、PCB設(shè)計,F(xiàn)PGA設(shè)計以及打印等功能結(jié)合在一起的集成開發(fā)環(huán)境。Keil MDK,也稱MDK-ARM,

9、Realview MDK、I-MDK、uVision4 等。MDK-ARM軟件為基于Cortex-M、Cortex-R4、ARM7、ARM9處理器設(shè)備提供了一個完整的開發(fā)環(huán)境。2.硬件電路設(shè)計硬件電路設(shè)計部分包括STM32單片機模塊設(shè)計、信號輸入電路設(shè)計和人機界面設(shè)計,如圖2所示。圖2硬件電路圖2.1 單片機主板模塊設(shè)計在考慮硬件資源、開發(fā)容易程度和成本之后,本設(shè)計選用意法半導體的STM32F103RCT6,STM32系列是專為高性能、低成本和低功耗的嵌入式應(yīng)用而設(shè)計的ARM Cotex-M3內(nèi)核。STM32片上擁有ADC、DAC、TIM、FSMC、USART、DMA、USB、以太網(wǎng)

10、等眾多資源,而且自帶底層庫函數(shù),極大地縮短了開發(fā)周期。2.1.1 STM32最小系統(tǒng) 本設(shè)計主要利用STM32的GPIO、USART、輸入捕獲和定時器功能,因此考慮功能和成本選用QFP64封裝的STM32F103RCT6。STM32F103RCT6內(nèi)部具有256K FLASH和48K RAM,并且具有豐富的片上資源,包括IIC、SPI、UART、SDIO和三路ADC。單片機最小系統(tǒng)包括主控MCU、復位電路、時鐘電路和程序下載仿真接口,該部分設(shè)計如圖3所示。STM32F103RCT6采用3.3V供電,為了去除電源噪聲干擾,在每個電源引腳接了去耦電容,并且將模擬地和數(shù)字地分開,在單點處用0歐電阻或

11、電感連接。STM32有多個時鐘可以選擇,HIS振蕩器時鐘、HSE振蕩器時鐘和PLL時鐘可以用來驅(qū)動系統(tǒng)時鐘,LSI 振蕩器和LSE外部低速時鐘可以用來驅(qū)動看門狗或RTC。由于沒有使用RTC功能,本設(shè)計只接了8M外部高速時鐘,并聯(lián)20pf的電容幫助起振。圖3 STM32主控電路圖STM32的RST引腳是低電平復位,該部分由電容、電阻和按鍵構(gòu)成上電復位和按鍵復位電路。如圖3所示。2.1.2 電源部分本系統(tǒng)需要3.3V和5V兩種電壓供電。5V用來給單電源運放、電壓比較器LM393供電,以及LCD12864液晶的背光供電。為了達到低功耗,STM32采用低電壓3.3V供電。所以3.3V用來給單片機供電和

12、LED供電。為了獲得3.3V電壓,需要對輸入的5V直流電進行穩(wěn)壓,這里采用LM1117-3.3V芯片。穩(wěn)壓電路如圖4所示。LM1117是一個低壓差電壓調(diào)節(jié)器,具有較寬的電壓輸入和800mA的電流輸出。另外,為了直觀顯示3.3V電壓狀態(tài),本設(shè)計在輸出端加了發(fā)光二極管指示燈,當有3.3V電壓輸出時,發(fā)光二極管點亮。圖4 電源穩(wěn)壓電路2.1.3下載仿真電路STM32可以用串口下載,可以用JTAG和SWD方式進行仿真調(diào)試。JTAG是國際標準測試協(xié)議,主要用于芯片內(nèi)部測試。標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。許多器件都用它來仿真調(diào)試,ST

13、M32當然也不例外。但是考慮到引腳使用和下載速度問題,本設(shè)計采用SWD模式。SWD模式在高速模式下比JTAG更可靠,基本使用JTAG仿真模式的情況下都可以直接使用SWD模式的。當電路板子空間有限或者單片機引腳欠缺的情況下,SWD是最好的選擇,這里只使用到SWDATA和SWCLK兩個IO端口,加上電源和地即可進行下載和仿真。設(shè)計電路如圖5所示。圖5 SWD下載仿真電路2.2 信號輸入電路為了獲得單片機能夠識別的脈沖信號,必須對輸入的信號進行濾波整形。本設(shè)計在信號輸入端加入高通濾波電路和信號整形電路。 2.2.1 高通濾波電路濾波電路選用二階有源高通濾波器。有源濾波電路相對于無源濾波電路,具有較高

14、的開環(huán)電壓增益和輸入阻抗、較低的輸出阻抗和很好的自適應(yīng)能力。 二階濾波器相對于一階濾波器而言,具有更好的濾波效果。為了獲得單片機能夠識別的脈沖信號,必須對輸入的信號進行濾波整形。本設(shè)計在信號輸入端加入高通濾波電路和信號整形電路。本設(shè)計的二階有源高通濾波器能濾除低于200Hz的低頻干擾,濾除諸如50Hz的工頻等干擾頻率。濾波電路如圖6所示。運算放大器選用LM358芯片。LM358可雙電源也可單電源供電,具有寬電壓、高增益、低功耗和內(nèi)部頻率補償?shù)忍攸c,完全滿足設(shè)計要求。圖6高通濾波電路2.2.2 信號波形整形高通濾波電路輸出的是頻率信號的正電壓部分,為了獲得單片機能夠是別的脈沖信號就必須對其整形。

15、整形電路可以選用施密特觸發(fā)器或者比較器,當電壓高于某一閾值事輸出高電壓,低于某一閾值時輸出低電壓,從而將頻率信號整形為脈沖信號。本設(shè)計選用LM393比較器,通過改變電位器的阻值調(diào)整比較器的正向端閾值電壓,在反相端輸入頻率信號時,輸出端獲得輸出脈沖。此外,為了防止電壓過高燒壞單片機,在輸出端加了一個3.3V的穩(wěn)壓二極管。電路如圖7所示圖7 比較整形電路2.3 人機界面設(shè)計為了給用戶提供一個有好的人接界面,將測量結(jié)果直觀的顯示出來,并能通過按鍵設(shè)置一些參數(shù),本系統(tǒng)設(shè)計了LCD1602液晶顯示、按鍵操作和LED狀態(tài)指示燈。2.3.1 LCD128x128液晶顯示器人機界面的顯示使用LCD128x12

16、8,可以顯示128x128點陣單色或4灰度級的圖片,可以顯示英文、數(shù)字、符號或64個16x16的漢字。該液晶采用3.3V供電,采用6800總線驅(qū)動。由于不需要顯示很多的漢字,本設(shè)計沒有選用帶有字庫的液晶,而是使用軟件生成需要的字庫添加到代碼里。LCD128128控制端口為數(shù)據(jù)命令選擇端口(RS)、片選端口(CS)、讀端口(RD)、寫端口(WR),以及八位數(shù)據(jù)端口(D0-D7)。2.3.2 按鍵和狀態(tài)指示燈當采集到頻率信號時,為了轉(zhuǎn)換成一次儀表的物理量,需要用戶手動輸入物理量與頻率之間的線性關(guān)系數(shù)據(jù),所以加入按鍵功能。按鍵設(shè)計四個,分別定義為功能鍵、增大建、減小鍵和確認鍵。功能鍵用來切換主菜單功

17、能,增大鍵和減小鍵用來調(diào)整參數(shù)大小。參數(shù)設(shè)定好之后按確認鍵確認數(shù)據(jù),完成數(shù)據(jù)輸入。由于STM32的GPIO端口的輸入可以位置為上拉輸入、下拉輸入和浮空輸入模式,因此外部電路就省去了上拉電阻,只需要軟件配置為輸入上拉模式即可。按鍵的一個端口接地,另一端口接到單片機IO口,當檢測到IO端口被拉低時,即認為有按鍵被按下。按鍵電路圖如圖8所示。圖8 按鍵輸入電路圖LED狀態(tài)指示燈用以指示系統(tǒng)運行狀態(tài)和輸入頻率大小。當系統(tǒng)正常運行時,LED1每隔一秒閃爍一次,用以指示系統(tǒng)運行正常。LED2用來間接地指示輸入頻率大小,當STM32捕獲到輸入脈沖時翻轉(zhuǎn)LED指示燈,頻率越高,閃爍越快,反之頻率越低,閃爍越慢

18、。LED指示燈在一般的產(chǎn)品設(shè)計中都有很重要的作用。本系統(tǒng)設(shè)計了兩個狀態(tài)指示燈,指示燈電路如圖9所示。LED是電流驅(qū)動器件,電流的大小決定LED的亮度,為了避免大電流燒壞LED指示燈,加了1K歐的電阻限流。圖9 LED狀態(tài)指示燈電路3.系統(tǒng)軟件設(shè)計3.1 系統(tǒng)軟件實現(xiàn)框圖軟件部分分為主函數(shù)程序和中斷函數(shù)程序。當系統(tǒng)電源開啟的時候,單片機先進行初始化工作,配置時鐘頻率為72MHz,配置用到的GPIO端口,設(shè)置中斷優(yōu)先級;配置定時器、輸入捕獲模式;初始化LCD12864、LED、按鍵等外設(shè)。在循環(huán)中更新顯示、讀取鍵值。當定時時間到的時候進入中斷函數(shù)。在進入中斷函數(shù)中,首先清除中斷標志,讀取捕獲的脈沖

19、計數(shù)值,算出信號頻率。然后清除技術(shù)寄存器的值,開啟定時器后退出中斷函數(shù),進入主函數(shù),進行新一輪的循環(huán)。主程序和中斷程序的流程圖如圖10所示圖10 主程序和中斷程序流程圖當采集到頻率信號時,為了轉(zhuǎn)換成一次儀表的物理量,需要用戶手動輸入物理量與頻率之間的線性關(guān)系數(shù)據(jù),所以加入按鍵功能。按鍵設(shè)計四個,分別定義為功能鍵、增大建、減小鍵和確認鍵。功能鍵用來切換主菜單功能,增大鍵和減小鍵用來調(diào)整參數(shù)大小。參數(shù)設(shè)定好之后按確認鍵確認數(shù)據(jù),完成數(shù)據(jù)輸入。按鍵初始化之后需要再循環(huán)里不斷地檢測,當檢測到按鍵輸入引腳拉低時,即有按鍵按下,然后延時20毫秒進行按鍵“消抖”,因為手動操作會有抖動,如不進行消抖操作,那么

20、短時間會判斷出有多次按鍵操作。延時之后,按鍵輸入狀態(tài)穩(wěn)定,此時若仍然檢測到按鍵按下,則確定是按鍵操作,然后判斷鍵值,根據(jù)鍵值做出相應(yīng)的處理。按鍵操作流程圖如圖11所示。圖11 按鍵操作流程圖3.2頻率信號采集和測量程序設(shè)計STM32需要對系統(tǒng)時鐘、模塊時鐘和特定寄存器進行配置才能正常工作。該部分包括STM32系統(tǒng)初始化、輸入捕獲定時器配置和頻率計算。3.2.1 STM32系統(tǒng)配置和初始化本系統(tǒng)程序采用Keil uVision4進行編寫、編譯和調(diào)試仿真。使用STM32標準外設(shè)庫函數(shù)StdPeriph_Lib_V3.5進行開發(fā),從而不必關(guān)心底層寄存器的配置,減少了工作量,縮短了開發(fā)周期。STM32

21、外部接8MHz晶振,通過內(nèi)部PLL可以讓系統(tǒng)頻率達到72MHz。STM32時鐘包括AHB高速系統(tǒng)時鐘總線、APB2高速外設(shè)時鐘總線和APB1低速外設(shè)時鐘總線。調(diào)用SystemInit(),配置AHB和APB2時鐘為72MHz,APB1時鐘為36MHz。另外用到的端口和外設(shè)也要對其時鐘進行配置。SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Per

22、iph_GPIOC, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);3.2.2 STM32輸入捕獲和定時器STM32輸入捕獲的原理是當選定的輸入引腳發(fā)生選定的脈沖觸發(fā)沿(上升沿或下降沿)的時候,該時刻定時器的計數(shù)值TIMx_CNT會被保存,同時也會產(chǎn)生捕獲中斷。本設(shè)計的思想是用定時器計時,輸入捕獲進行計數(shù),所以需要配置定時器和輸入捕獲模式。定時需用普通定時器TIM2,首先對TIM2的時鐘進行配置,由于TIM2內(nèi)部是接在APB1的時鐘總線上,因此調(diào)用庫函數(shù)配置定時器時鐘如下:RCC_APB1PeriphClockCmd(

23、RCC_APB1Periph_TIM2, ENABLE);為了每秒鐘讀取一次捕獲脈沖計數(shù)值,需要配置裝載寄存器,并且開啟定時中斷,當定時時間到的時候進入中斷函數(shù)進行處理。具體的配置如下:TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period = 10000 - 1; TIM_TimeBaseStructure.TIM_Prescaler = 7200 - 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.T

24、IM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE);TIM_Cmd(TIM2, ENABLE); STM32是搶占式內(nèi)核,允許中斷嵌套,每個中斷擁有一個優(yōu)先級,高優(yōu)先級的中斷可以打斷低優(yōu)先級的中斷。當優(yōu)先級相同時,根據(jù)中斷向量表中默認的排列順序進行中斷響應(yīng)。所以STM32開啟定時器需要對中斷向量表進行配置。NVIC_InitTypeDef NVIC_InitStructure;NVIC_Pr

25、iorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);配置好中斷向量表,必須給中斷一個入口函數(shù),當中斷到來的時候可以找到這個函數(shù),進行相應(yīng)的處理。下面的就是TIM2的中斷入口函數(shù):void TIM2_IRQHandl

26、er() /判斷增計數(shù)中斷標志位置位if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) /清除中斷標志TIM_ClearITPendingBit(TIM2, TIM_IT_Update); /進行相應(yīng)的算法處理輸入捕獲模式用以捕捉脈沖信號進行計數(shù)。本系統(tǒng)選擇TIM4的Channal2通道(PB.8)作為脈沖輸入引腳。這里需要開啟TIM3時鐘和GPIOA時鐘:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB

27、, ENABLE);PB.8作為脈沖捕獲引腳需要配置為浮空輸入模式:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);對輸入捕獲模式的配置主要包括輸入通道、上升沿捕獲方式、捕獲預分頻和輸入腳是否濾波等,這里開啟捕獲中斷進行計數(shù),數(shù)據(jù)處理放在定時中斷中。TIM3輸入捕獲模式詳細的配置如下:TIM_ICInitStructure.TIM_Channel = TIM_Channel

28、_2; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInitStructure.TIM_ICFilter = 0x00;TIM_PWMIConfig(TIM4, &TIM_ICInitStructure);TIM_SelectInputTrigger(TIM4, TIM_

29、TS_TI2FP2);TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset); TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);TIM_Cmd(TIM4, ENABLE);TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);定時器TIM2一秒的定時時間到的時候會進入定時中斷函數(shù),在這里首先關(guān)閉定時器,讀取輸入捕獲計數(shù)值就可以得到頻率了。將脈沖計數(shù)器清零后重新開啟定時器之后退出定時中斷。3.3 人機界面程序設(shè)計人機交互界面程序設(shè)計包括LCD128x128程序設(shè)計

30、、LED狀態(tài)指示燈設(shè)計和按鍵輸入程序設(shè)計。3.3.1 LCD128x128顯示LCD128x128程序包括液晶初始化函數(shù)、寫命令函數(shù)、寫數(shù)據(jù)函數(shù)、清屏函數(shù)、以及漢字和字符的顯示。初始化需要配置控制端口和數(shù)據(jù)端口,并嚴格遵守寫入數(shù)據(jù)和寫入命令時序。時序圖如圖12所示。圖12 LCD128x128寫入時序圖 初始化和讀寫函數(shù)只需要遵守時序并且發(fā)送正確的命令字即可。本部分程序主要是實現(xiàn)漢字和字符的顯示。由于液晶不帶字庫,需要程序里添加字庫。這里采用字庫生成軟件PCtoLCD2002生成C格式字庫數(shù)據(jù),如下所示:其中Stru_GB16結(jié)構(gòu)體定義為:typedef struct uint8 Index2

31、;uint8 Msk32;Stru_GB16;這樣每次檢索結(jié)構(gòu)體中的Index成員,如果是對應(yīng)的漢字則將成員數(shù)組Msk的數(shù)據(jù)顯示出來。本部分實現(xiàn)的接口函數(shù)如下:void GUI_DispString(uint8 Row, uint8 Col, uint8 *str);void GUI_DispUnString(uint8 Row, uint8 Col, uint8 *str);void GUI_DispHZ(uint8 Row, uint8 Col ,uint8 *PStr);void GUI_DispUnHZ(uint8 Row, uint8 Col ,uint8 *PStr);3.3.2

32、按鍵和指示燈按鍵由于輸入端口沒有上拉電阻,需要配置內(nèi)部上拉輸入。GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;當檢測輸入電壓為低時則認為按鍵被按下。由于操作按鍵的時候存在抖動,所以需要軟件“消抖”,消抖可以用狀態(tài)機消抖也可以簡單地延時消抖。本設(shè)計為了采用延時策略,當檢測到按鍵輸入引腳為低電平時,延時30ms再次讀取,如果仍然是低電平則確認按鍵被按下。單片機讀取IO電平狀態(tài)的函數(shù)為:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1); /讀取PA.1腳電平四分別按鍵設(shè)置為功能鍵、增大間、減小鍵和確認鍵??紤]到頻率計獲取頻率之

33、后需要現(xiàn)場轉(zhuǎn)化成與一次儀表相同的物理值,這就需要用戶輸入?yún)?shù)進行標定。例如用戶設(shè)定頻率是200Hz的時候溫度是20,頻率800Hz的時候是60,那么頻率計會根據(jù)線性轉(zhuǎn)換公式y(tǒng)=ax+b計算出a、b值。當有頻率輸入時自動顯示轉(zhuǎn)換后的物理數(shù)值。換算方程式如下:phyval = (Frequency-200)*(phytemp2-phytemp1)/(800-200)+phytemp1;用戶根據(jù)功能鍵選擇操作菜單,功能鍵第一次按下修改頻率為200Hz對應(yīng)的物理值,第二次按下修改頻率為800Hz對應(yīng)的物理值,此時用增大建、減小鍵移動選項和更改參數(shù)值,設(shè)置好參數(shù)按確定鍵確定輸入。LED指示燈操作簡單,輸

34、出IO電平為低電平即可點亮。在主函數(shù)中翻轉(zhuǎn)LED1指示燈來指示系統(tǒng)運行狀態(tài)。在輸入捕獲中斷里翻轉(zhuǎn)LED2指示燈來指示頻率的大小。if(i = 0)GPIO_SetBits(LED_Port,LED_Pin); /關(guān)閉LEDelseGPIO_ResetBits(LED_Port,LED_Pin); /點亮LEDif(+i=2)i=0;4.實物測試4.1 軟硬件調(diào)試測試部分分為硬件測試和軟件測試。整體測試連接圖如圖13所示。圖13 頻率計硬件測試連接圖本系統(tǒng)需要3.3V和5V兩種電壓供電。5V用來給單電源運放、電壓比較器LM393供電,以及LCD12864液晶的背光供電。為了達到低功耗,STM32

35、采用低電壓3.3V供電。所以3.3V用來給單片機供電和LED供電。為了獲得3.3V電壓,需要對輸入的5V直流電進行穩(wěn)壓,這里采用LM1117-3.3V芯片。硬件電路測試電源模塊3.3V穩(wěn)壓正常輸出;晶振起振,單片機能正常操作;SWD仿真正常,而且下載速度很快;LCD128x128顯示正常,按鍵和LED操作正常;當信號輸入端加入正弦波、三角波等波形時,高通濾波器成功濾除低頻干擾,濾波效果較好;LM393比較整形電路的輸出端是很理想的脈沖信號;信號輸入和按鍵部分電路實物圖如圖14所示。圖14 信號輸入和按鍵部分測試實物圖軟件分模塊進行測試。經(jīng)在線仿真和實際測量,定時器一秒鐘定時準確,每秒進一次中斷

36、進行一次數(shù)據(jù)處理;給單片機端口加入理想的脈沖,測試出輸入捕獲計數(shù)準確,捕捉靈敏可靠;頻率計算準確性,按鍵輸入配置參數(shù)后計算的物理數(shù)值和一次設(shè)備相同,誤差很小。按鍵參數(shù)輸入界面如圖15所示。圖15按鍵輸入頻率和物理量的對應(yīng)關(guān)系界面各模塊測試沒有問題之后進行系統(tǒng)調(diào)試,在現(xiàn)場對多種周期信號源進行測量,輸入線性參數(shù)轉(zhuǎn)換成的物理值與一次儀表相比較,測量其精度和穩(wěn)定性。經(jīng)多次現(xiàn)場測試表明,本頻率計可以去除200Hz以下的頻率干擾,在200Hz到800Hz區(qū)間有很高的測量精度,測量換算的物理值和一次儀表采集的值誤差很小。測量結(jié)果如圖16所示。圖16測量結(jié)果顯示4.2 調(diào)試總結(jié)通過軟硬件的測試,各項功能達到設(shè)

37、計要求,經(jīng)過長時間的測試和現(xiàn)場應(yīng)用,該頻率計運行穩(wěn)定,準確可靠,可以實際應(yīng)用和生產(chǎn)。5.總結(jié)與傳統(tǒng)的測量方式相比,運用了單片機頻率計有著體積更小,運算速度更快,測量范圍更寬的優(yōu)點,而且電路簡單,開發(fā)周期和成本都降低。本系統(tǒng)就是采用強大的基于ARM Cotex-M3內(nèi)核的STM32單片機設(shè)計出一套頻率計。該頻率計能夠檢測出200Hz-800Hz的頻率信號,并能根據(jù)現(xiàn)場需要換算成與一次儀表相同的物理數(shù)值,具有頻率顯示、按鍵設(shè)置和LED狀態(tài)顯示。經(jīng)過長時間的測試和現(xiàn)場應(yīng)用,該頻率計運行穩(wěn)定,準確可靠,可以實際應(yīng)用和生產(chǎn)。雖然本系統(tǒng)運行可靠穩(wěn)定,但由于本人時間和精力有限,仍然有很多可以改進和完善的地方

38、。本設(shè)計只是致力于獲取200Hz-800Hz的頻率的準確性,在頻率測量方面還可以有更寬的測量范圍。頻率測量的方法很多,為了獲得更高的準確性,也可以嘗試其他測量方法。這些都是可以在以后的工作中進行改進和完善的地方。參考文獻:1譚浩強.C語言程序設(shè)計M.北京清華大學出版社.1999:109-131.2程佩青.數(shù)字信號處理教程M.北京清華大學出版社.1999:10-21.3陳曾平.電路設(shè)計基礎(chǔ)M.北京高等教育出版社.2003:100-110.4于海生.計算機控制技術(shù)M.北京機械工業(yè)出版社.2003:11-19.5劉同法.單片機外圍接口電路M.北京航空航天大學出版社.2003:95-129.6馮先成.

39、單片機應(yīng)用系統(tǒng)設(shè)計M.北京北京航空航天大學出版社.1999:210-216.7王世英,趙有聲. 給數(shù)字頻率計增加功能J.電子技術(shù).1980年11期.8肖洪兵.跟我學用單片機M.北京航空航天大學出版社.2002.8.9何立民.單片機高級教程 第1版M.北京航空航天大學出版社.2001.10鄭茂欣.自制2.4GHz數(shù)字頻率計N.電子報.2003年.11李廣第.單片機基礎(chǔ) 第1版M.北京航空航天大學出版社.1999.12徐惠民,安德寧.單片微型計算機原理接口與應(yīng)用 第1版M.北京郵電大學出版社.1996. 13 夏繼強.單片機實驗與實踐教程M.北京航空航天大學出版社,2001.14 陳志旺.STM3

40、2嵌入式微控制器原理,應(yīng)用技術(shù).電子工業(yè)出版社,2012.15何立民.單片機應(yīng)用技術(shù)大全.北京:北京航空航天大學出版社,1994.16杜鐵軍,李群流行單片機應(yīng)用子程序及應(yīng)用實例西安:西安電子科技大學出版社,2002.17邱光源等.電路基礎(chǔ)M.高等教育出版社 1998.17 附錄主程序:#include "stm32f10x.h"#include "SysTickDelay.h"#include "UART.h"#include "TIM.h"#include <stdio.h>static void S

41、ystem_Init(void);static void RCC_Configuration(void);static void NVIC_Configuration(void);static void GPIO_Configuration(void);extern uint32_t Frequency;extern uint8_t Flag_GetFrequency;/* 功能:main* 參數(shù):NULL* 返回:NULL* 備注:主函數(shù)*/int main(void) System_Init();SysTick_Init();TIMx_Init();UART_Init(9600);LCD_

42、Init();LCD_DispStr(0,0,"LCD_Test.");while(1)if(Flag_GetFrequency)Flag_GetFrequency = 0;printf("Frequency:%dn",Frequency);else printf("Frequency:%dn",0);delay_ms(500);/* 功能:System_Init* 參數(shù):NULL* 返回:NULL* 備注:系統(tǒng)初始化*/static void System_Init(void)RCC_Configuration();NVIC_Con

43、figuration();GPIO_Configuration();/* 功能:RCC_Configuration* 參數(shù):NULL* 返回:NULL* 備注:時鐘初始化*/static void RCC_Configuration(void)SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB

44、2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/* 功能:GPIO_Configuration* 參數(shù):NULL* 返回:NULL* 備注:端口初始化*/static void GPIO_Configuration(void)GPIO

45、_InitTypeDef GPIO_InitStructure;/* Configure USART Tx as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* 功能:NVIC_Configuration* 參數(shù):NUL

46、L* 返回:NULL* 備注:中斷向量表初始化*/static void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure;/* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/設(shè)置優(yōu)先級分組:先占優(yōu)先級0位,從優(yōu)先級4位/設(shè)置向量表的位置和偏移#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x2000000

47、0 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /向量表位于RAM#else /* VECT_TAB_FLASH */* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); /向量表位于FLASH#endif/* Enable the TIM3 global Interrupt */NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQCh

溫馨提示

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

評論

0/150

提交評論