当前位置:文档之家› 高精度单片机频率计的设计

高精度单片机频率计的设计

1 / 1 《综合课程设计》

一.数字频率计的设计

姓名:万咬春 学号2005142135

一、课程设计的目的

通过本课程设计使学生进一步巩固光纤通信、单片机原理与技术的基本概念、基本理论、分析问题的基本方法;增强学生的软件编程实现能力和解决实际问题的能力,使学生能有效地将理论和实际紧密结合,拓展学生在工程实践方面的专业知识和相关技能。

二、课程设计的内容和要求

1.课程设计内容

(硬件类)频率测量仪的设计

2.课程设计要求

频率测量仪的设计

要求学生能够熟练地用单片机中定时/计数、中断等技术,针对周期性信号的特点,采用不同的算法,编程实现对信号频率的测量,将测量的结果显示在LCD 1602上,并运用Proteus软件绘制电路原理图,进行仿真验证。

三.实验原理

可用两种方法测待测信号的频率

方法一:(定时1s测信号脉冲次数)

用一个定时计数器做定时中断,定时1s,另一定时计数器仅做计数器使用,初始化完毕后同时开启两个定时计数器,直到产生1s中断,产生1s中断后立即关闭T0和T1(起保护程序和数据的作用)取出计数器寄存器内的值就是1s内待测信号的下跳沿次数即待测信号的频率。用相关函数显示完毕后再开启T0和T1这样即可进入下一轮测量。

原理示意图如下:

1 / 1 实验原理分析:

1. 根据该实验原理待测信号的频率不应该大于计数器的最大值65535,也就是说待测信号应小于65535Hz。

2. 实验的误差应当是均与的与待测信号的频率无关。

方法二(测信号正半周期)

对于1:1占空比的方波,仅用一个定时计数器做计数器,外部中断引脚作待测信号输入口,置计数器为外部中断引脚控制(外部中断引脚为“1”切TRx=1计数器开始计数)。单片机初始化完毕后程序等待半个正半周期(以便准确打开TRx)打开TRx,这时只要INTx(外部中断引脚)为高电平计数器即不断计数,低电平则不计数,待信号从高电平后计数器终止计数,关闭TRx保护计数器寄存器的值,该值即为待测信号一个正半周期的单片机机器周期数,即可求出待测信号的周期:待测信号周期T=2*cnt/(12/fsoc) cnt为测得待测信号的一个正半周期机器周期数;fsoc为单片机的晶振。所以待测信号的频率f=1/T。

原理示意图如下:

实验原理分析:

1. 根据该实验原理该方法只适用于1:1占空比的方波信号,要测非1:1占空比的方波信号

2. 由于有执行f=1/(2*cnt/(12/fsoc))的浮点运算,而数据类型转换时未用LCD浮点显示,故测得的频率将会被取整,如1234.893Hz理论显示为1234Hz,测得结果会有一定程度的偏小。也就是说测量结果与信号频率的奇偶有一定关系。

3. 由于计数器的寄存器取值在1~65535之间,用该原理时,待测信号的频率小于单片机周期的1/12时,单片机方可较标准的测得待测信号的正半周期。故用该原理测得信号的最高频率理论应为fsoc/12 如12MHZ的单片机为1MHz。而最小频率为f=1/(2*65535/(12/fsoc)) 如12MHZ的单片机为8Hz。

四.实验内容及步骤

1. 仿真模型的构建

数字方波频率计的设计总体可分为两个模块。一是信号频率测量,二是将测得的频率数据显示在1602液晶显示模块上。因此可搭建单片机最小系统构建构建频率计的仿真模型。原理图,仿真模型的总原理图如下:

1 / 1

2. 液晶显示部分功能与原理分析

由于此部分并非课程的主要部分,故仅作简要原理分析

A.1602硬件接口及功能接口

//硬件接口部分**********************************************************

sbit LcdRs = P2^0;

sbit LcdRw = P2^1;

sbit LcdEn = P2^2;

sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口

//向LCD写入命令或数据

************************************************************

#define LCD_COMMAND 0 // Command

#define LCD_DATA 1 // Data

#define LCD_CLEAR_SCREEN 0x01 // 清屏

#define LCD_HOMING 0x02 // 光标返回原点

//设置显示模式************************************************************

#define LCD_SHOW 0x04 //显示开

#define LCD_HIDE 0x00 //显示关

#define LCD_CURSOR 0x02 //显示光标

#define LCD_NO_CURSOR 0x00 //无光标

#define LCD_FLASH 0x01 //光标闪动

#define LCD_NO_FLASH 0x00 //光标不闪动

//设置输入模式************************************************************

#define LCD_AC_UP 0x02 //将光标返回0x00

#define LCD_AC_DOWN 0x00 // default

#define LCD_MOVE 0x01 // 画面可平移

#define LCD_NO_MOVE 0x00 //default

1 / 1

B.1602初始化流程和原理框图

void LCD_Initial()

{

LcdEn=0;

LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵

LCD_Write(LCD_COMMAND,0x38);

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动

}

C. 写DDRAM地址(原理框图如上)

void GotoXY(unsigned char x, bit y)

{ if(y==0)

LCD_Write(LCD_COMMAND,0x80|x);

if(y==1)

LCD_Write(LCD_COMMAND,0x80|(x-0x40));

}

D.写字符串(原理框图如上)

void Print(unsigned char *str)

{ while(*str!='\0')

{ LCD_Write(LCD_DATA,*str);

str++;

} 开始

清使能端写命令:8位数据端口,2行显示,5*7点阵

重写控制命令

写命令:开启显示, 无光标

写命令:清屏

写命令:AC递增, 画面不动 结束

初始化流程 开始

y=0? x,y

Y N

写命令(80H+x)

写命令(80H+40H+x)

初始化结束

写DDRAM地址,DDRAM地址与屏幕相对应 开始

*str=0字符串首地址str

Y N

写写数据*str

str地址加1

结束

写字符串

1 / 1 }

3.程序机原理框图(关于显示函数部分不列出,只分析算法函数)

方法一:

用定时计数器T0做脉冲计数器(下跳沿有效),开始与暂停由T1控制定时计数器T1做定时中断,定时1s,定时开启置T0开始计数,定时完毕,置T0为暂停,关闭T1,读取计数数据并清空计数器,将计数数据装换为有效规范的字符串显示后再开启T0和T1,进入下一轮测量。

以下是程序的核心部分:(定时1s,取计数数,并将其转换显示出来)原理框图如下

void timer1() interrupt 3 //定时50ms

{ TH1=THCLK;

TL1=TLCLK;

if(--Cnt==0) //Cnt初值为20

{

TR0=0; TR1=0;

Cnt=CntNum;

tmp=TH0*256+TL0;

TH0=TL0=0;

Dynamic_LCD_Print();

TR0=1;

TR1=1;

}

}

方法二:

用一个定时计数器做计数器,外部中断引脚作待测信号输入口,置计数器为外部中断引脚控制(外部中断引脚为“1”切TRx=1计数器开始计数)。单片机初始化完毕后程序等待半个正半周期(以便准确打开TRx)打开TRx,这时只要INTx(外部中断引脚)为高电平计数器即不断计数,低电平则不计数,待信号从高电平后计数器终止计数,关闭TRx保护计数器寄存器的值,该值即为待测信号一个正半周期的单片机机器周期数,即可求出待测信号的周期:待测信号周期T=2*cnt/(12/fsoc) cnt为测得待测信号的一个正半周期机器周期数;fsoc为单片机的晶振。所以待测信号的频率f=1/T。

以下是程序的核心部分:(原理框图如下)

void chkfreq() //

{ while(FreqIN==0);

while(FreqIN==1);

TR0=1;

while(FreqIN==0);

while(FreqIN==1);

TR0=0;

cnttime=500000/(TH0*256+TL0);

TH0=TL0=0;

tmp=(int)cnttime;

Dynamic_LCD_Print();

}

4.原理框图如下

相关主题