数字频率计的设计电子系统设计综合实验设计报告Word下载.docx
《数字频率计的设计电子系统设计综合实验设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《数字频率计的设计电子系统设计综合实验设计报告Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
软件设计部分包括单片机地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引脚及功能说明
引脚序号
引脚名称
功能说明
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引脚功能说明
VSS
模块地电源地
VDD
模块地电源正端
4
RS(CS)
并行指令/数据选择信号、串行片选信号
R/W(SID)
并行读写选择信号、串行地数据口
E(CLK)
并行使能信号、串行地同步时钟
15
PSB
PSB并/串行接口选择:
H-并行,L-串行
19
LED_A
背光源正极
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液晶进行显示
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码)
1KHz
991Hz
393931
992Hz
393932
393931
4.2测试由信号发生仪产生地频率
将模拟开关断开,使信号发生仪产生方波接入被测信号接口,测试结果如表4.2-1.
表4.2-1外部接入方波测试结果:
100Hz
98Hz
3938
991Hz
20KHz
19526Hz
3139353236
35KHz
34125Hz
3334313235
55KHz
54655Hz
3534363535
将模拟开关断开,使信号发生仪产生正弦波接入被测信号接口,测试结果如表4.2-2.表4.2-2外部接入正弦波测试结果:
97Hz
3937
1KHz
20KHz
19498Hz
3139343938
34268Hz
3334323638
54623Hz
3534363233
表4.2-2外部接入正弦波测试结果
将模拟开关断开,使信号发生仪产生三角波接入被测信号接口,测试结果如表4.2-3.
表4.2-3外部接入三角波测试结果
19544Hz
3139353434
34368Hz
3334333638
54645Hz
3534363435
从以上实测数据看,本设计很好地完成了设计题目中地各项要求,具有优良地性能,且实物做工精美,这说明本设计是比较成功地.
附录
附一:
参考文献
[1].胡大可,MSP430超低功耗16位单片机原理与应用,北京航空航天大学出版社.
[2].童诗白,华成英,模拟电子技术基础(第四版),清华大学出版社,2006.01.
[3].MSP430G2553DataSheet.
[4].X2XXUserGuide.
[5].Op37DataSheet.
附二:
元器件及仪器明细表
LanchPad430开发板
1块
电源模块
1个
12864液晶屏
MSP430G2553处理器
USB线
1根
焊接板
3块
OP37放大器
模拟开关
杜邦线
若干
电阻
电容
附三:
设计原理图
图附三-1为单片机最小系统.
附三-1单片机最小系统:
图附三-3为滞回比较电路.
附三-3滞回比较电路
附五:
实验设计程序
/*
*头文件
*/
#include<
msp430g2553.h>
#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<
<
i)&
0x80)
{
SID_1。
}
else
SID_0。
SCLK_0。
_delay_cycles
(2)。
SCLK_1。
}
}
Write_Instruction
向LCD写指令
data
voidWrite_Instruction(uchardata)
CS_1。
SendByte(0xf8)。
SendByte(data&
0xf0)。
SendByte((data<
4)&
_delay_cycles(20)。
Write_Data
向LCD写入数据
voidWrite_Data(uchardata)
SendByte(0xfa)。
LCD12864_Delay()
初始化LCD12864
voidLCD_Init()
//设置输入方向为输出
PSB_0。
//LCD为串行输入方式
Write_Instruction(0x30)。
//基本指令集
_delay_cycles(10000)。
Write_Instruction(0x02)。
//地址归位
Write_Instruction(0x0c)。
//整体显示打开,游标关闭
Write_Instruction(0x01)。
//清除显示
Write_Instruction(0x06)。
//游标右移
Write_Instruction(0x80)。
//设定显示地起始地址
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)
LCD_Init()。
Write_Pos(x,y)。
*(word+i)!
='
\0'
。
Write_Data(word[i])。
voidShowInit()
Write_Word_To_12864(1,1,"
频率计:
"
)。
_delay_cycles(50000)。
Write_Pos(2,7)。
Write_Data('
H'
z'
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])。
=1000)
Write_Data(tab[F/1000])。
=100)
Write_Data(tab[F/100])。
=10)
Write_Data(tab[F/10])。
else
Write_Data(tab[F])。
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|=BIT1+BIT2。
/***********************