基于單片機(jī)正弦波有效值的測(cè)量_第1頁
基于單片機(jī)正弦波有效值的測(cè)量_第2頁
基于單片機(jī)正弦波有效值的測(cè)量_第3頁
基于單片機(jī)正弦波有效值的測(cè)量_第4頁
基于單片機(jī)正弦波有效值的測(cè)量_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于單片機(jī)正弦波有效值的測(cè)量 一簡(jiǎn)介本作品以單片機(jī)STC12C5A60S2為主控芯片并以此為基礎(chǔ),通過二極管1N5819實(shí)現(xiàn)半波整流,使用單片機(jī)內(nèi)部自帶10位AD對(duì)整流后的輸入信號(hào)進(jìn)行采樣,從而實(shí)現(xiàn)對(duì)峰值的檢測(cè);同時(shí)通過運(yùn)放LM837對(duì)輸入信號(hào)進(jìn)行放大,之后通過施密特觸發(fā)器,將原始信號(hào)整形成可被單片機(jī)識(shí)別的標(biāo)準(zhǔn)脈沖波形,之后配合內(nèi)部計(jì)數(shù)器(定時(shí)器)達(dá)到測(cè)量其頻率的目的;這樣,整流和AD采樣實(shí)現(xiàn)對(duì)輸入信號(hào)峰值的檢測(cè);通過放大、整形實(shí)現(xiàn)對(duì)輸入信號(hào)頻率的檢測(cè)。二基本功能與技術(shù)指標(biāo)要求(1)輸入交流電壓:1mV50V,分五檔: 1mV20mV, 20mV200mV, 200mV2V, 2V20V, 2

2、0v50V。(2)正弦頻率;1Hz100kHz;(3)檢測(cè)誤差:2%;(4)具有檢測(cè)啟動(dòng)按鈕和停止按鈕,按下啟動(dòng)按鈕開始檢測(cè),按下停止按鈕停止檢測(cè);(5)顯示方式:數(shù)字顯示當(dāng)前檢測(cè)的有效是,在停止檢測(cè)狀態(tài)下,顯示最后一次檢測(cè)到的有效值;(6)顯示:LCD,顯示分辨率:每檔滿量程的0.1%;三理論分析本文要求輸入交流信號(hào),通過電路測(cè)量其峰值,頻率,有效值以及平均值,因?yàn)檩斎氲慕涣餍盘?hào)為模擬信號(hào),而一般處理數(shù)據(jù)使用的主控芯片單片機(jī)處理的是數(shù)字信號(hào),所以我們選擇使用數(shù)模轉(zhuǎn)換器AD(Analog to Digital Converter)將輸入的模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),并進(jìn)行采樣;由于要求輸入交流信號(hào)

3、電壓峰峰值Vpp為50mV10V,所以如果我們采用AD為8位,則最小采樣精度為528-119.6mv,因此會(huì)產(chǎn)生78.4%的誤差,并且題目要求輸入交流信號(hào)的頻率范圍為40Hz50kHz,所以為了保證對(duì)高頻率信號(hào)的單周期內(nèi)采樣個(gè)數(shù),我們需要選擇盡量高速度的AD;因此我們選用使用單片機(jī)STC12C5A60S2,其內(nèi)部自帶AD為8路10位最高速度可達(dá)到250KHz,所以我們可以將最小采樣精度縮小到5210-14.87mv,并且在輸入交流信號(hào)頻率最大時(shí)(50KHz)在單個(gè)周期內(nèi)可采集5個(gè)點(diǎn),因此可保證測(cè)量精度。由于該AD只能接受05V的模擬信號(hào)輸入,所以當(dāng)我們直接輸入一個(gè)雙極性信號(hào)時(shí)可能損壞AD,因此

4、當(dāng)信號(hào)進(jìn)入AD之前我們要進(jìn)行半波整流,為此我們?cè)O(shè)計(jì)了整流電路,在交流信號(hào)通過整流電路輸入AD后,由AD實(shí)時(shí)輸出對(duì)應(yīng)模擬信號(hào)大小的二進(jìn)制數(shù),并存入變量MAX中,隨著信號(hào)的不斷輸入MAX中只保存AD輸出過的最大值,這樣既可測(cè)出輸入信號(hào)的峰值;由交流信號(hào)有效值表達(dá)式 U有效=1Ni=1Nui2可知檢波器應(yīng)當(dāng)首先把輸入的瞬時(shí)電壓平方, 然后在一定平均時(shí)間內(nèi)取平均值再開方。即可得到交流信號(hào)的有效值,然后通過比較峰值和有效值的關(guān)系即可知道該交流信號(hào)的波形;由于要檢測(cè)交流信號(hào)的頻率,所以我們使用單片機(jī)內(nèi)部定時(shí)器和計(jì)數(shù)器,而計(jì)數(shù)器只能由上升沿或是下降沿觸發(fā),所以我們想通過施密特觸發(fā)器將輸入交流信號(hào)變?yōu)楦叩碗娖?/p>

5、,以便檢測(cè)其頻率,而施密特觸發(fā)器CD40106在常溫5V供電下門限電壓VT-=1.4V,VT+=3.6V,而輸入交流信號(hào)的峰值最小時(shí)為25mV,所以不能保證輸入信號(hào)為正的時(shí)候施密特觸發(fā)器就能發(fā)生跳變,因此我們要對(duì)輸入交流信號(hào)進(jìn)行放大,為此我們?cè)O(shè)計(jì)了放大電路。四.電路設(shè)計(jì)1.電源電路的設(shè)計(jì)本次實(shí)驗(yàn)我們采用+5V,5V,+12V,12V的電源,故采用了7805,7905,7812,7912這四塊芯片組成電源電路對(duì)作品進(jìn)行供電。如圖一所示:圖一經(jīng)過測(cè)量實(shí)際輸出電壓為:+5.12V -5.06V +12.67V -12.02V2分檔設(shè)計(jì)由于直接對(duì)信號(hào)測(cè)量時(shí),對(duì)小信號(hào)的測(cè)量產(chǎn)生很大的誤差,為了更有效的利

6、用單片機(jī)的資源,故要對(duì)待測(cè)信號(hào)進(jìn)行分檔處理,但在實(shí)際運(yùn)行中,由于進(jìn)入放大器之前存在大量電阻產(chǎn)生了很多的噪聲干擾,使輸出波形嚴(yán)重失真,不能有效的利用,故我們舍棄了該部分的電路。 3整流電路的設(shè)計(jì)我們使用整流二極管5819實(shí)現(xiàn)半波整流,但通過此電路輸出波形會(huì)出現(xiàn)一個(gè)負(fù)電壓,因此在此基礎(chǔ)上,我們?cè)诙O管后加了一個(gè)上拉電阻,實(shí)現(xiàn)最大程度的消除輸入波形的負(fù)電壓,使其在單片機(jī)STC12C5A60S2內(nèi)部AD的可接收信號(hào)范圍內(nèi)(0-5V)。輸入信號(hào)經(jīng)過整流后進(jìn)入AD,由AD輸出10位數(shù)字信號(hào),再有單片機(jī)進(jìn)行處理,得出信號(hào)的有效值。電路如圖二所示:圖二在實(shí)際的測(cè)試中,證明該方案可行,能夠?qū)崿F(xiàn)對(duì)信號(hào)的半波整流處

7、理。4正弦波轉(zhuǎn)方波電路設(shè)計(jì)在該電路的設(shè)計(jì)中,我們一開始采用555芯片把正弦波轉(zhuǎn)換為方波,但在實(shí)際的測(cè)試中發(fā)現(xiàn)555只能對(duì)高于6V的信號(hào)才能使正弦波轉(zhuǎn)換為放波,與我們實(shí)習(xí)要求不符合,故舍棄了該方案。在老師的指導(dǎo)下,我們采用了滯回比較器來產(chǎn)生方波。本方案檢測(cè)輸入信號(hào)頻率的核心電路,信號(hào)通過由三個(gè)運(yùn)放LM324組成的運(yùn)放電路后放大100倍,然后輸入施密特觸發(fā)器使其波形變?yōu)楦叩碗娖?,將此波形輸入到單片機(jī)主控芯片,利用單片機(jī)內(nèi)部的計(jì)數(shù)器和定時(shí)器完成對(duì)頻率的測(cè)量。大部分采用運(yùn)放LM324構(gòu)成放大100倍電路,位于圖下方由5V電源供電的運(yùn)放可以產(chǎn)生一個(gè)2.5V的直流電壓,將此2.5V的直流電壓輸入到第一級(jí)運(yùn)

8、放后,會(huì)使輸入的交流信號(hào)上偏2.5V,變?yōu)?-5V,再經(jīng)過100000pF的電容C3濾掉被放大的噪聲以及2.5V直流后,變?yōu)?2.5+2.5的交流信號(hào),之后進(jìn)入二級(jí)放大;如圖所示第二級(jí)運(yùn)放在加入+2.5V直流電壓后輸出為05V的交流信號(hào),至此外加交流信號(hào)已被放大100倍;在外加交流信號(hào)被放大100倍之后進(jìn)入施密特觸發(fā)器CD40106,該觸發(fā)器在常溫5V供電下門限電壓 =1.4V ,輸出高電平 ,低電平 , 此部分電路輸出即為這個(gè)高低電平。電路如圖三所示:圖三在實(shí)際的檢測(cè)中發(fā)現(xiàn)放大器并不能將信號(hào)放大100倍,故幅值較小的信號(hào)不能正常顯示頻率,只要當(dāng)信號(hào)的峰峰值大于1.5V時(shí)才能使單片機(jī)正常顯示信

9、號(hào)的頻率。5.單片機(jī)電路采用STC12C5A60S2單片機(jī),作為整個(gè)系統(tǒng)的控制器,控制各個(gè)模塊協(xié)調(diào)工作。運(yùn)用其內(nèi)部集成的一個(gè)AD作為數(shù)模轉(zhuǎn)換器。如圖四所示 圖四6.系統(tǒng)整體電路圖如圖五所示圖五四軟件設(shè)計(jì)AD流程圖如圖六 圖七所示采樣是否是大于最大值有效值A(chǔ)D采樣輸出有效值將采樣值存入有效值中開始整流后的信號(hào)圖六開始定時(shí)器1定時(shí)0.05us,定時(shí)20次計(jì)時(shí)器0下降沿計(jì)數(shù)CD40106整形后的脈沖定時(shí)已完成輸出計(jì)數(shù)器的計(jì)數(shù)圖七1.正弦波有效值的測(cè)量方法工頻正弦電壓信號(hào)頻率f和初相位角已知,且0,現(xiàn)以t=0時(shí)可作為基準(zhǔn)時(shí)間,并在t=0時(shí)刻開始進(jìn)行等間隔采樣,共得到正弦波u(t)的N個(gè)測(cè)量值(采樣數(shù)據(jù)

10、)u(0),u(1),u(N-1),希望利用這N個(gè)測(cè)量值來計(jì)算正弦波的幅值Um(有效值U)。設(shè)采樣周期為TS,如果不存在噪音,且測(cè)量無偏差,則有我們可以設(shè)法利用測(cè)量值求解出正弦波參數(shù)。實(shí)際上,我們的測(cè)量存在誤差,同時(shí)信號(hào)存在噪音,因此,對(duì)每一個(gè)測(cè)量信號(hào)u(k),它與對(duì)應(yīng)時(shí)刻t=k·TS的正弦波的值存在一個(gè)誤差,其中k=0,1,N-1。定義為了利用N個(gè)測(cè)量值來盡可能準(zhǔn)確的計(jì)算正弦波幅值Um,我們定義指標(biāo)函數(shù)為:它是頻率f,幅值Um,初相位角的函數(shù)。我們的目的就是求頻率f,幅值Um,初相位角使得目標(biāo)函數(shù)最小。為此,令可以得到正弦波的幅值為了與正弦波的真正幅值Um表示上的區(qū)別,用UmC表示

11、利用N個(gè)采樣數(shù)據(jù)獲得的正弦波幅值計(jì)算值,既對(duì)于f50Hz(以前面的測(cè)量值為準(zhǔn),這里僅為舉例),選擇采樣周期TS 20/200=0.1ms=100us,既每個(gè)周期采樣200點(diǎn)(每半個(gè)周波100次采樣),是確定的(可以預(yù)先求出,存于sin表中),sin2(2·f·k·TS)同樣作為常數(shù)表,而且本身是一個(gè)常數(shù),因此公式(2)變?yōu)楫?dāng)采樣周期很小時(shí),數(shù)值積分系數(shù)C可以用來替代(可以認(rèn)為C是一個(gè)周期類的數(shù)值積分,當(dāng)采樣周期很小時(shí),就用積分項(xiàng)來表示)。就可利用N個(gè)等間隔測(cè)量值計(jì)算出正弦信號(hào)的峰值Um。正弦波的有效值與峰值的關(guān)系半波絕對(duì)值電路:在待測(cè)交流信號(hào)的正半波,輸出待測(cè)信號(hào)

12、送AD變換電路,在待測(cè)信號(hào)的負(fù)半波,輸出0.正半波時(shí),Px.y=0,單片機(jī)利用該信號(hào)識(shí)別是正半波信號(hào),進(jìn)行AD轉(zhuǎn)換,獲得N個(gè)采樣值。在Px.y=1時(shí),單片機(jī)暫停AD變換,利用正半波獲得的N個(gè)檢測(cè)信號(hào)計(jì)算正弦波的有效值U,頻率f。2.數(shù)據(jù)測(cè)量幅值的測(cè)量輸入幅值vpp(v)54.543532521.51單片機(jī)讀數(shù)(v)3.4863.1432.80421522.092174214051.0450.695誤差(%)-1.4-1.3-0.81.3-1.3-1.40.6-1.4-1.7表1頻率的測(cè)量被測(cè)信號(hào)(Hz)1002001K2K5K10K20K30K40K讀值(Hz)9919799920105032

13、10040200563002540034誤差(%)11.50.10.50.60.40.280.0830.08表23.數(shù)據(jù)分析由上圖可知在輸入信號(hào)vpp在0.7v到5v的區(qū)域內(nèi),實(shí)驗(yàn)作品的誤差較小能夠?qū)崿F(xiàn)有效值的測(cè)量,當(dāng)頻率在100Hz到40KHz時(shí),在誤差允許范圍內(nèi),作品基本能完成對(duì)該信號(hào)的準(zhǔn)確測(cè)量。4.軟件部分代碼:#include <reg52.h> #include <intrins.h>#define FOSC 12000000L#define BAUD 9600typedef unsigned char BYTE;typedef unsigned int WO

14、RD;sbit LCM_E=P25;/定義接口sbit LCM_RW=P26;sbit LCM_RS=P27;sfr ADC_CONTR = 0xBC; sfr ADC_RES = 0xBD;sfr ADC_LOW2 = 0xBE;sfr P1ASF = 0x9D;sfr AUXR = 0x8e; #define ADC_POWER 0x80#define ADC_FLAG 0x10#define ADC_START 0x08#define ADC_SPEEDLL 0x00#define ADC_SPEEDL 0x20#define ADC_SPEEDH 0x40#define ADC_SPE

15、EDHH 0x60#define LCM_Data P0/數(shù)據(jù)接口void InitUart();void SendData(BYTE dat);void Delay(unsigned int n);void IO_ADinit() ;void ADC_Power_On() ;void get_ad_result() ;void ADCONVERT() ;void WriteDataLCM(BYTE WDLCM);void WriteCommandLCM(BYTE WCLCM,BuysC);BYTE ReadDataLCM(void);BYTE ReadStatusLCM(void);unsi

16、gned int GetADCResult(BYTE ch);void LCMInit(void);void DisplayOneChar(BYTE X, BYTE Y, BYTE DData);void DisplayListChar(BYTE X, BYTE Y, BYTE code *DData);void Delay5Ms(void);void Delay400Ms(void);void Disp_number(unsigned int num,BYTE n);void ShowResult(BYTE ch);unsigned int GetADCResult(BYTE a);unsi

17、gned int data_max = 0;unsigned long data_max1,count =0;unsigned int data_change = 150;/0.7Vunsigned char code VP4="Amp:",Freq5="Freq:"unsigned int Counter = 0;unsigned int data_last = 0;BYTE ch = 0;unsigned int Frequency = 0;unsigned int nn =0,flag = 0,flag1 = 0,nn1=0; unsigned i

18、nt PrintFre5 ; unsigned int Print4; unsigned int number4;unsigned int D;void main()unsigned int n=0;Delay400Ms();/啟動(dòng)等待,等LCM講入工作狀態(tài)LCMInit();/LCM初始化Delay5Ms();/延時(shí)片刻(可不要)ET1 = 1;EA=1;InitUart();TMOD = 0x15;/均為16位計(jì)數(shù)器 TH0 = 0x00;TL0 = 0x00;TH1 = 0x3C;TL1 = 0xAF; TCON = 0x50;/T1,T0均工作,t1做定時(shí)器,t0做計(jì)數(shù)器; while

19、(1) ADCONVERT(); n+; if(n>10000)data_max=0;n=0;void To_interrupt(void)interrupt 3 using 1int i ,j;unsigned int Change1,Print4; unsigned long int Change2; TH1 = 0x3C; TL1 = 0xAF;Counter = Counter+;if(Counter = 20) Frequency = (TH0<<8)+TL0;/讀取此時(shí)計(jì)數(shù)器0的讀數(shù) if(Frequency>=2000)Change1 = (Frequen

20、cy/100)*92; else if (Frequency>=200)Change1 = (Frequency/10)*92)/10; else Change1 = (Frequency*97)/100; for( i=0;i<5;i+)PrintFrei = Change1 % 10;Change1 = Change1 / 10; for(i=4;i>=0;i-) if(i>0)DisplayOneChar(4-i,0,PrintFrei+48); elseDisplayOneChar(4-i,0,PrintFrei+48); DisplayListChar(5-i

21、,0,"Hz"); Change2 = data_max*50; Change2 = Change2/10/1.414;for(j=0;j<=3;j+)Printj = Change2 % 10;Change2 = Change2 / 10; for(j=3;j>=0;j-) if(j>0) DisplayOneChar(10-j,0,Printj+48); else DisplayOneChar(10-j,0,Printj+48); DisplayListChar(11-j,0,"mV"); TH1 = 0x3C; TL1 = 0xA

22、F; TH0 = 0xFF; TL0 = 0xFC; Counter = 0; void IO_ADinit() ADC_CONTR=0xe0; /設(shè)置P1.0為輸入AD轉(zhuǎn)換口 _nop_(); /ADC_CONTR需要四個(gè)指令延時(shí) _nop_(); _nop_(); _nop_(); void ADC_Power_On() ADC_CONTR|=0x80; _nop_(); _nop_(); _nop_(); _nop_(); void get_ad_result() unsigned int q=0,ad_average_result; ADC_RES=0; ADC_LOW2=0; ADC

23、_CONTR|=0x08; while(!(ADC_FLAG&ADC_CONTR) ; ADC_CONTR&=0xE7; ad_average_result=(ADC_RES<<2)+ADC_LOW2; if(data_max<ad_average_result)data_max=ad_average_result; void ADCONVERT() ADC_Power_On(); IO_ADinit(); get_ad_result(); void InitUART()SCON = 0x5a;PCON|= 0x80;void SendData(BYTE da

24、t) while(!TI); TI = 0;SBUF = dat; void Delay(unsigned int i)unsigned char j;for(i; i > 0; i-)for(j = 200; j > 0; j-) ;void WriteDataLCM(BYTE WDLCM)ReadStatusLCM(); /檢測(cè)忙LCM_Data = WDLCM;LCM_E = 0;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; /若晶振速度太高可以在這后加小的延時(shí)LCM_E = 1;LCM_E = 0;void WriteCommandLCM(BYTE WC

25、LCM,BuysC) /BuysC為0時(shí)忽略忙檢測(cè)if (BuysC) ReadStatusLCM(); /根據(jù)需要檢測(cè)忙LCM_Data = WCLCM;LCM_E = 0;LCM_RS = 0;LCM_RW = 0; LCM_E = 1; LCM_E = 0;BYTE ReadDataLCM(void)LCM_E = 0;LCM_RS = 1; LCM_RW = 1;LCM_E = 1;LCM_E = 0;return(LCM_Data);BYTE ReadStatusLCM(void)LCM_Data = 0xFF;LCM_E = 0; LCM_RS = 0;LCM_RW = 1;LCM

26、_E = 1;LCM_E = 0;while (LCM_Data & 0x80) /檢測(cè)忙信號(hào) LCM_E=0; LCM_E=1; return(LCM_Data);void LCMInit(void) /LCM初始化LCM_Data = 0;WriteCommandLCM(0x38,0); /三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,1); /顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)Write

27、CommandLCM(0x08,1); /關(guān)閉顯示W(wǎng)riteCommandLCM(0x01,1); /顯示清屏WriteCommandLCM(0x06,1); / 顯示光標(biāo)移動(dòng)設(shè)置WriteCommandLCM(0x0C,1); / 顯示開及光標(biāo)設(shè)置void DisplayOneChar(BYTE X, BYTE Y, BYTE DData)Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1if (Y) X |= 0x40; /當(dāng)要顯示第二行時(shí)地址碼 0x40; X += 0x80; / 算出指令碼WriteCommandLCM(X, 0); /這里不檢測(cè)

28、忙信號(hào),發(fā)送地址碼WriteDataLCM(DData);void DisplayListChar(BYTE X, BYTE Y, BYTE code *DData)BYTE ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1while (DDataListLength) /若到達(dá)字串尾則退出 if (X <= 0xF) /X坐標(biāo)應(yīng)小于0xF DisplayOneChar(X, Y, DDataListLength); /顯示單個(gè)字符 ListLength+ ; X+ ; void Disp_number(unsigned int num,BYTE n) BYTE a; /個(gè)位 BYTE b; /十位BYTE c; /百位BYTE d; /千位/ BYTE e; /萬位switch(n)case 1:WriteDataLCM(num);break;

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論