msp430g2553测频率以及测峰值

上传人:桔**** 文档编号:487890646 上传时间:2023-08-26 格式:DOC 页数:15 大小:188.50KB
返回 下载 相关 举报
msp430g2553测频率以及测峰值_第1页
第1页 / 共15页
msp430g2553测频率以及测峰值_第2页
第2页 / 共15页
msp430g2553测频率以及测峰值_第3页
第3页 / 共15页
msp430g2553测频率以及测峰值_第4页
第4页 / 共15页
msp430g2553测频率以及测峰值_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《msp430g2553测频率以及测峰值》由会员分享,可在线阅读,更多相关《msp430g2553测频率以及测峰值(15页珍藏版)》请在金锄头文库上搜索。

1、电子设计综合实验项目报告项目名称:MCU交流电压参数测量小组成员:林伊、武正浩学号:、目录项目要求3题目3要求3基本要求3发挥部分3实现思路4放大4频率4A/D:6显示:6代码7主程序:7lcd头文件10项目要求题目:交流电压参数的测量要求:用给定的MCU:msp430g2553,制作交流电压参数测试设备指定MCUMSP430G2553信号发生器放大A/D比较器图表i基本要求:一、用给定运放LM324制作一放大器a) 增益大于:20dBb) 带宽大于:lOOKHz二、用指定MCU和已制作的放大器制作频率计a) 测量范围:10Hz100KHzb) 显示:3位以上发挥部分:、用A/D测量已给电压的

2、幅度,信号由已制作的放大器输入a)测量范围:输入信号越小越好实现思路放大:首先分析题目要求,要实现放大20dB,频率1lOOKHz的信号,通过公式201g(Ad)得出Ad=1O,即放大10倍必须使用运放1m324实现,则需要知道该芯片的器件参数,即增益带宽积。通过数据手册得知其增益带宽积为6.4MHz,除去放大倍数得知能够实现该信号的放大,通过设计放大电路并焊接即可,放大电路为反向比例放大电路,见Figure1R1WVXSC1Wv-9.09也Wvi汕上矗&亘JDFigure1频率:实现频率的测量,这一块需使用到MCU,测量频率的方法有很多种,通过捕捉上升沿下降沿产生中断,也可以不产生中断,还可

3、通过时钟计数。其中通过捕捉上升沿下降沿的思路又分两种,1、检测上升沿后再检测下一个上升沿(检测下降沿后再检测下一个下降沿)2、检测上升沿后再检测下降沿(检测下降沿后再检测上升沿)。这些思路对应不同的采集方法又可以细分,其中方案1对于测量高频信号有着较好的效果,方案2对于测低频的信号较好,前提是占空比为50%,若不为则变为测脉宽。这次的题目我采用的是用时钟计数的方式,msp430g2553中含有2个时钟,timer0和timer1,每个时钟都有如下功能,选择时钟来源:1、外部时钟(即外部输入的方波信号)2、ACLK3、smclk等。其中ACLK为外部所焊晶振,频率为32768Hz。由上述条件我使

4、用timer0和timer1同时工作来进行频率的测量,首先外部晶振属于手表晶振,极易产生1s中断,我首先用time门产生1s中断,再用timer。选择使用外部时钟源计数,也就是需要被我们计数的信号输入,这样每一次上升沿,timerO计数器就会加一。这样每秒中断读取timerO中寄存器的值就可以得出精确度极高的频率,甚至都不需要换算。此种方案简便易于实现,故选用。流程图:开始N1秒到时?Y读取timerO内寄存器的值保存清除timerO内寄存器的值Figure2方案选择完毕,考虑如何把正弦信号转换成方波信号输入MCU,此部分在考虑信号发生器只输出正电的时候,即正弦信号在0电位之上,我们可以完全不

5、用设计任何外部电路,因为MCU内部有施密特触发器,可以将正弦输入变成方波,但是如果有负电压输入则会损坏MCU。实际中由于LM324我们只允许单电源供电,且放大电路为反向比例放大电路,所以只放大了输入信号的负半周,并且将其搬到正半轴,所以输入到单片机的是只有正的电压,如图:Figure3所以不需要外部焊接电路实现波形转换,但是由于本课程是为北京电设做准备,本着此原则我组成员决定还是设计并焊接一个外部电路来实现波形转换。波形转换有两种方法:1、使用过零比较器2、使用施密特触发器。由于本题目对输入信号的频率有要求,过零比较器涉及到运放,所以在频率上有限制,为保证频率不影响实现,我们选用数字的电路即施

6、密特触发器,数字电路一般频率可以达到几十兆,所以肯定能够符合要求,见下图:Figure4A/D:本题发挥部分要求采集正弦信号的峰值,所以涉及A/D转换部分,由于输入信号频率在10HzlOOKHz,由于采样定理,采样频率必须为被采样信号的两倍,虽然实际中最好为十倍,我们最后还是采用了两倍。Msp430g2553此款芯片A/D采集过程若要稳定起码需要30个时钟,我的A/D模块选用时钟源smclk,其频率为8MHz,则8MHz除去30约为267KHz,其大于lOOKHz的两倍,基本满足要求,在之前采集频率的过程中我们有产生一个ls中断,A/D平常每采集一次便把采集的值与最大值比较,把最大值留下,ls

7、选取一次最大值显示,并把之前最大值清除。显示:显示我们采用LCD1602,采用四条数据线,三条控制线,在保证MCU引脚够用的前提下进行显示。代码主程序:#include#includeLCD1602_Driver.h#includeunsignedintFRE=0;unsignedcharflag1=0;unsignedcharflag2=0;unsignedintadc_sample=0;unsignedintadc_max=0;unsignedinttemp=0;ucharLCDBuf16;/ucharLCDBuf25;ucharLCDBuf2=HZ;ucharLCDBuf3=MV;voi

8、dmain()WDTCTL=WDTPW+WDTHOLD;DCOCTL|=(DCO0+DCO1);DCOCTL|=(MOD4+MOD3+MOD2+MODI+MODO);/微调DCOCLKBCSCTL1|=(RSEL0+RSEL2+RSEL3);/14.8MSMCLKIO_Init();LCD_Init();/测频初始TA0CTL|=TASSEL_0+MC_1;TA0CCR0=0xffff;TA1CTL|=TASSEL_1+MC_1+TAIE;TA1CCR0=32767;TA1CCTL0|=CCIE;P1DIR&=BIT0;P1SEL|=BIT0;_bis_SR_register(GIE);whi

9、le(1)if(0=flag1)elseflag1=0;TA0CTL|=TACLR;TA0CTL=TASSEL_0+MC_1;TA1CTL=TASSEL_1+MC_1+TAIE;while(0=flag1);flag1=0;/显示频率for(inti=0;i5;i+)temp=FRE/(10000/(unsignedint)(pow(10,i);LCDBuf1i=temp+0;FRE=FRE%(10000/(unsignedint)(pow(10,i);LCDBuf15=0;LCD_Disp_string(0,0,LCDBuf1);LCD_Disp_string(5,0,LCDBuf2);/测

10、幅初始flag2=1;TA1CTL=TASSEL_1+MC_1+TAIE;TA1CCR0=32767;/打开时钟/ADC10CTL0=SREF_0+ADC10SHT_2+MSC+ADC10ON+ADC10IE;/ADC10CTL1=INCH_1+ADC10SSEL_3+CONSEQ_2;/ADC10AE0=0x02;/ADC10DTC0=ADC10B1;/ADC10DTC1=0xC8;/ADC10CTL0&=ENC;/先关闭adc,待到BUSY位清零,每次都必须等待/while(ADC10CTL1&BUSY);/WaitifADC10coreisactive/ADC10SA=(unsigned

11、int)adc_sample;/Databufferstart/ADC10CTL0|=ENC+ADC10SC;ADC10CTL0=SREF_0+ADC10SHT_2+MSC+ADC10ON;ADC10CTL1=INCH_1+ADC10SSEL_3+CONSEQ_0;ADC10AE0=0x02;ADC10CTL0|=ADC10ON;doADC10CTL0|=ENC+ADC10SC;while(ADC10CTL0&ADC10IFG)=0);adc_sample=ADC10MEM;if(adc_maxadc_sample)adc_max=adc_sample;while(0=flag1);adc_m

12、ax=adc_max*(3300/1023);/while(0=flag1);flag2=0;/*/筛选for(inti=0;iadc_max)adc_max=adc_samplei;*/显示幅值for(inti=0;i5;i+)temp=adc_max/(10000/(unsignedint)(pow(10,i);LCDBuf1i=temp+0;adc_max=adc_max%(10000/(unsignedint)(pow(10,i);LCDBuf15=0;LCD_Disp_string(0,1,LCDBuf1);LCD_Disp_string(5,1,LCDBuf3);adc_max=0

13、;/TimerA1interruptserviceroutine#pragmavector=TIMER1_A0_VECTOR_interruptvoidTimer1_A(void)if(0=flag2)TA0CTL=0;TA1CTL=0;TA1CTL|=TACLR;FRE=TA0R;flag1=1;TA0CTL=TASSEL_0+MC_0;TA1CTL=TASSEL_1+MC_0;/TA0CTL|=TACLR;/TA0CTL=TASSEL_0+MC_1;/TA1CTL=TASSEL_1+MC_1+TAIE;/测了一次还没开elseTA1CTL=TASSEL_1+MC_0;flag1=1;/AD

14、C10interruptserviceroutine#pragmavector=ADC10_VECTOR_interruptvoidADC10_ISR(void)flag1=1;ADC10CTL0&=ENC;lcd头文件/#includemsp430g2553.h#defineSET_LCD_1602_EP2OUT|=0x04/P2.2#defineCLR_LCD_1602_EP2OUT&=0x04#defineSET_LCD_1602_RSP2OUT|=0x01/P2.0#defineCLR_LCD_1602_RSP2OUT&=0x01#defineSET_LCD_1602_RWP2OUT|=0x02/P2.1#defineCLR_LCD_1602_RWP2OUT&=0x02#defineLCD_IO_OUTP1OUT#defineLCD_IO_DIRP1DIR#defineLCD_IO_INP1IN#defineLCD_IO_SELP1SEL

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号