版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、信號采集與分析系統(tǒng)實驗一、 實驗?zāi)康谋緦嶒災(zāi)康氖抢脤嶒炏錁?gòu)建一個信號采集和分析系統(tǒng)。二、 實驗內(nèi)容三、 實驗步驟1、鍵盤及LED的設(shè)計與制作 編寫單片機程序,控制按鍵,控制燈的亮滅, 測試所有能控制的按鍵和LED 2、液晶屏顯示的設(shè)計與制作 測試在液晶屏上顯示波形和數(shù)據(jù) 3、以信號發(fā)生器輸入單頻正弦波,以16個 指示燈代表16個單頻點,頻點在200Hz 10kHz任選,信號發(fā)生器每次產(chǎn)生一種頻點 正弦波,AD采集,對應(yīng)頻點的指示燈會亮;4、把指示燈顯示頻點改成用液晶顯示 5、液晶屏同時顯示頻譜和時域波形四、實驗原理1、AD采樣模塊在這個模塊中,每過一段時間,AD采樣器采集一個數(shù)據(jù)存入數(shù)組中,
2、并將存儲的二進制數(shù)轉(zhuǎn)換成對應(yīng)的電壓值,通過代碼:collect0t.real = ADC12MEM0*3.0 / 0x03ff;實現(xiàn)。采集滿N個值之后,令標志變量flag=1,表示一組數(shù)據(jù)采集完畢,進入下一模塊,即FFT變換。我們將信號發(fā)生器輸出的模擬電壓范圍設(shè)定為0V2V ,這是因為:若電壓值太大,會導(dǎo)致結(jié)果波形失真;若出現(xiàn)負電壓,則因為AD模塊不支持負電壓的采集,結(jié)果可能會出現(xiàn)錯誤。2、FFT處理模塊該模塊將采集進來的數(shù)據(jù)進行FFT變換,變換后的實部即為頻譜,用于LCD的頻譜繪制。繪制時,以各頻點的幅頻值與最大幅頻值的相對大小進行繪制;變換后模值最大的頻點對應(yīng)的頻率即為待測頻率,用fre表
3、示,便于屏幕及LED頻率顯示;根據(jù)求得的fre,可求得若干函數(shù)值,用于LCD的時域波形繪制。3、 LCD液晶屏顯示模塊該模塊用于顯示時域波形、頻譜、學(xué)號、所測頻率等內(nèi)容。關(guān)鍵語句:清屏: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
4、作為采樣指示燈,ADC模塊每采一次樣閃爍一次,由于采樣頻率極高,但中斷調(diào)用間隔較長,實際顯示為每次進入ADC采樣中斷LED1閃爍一下。使用LED2、LED3、LED4、LED5顯示頻率,標號分別為5.7、4.7、4.6、4.5。受LED燈數(shù)目的限制,當(dāng)用LED顯示頻率時(二進制表示),只能精確到1kHz。如當(dāng)1500<=fre<2500時,用2kHz表示,燈顯示為0010;當(dāng)5500<=fre<6500時,用6kHz表示,燈顯示為0110,其余類似。通過以上模塊,可以實現(xiàn)以下功能:AD模塊采集N個數(shù)據(jù)后,F(xiàn)FT模塊對數(shù)據(jù)進行處理,F(xiàn)FT變換后,實部為頻譜,用于LCD的頻
5、譜繪制;模值最大的頻點為所求頻率,在LED和LCD上顯示;再求得一些采樣點的函數(shù)值,在LCD上繪制時域波形。最終,頻率顯示在LED燈和LCD上,波形和頻譜顯示在LCD上。圖像保持一段時間后,LCD會進行刷新,重新顯示波形和數(shù)據(jù)。附錄:1、 鍵盤及LED的設(shè)計與制作#include <msp430.h>#include <stdint.h>#include <stdio.h>#include "dr_i2c.h"#include "dr_tft.h"#define TEMP_ADDR 0x2A#define TEMP_L
6、OCAL 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_VOLTA
7、GE_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, &
8、amp;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
9、 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 &
10、;= (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) /
11、等待XT1、XT2與DCO穩(wěn)定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL5 = DIVA_1 + DIVS_1 + DIVM_1; /設(shè)定幾個CLK的分頻 UCSCTL4 = SELA_XT1CLK + SELS_DCOCLK + SELM_DCOCLK; /設(shè)定幾個CLK的時鐘源int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; initClock(); init
12、I2C(); initTFT(); etft_AreaSet(0,0,319,239,0); int i; for(i=0;i<5;+i) *LED_GPIOi->PxDIR |= LED_PORTi; /設(shè)置各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_bt
13、n last_btn) & last_btn; /找出剛向下跳變的按鍵 last_btn = cur_btn; int i; for(i=0;i<5;+i) if(temp & (1 << i) *LED_GPIOi->PxOUT = LED_PORTi; /翻轉(zhuǎn)對應(yīng)的LED _delay_cycles(3276); /延時大約100ms temp1=7-i; temp2=5-i; sprintf(buffer, "Switch %d LED %d", temp1, temp2); etft_DisplayString(buffer,
14、 0, 0, 0xFFFF, 0x0000); sprintf(buffer, "temp %d", temp); etft_DisplayString(buffer, 0, 16, 0xFFFF, 0x0000); _delay_cycles(2000000); 2、信號采集與顯示#include <msp430f6638.h>#include <stdint.h>#include <stdio.h>#include "math.h"#include "dr_tft.h"#define N 256
15、 /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) /等待X
16、T1、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分頻后作為基準 whil
17、e (SFRIFG1 & OFIFG) /等待XT1、XT2與DCO穩(wěn)定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL5 = DIVA_1 + DIVS_1 + DIVM_1; /設(shè)定幾個CLK的分頻 UCSCTL4 = SELA_XT1CLK + SELS_DCOCLK + SELM_DCOCLK; /設(shè)定幾個CLK的時鐘源struct compxfloat real,imag;struct compx collectN,collect0N; /AD采集到的值unsigned long
18、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ù)功能:對兩個復(fù)數(shù)進行乘法運算輸入?yún)?shù):兩個以聯(lián)合體定義的復(fù)數(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.
19、real*b.imag+a.imag*b.real;return(c);/*函數(shù)原型:void FFT(struct compx *xin)函數(shù)功能:對輸入的復(fù)數(shù)組進行快速傅里葉變換(FFT)輸入?yún)?shù):*xin復(fù)數(shù)結(jié)構(gòu)體組的首地址指針,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;i<nm1;i+)
20、 if(i<j) /如果i<j,即進行變址 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+) / 控制蝶形結(jié)級數(shù) /m表示第m級蝶形,l為蝶形級總數(shù)l=log(2)N le=2<<(m-1); /le蝶形
21、結(jié)距離,即第m級蝶形的蝶形結(jié)相距l(xiāng)e點 lei=le/2; /同一蝶形結(jié)中參加運算的兩點的距離 u.real=1.0; /u為蝶形結(jié)運算系數(shù),初始值為1 u.imag=0.0; w.real=cos(PI/lei); /w為系數(shù)商,即當(dāng)前系數(shù)與前一個系數(shù)的商 w.imag=-sin(PI/lei); for(j=0;j<=lei-1;j+) /控制計算不同種蝶形結(jié),即計算系數(shù)不同的蝶形結(jié) for(i=j;i<=N-1;i=i+le) /控制同一蝶形結(jié)運算,即計算系數(shù)相同蝶形結(jié) ip=i+lei; /i,ip分別表示參加蝶形運算的兩個節(jié)點 t=EE(xinip,u); /蝶形運算,詳
22、見公式 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
23、 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
24、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")
25、; 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;i<N;i+) /求變換后結(jié)果的模值,存入復(fù)數(shù)的實部部分 collecti.real=sqrt(collecti
26、.real*collecti.real+collecti.imag*collecti.imag); temp_frc=collect1.real; fre=1; for(i=2;i<N/2;i+) if(collecti.real>temp_frc)/求出最大幅值對應(yīng)的頻點 temp_frc=collecti.real; fre=i; fre=fre*fs/N;/所測頻率 for(i=0;i<80;i+) yi=sin(float)i*PI*fre/2/fs); /LCD液晶屏顯示模塊etft_AreaSet(32,0,239,319,0);/清屏 sprintf(buffe
27、r, "Frequency: %5d Hz",fre); etft_DisplayString(buffer, 0, 32, 0xFFFF, 0x0000); sprintf(buffer,"."); for(i=0;i<80;i+) etft_DisplayString(buffer,(i)*4,(int)(yi+1)*10+90),0xFFFF,0x0000);/繪制波形 sprintf(buffer,"*"); for(j=1;j<319;j+) i=14-(int)(collectj.real/(temp_frc/
28、10)*14);/掃頻,頻譜高度由該頻點與中心頻點的相對值決定 etft_DisplayString(buffer,j,200+i,0xFFFF,0x0000);/繪制頻譜 /LED燈顯示模塊 if(fre>=500&&fre<1500) P4OUT |= BIT5;/點亮燈 P4OUT &= BIT6;/熄滅燈 P4OUT &= BIT7; P5OUT &= BIT7; else if(fre>=1500&&fre<2500) P4OUT &= BIT5; P4OUT |= BIT6; P4OUT &am
29、p;= BIT7; P5OUT &= BIT7; else if(fre>=2500&&fre<3500) P4OUT |= BIT5; P4OUT |= BIT6; P4OUT &= BIT7; P5OUT &= BIT7; else if(fre>=3500&&fre<4500) P4OUT &= BIT5; P4OUT &= BIT6; P4OUT |= BIT7; P5OUT &= BIT7; else if(fre>=4500&&fre<5500) P4
30、OUT |= BIT5; P4OUT &= BIT6; P4OUT |= BIT7; P5OUT &= BIT7; else if(fre>=5500&&fre<6500) P4OUT &= BIT5; P4OUT |= BIT6; P4OUT |= BIT7; P5OUT &= BIT7; else if(fre>=6500&&fre<7500) P4OUT |= BIT7; P4OUT |= BIT6; P4OUT |= BIT5; P5OUT &= BIT7; else if(fre>=7500&&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度棉紗行業(yè)質(zhì)量標準制定與實施合同4篇
- 2025版年會現(xiàn)場攝影攝像服務(wù)合同范本4篇
- 二零二五年度棉花病蟲害防治與防治藥物供應(yīng)合同4篇
- 二零二五年度新能源汽車動力電池研發(fā)合作合同
- 2025年度農(nóng)家樂景區(qū)旅游咨詢與導(dǎo)覽服務(wù)合同協(xié)議
- 二零二五年度美容院美容設(shè)備維護保養(yǎng)及備件供應(yīng)合同4篇
- 二零二五年度美甲店互聯(lián)網(wǎng)營銷與電商平臺合作合同4篇
- 二零二五年度南寧市體育場館設(shè)施租賃合同及賽事組織協(xié)議3篇
- 2025年度個人二手車居間銷售合同示范文本2篇
- 二零二五年帳篷租賃及活動策劃服務(wù)合同3篇
- 完整版秸稈炭化成型綜合利用項目可行性研究報告
- 油氣行業(yè)人才需求預(yù)測-洞察分析
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
- (2024)河南省公務(wù)員考試《行測》真題及答案解析
- 2025年河北省單招語文模擬測試二(原卷版)
- 工作計劃 2025年度醫(yī)院工作計劃
- 高一化學(xué)《活潑的金屬單質(zhì)-鈉》分層練習(xí)含答案解析
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程
- 2024年內(nèi)蒙古中考英語試卷五套合卷附答案
- 2024年電工(高級)證考試題庫及答案
- 2024年全國各地中考試題分類匯編:古詩詞閱讀
評論
0/150
提交評論