




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
信號采集與分析系統(tǒng)實驗一、 實驗目的本實驗目的是利用實驗箱構建一個信號采集和分析系統(tǒng)。二、 實驗內(nèi)容三、 實驗步驟1、鍵盤及LED的設計與制作 編寫單片機程序,控制按鍵,控制燈的亮滅, 測試所有能控制的按鍵和LED 2、液晶屏顯示的設計與制作 測試在液晶屏上顯示波形和數(shù)據(jù) 3、以信號發(fā)生器輸入單頻正弦波,以16個 指示燈代表16個單頻點,頻點在200Hz 10kHz任選,信號發(fā)生器每次產(chǎn)生一種頻點 正弦波,AD采集,對應頻點的指示燈會亮;4、把指示燈顯示頻點改成用液晶顯示 5、液晶屏同時顯示頻譜和時域波形四、實驗原理1、AD采樣模塊在這個模塊中,每過一段時間,AD采樣器采集一個數(shù)據(jù)存入數(shù)組中,并將存儲的二進制數(shù)轉(zhuǎn)換成對應的電壓值,通過代碼:collect0t.real = ADC12MEM0*3.0 / 0x03ff;實現(xiàn)。采集滿N個值之后,令標志變量flag=1,表示一組數(shù)據(jù)采集完畢,進入下一模塊,即FFT變換。我們將信號發(fā)生器輸出的模擬電壓范圍設定為0V2V ,這是因為:若電壓值太大,會導致結果波形失真;若出現(xiàn)負電壓,則因為AD模塊不支持負電壓的采集,結果可能會出現(xiàn)錯誤。2、FFT處理模塊該模塊將采集進來的數(shù)據(jù)進行FFT變換,變換后的實部即為頻譜,用于LCD的頻譜繪制。繪制時,以各頻點的幅頻值與最大幅頻值的相對大小進行繪制;變換后模值最大的頻點對應的頻率即為待測頻率,用fre表示,便于屏幕及LED頻率顯示;根據(jù)求得的fre,可求得若干函數(shù)值,用于LCD的時域波形繪制。3、 LCD液晶屏顯示模塊該模塊用于顯示時域波形、頻譜、學號、所測頻率等內(nèi)容。關鍵語句:清屏:etft_AreaSet(0,0,239,319,0);/清屏顯示:sprintf(buffer, Frequency: %5d Hz,fre);etft_DisplayString(buffer, 0, 32, 0xFFFF, 0x0000);/顯示頻率同時,在模塊中加入了延時語句,使得波形可以保持一定的時間。時間到后,LCD會進行刷新,重新顯示波形和數(shù)據(jù)。4、LED燈顯示模塊LED1作為采樣指示燈,ADC模塊每采一次樣閃爍一次,由于采樣頻率極高,但中斷調(diào)用間隔較長,實際顯示為每次進入ADC采樣中斷LED1閃爍一下。使用LED2、LED3、LED4、LED5顯示頻率,標號分別為5.7、4.7、4.6、4.5。受LED燈數(shù)目的限制,當用LED顯示頻率時(二進制表示),只能精確到1kHz。如當1500=fre2500時,用2kHz表示,燈顯示為0010;當5500=fre6500時,用6kHz表示,燈顯示為0110,其余類似。通過以上模塊,可以實現(xiàn)以下功能:AD模塊采集N個數(shù)據(jù)后,F(xiàn)FT模塊對數(shù)據(jù)進行處理,F(xiàn)FT變換后,實部為頻譜,用于LCD的頻譜繪制;模值最大的頻點為所求頻率,在LED和LCD上顯示;再求得一些采樣點的函數(shù)值,在LCD上繪制時域波形。最終,頻率顯示在LED燈和LCD上,波形和頻譜顯示在LCD上。圖像保持一段時間后,LCD會進行刷新,重新顯示波形和數(shù)據(jù)。附錄:1、 鍵盤及LED的設計與制作#include #include #include #include dr_i2c.h#include dr_tft.h#define TEMP_ADDR 0x2A#define TEMP_LOCAL 0x00#define TEMP_REMOTE 0x01#define TEMP_CONFIG1 0x09#define TEMP_CONFIG2 0x0A#define TEMP_NCORR 0x21#define BATT_ADDR 0x55#define BATT_VOLTAGE 0x04#define BATT_CURRENT 0x10#define BATT_SOC 0x1C#define BATT_CAPA 0x0C#define BATT_FLAG 0x06int TEMP_LOCAL_INDEX;int TEMP_REMOTE_INDEX;int BATT_VOLTAGE_INDEX;int BATT_CURRENT_INDEX;int BATT_SOC_INDEX;int BATT_CAPA_INDEX;int BATT_FLAG_INDEX;typedef struct const volatile uint8_t* PxIN; volatile uint8_t* PxOUT; volatile uint8_t* PxDIR; volatile uint8_t* PxREN; volatile uint8_t* PxSEL; GPIO_TypeDef;const GPIO_TypeDef GPIO4 = &P4IN, &P4OUT, &P4DIR, &P4REN, &P4SEL;const GPIO_TypeDef GPIO5 = &P5IN, &P5OUT, &P5DIR, &P5REN, &P5SEL;const GPIO_TypeDef GPIO8 = &P8IN, &P8OUT, &P8DIR, &P8REN, &P8SEL;const GPIO_TypeDef* LED_GPIO5 = &GPIO4, &GPIO4, &GPIO4, &GPIO5, &GPIO8;const uint8_t LED_PORT5 = BIT5, BIT6, BIT7, BIT7, BIT0;void initClock() while(BAKCTL & LOCKIO) / Unlock XT1 pins for operation BAKCTL &= (LOCKIO); UCSCTL6 &= XT1OFF; /啟動XT1 P7SEL |= BIT2 + BIT3; /XT2引腳功能選擇 UCSCTL6 &= XT2OFF; /啟動XT2 while (SFRIFG1 & OFIFG) /等待XT1、XT2與DCO穩(wěn)定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL4 = SELA_XT1CLK + SELS_XT2CLK + SELM_XT2CLK; /避免DCO調(diào)整中跑飛 UCSCTL1 = DCORSEL_5; /6000kHz23.7MHz UCSCTL2 = 20000000 / (4000000 / 16); /XT2頻率較高,分頻后作為基準可獲得更高的精度 UCSCTL3 = SELREF_XT2CLK + FLLREFDIV_16; /XT2進行16分頻后作為基準 while (SFRIFG1 & OFIFG) /等待XT1、XT2與DCO穩(wěn)定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL5 = DIVA_1 + DIVS_1 + DIVM_1; /設定幾個CLK的分頻 UCSCTL4 = SELA_XT1CLK + SELS_DCOCLK + SELM_DCOCLK; /設定幾個CLK的時鐘源int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; initClock(); initI2C(); initTFT(); etft_AreaSet(0,0,319,239,0); int i; for(i=0;iPxDIR |= LED_PORTi; /設置各LED燈所在端口為輸出方向 P4REN |= 0x1F; /使能按鍵端口上的上下拉電阻 P4OUT |= 0x1F; /上拉狀態(tài) uint8_t last_btn = 0x1F, cur_btn, temp; while(1) int temp1, temp2; char buffer41; cur_btn = P4IN & 0x1F; temp = (cur_btn last_btn) & last_btn; /找出剛向下跳變的按鍵 last_btn = cur_btn; int i; for(i=0;i5;+i) if(temp & (1 PxOUT = LED_PORTi; /翻轉(zhuǎn)對應的LED _delay_cycles(3276); /延時大約100ms temp1=7-i; temp2=5-i; sprintf(buffer, Switch %d LED %d, temp1, temp2); etft_DisplayString(buffer, 0, 0, 0xFFFF, 0x0000); sprintf(buffer, temp %d, temp); etft_DisplayString(buffer, 0, 16, 0xFFFF, 0x0000); _delay_cycles(2000000); 2、信號采集與顯示#include #include #include #include math.h#include dr_tft.h#define N 256 /FFT點數(shù)#define PI 3olatile long IntDegF;volatile long IntDegC;void initClock() while(BAKCTL & LOCKIO) / Unlock XT1 pins for operation BAKCTL &= (LOCKIO); UCSCTL6 &= XT1OFF; /啟動XT1 P7SEL |= BIT2 + BIT3; /XT2引腳功能選擇 UCSCTL6 &= XT2OFF; /啟動XT2 while (SFRIFG1 & OFIFG) /等待XT1、XT2與DCO穩(wěn)定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL4 = SELA_XT1CLK + SELS_XT2CLK + SELM_XT2CLK; /避免DCO調(diào)整中跑飛 UCSCTL1 = DCORSEL_5; /6000kHz23.7MHz UCSCTL2 = 20000000 / (4000000 / 16); /XT2頻率較高,分頻后作為基準可獲得更高的精度 UCSCTL3 = SELREF_XT2CLK + FLLREFDIV_16; /XT2進行16分頻后作為基準 while (SFRIFG1 & OFIFG) /等待XT1、XT2與DCO穩(wěn)定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL5 = DIVA_1 + DIVS_1 + DIVM_1; /設定幾個CLK的分頻 UCSCTL4 = SELA_XT1CLK + SELS_DCOCLK + SELM_DCOCLK; /設定幾個CLK的時鐘源struct compxfloat real,imag;struct compx collectN,collect0N; /AD采集到的值unsigned long fs = 28500; /采樣頻率int i,j,fre;float temp_frc,z;unsigned int t=0,k=0,flag=0,n=0,c=0;/*函數(shù)原型:struct compx EE(struct compx b1,struct compx b2)函數(shù)功能:對兩個復數(shù)進行乘法運算輸入?yún)?shù):兩個以聯(lián)合體定義的復數(shù)a,b輸出參數(shù):a和b的乘積,以聯(lián)合體的形式輸出*/struct compx EE(struct compx a,struct compx b)struct compx c;c.real=a.real*b.real-a.imag*b.imag;c.imag=a.real*b.imag+a.imag*b.real;return(c);/*函數(shù)原型:void FFT(struct compx *xin)函數(shù)功能:對輸入的復數(shù)組進行快速傅里葉變換(FFT)輸入?yún)?shù):*xin復數(shù)結構體組的首地址指針,struct型*/void FFT(struct compx *xin) int f,m,nv2,nm1,i,k,l,j=0; struct compx u,w,t;int le,lei,ip; /FFT運算核,使用蝶形運算完成FFT運算nv2=N/2; /變址運算,即把自然順序變成倒位序,采用雷德算法 nm1=N-1; for(i=0;inm1;i+) if(ij) /如果ij,即進行變址 t=xinj; xinj=xini; xini=t; k=nv2; /求j的下一個倒位序 while(k=j) /如果k=j,表示j的最高位為1 j=j-k; /把最高位變成0 k=k/2; /k/2,比較次高位,依次類推,逐個比較,直到某個位為0 j=j+k; /把0改為1f=N; for(l=1;(f=f/2)!=1;l+) /計算l的值,即計算蝶形級數(shù) ; for(m=1;m=l;m+) / 控制蝶形結級數(shù) /m表示第m級蝶形,l為蝶形級總數(shù)l=log(2)N le=2(m-1); /le蝶形結距離,即第m級蝶形的蝶形結相距l(xiāng)e點 lei=le/2; /同一蝶形結中參加運算的兩點的距離 u.real=1.0; /u為蝶形結運算系數(shù),初始值為1 u.imag=0.0; w.real=cos(PI/lei); /w為系數(shù)商,即當前系數(shù)與前一個系數(shù)的商 w.imag=-sin(PI/lei); for(j=0;j=lei-1;j+) /控制計算不同種蝶形結,即計算系數(shù)不同的蝶形結 for(i=j;i=N-1;i=i+le) /控制同一蝶形結運算,即計算系數(shù)相同蝶形結 ip=i+lei; /i,ip分別表示參加蝶形運算的兩個節(jié)點 t=EE(xinip,u); /蝶形運算,詳見公式 xinip.real=xini.real-t.real; xinip.imag=xini.imag-t.imag; xini.real=xini.real+t.real; xini.imag=xini.imag+t.imag; u=EE(u,w); /改變系數(shù),進行下一個蝶形運算 void main( void )float yN;/ Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; initClock(); initTFT(); REFCTL0 &= REFMSTR; / Reset REFMSTR to hand over control to / ADC12_A ref control registers ADC12CTL0 = 0x0050 ; / Internal ref = 1.5V ADC12CTL1 = ADC12SHP; / enable sample timer ADC12MCTL0 = ADC12INCH_13; / ADC i/p ch A10 = temp sense i/p ADC12IE = 0x001; / ADC_IFG upon conv result-ADCMEMO _delay_cycles(75); / 75us delay to allow Ref to settle ADC12CTL0 |= ADC12ENC; P8DIR |= BIT0; P5DIR |= BIT7; P4DIR |= BIT5+BIT6+BIT7; char buffer81; etft_AreaSet(0,0,239,319,0);/清屏 sprintf(buffer, Name:Zhao Zhenqi); etft_DisplayString(buffer, 0, 0, 0xFFFF, 0x0000); sprintf(buffer, Student Number:22920132203719); etft_DisplayString(buffer, 0, 16, 0xFFFF, 0x0000); while(1) ADC12CTL0 |= ADC12SC; / Sampling and conversion start _bis_SR_register(LPM4_bits + GIE); / LPM0 with interrupts enabled _no_operation(); if(flag=1) /FFT處理模塊 FFT(collect); for(i=0;iN;i+) /求變換后結果的模值,存入復數(shù)的實部部分 collecti.real=sqrt(collecti.real*collecti.real+collecti.imag*collecti.imag); temp_frc=collect1.real; fre=1; for(i=2;itemp_frc)/求出最大幅值對應的頻點 temp_frc=collecti.real; fre=i; fre=fre*fs/N;/所測頻率 for(i=0;i80;i+) yi=sin(float)i*PI*fre/2/fs); /LCD液晶屏顯示模塊etft_AreaSet(32,0,239,319,0);/清屏 sprintf(buffer, Frequency: %5d Hz,fre); etft_DisplayString(buffer, 0, 32, 0xFFFF, 0x0000); sprintf(buffer,.); for(i=0;i80;i+) etft_DisplayString(buffer,(i)*4,(int)(yi+1)*10+90),0xFFFF,0x0000);/繪制波形 sprintf(buffer,*); for(j=1;j=500&fre=1500&fre=2500&fre=3500&fre=4500&fre=5500&fre=6
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空航天復合材料 課件知識點3 聚合物基復合材料制備工藝
- 社會穩(wěn)定測試題及答案
- 儲備獸醫(yī)面試題及答案
- 折花技能培訓
- 四肢骨折護理常規(guī)
- 縱膈腫瘤切除術診療規(guī)范
- 2025年中國噴射式干手機行業(yè)市場全景分析及前景機遇研判報告
- 2025年中國尼龍釣魚線行業(yè)市場全景分析及前景機遇研判報告
- 美容店入職培訓
- 磚瓦行業(yè)安全培訓
- 2025年醫(yī)聯(lián)體合作協(xié)議標準范本
- 2025年中考英語作文預測及滿分范文11篇
- 員工接觸勞務合同范例
- 2025屆江蘇省蘇州地區(qū)卷三年級數(shù)學第二學期期末質(zhì)量檢測模擬試題含解析
- 宣傳片視頻拍攝投標方案(技術方案)
- 德勤-問題解決策略與實踐-客戶服務培訓手冊課件
- 2025年山東產(chǎn)權交易集團有限公司招聘筆試參考題庫含答案解析
- 《浙江市政預算定額(2018版)》(第七冊-第九冊)
- DB32-T 4878-2024 居住區(qū)供配電設施建設標準
- 2025年河北交通投資集團公司招聘筆試參考題庫含答案解析
- 藥品配送包裝及運輸方案
評論
0/150
提交評論