ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:66.73KB ,
资源ID:18050476      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-18050476.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(根据MSP430F6638的信号采集与分析系统实验.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

根据MSP430F6638的信号采集与分析系统实验.docx

1、根据MSP430F6638的信号采集与分析系统实验信号采集与分析系统实验一、 实验目的本实验目的是利用实验箱构建一个信号采集和分析系统。二、 实验内容三、 实验步骤1、键盘及LED的设计与制作 编写单片机程序,控制按键,控制灯的亮灭, 测试所有能控制的按键和LED 2、液晶屏显示的设计与制作 测试在液晶屏上显示波形和数据 3、以信号发生器输入单频正弦波,以16个 指示灯代表16个单频点,频点在200Hz 10kHz任选,信号发生器每次产生一种频点 正弦波,AD采集,对应频点的指示灯会亮;4、把指示灯显示频点改成用液晶显示 5、液晶屏同时显示频谱和时域波形四、实验原理1、AD采样模块在这个模块中

2、,每过一段时间,AD采样器采集一个数据存入数组中,并将存储的二进制数转换成对应的电压值,通过代码:collect0t.real = ADC12MEM0*3.0 / 0x03ff;实现。采集满N个值之后,令标志变量flag=1,表示一组数据采集完毕,进入下一模块,即FFT变换。我们将信号发生器输出的模拟电压范围设定为0V2V ,这是因为:若电压值太大,会导致结果波形失真;若出现负电压,则因为AD模块不支持负电压的采集,结果可能会出现错误。2、FFT处理模块该模块将采集进来的数据进行FFT变换,变换后的实部即为频谱,用于LCD的频谱绘制。绘制时,以各频点的幅频值与最大幅频值的相对大小进行绘制;变换

3、后模值最大的频点对应的频率即为待测频率,用fre表示,便于屏幕及LED频率显示;根据求得的fre,可求得若干函数值,用于LCD的时域波形绘制。3、 LCD液晶屏显示模块该模块用于显示时域波形、频谱、学号、所测频率等内容。关键语句:清屏:etft_AreaSet(0,0,239,319,0);/清屏显示:sprintf(buffer, Frequency: %5d Hz,fre);etft_DisplayString(buffer, 0, 32, 0xFFFF, 0x0000);/显示频率同时,在模块中加入了延时语句,使得波形可以保持一定的时间。时间到后,LCD会进行刷新,重新显示波形和数据。4

4、、LED灯显示模块LED1作为采样指示灯,ADC模块每采一次样闪烁一次,由于采样频率极高,但中断调用间隔较长,实际显示为每次进入ADC采样中断LED1闪烁一下。使用LED2、LED3、LED4、LED5显示频率,标号分别为5.7、4.7、4.6、4.5。受LED灯数目的限制,当用LED显示频率时(二进制表示),只能精确到1kHz。如当1500=fre2500时,用2kHz表示,灯显示为0010;当5500=fre6500时,用6kHz表示,灯显示为0110,其余类似。通过以上模块,可以实现以下功能:AD模块采集N个数据后,FFT模块对数据进行处理,FFT变换后,实部为频谱,用于LCD的频谱绘制

5、;模值最大的频点为所求频率,在LED和LCD上显示;再求得一些采样点的函数值,在LCD上绘制时域波形。最终,频率显示在LED灯和LCD上,波形和频谱显示在LCD上。图像保持一段时间后,LCD会进行刷新,重新显示波形和数据。附录: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_CON

6、FIG2 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

7、 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, &P

8、5SEL;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 &= X

9、T1OFF; /启动XT1 P7SEL |= BIT2 + BIT3; /XT2引脚功能选择 UCSCTL6 &= XT2OFF; /启动XT2 while (SFRIFG1 & OFIFG) /等待XT1、XT2与DCO稳定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL4 = SELA_XT1CLK + SELS_XT2CLK + SELM_XT2CLK; /避免DCO调整中跑飞 UCSCTL1 = DCORSEL_5; /6000kHz23.7MHz UCSCTL2 = 20000000 / (4000000

10、 / 16); /XT2频率较高,分频后作为基准可获得更高的精度 UCSCTL3 = SELREF_XT2CLK + FLLREFDIV_16; /XT2进行16分频后作为基准 while (SFRIFG1 & OFIFG) /等待XT1、XT2与DCO稳定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL5 = DIVA_1 + DIVS_1 + DIVM_1; /设定几个CLK的分频 UCSCTL4 = SELA_XT1CLK + SELS_DCOCLK + SELM_DCOCLK; /设定几个CLK的时钟源in

11、t 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; /上拉状态 uint8_t last_btn = 0x1F, cur_btn, temp; wh

12、ile(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; /翻转对应的LED _delay_cycles(3276); /延时大约100ms temp1=7-i; temp2=5-i; sprintf(buffer, Switch %d LED %d, temp1, temp2);

13、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点数#define PI 3.14159265327volatile long IntDegF;volatile

14、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稳定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL4 = SE

15、LA_XT1CLK + SELS_XT2CLK + SELM_XT2CLK; /避免DCO调整中跑飞 UCSCTL1 = DCORSEL_5; /6000kHz23.7MHz UCSCTL2 = 20000000 / (4000000 / 16); /XT2频率较高,分频后作为基准可获得更高的精度 UCSCTL3 = SELREF_XT2CLK + FLLREFDIV_16; /XT2进行16分频后作为基准 while (SFRIFG1 & OFIFG) /等待XT1、XT2与DCO稳定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFI

16、FG; UCSCTL5 = DIVA_1 + DIVS_1 + DIVM_1; /设定几个CLK的分频 UCSCTL4 = SELA_XT1CLK + SELS_DCOCLK + SELM_DCOCLK; /设定几个CLK的时钟源struct compx float 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;/*函数原型:struct compx

17、 EE(struct compx b1,struct compx b2)函数功能:对两个复数进行乘法运算输入参数:两个以联合体定义的复数a,b输出参数:a和b的乘积,以联合体的形式输出*/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);/*函数原型:void FFT(struct compx *xin)函数功能:对输入的复数组进行快速傅里叶变换(FFT)输

18、入参数:*xin复数结构体组的首地址指针,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;

19、 /把最高位变成0 k=k/2; /k/2,比较次高位,依次类推,逐个比较,直到某个位为0 j=j+k; /把0改为1 f=N; for(l=1;(f=f/2)!=1;l+) /计算l的值,即计算蝶形级数 ; for(m=1;m=l;m+) / 控制蝶形结级数 /m表示第m级蝶形,l为蝶形级总数l=log(2)N le=2(m-1); /le蝶形结距离,即第m级蝶形的蝶形结相距le点 lei=le/2; /同一蝶形结中参加运算的两点的距离 u.real=1.0; /u为蝶形结运算系数,初始值为1 u.imag=0.0; w.real=cos(PI/lei); /w为系数商,即当前系数与前一个系

20、数的商 w.imag=-sin(PI/lei); for(j=0;j=lei-1;j+) /控制计算不同种蝶形结,即计算系数不同的蝶形结 for(i=j;i=N-1;i=i+le) /控制同一蝶形结运算,即计算系数相同蝶形结 ip=i+lei; /i,ip分别表示参加蝶形运算的两个节点 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); /改变系数

21、,进行下一个蝶形运算 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; / enab

22、le 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,31

23、9,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 wi

24、th interrupts enabled _no_operation(); if(flag=1) /FFT处理模块 FFT(collect); for(i=0;iN;i+) /求变换后结果的模值,存入复数的实部部分 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;/所测频率 fo

25、r(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=6500&fre=7500&fre=8500&fre=9500&fre10500) P4OUT &= BIT7; P4OUT |= BIT6; P4OUT &= BIT5; P5OUT |= BIT7; flag=0; _delay_cycles(2*MCLK_FREQ);/延时 /AD

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2