基于MSP430G2553的简易频率计.docx

上传人:b****3 文档编号:11785347 上传时间:2023-06-02 格式:DOCX 页数:30 大小:1.09MB
下载 相关 举报
基于MSP430G2553的简易频率计.docx_第1页
第1页 / 共30页
基于MSP430G2553的简易频率计.docx_第2页
第2页 / 共30页
基于MSP430G2553的简易频率计.docx_第3页
第3页 / 共30页
基于MSP430G2553的简易频率计.docx_第4页
第4页 / 共30页
基于MSP430G2553的简易频率计.docx_第5页
第5页 / 共30页
基于MSP430G2553的简易频率计.docx_第6页
第6页 / 共30页
基于MSP430G2553的简易频率计.docx_第7页
第7页 / 共30页
基于MSP430G2553的简易频率计.docx_第8页
第8页 / 共30页
基于MSP430G2553的简易频率计.docx_第9页
第9页 / 共30页
基于MSP430G2553的简易频率计.docx_第10页
第10页 / 共30页
基于MSP430G2553的简易频率计.docx_第11页
第11页 / 共30页
基于MSP430G2553的简易频率计.docx_第12页
第12页 / 共30页
基于MSP430G2553的简易频率计.docx_第13页
第13页 / 共30页
基于MSP430G2553的简易频率计.docx_第14页
第14页 / 共30页
基于MSP430G2553的简易频率计.docx_第15页
第15页 / 共30页
基于MSP430G2553的简易频率计.docx_第16页
第16页 / 共30页
基于MSP430G2553的简易频率计.docx_第17页
第17页 / 共30页
基于MSP430G2553的简易频率计.docx_第18页
第18页 / 共30页
基于MSP430G2553的简易频率计.docx_第19页
第19页 / 共30页
基于MSP430G2553的简易频率计.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于MSP430G2553的简易频率计.docx

《基于MSP430G2553的简易频率计.docx》由会员分享,可在线阅读,更多相关《基于MSP430G2553的简易频率计.docx(30页珍藏版)》请在冰点文库上搜索。

基于MSP430G2553的简易频率计.docx

基于MSP430G2553的简易频率计

 

简易频率计

 

学校:

天津工业大学

 

摘要

在电子技术中,频率是最基本的参数之一,数字频率计具有精度高、使用方便、测量迅速、以及便于实现测量过程自动化等优点,是近代电子技术领域的重要工具之一,在许多领域得到广泛应用。

本系统以超低功耗MSP430G2553单片机为核心处理芯片来测量信号的频率,通过定时器A采用计数法完成信号频率测量,并将被测频率值通过LCD12864液晶串行显示。

频率可测量范围在1Hz到60KHz之间。

关键字:

频率430单片机液晶显示串口

1方案论证与比较

1.1测频基本方法和原理比较

方案一:

使用测频法进行频率测量,测频法即在限定的时间内(如1s)检测脉冲的个数。

当被测频率的范围比较高时,使用测频法比较合适。

方案二:

使用测周法进行频率测量,测周法即测试限定的脉冲个数之间的时间。

当被测频率的范围比较低时,使用测周法比较合适。

考虑到较高的测试频率,在此使用方案二,即测频法进行测量。

1.2处理器的方案选择论证

本设计使用TI公司的MSP430G2553低功耗单片机为主控芯片,该单片机的I/O接口较少,但内部资源丰富,如含有10位AD转换、16位定时器/计数器、USART接口等,处理功能强大,足以胜任此次设计任务。

1.3滞回比较电路放大器的选择

方案一:

使用TI公司的OP37放大器,该放大器对信号转换速率快且稳定,适用于对高频信号的转换,但价格较高。

方案二:

使用普通的LM324放大器,该放大器对信号转换速率慢,适用于对低频信号的转换,价格便宜。

考虑到三角波和正弦波在频率较高时转化为方波时对放大器的转化速率要求较高,在此使用方案一,即使用TI公司的OP37放大器作为滞回比较电路的核心转换芯片。

2系统设计

2.1总体设计

系统硬件设计方案如图2.1-1所示:

图2.1-1硬件设计方框图

电源系统由LM7805和200V转±18V中心变压器组成,实现对MSP430G2553核心处理芯片、LCD12864液晶显示提供所需电源。

显示部分由12864液晶对频率值进行实时显示。

软件设计部分包括单片机的I/O中断和定时中断,以及液晶的驱动和显示。

该设计由硬件和软件共同实现了频率计的功能,整体设计过程可概括为:

被测信号通过滞回比较电路整形为适合单片机接收的脉冲信号(方波)输入单片机,单片机通过I/O中断和定时器共同获得被测信号的频率并通过液晶对频率进行实时显示。

2.2单元电路设计

2.2.1MSP430G2553和12864液晶引脚功能说明

2.2.1.1MSP430G2553引脚功能说明

本次设计需要用到430单片机的1脚电源、16脚复位端、20脚接地端、配置P1.0口为待测信号输入端,P2.0为LCD片选信号端,P2.1为LCD串行数据输入\输出端,P2.2为LCD串行时钟输入\输出端,P2.3为LCD串并模式选择端,如表2.2.1.1-1所示。

表2.2.1.1-1MSP430G2553引脚及功能说明

引脚序号

引脚名称

功能说明

1

VCC

电源正

2

P1.0

频率信号输入端

3

P1.1

1KHz方波产生引脚

5

P2.0

LCD片选信号端

6

P2.1

LCD串行数据输入\输出端

7

P2.2

LCD串行时钟输入\输出端

8

P2.3

LCD串并模式选择端

16

RST

复位脚

20

GND

电源地

2.2.1.2LCD12864引脚功能说明

LCD12864液晶显示屏用到1、2脚,电源接口线,19、20脚背光电源接口线,15脚并行/串行接口选择,5脚串行数据口,6脚串行的同步时钟。

LCD12864引脚功能如表2.2.1.2-2所示。

表2.2.1.2-2LCD12864引脚功能说明

引脚序号

引脚名称

功能说明

1

VSS

模块的电源地

2

VDD

模块的电源正端

4

RS(CS)

并行指令/数据选择信号、串行片选信号

5

R/W(SID)

并行读写选择信号、串行的数据口

6

E(CLK)

并行使能信号、串行的同步时钟

15

PSB

PSB并/串行接口选择:

H-并行,L-串行

19

LED_A

背光源正极

20

LED_K

背光源负极(0V)

2.2.2滞回比较电路设计

滞回比较电路将输入信号波形转化为脉冲信号,另外波形变换和波形整形电路实现把正弦波样的正负交替的信号波形变换成可被单片机接收的TTL信号,以便单片机对其进行频率测量,最后将测得的数据通过12864液晶显示。

滞回比较器是一个具有迟滞回环传输特性的比较器。

在反相输入单门限电压比较器的基础上引入正反馈网络,就组成了具有双门限值的反相输入滞回比较器。

由于反馈的作用这种比较器的门限电压是随输出电压的变化而变化的。

它的灵敏度低一些,但抗干扰能力却大大提高。

反相滞回比较器的电路组成如图2.2.2-1所示,如果把VI和VREF位置互换,就可以构成同相输入迟滞比较器。

图2.2.2-1反相滞回比较器电路组成

滞回比较器又可理解为加正反馈的单限比较器。

对于单限比较器,如果输入信号在门限值附近有微小的干扰,则输出电压就会产生相应的抖动(起伏),而在此电路中引入正反馈可以克服这一缺点。

整个滞回比较电路原理图如图2.2.2-2所示。

图2.2.2-2滞回比较电路图

OP37和R4、R8组成滞回比较器,对被测信号转化为脉冲信号,二极管实现对脉冲信号进行整形,滤去负电平部分,变成可被单片机接收的TTL信号,输入到单片机,以实现频率测量。

2.2.3显示电路设计

该频率计采用12864液晶进行显示,器件实物如图2.2.3-1所示。

图2.2.3-112864液晶显示器实物图

12864液晶显示器是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集。

利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4行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口输入/输出功能的配置,时钟初始化,端口初始化以及液晶初始化,开总中断,其流程图如图3.2.1-1所示。

3.2.1-1系统初始化流程图

3.2.2中断模块

首先开启定时溢出中断和I/O中断,再打开总中断,计数器开始计数,当计数溢出时进入溢出中断,且溢出次数加1,当有上升沿到来时,进入I/O中断,计算两次中断之间(一个周期内)的计数值,并转化为频率值。

TA中断流程图如图3.2.2-1所示。

图3.2.2-1TA中断流程图

I/O中断流程图如图3.2.2-2所示。

图3.2.2-2I/O中断流程图

3.2.3显示模块

首先根据12864液晶的时序图写出液晶驱动函数,并调用驱动函数完成在指定位置处显示字符的功能函数,这样通过定时刷新液晶屏就可以显示频率值了,而且显示位置可以根据需要任意指定。

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-1430单片机自身产生方波测试结果

次数

实际频率

测试频率

串口发送频率(ASCII码)

1

1KHz

991Hz

393931

2

1KHz

992Hz

393932

3

1KHz

992Hz

393931

4.2测试由信号发生仪产生的频率

将模拟开关断开,使信号发生仪产生方波接入被测信号接口,测试结果如表4.2-1。

表4.2-1外部接入方波测试结果:

次数

实际频率

测试频率

串口发送频率(ASCII码)

1

100Hz

98Hz

3938

2

1KHz

991Hz

393931

3

20KHz

19526Hz

3139353236

4

35KHz

34125Hz

3334313235

5

55KHz

54655Hz

3534363535

将模拟开关断开,使信号发生仪产生正弦波接入被测信号接口,测试结果如表4.2-2。

表4.2-2外部接入正弦波测试结果:

次数

实际频率

测试频率

串口发送频率(ASCII码)

1

100Hz

97Hz

3937

2

1KHz

992Hz

393932

3

20KHz

19498Hz

3139343938

4

35KHz

34268Hz

3334323638

5

55KHz

54623Hz

3534363233

表4.2-2外部接入正弦波测试结果

将模拟开关断开,使信号发生仪产生三角波接入被测信号接口,测试结果如表4.2-3。

表4.2-3外部接入三角波测试结果

次数

实际频率

测试频率

串口发送频率(ASCII码)

1

100Hz

97Hz

3937

2

1KHz

991Hz

393931

3

20KHz

19544Hz

3139353434

4

35KHz

34368Hz

3334333638

5

55KHz

54645Hz

3534363435

从以上实测数据看,本设计很好地完成了设计题目中的各项要求,具有优良的性能,且实物做工精美,这说明本设计是比较成功的。

附录

附一:

参考文献

[1].胡大可,MSP430超低功耗16位单片机原理与应用,北京航空航天大学出版社.

[2].童诗白,华成英,模拟电子技术基础(第四版),清华大学出版社,2006.01.

[3].MSP430G2553DataSheet.

[4].X2XXUserGuide.

[5].Op37DataSheet.

附二:

元器件及仪器明细表

LanchPad430开发板

1块

电源模块

1个

12864液晶屏

1个

MSP430G2553处理器

1个

USB线

1根

焊接板

3块

OP37放大器

1个

模拟开关

1个

杜邦线

若干

电阻

若干

电容

若干

附三:

设计原理图

图附三-1为单片机最小系统。

附三-1单片机最小系统:

 

图附三-2为LCD12864液晶显示电路。

附三-2LCD12864液晶显示电路:

图附三-3为滞回比较电路。

附三-3滞回比较电路

图附三-4为模拟开关。

附三-4模拟开关

附四:

整体事物图

附五:

实验设计程序

/*

*头文件

*/

#include

#include"stdio.h"

/*

*全局变量的定义和宏定义

*/

unsignedintstart,end;

unsignedlongintF=0;

unsignedcharTA_overflow;

unsignedintTA_i=0;

unsignedintport_i;

unsignedchartab[]={"0123456789"};

unsignedchara[8];

unsignedcharint_to_string[10];

unsignedcharint_array[10];

#defineucharunsignedchar

#defineuintunsignedint

#defineCS_0P2OUT&=~BIT0//片选为低电平

#defineCS_1P2OUT|=BIT0//片选为高电平

#defineSID_0P2OUT&=~BIT1//串行数据输入为0

#defineSID_1P2OUT|=BIT1//串行数据输入为1

#defineSCLK_0P2OUT&=~BIT2//时钟线拉低

#defineSCLK_1P2OUT|=BIT2//时钟线拉高

#definePSB_0P2OUT&=~BIT3//出行输入

#defineLCD_DIR_OUTP2DIR|=BIT0+BIT1+BIT2+BIT3//4个端口设置为输出

/********************************************************************

*名称:

SendByte

*功能:

发送数据

*输入:

Dbyte

*输出:

***********************************************************************/

voidSendByte(ucharDbyte)

{

uchari;

LCD_DIR_OUT;

for(i=0;i<8;i++)

{

if((Dbyte<

{

SID_1;

}

else

{

SID_0;

}

SCLK_0;

_delay_cycles

(2);

SCLK_1;

}

}

/********************************************************************

*名称:

Write_Instruction

*功能:

向LCD写指令

*输入:

data

*输出:

***********************************************************************/

voidWrite_Instruction(uchardata)

{

LCD_DIR_OUT;

CS_1;

SendByte(0xf8);

SendByte(data&0xf0);

SendByte((data<<4)&0xf0);

_delay_cycles(20);

}

/********************************************************************

*名称:

Write_Data

*功能:

向LCD写入数据

*输入:

data

*输出:

***********************************************************************/

voidWrite_Data(uchardata)

{

LCD_DIR_OUT;

CS_1;

SendByte(0xfa);

SendByte(data&0xf0);

SendByte((data<<4)&0xf0);

_delay_cycles(20);

}

/********************************************************************

*名称:

LCD12864_Delay()

*功能:

初始化LCD12864

*输入:

*输出:

***********************************************************************/

voidLCD_Init()

{

LCD_DIR_OUT;//设置输入方向为输出

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);//设定显示的起始地址

_delay_cycles(10000);

}

/********************************************************************

*名称:

Write_Pos

*功能:

确定输入数据的位置

*输入:

x,y

*输出:

***********************************************************************/

voidWrite_Pos(ucharx,uchary)

{

ucharpos;

if(x==1)//第一行显示

x=0x80;

elseif(x==2)//第二行显示

x=0x90;

elseif(x==3)//第三行显示

x=0x88;

elseif(x==4)//第四行显示

x=0x98;

pos=x+y-1;

Write_Instruction(pos);//显示地址

}

/********************************************************************

*名称:

Write_Word_To_12864

*功能:

在坐标x,y处写入数据

*输入:

x,y,*word

*输出:

***********************************************************************/

voidWrite_Word_To_12864(ucharx,uchary,uchar*word)

{

uchari;

LCD_Init();

Write_Pos(x,y);

for(i=0;*(word+i)!

='\0';i++)

{

Write_Data(word[i]);

}

}

voidShowInit()

{

Write_Word_To_12864(1,1,"频率计:

");

_delay_cycles(50000);

Write_Pos(2,7);

Write_Data('H');

Write_Data('z');

_delay_cycles(10000);

}

voidShowF()

{

Write_Pos(2,4);

if(F>=100000)

{

Write_Data(tab[F/100000]);

Write_Data(tab[F%100000/10000]);

Write_Data(tab[F%10000/1000]);

Write_Data(tab[F%1000/100]);

Write_Data(tab[F%100/10]);

Write_Data(tab[F%10]);

_delay_cycles(1000);

}

elseif(F>=10000)

{

Write_Data(tab[F/10000]);

Write_Data(tab[F%10000/1000]);

Write_Data(tab[F%1000/100]);

Write_Data(tab[F%100/10]);

Write_Data(tab[F%10]);

_delay_cycles(1000);

}

elseif(F>=1000)

{

Write_Data(tab[F/1000]);

Write_Data(tab[F%1000/100]);

Write_Data(tab[F%100/10]);

Write_Data(tab[F%10]);

_delay_cycles(1000);

}

elseif(F>=100)

{

Write_Data(tab[F/100]);

Write_Data(tab[F%100/10]);

Write_Data(tab[F%10]);

_delay_cycles(1000);

}

elseif(F>=10)

{

Write_Data(tab[F/10]);

Write_Data(tab[F%10]);

_delay_cycles(1000);

}

else

{

Write_Data(tab[F]);

_delay_cycles(1000);

}

}

/********************************************************************

*名称:

Init_uart0

*功能:

初始化串口

*输入:

*输出:

***********************************************************************/

voidInit_uart0()

{

UCA0CTL1|=UCSWRST;//UCA0软件复位

//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.1P1.2设为第二功能

P1SEL2|=BIT

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

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

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