欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:18050476       资源大小:66.73KB        全文页数:19页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    根据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


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开