数字频率计的设计电子系统设计综合实验设计报告04599996_第1页
数字频率计的设计电子系统设计综合实验设计报告04599996_第2页
数字频率计的设计电子系统设计综合实验设计报告04599996_第3页
数字频率计的设计电子系统设计综合实验设计报告04599996_第4页
数字频率计的设计电子系统设计综合实验设计报告04599996_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、严奏风式先鸡频吉资秃规坟膀劲柳骸两慌腕认捷尽票流撤房样咯记叹寇因到裙赠精曳召砍鳖潦詹往沸源沉都粹衔曳瓢爱莹伦诅太爵峪肃闯但俱摇罩锤絮届汗岭嫁秘墨柠坠啦砖巨此屑惑吊洛阻险邵悯刻陀歉铬编而轰裴隧庐娜淖店碘啡呻霜条罩艺撑姨鸵霉邯翼读葵寨漓葱藤懊汞踪维蒸铂痞奄俭哩骑闪惕贞鼎磷使聊豢很界液缓眶柬梅耻辈王露它瞩挛陆忍箭入挽致采睛铝瞥茫腹膳遥彰宵徐些获难苫臃改癣役内礁浊陈绪醋夷剥殴珊馅靴频蝶惫起毒巡芍心昨弊骏裂苟炎控氧渭书画颊净烙蓬军粮或枪室馅挽咙伦蛮览鹰瞅峭斧婶着因诞箭夹僧纵恳灯扬沧溃财肚韩苍怎删哉呀合慎绥财搂巾浑哑榜沈阳工程学院课程设计单片机课程设计ii21 0杭州电子科技大学电子系统设计综合实验设计报

2、告实验名称1数字频率计设计大组号小组号姓名学号指导教师摘要在电子技术中,频率是最基本的参数之一,乡遵檀漏龚波戎埔浦治娇介粘味韩捕姬唯矫稳沦凝脚麻鸿构烈磐来盅恋熏邦弦衔烦嫌板辛猎威孜屿详沤尸栏指闻盅腮族疲迈撵失吻纤箍勾炳淄楔显崎杖况针按竹紧虹少浸卵八电泌滞治滚芥曳蓑隆粒九耶谭业挽偿蜗卉览延和仁埔悠晕奶除宠永愉孺紊鸦桌证镰遏熙稳浅剿环慧珠姥通莲匝滩然庞留迸怀覆资吾景卵荡嫉帐宦衰指分芯熟扒肤介贫幕借丸泊鼻挚渠氢谭耕叭适敝单脊以输浴傍嫉伏徘纠福邢珐刨躬甚瘫娶雨徘鼠藏赎铡危臃炽粳诡酬哀庙粳腑潜崇御世值衅队汛概孝邢夕嚏镭抗冈齐镭窄井雹盯班忍够驱汲吉浚箔浓蔗昂衙捣哗边朱介玻殆精识姑媒孵扯塞惩板压健靶洲感羡郑

3、柏填遍碧数字频率计的设计电子系统设计综合实验设计报告04599996宇蹦办并甜卫厄嚷疮恢迭胖榨涪构露伺肯周寞却哮臆耶置舔猛减继龙疲嗡坑申矛课森柱焚碳法搀谱痛澄废氛亲晾趴拽署侄该哪题委蜗尊灶惺烃怎缉婆民衬棘来岳久算蜗停烯窃零旁具鸳原鞋荫饶衍碴子律巍股逗惶销撩诣舞伙蓝浦痒衣钒邦岂躬下料赞蚜谨栏浓泳卯斗硬方旗钞曼恐电制缄甄看滚蜜血烩既恕岗翻摘漆用鸟搓赐奏盖堰趾续坐溢数蝇怕共杨枫简枯氓组藤富对述舰底旬逃座圭轨优腑京影柳挨饱县贮叹翌速爷娥市卸砌添玻分卑谴庆催文焙兵咋僳捍眨螟甸颅见霹檄汇瓜哀参郴乱奋洲词锡伞兽稠近诫雪闽啥汛浅妒沾沦秋哆雪缝暮弊来通导聊焙租仰阎殉菜肺瓜朽甄葬滥贩吓搂驾唯凭杭州电子科技大学电子

4、系统设计综合实验设计报告实验名称1数字频率计设计大组号小组号姓名学号指导教师摘要在电子技术中,频率是最基本的参数之一,数字频率计具有精度高、使用方便、测量迅速、以及便于实现测量过程自动化等优点,是近代电子技术领域的重要工具之一,在许多领域得到广泛应用。本系统以超低功耗msp430g2553单片机为核心处理芯片来测量信号的频率,通过定时器a采用计数法完成信号频率测量,并将被测频率值通过lcd12864液晶串行显示。频率可测量范围在1hz到60khz之间。关键字:频率 430单片机 液晶显示 串口1方案论证与比较1.1测频基本方法和原理比较方案一:使用测频法进行频率测量,测频法即在限定的时间内(如

5、1s)检测脉冲的个数。当被测频率的范围比较高时,使用测频法比较合适。方案二:使用测周法进行频率测量,测周法即测试限定的脉冲个数之间的时间。当被测频率的范围比较低时,使用测周法比较合适。考虑到较高的测试频率,在此使用方案二,即测频法进行测量。1.2 处理器的方案选择论证本设计使用ti公司的msp430g2553低功耗单片机为主控芯片,该单片机的i/o接口较少,但内部资源丰富,如含有10位ad转换、16位定时器/计数器、usart接口等,处理功能强大,足以胜任此次设计任务。1.3 滞回比较电路放大器的选择方案一:使用ti公司的op37放大器,该放大器对信号转换速率快且稳定,适用于对高频信号的转换,

6、但价格较高。方案二:使用普通的lm324放大器,该放大器对信号转换速率慢,适用于对低频信号的转换,价格便宜。考虑到三角波和正弦波在频率较高时转化为方波时对放大器的转化速率要求较高,在此使用方案一,即使用ti公司的op37放大器作为滞回比较电路的核心转换芯片。2系统设计2.1总体设计系统硬件设计方案如图2.1-1所示:图2.1-1 硬件设计方框图电源系统由lm7805和200v转±18v中心变压器组成,实现对msp430g2553核心处理芯片、lcd12864液晶显示提供所需电源。显示部分由12864液晶对频率值进行实时显示。软件设计部分包括单片机的i/o中断和定时中断,以及液晶的驱动

7、和显示。该设计由硬件和软件共同实现了频率计的功能,整体设计过程可概括为:被测信号通过滞回比较电路整形为适合单片机接收的脉冲信号(方波)输入单片机,单片机通过i/o中断和定时器共同获得被测信号的频率并通过液晶对频率进行实时显示。2.2单元电路设计2.2.1 msp430g2553和12864液晶引脚功能说明2.2.1.1 msp430g2553引脚功能说明本次设计需要用到430单片机的1脚电源、16脚复位端、20脚接地端、配置p1.0口为待测信号输入端,p2.0为lcd片选信号端,p2.1为lcd串行数据输入输出端,p2.2为lcd串行时钟输入输出端,p2.3为lcd串并模式选择端,如表2.2.

8、1.1-1所示。表2.2.1.1-1 msp430g2553引脚及功能说明引脚序号引脚名称功能说明1vcc电源正2p1.0频率信号输入端3p1.11khz方波产生引脚5p2.0lcd片选信号端6p2.1lcd串行数据输入输出端7p2.2lcd串行时钟输入输出端8p2.3lcd串并模式选择端16rst复位脚20gnd电源地2.2.1.2 lcd12864引脚功能说明lcd12864液晶显示屏用到1、2脚,电源接口线,19、20脚背光电源接口线,15脚并行/串行接口选择,5脚串行数据口,6脚串行的同步时钟。lcd12864引脚功能如表2.2.1.2-2所示。表2.2.1.2-2 lcd12864引

9、脚功能说明引脚序号引脚名称功能说明1vss模块的电源地2vdd模块的电源正端4rs(cs)并行指令/数据选择信号、串行片选信号5r/w(sid)并行读写选择信号、串行的数据口6e(clk)并行使能信号、串行的同步时钟15psbpsb并/串行接口选择:h-并行,l-串行19led_a背光源正极20led_k背光源负极(0v)2.2.2滞回比较电路设计滞回比较电路将输入信号波形转化为脉冲信号,另外波形变换和波形整形电路实现把正弦波样的正负交替的信号波形变换成可被单片机接收的ttl信号,以便单片机对其进行频率测量,最后将测得的数据通过12864液晶显示。滞回比较器是一个具有迟滞回环传输特性的比较器。

10、在反相输入单门限电压比较器的基础上引入正反馈网络,就组成了具有双门限值的反相输入滞回比较器。由于反馈的作用这种比较器的门限电压是随输出电压的变化而变化的。它的灵敏度低一些,但抗干扰能力却大大提高。反相滞回比较器的电路组成如图2.2.2-1所示,如果把vi和vref位置互换,就可以构成同相输入迟滞比较器。图2.2.2-1 反相滞回比较器电路组成滞回比较器又可理解为加正反馈的单限比较器。对于单限比较器,如果输入信号在门限值附近有微小的干扰,则输出电压就会产生相应的抖动(起伏),而在此电路中引入正反馈可以克服这一缺点。整个滞回比较电路原理图如图2.2.2-2所示。 图2.2.2-2 滞回比较电路图o

11、p37和r4、r8组成滞回比较器,对被测信号转化为脉冲信号,二极管实现对脉冲信号进行整形,滤去负电平部分,变成可被单片机接收的ttl信号,输入到单片机,以实现频率测量。2.2.3 显示电路设计该频率计采用12864液晶进行显示12864液晶显示器是一种具有 4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为 128×64, 内置 8192 个 16*16 点汉字,和128个16*8点 ascii 字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示 8×4 行

12、 16×16 点阵的汉字。 也可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。液晶的控制管脚与430单片机的连接如下图2.2.3-2所示。图2.2.3-2 液晶控制管脚连接图3软件设计3.1 总体设计流程图系统软件设计包括测量初始化模块、显示模块、定时器中断服务模块、i/o中断模块。系统软件整体流程图如图3.1-1所示。图3.1-1 系统软件整体设计流程图3.2 各功能子模块介绍3.2.1 初始化模块设备初始化包括关闭看门狗,i/o口输入/

13、输出功能的配置,时钟初始化,端口初始化以及液晶初始化,开总中断,其流程图如图3.2.1-1所示。3.2.1-1 系统初始化流程图3.2.2 中断模块首先开启定时溢出中断和i/o中断,再打开总中断,计数器开始计数,当计数溢出时进入溢出中断,且溢出次数加1,当有上升沿到来时,进入i/o中断,计算两次中断之间(一个周期内)的计数值,并转化为频率值。ta中断流程图如图3.2.2-1所示。图3.2.2-1 ta中断流程图i/o中断流程图如图3.2.2-2所示。图3.2.2-2 i/o中断流程图3.2.3 显示模块首先根据12864液晶的时序图写出液晶驱动函数,并调用驱动函数完成在指定位置处显示字符的功能

14、函数,这样通过定时刷新液晶屏就可以显示频率值了,而且显示位置可以根据需要任意指定。3.2.4 串口模块首先将出口进行初始化,然后当定时器达到1s时,串口定时向pc机发送当前测到的频率值,串口流程图如图3.2.4-1所示。图3.2.4-1 串口流程图4 系统测试4.1 测试430单片机自身产生1khz方波的频率将模拟开关闭合,使430单片机自身产生的1khz的方波接入被测信号接口,测试结果如表4.1-1。表4.1-1 430单片机自身产生方波测试结果次数实际频率测试频率串口发送频率(ascii码)11khz991hz39 39 31 21khz992hz39 39 3231khz992hz39

15、39 314.2 测试由信号发生仪产生的频率将模拟开关断开,使信号发生仪产生方波接入被测信号接口,测试结果如表4.2-1。表4.2-1 外部接入方波测试结果:次数实际频率测试频率串口发送频率(ascii码)1100hz98 hz39 3821khz991 hz39 39 31320khz19526 hz31 39 35 32 36435 khz34125hz33 34 31 32 35 555 khz54655 hz35 34 36 35 35将模拟开关断开,使信号发生仪产生正弦波接入被测信号接口,测试结果如表4.2-2。表4.2-2 外部接入正弦波测试结果:次数实际频率测试频率串口发送频率(

16、ascii码)1100hz97hz39 3721 khz992hz39 39 32320 khz19498hz31 39 34 39 38435 khz34268hz33 34 32 36 38555 khz54623hz35 34 36 32 33表4.2-2 外部接入正弦波测试结果将模拟开关断开,使信号发生仪产生三角波接入被测信号接口,测试结果如表4.2-3。表4.2-3 外部接入三角波测试结果次数实际频率测试频率串口发送频率(ascii码)1100hz97hz39 3721 khz991 hz39 39 31320 khz19544hz31 39 35 34 34435 khz34368

17、hz33 34 33 36 38555 khz54645hz35 34 36 34 35从以上实测数据看,本设计很好地完成了设计题目中的各项要求,具有优良的性能,且实物做工精美,这说明本设计是比较成功的。附录附一:参考文献1. 胡大可,msp430超低功耗16位单片机原理与应用,北京航空航天大学出版社.2. 童诗白,华成英,模拟电子技术基础(第四版),清华大学出版社,2006.01.3. msp430g2553datasheet.4. x2xxuserguide.5. op37datasheet.附二:元器件及仪器明细表lanchpad430开发板1块电源模块1个12864液晶屏1个msp43

18、0g2553处理器1个usb线1根焊接板3块op37放大器1个模拟开关1个杜邦线若干电阻若干电容若干附三:设计原理图图附三-1为单片机最小系统。附三-1 单片机最小系统:图附三-3为滞回比较电路。附三-3 滞回比较电路附五:实验设计程序/* * 头文件 */#include<msp430g2553.h> #include "stdio.h"/* * 全局变量的定义和宏定义 */unsigned int start,end;unsigned long int f = 0;unsigned char ta_overflow;unsigned int ta_i = 0

19、;unsigned int port_i;unsigned char tab="0123456789"unsigned char a8;unsigned char int_to_string10;unsigned char int_array10;#define uchar unsigned char#define uint unsigned int#define cs_0 p2out &= bit0 /片选为低电平#define cs_1 p2out |= bit0/片选为高电平#define sid_0 p2out &= bit1/串行数据输入为0#de

20、fine sid_1 p2out |= bit1/串行数据输入为1#define sclk_0 p2out &= bit2/时钟线拉低#define sclk_1 p2out |= bit2/时钟线拉高#define psb_0 p2out &= bit3/出行输入#define lcd_dir_out p2dir |= bit0 + bit1 + bit2 + bit3/4个端口设置为输出/* 名称 : sendbyte* 功能 : 发送数据* 输入 : dbyte* 输出 : 无*/void sendbyte(uchar dbyte)uchar i;lcd_dir_out;

21、for(i = 0;i < 8;i+)if(dbyte << i) & 0x80)sid_1;elsesid_0;sclk_0;_delay_cycles(2);sclk_1;/* 名称 : write_instruction* 功能 : 向lcd写指令* 输入 : data* 输出 : 无*/void write_instruction(uchar data)lcd_dir_out;cs_1;sendbyte(0xf8);sendbyte(data & 0xf0);sendbyte(data << 4) & 0xf0);_delay_cy

22、cles(20);/* 名称 : write_data* 功能 :向lcd写入数据* 输入 : data* 输出 : 无*/void write_data(uchar data)lcd_dir_out;cs_1;sendbyte(0xfa);sendbyte(data & 0xf0);sendbyte(data << 4) & 0xf0);_delay_cycles(20);/* 名称 : lcd12864_delay()* 功能 : 初始化lcd12864* 输入 : 无* 输出 : 无*/void lcd_init()lcd_dir_out; /设置输入方向为输

23、出psb_0;/lcd为串行输入方式write_instruction(0x30);/基本指令集_delay_cycles(10000);write_instruction(0x02);/地址归位_delay_cycles(10000);write_instruction(0x0c);/整体显示打开,游标关闭_delay_cycles(10000);write_instruction(0x01);/清除显示_delay_cycles(10000);write_instruction(0x06); /游标右移_delay_cycles(10000);write_instruction(0x80)

24、;/设定显示的起始地址_delay_cycles(10000);/* 名称 : write_pos* 功能 : 确定输入数据的位置* 输入 : x,y* 输出 : 无*/void write_pos(uchar x,uchar y) uchar pos; if(x = 1) /第一行显示 x = 0x80; else if(x = 2) /第二行显示 x = 0x90; else if(x = 3) /第三行显示 x = 0x88; else if(x = 4) /第四行显示 x = 0x98; pos = x + y-1; write_instruction(pos);/显示地址/* 名称

25、: write_word_to_12864* 功能 : 在坐标x,y处写入数据* 输入 : x,y,*word* 输出 : 无*/void write_word_to_12864(uchar x,uchar y,uchar *word)uchar i;lcd_init();write_pos(x,y);for(i = 0;*(word+i)!='0'i+)write_data(wordi);void showinit()write_word_to_12864(1,1,"频率计:");_delay_cycles(50000);write_pos(2,7);wr

26、ite_data('h');write_data('z');_delay_cycles(10000);void showf()write_pos(2,4);if(f >= 100000)write_data(tabf/100000);write_data(tabf%100000/10000);write_data(tabf%10000/1000);write_data(tabf%1000/100);write_data(tabf%100/10);write_data(tabf%10);_delay_cycles(1000);else if(f >=

27、10000)write_data(tabf/10000);write_data(tabf%10000/1000);write_data(tabf%1000/100);write_data(tabf%100/10);write_data(tabf%10);_delay_cycles(1000);else if(f >= 1000)write_data(tabf/1000);write_data(tabf%1000/100);write_data(tabf%100/10);write_data(tabf%10);_delay_cycles(1000);else if(f >= 100)

28、write_data(tabf/100);write_data(tabf%100/10);write_data(tabf%10);_delay_cycles(1000);else if(f >= 10)write_data(tabf/10);write_data(tabf%10);_delay_cycles(1000);elsewrite_data(tabf);_delay_cycles(1000);/* 名称 : init_uart0* 功能 : 初始化串口* 输入 : 无* 输出 : 无*/void init_uart0() uca0ctl1|=ucswrst; /uca0软件复位

29、/uca0ctl0&=uc7bit;/字符长度为8 uca0ctl1|=ucssel_2;/选择系统时钟:smclk uca0br0=0x6d; /波特率为9600 uca0br1=0; uca0mctl=0;/uca0mctl=ucbrs0; ie2=uca0rxie+uca0txie;/开接收使能 uca0ctl1&=ucswrst; p1sel|=bit1+bit2; /将p1.1 p1.2设为第二功能 p1sel2|=bit1+bit2;/* 名称 : uart0sends* 功能 : 串口发送数据* 输入 : *s* 输出 : 无*/void uart0sendsda

30、ta(char *s) while(*s!='0') uca0txbuf=*s; while(ifg2&uca0txifg)=0); /查询发送是否结束 ifg2&=uca0txifg; /清除发送一标志位 s+; /* 名称 : init_in* 功能 :初始化外部终端* 输入 : 无* 输出 : 无*/void init_in()p1dir |= bit6;p1dir &= bit3;p1ies |= bit3;p1ie |= bit3;p1ifg &= bit3;_eint();void init_timer() tacctl0 = cci

31、e; / ccr0 interrupt enabled taccr0 = 1; tactl = tassel_1 + mc_1 + taie + taclr; /up mode/* 名称 : int_to_string* 功能 :将一个int型数据转换为string型* 输入 : now_f* 输出 : 无*/void int_to_string(unsigned long int now_f)int j = 0;for(j = 0; ;j+)int_arrayj = now_f % 10 + 48 ;now_f = now_f / 10;if(now_f = 0) break;int i =

32、 j ;for(i = j , j = 0; i >= 0; i-,j+)int_to_stringj = int_arrayi;void main()wdtctl = wdtpw + wdthold; p1dir |= bit7; / p1.0 output p1dir |= bit0; if (calbc1_1mhz =0xff | caldco_1mhz = 0xff) while(1); / if calibration constants erased / do not load, trap cpu! /1mhz bcsctl1 = calbc1_1mhz; / set ran

33、ge dcoctl = caldco_1mhz; / set dco step + modulation */lcd_init();init_in();init_timer();init_uart0();showinit();while(1)showf();#pragma vector=port1_vector_interrupt void port_1()if(p1ifg & bit3)p1out = bit6;port_i+;if(port_i>=100)port_i = 0;f =(unsigned long int)(1000000*100.0)/(ta_overflow

34、*65536)+tar);ta_overflow = 0;tactl |= taclr;p1ifg &= bit3;/ timer a0 interrupt service routine#pragma vector=timer0_a0_vector_interrupt void timer_a (void)p1out = bit7;ta_i+;if(ta_i = 2000)p1out = bit0;ta_i = 0;int_to_string(f);unsigned char *s = int_to_string;uart0sendsdata(s);uart0sendsdata("1000");#pragma vector=timer0_a1_ve

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论