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

    msp430g2553测频率以及测峰值Word文档下载推荐.docx

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

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

    msp430g2553测频率以及测峰值Word文档下载推荐.docx

    1、首先分析题目要求,要实现放大20dB,频率1100KHz的信号,通过公式20lg(Ad)得出Ad=10,即放大10倍必须使用运放lm324实现,则需要知道该芯片的器件参数,即增益带宽积。通过数据手册得知其增益带宽积为6.4MHz,除去放大倍数得知能够实现该信号的放大,通过设计放大电路并焊接即可,放大电路为反向比例放大电路,见Figure 1Figure 1频率:实现频率的测量,这一块需使用到MCU,测量频率的方法有很多种,通过捕捉上升沿下降沿产生中断,也可以不产生中断,还可通过时钟计数。其中通过捕捉上升沿下降沿的思路又分两种,1、检测上升沿后再检测下一个上升沿(检测下降沿后再检测下一个下降沿)

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

    3、生1s中断,再用timer0选择使用外部时钟源计数,也就是需要被我们计数的信号输入,这样每一次上升沿,timer0计数器就会加一。这样每秒中断读取timer0中寄存器的值就可以得出精确度极高的频率,甚至都不需要换算。此种方案简便易于实现,故选用。流程图:Figure 2方案选择完毕,考虑如何把正弦信号转换成方波信号输入MCU,此部分在考虑信号发生器只输出正电的时候,即正弦信号在0电位之上,我们可以完全不用设计任何外部电路,因为MCU内部有施密特触发器,可以将正弦输入变成方波,但是如果有负电压输入则会损坏MCU。实际中由于LM324我们只允许单电源供电,且放大电路为反向比例放大电路,所以只放大了

    4、输入信号的负半周,并且将其搬到正半轴,所以输入到单片机的是只有正的电压,如图:Figure 3所以不需要外部焊接电路实现波形转换,但是由于本课程是为北京电设做准备,本着此原则我组成员决定还是设计并焊接一个外部电路来实现波形转换。波形转换有两种方法:1、使用过零比较器2、使用施密特触发器。由于本题目对输入信号的频率有要求,过零比较器涉及到运放,所以在频率上有限制,为保证频率不影响实现,我们选用数字的电路即施密特触发器,数字电路一般频率可以达到几十兆,所以肯定能够符合要求,见下图:Figure 4A/D:本题发挥部分要求采集正弦信号的峰值,所以涉及A/D转换部分,由于输入信号频率在10Hz100K

    5、Hz,由于采样定理,采样频率必须为被采样信号的两倍,虽然实际中最好为十倍,我们最后还是采用了两倍。Msp430g2553此款芯片A/D采集过程若要稳定起码需要30个时钟,我的A/D模块选用时钟源smclk,其频率为8MHz,则8MHz除去30约为267KHz,其大于100KHz的两倍,基本满足要求,在之前采集频率的过程中我们有产生一个1s中断,A/D平常每采集一次便把采集的值与最大值比较,把最大值留下,1s选取一次最大值显示,并把之前最大值清除。显示:显示我们采用LCD1602,采用四条数据线,三条控制线,在保证MCU引脚够用的前提下进行显示。代码主程序:#include #include L

    6、CD1602_Driver.hmath.hunsigned int FRE=0;unsigned char flag1=0;unsigned char flag2=0;unsigned int adc_sample=0;unsigned int adc_max=0;unsigned int temp=0;uchar LCDBuf16;/uchar LCDBuf25;uchar LCDBuf2=HZ;uchar LCDBuf3=MVvoid main() WDTCTL = WDTPW + WDTHOLD; DCOCTL |= ( DCO0 + DCO1 ); DCOCTL |= ( MOD4 +

    7、 MOD3 + MOD2 + MOD1 + MOD0);/微调DCOCLK BCSCTL1 |= ( RSEL0 + RSEL2 + RSEL3);/14.8M SMCLK IO_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); while(1) if(0=fla

    8、g1) ; else flag1=0; TA0CTL |= TACLR; TA0CTL = TASSEL_0 + MC_1; TA1CTL = TASSEL_1 + MC_1 + TAIE; while(0=flag1); /显示频率 for(int i=0;i5;i+) temp = FRE/(10000/(unsigned int)(pow(10,i); LCDBuf1i = temp + 0; FRE = FRE%(10000/(unsigned int)(pow(10,i); LCDBuf15 = 0; LCD_Disp_string(0,0,LCDBuf1); LCD_Disp_st

    9、ring(5,0,LCDBuf2); /测幅初始 flag2=1; /打开时钟 /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); / Wait if ADC10 core i

    10、s active /ADC10SA = (unsigned int)adc_sample; / Data buffer start /ADC10CTL0 |= ENC + ADC10SC; ADC10CTL0 = SREF_0 + ADC10SHT_2 + MSC + ADC10ON; ADC10CTL1 = INCH_1 + ADC10SSEL_3 + CONSEQ_0; ADC10AE0 = 0x02; ADC10CTL0 |= ADC10ON; do ADC10CTL0 |= ENC+ADC10SC; while(ADC10CTL0 &ADC10IFG)=0); adc_sample =

    11、 ADC10MEM; if(adc_maxadc_max) adc_max=adc_samplei; */ /显示幅值 temp = adc_max/(10000/(unsigned int)(pow(10,i); adc_max = adc_max%(10000/(unsigned int)(pow(10,i); LCD_Disp_string(0,1,LCDBuf1); LCD_Disp_string(5,1,LCDBuf3); adc_max = 0;/ Timer A1 interrupt service routine#pragma vector=TIMER1_A0_VECTOR_i

    12、nterrupt void Timer1_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; /测了一次还没开/ ADC10 interrupt service routine#pragma vector=ADC10_VECTO

    13、R_interrupt void ADC10_ISR (void) ADC10CTL0 &lcd头文件/#include msp430g2553.h#define SET_LCD_1602_E P2OUT |= 0x04 /P2.2#define CLR_LCD_1602_E P2OUT &= 0x04#define SET_LCD_1602_RS P2OUT |= 0x01 /P2.0#define CLR_LCD_1602_RS P2OUT &= 0x01#define SET_LCD_1602_RW P2OUT |= 0x02 /P2.1#define CLR_LCD_1602_RW P

    14、2OUT &= 0x02#define LCD_IO_OUT P1OUT#define LCD_IO_DIR P1DIR#define LCD_IO_IN P1IN#define LCD_IO_SEL P1SEL#define uchar unsigned char#define uint unsigned intvoid IO_Init(void);void LCD_Init(void);void LCD_Check_busy(void); /检测LCD是否在忙,即能否接收数据和指令void LCD_Write_Command(uchar command);void LCD_Write_Da

    15、ta(uchar dat);void LCD_Set_xy( uchar x, uchar y );uchar LCD_Read_Sta(void);uchar LCD_Read_Data(uchar x,uchar y);void User_def_char(uchar n,uchar *s); /输入用户自定义字符(5*8点阵字符),07共8个字符void LCD_Disp_char(uchar x,uchar y,uchar dat);void LCD_Disp_string(uchar x,uchar y,uchar *s);uchar large=0; /当large为1时,为5*8

    16、点阵;为0时,为5*10点阵void IO_Init(void) LCD_IO_SEL &= 0xF0; /LCD_IO_DIR |= 0x07 ; P2DIR |= 0x07; P2SEL &= 0x07;void LCD_Init(void) LCD_Write_Command(0x28); LCD_Write_Command(0x0F); LCD_Write_Command(0x06); LCD_Write_Command(0x01);void LCD_Check_busy(void) uchar flag=0x80; flag &= LCD_Read_Sta(); while(flag

    17、 = 0x80) _delay_cycles(100); flag &void LCD_Write_Command(uchar command) LCD_Check_busy(); CLR_LCD_1602_RS; CLR_LCD_1602_RW; CLR_LCD_1602_E; uchar temp; temp = command & (0x3C); if(temp=(0x26)|(temp=(0x2C)|(temp=(0x36)|(temp=(0x3C) large = 0; /为5*10点阵 large = 1; LCD_IO_DIR |= 0xF0; LCD_IO_OUT = (com

    18、mand&(0XF0)+(LCD_IO_OUT&(0x0F); SET_LCD_1602_E; command = 4;void LCD_Write_Data(uchar dat) SET_LCD_1602_RS; LCD_IO_OUT = (dat& dat temp &= 0x0F; sta = sta + temp; return(sta);uchar LCD_Read_Data(uchar x,uchar y) uchar dat; LCD_Set_xy(x,y); /确定读取数据坐标 /读取数据高四位 dat = LCD_IO_IN; /读取数据低四位 dat & dat = dat

    19、 + temp; return(dat);void User_def_char(uchar n,uchar *s) int i; char addr = 0x40; n = 3; addr += n; for(i=0;8;i+,addr+) LCD_Write_Command(addr); LCD_Write_Data( *s ); s+;void LCD_Disp_char(uchar x,uchar y,uchar dat) LCD_Write_Data(dat);void LCD_Disp_string(uchar x,uchar y,uchar *s) while (*s)欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求


    注意事项

    本文(msp430g2553测频率以及测峰值Word文档下载推荐.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

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




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

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

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


    收起
    展开