[键入文字]
频率计设计
一、设计目的
1、掌握 89C52 单片机产生脉冲及定时的简单程序编写。
2、理解频率计的测量原理。
二、设计任务及主要技术指标
设计并仿真测量频率并显示出频率的数字频率计。
三、方案设计及论证
3.1 测量方案
测量频率的方法有很多种,主要分为模拟法和数字法两大类,因为本次设计的要求和环境,现在
主要讨论数字法中的电子计数式的几种测频方法。
电子计数式的测频方法主要有以下几种:脉冲数定时测频法(M 法),脉冲周期测频法(T 法),脉冲
数倍频测频法(AM 法),脉冲数分频测频法(AT 法),脉冲平均周期测频法(M/T 法),多周期同步测频法。
下面是几种方案的具体方法介绍。
脉冲数定时测频法(M 法):此法是记录在确定时间 Tc 内待测信号的脉冲个数 Mx,则待测频率为:
Fx=Mx/Tc(2-1)
脉冲周期测频法(T 法):此法是在待测信号的一个周期 Tx 内,记录标准频率信号变化次数 Mo。
这种方法测出的频率是:
Fx=Mo/Tx (2-2)
[键入文字]
脉冲数倍频测频法(AM 法):此法是为克服 M 法在低频测量时精度不高的缺陷发展起来的。通过
A 倍频,把待测信号频率放大 A 倍,以提高测量精度。其待测频率为:
Fx=Mx/ATo (2-3)
脉冲数分频测频法(AT 法):此法是为了提高 T 法高频测量时的精度形成的。由于 T 法测量时要求
待测信号的周期不能太短,所以可通过 A 分频使待测信号的周期扩大 A 倍,所测频率为:
Fx=AMo/Tx(2-4)
脉冲平均周期测频法(M/T 法):此法是在闸门时间 Tc 内,同时用两个计数器分别记录待测信号的
脉冲数 Mx 和标准信号的脉冲数 Mo。若标准信号的频率为 Fo,则待测信号频率为:
Fx=FoMx/Mo (2-5)
3.2 方案论证
多周期同步测频法:是由闸门时间 Tc 与同步门控时间 Td 共同控制计数器计数的一种测量方法,
待测信号频率与 M/T 法相同。
以上几种方法各有其优缺点:
脉冲数定时测频法,时间 Tc 为准确值,测量的精度主要取决于计数 Mx 的误差。其特点在于:测
量方法简单,测量精度与待测信号频率和门控时间有关,当待测信号频率较低时,误差较大。
脉冲周期测频法,此法的特点是低频检测时精度高,但当高频检测时误差较大。
脉冲数倍频测频法,其特点是待测信号脉冲间隔减小,间隔误差降低;精度比 M 法高 A 倍,但控
制电路较复杂。
脉冲数分频测频法,其特点是高频测量精度比 T 法高 A 倍,但控制电路也较复杂。
脉冲平均周期测频法,此法在测高频时精度较高,但在测低频信号时精度较低。
多周期同步测频法,此法的优点是,闸门时间与被测信号同步,消除了对被测信号计数产生的±1
个字误差,测量精度大大提高,且测量精度与待测信号的频率无关,达到了在整个测量频段等精度测
量。
此次课程设计采用间接测量法来测量。此次设计涉及到相位差,即两列波形异或得到的波形只需
要测高电平,要用到 GATE 信号,GATE=1 时,TR0=1,INTO=1 才能启动计数器,而计数器 0 是
通过外部中断 INTO 的下降沿开始触发的,计时器从 0 开始计时,计数器只能测高电平,因此测得的
时 间 为 半 个 周 期 。 当 计 数 器 0 计 时 溢 出 , 执 行 m 加 1 的 操 作 。 则 测 量 时 间 为 :
t1=TH0*256+TL0+m*65536 ,所求频率 F=1000000/(2*t1) 。
测量两方波的相位差时,先将两方波信号异或,得到的新波形输入外部中断 1 的入口,在信号的第
n 个下跳沿时,进入外部中断的程序,开启计数器 1。第 n+1 个下跳沿到来时,则关闭计数器 1,当
2
[键入文字]
GATE=1 时,只有在 INT1=1 时,TR1=1 时,计数器 T1 才开始计数,当计数器 0 计时溢出,执行
m 加 1 的操作,所以读的的时间只为高电平的持续时间,即为两方波的相隔时间 t2,相位差可计算如
下:t2=TH1*256+TLI+N*65536 ;则相位差 P=t2/(2*t1)*360
关键词:单片机;低频;绝对误差
四、设计基本原理
定时/计数器工作在方式 1,每产生一次定时器 0 中断,计数 65536 个脉冲,此时的脉冲来自振
荡器的 12 分频后的脉冲,其周期为 1uS。根据产生外部中断 0 时,定时器 0 中断的次数 u,以及此
时定时/计数器 0 计数寄存器的数值 X,即可求得待测方波的周期为:T=(65536*u+X)us ,取其倒
数即可求得待测方波的频率,小数点后保留两位,即可使得频率精度为 0.1HZ。
五、单元电路设计,元器件选择,总体电路设计
5.1 单片机最小系统设计
单片机最小系统是能补足单片机工作的最简单电路,它由单片机、电源、晶体振荡器、复位电路
等构成。它是本系统的处理单元也是控制单元,负责处理信号、外设的接口与控制,同时它也是所有
软件的载体。
本系统采用 AT89C52 是美国 Atmel 公司生产的低电压、高性能 CMOS 8 位单片机,片内含
8KB 的可反复檫写的程序存储器和 12B 的随机存取数据存储器(RAM),器件采用 Atmel 公司的高
密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内配置通用 8 位中央处理器(CPU)
和 Flash 存储单元,功能强大的 AT89C52 单片机可灵活应用于各种控制领域。AT89C52 单片机属于
AT89C51 单片机的增强型,与 Intel 公司的 80C52 在引脚排列、硬件组成、工作特点和指令系统等
方面兼容。
主要管脚有:
XTAL1(19 脚)和 XTAL2(18 脚)为振荡器输入输出端口,外接 12MHz 晶振。
RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40 脚)和 VSS(20 脚)为供电端口,分别接+5V 电源的正负端。
P0~P3 为可编程通用 I/O 脚,其功能用途由软件定义。
其管脚如下图所示:
3
[键入文字]
图 1 AT89C52 单片机管脚图
本设计中,P0 端口(32~39 脚)被定义为 N1 功能控制端口,分别与 N1 的相应功能管脚相连
接。单片机正常工作时,都需要有一个时钟电路和一个复位电路。本设计
中选择了内部时钟方式和按键电平复位电路,来构成单片机的最小电路。如图 4 所示。
图 2 单片机最小系统
5.2 液晶 LCD1602 显示电路
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用
16*1,16*2,20*2 和 40*2 行等的模块。LCD1602 分为带背光和不带背光两种,基控制器大部分
为 HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。LCD1602 采用标准的 14
脚(无背光)或 16 脚(带背光)接口,各引脚接口说明如下表 1 所示:
表 1 LCD1602 引脚接口说明
编号 符号 引脚说明 编号 符号 引脚说明
1 VSS
电源地
9 D2
数据
2 VDD
电源正极
10 D3
数据
4
[键入文字]
3 VL
液晶显示偏压
11 D4
数据
4 RS
数据/命令选择
12 D5
数据
5 R/W
读/写选择
13 D6
数据
6 E
使能信号
14 D7
数据
7 D0
数据
15 BLA
背光源正极
8 D1
数据
16 BLK
背光源负极
1602 液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。1602 液晶模块内部
的控制器共有 11 条控制指令,如下表 2 所示,其中 1 为高电平、0 为低电平。
表 2 LCD1602 控制指令
序号 指令
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1
清显示
0 0 0 0 0 0 0 0 0 1
2
光标返回
0 0 0 0 0 0 0 0 1 *
3
置输入模式
0 0 0 0 0 0 0 1 I/D S
4
显示开/关控制
0 0 0 0 0 0 1 D C B
5
光标或字符移位
0 0 0 0 0 1 S/C R/L * *
6
置功能
0 0 0 0 1 DL N F * *
7
置字符发生存贮器地址
0 0 0 1
字符发生存贮器地址
8
置数据存贮器地址
0 0 1
显示数据存贮器地址
9
读忙标志或地址
0 1 BF
计数器地址
10
写数到 CGRAM 或
DDRAM)
1 0
要写的数据内容
指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。
指令 2:光标复位,光标返回到地址 00H。
指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字
是否左移或者右移。高电平表示有效,低电平则无效。
指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示
C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,
低电平不闪烁。
指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。
指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显
示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字符。
指令 7:字符发生器 RAM 地址设置。
指令 8:DDRAM 地址设置。
指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,
如果为低电平表示不忙。
指令 10:写数据。
与 HD44780 相兼容的芯片时序如下表 3 所示:
表 3 基本操作时序表
读状态 输入 RS=L,R/W=H,E=H 输出 D0—D7=状态
字
写指令 输入 RS=L,R/W=L,
D0—D7=指令码,E=高脉冲
输出 无
读数据 输入 RS=H,R/W=H,E=H 输出 D0—D7=数据
5