引言

在电子测量领域中,频率测量的精确度是最高的,可达10至10

1.001.jpg (946 Bytes, 下载次数: 30)

2017-2-11 03:25 上传

数量级。因此,在生产过程中许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度、加速度,乃至各种气体的百分比成分等均用传感器转换成信号频率,然后用数字频率计来测量,以提高精确度。

国际上数字频率计的分类很多。按功能分类,因计数式频率计的测量功能很多,用途很广。所以根据仪器具有的功能,电子计数器有通用和专用之分。一、通用型计数器:通用型计数器是一种具有多种测量功能、多种用途的万能计数器。它可测量频率、周期、多周期平均值、时间间隔、累加计数、计时等;若配上相应插件,就可测相位、电压、电流、功率、电阻等电量;配上适当的传感器,还可进行长度、重量、压力、温度、速度等非电量的测量。二、专用计数器:专用计数器指专门用来测量某种单一功能的计数器。如频率计数器,只能专门用来测量高频和微波频率;时间计数器,是以测量时间为基础的计数器,其测时分辨力和准确度很高,可达ns数量级;特种计数器,它具有特种功能,如可逆计数器、阈值计数器、差值计数器、倒数计数器等,用于工业和自控技术等方面。数字频率计按频段分类:①低速计数器:最高计数频率<10MHz;②中速计数器:最高计数频率10—100MHz;③高速计数器:最高计数频率>100MHz;④微波频率计数器:测频范围1—80GHz或更高。

由于大规模和超大规模数字集成电路技术、数据通信技术与单片机技术的结合,数字频率计发展进入了智能化和微型化的新阶段。其功能进一步扩大,除了测量频率、频率比、周期、时间、相位、相位差等基本功能外,还具有自捡、自校、自诊断、数理统计、计算方均根值、数据存储和数据通信等功能。可见,频率计是很有工业价值的。本作品即为一个基于单片机的数字频率计,它通过74HC390芯片进行分频,克服了单片机难以处理高频信号的困难,并使用LCD1602液晶显示进行输出,精确度为20万分之一。

1  电路功能、硬件与原理

此次智能电子设计与制作实训本小组的题目为“数字频率计的设计”,在仔细研究了题目要求并通过小组内部积极细致的讨论之后,决定作品采用的功能方案如下:①能测出正弦波、三角波或方波等波形的频率。②频率的测量范围为1Hz—20MHz,且能检测幅度最小值为1Vpp的信号;③通过LCD1602液晶显示屏显示检测到的即时频率数值(最多8位数,单位为Hz)。值得一提的是,当输入频率大于20KHz的信号时,由于采用了100分频采样,显示结果稍有误差,如输入最大测量频率20MHz的信号时,LCD1602液晶显示屏上显示的测量结果为19998900HZ,误差不超过十万分之一,在可接受范围之内。

以下将以待测输入信号走向为顺序介绍电路中各个功能模块。

1.1电路主要模块

1.1.1信号采集模块

1.002.jpg (24.16 KB, 下载次数: 16)

2017-2-11 03:25 上传

图1.1 基于三极管共射放大电路的信号采集模块

为了有效防止因信号过小而造成的检测障碍,在信号输入处采用了三极管共射放大电路,如图1.1所示。实际工作中,我们必须解决放大电路与信号源及放大电路与负载之间的耦合问题。一方面要求耦合电路能够传输交流的输入和输出信号,传输过程中的信号损耗尽可能小;另一方面又要求信号源,放大电路、负载之间的直流工作状态互补影响,即有“隔直”作用,电路的C1、C7就很好的解决了这个问题即固定偏置共射极放大器。集电极电压通过基极偏置电阻R2使晶体管Je正偏;同时拖过R3使Jc反偏,从而实现信号源放大。

1.1.2脉冲产生模块

1.003.jpg (15.59 KB, 下载次数: 23)

2017-2-11 03:25 上传

1.004.jpg (17.18 KB, 下载次数: 27)

2017-2-11 03:25 上传

图1.2 74HC14管脚图和功能图

脉冲产生模块采用74HC14实现了三次施密特触发并反相,从图1.2可以看出,来自信号采集模块的经过放大的信号从74HC14的1脚进入,经过1A→1Y、2A→2Y和3A→3Y三次施密特触发并反相最终将缓慢变化的输入信号转换成清晰、无抖动的信号从6脚输出。

具体到每一个施密特触发反相器来说,其转移特性和输入输出波形关系如图1.3所示。

1.005.jpg (13.67 KB, 下载次数: 16)

2017-2-11 03:25 上传

图1.3 74HC14单个施密特触发器转移特性和输入输出波形

通过Proteus,可以同时观察到有信号输入时74HC14的1脚、2脚、4脚和6脚上的波形仿真。

1.006.jpg (25.63 KB, 下载次数: 10)

2017-2-11 03:25 上传

1.007.jpg (34.51 KB, 下载次数: 20)

2017-2-11 03:25 上传

图1.4 输入信号通过74HC14转换为脉冲

1.1.3分频模块

1.008.jpg (22.64 KB, 下载次数: 32)

2017-2-11 03:25 上传

图1.5 基于双4位十进制波纹计数器74HC390的分频模块

74HC390具有有八个主从触发器和附加门以构成两个独立的4位计数器,其中每个计数器皆包含两个部分:“除2计数部分”和“除5计数部分”,每个计数器又有一个清除输入和一个时钟输入。它可以实现等于2 分频、5 分频乃至100 分频的任何累加倍数的周期长度,且可以连成十进制计数器或二-五进制计数器以分别实现两种进制的数值输出。由于每个计数级都有并行输出,所以系统定时信号可以获得输入计数频率的任何因子。

74HC390具有以下特点:

①A和B触发器都有独立的时钟

②每个计数器都有直接清除

③有效提高系统密度

④缓冲输出减小集电极转换的可能性

1.009.jpg (16.67 KB, 下载次数: 28)

2017-2-11 03:25 上传

图1.6 74HC390单个计数器功能图

从74HC390的单个计数器功能图中可以看出,若从nCP0输入频率为f的时钟信号,则会在nQ0得到频率为f/2的信号;若从nCP1输入时钟信号,则会在nQ1、nQ2、nQ3得到按表1变化的组合信号。

1.010.jpg (16.19 KB, 下载次数: 17)

2017-2-11 03:25 上传

表1 时钟信号从nCP1输入时Q2:Q1:Q0真值表

由此展开设想:由于单片机可操作频率有限,若输入信号频率过大则单片机无法成功实现脉冲计数,因此需要使用74HC390进行分频,以100分频为宜(具体为200KHz以上信号采取100分频后再检测,200KHz或以下信号则检测未经100分频的原始信号)。采取的方法为:从表1中可以看出,若从nCP1输入频率为f的时钟信号,则会在nQ2处输出频率为f/5的脉冲信号,因此可进行如图1.5所示的连线方法,1CP1--1Q2→2CP1--2Q2→1CP0--1Q0→2CP0--2Q0,其中“→”代表芯片外部电气连接,“--”代表芯片内部功能连接,从而得到5×5×2×2=100分频,即若从1CP1输入一个频率为f的信号,则会从2Q0输出一个频率为f/100的分频信号。

1.011.jpg (62.13 KB, 下载次数: 19)

2017-2-11 03:25 上传

1.1.4主芯片

图1.7 主芯片89S52

对于89S52单片机的功能作用本文无需赘言,在此只说明与本作品有关的部分:未经100分频的待测信号接入单片机的定时/计数器0(P3.4),100分频后的待测信号接入单片机的定时/计数器1(P3.5),单片机的P1.0、P1.1、P1.2分别接1602LCD液晶显示模块的片选控制、读写控制和使能控制,而P0.0-P0.7则控制1602芯片的数据引脚D0-D7。另外值得一提的是,此为52单片机,其定时器2具有16位自动重装载中断功能,即为“interrupt 5”中断方式。

1.1.5液晶显示输出模块

1.012.jpg (30.51 KB, 下载次数: 23)

2017-2-11 03:25 上传

图1.8 1602液晶实物图

1.013.jpg (26.24 KB, 下载次数: 14)

2017-2-11 03:25 上传

1.014.jpg (32.68 KB, 下载次数: 27)

2017-2-11 03:25 上传

图1.9 1602液晶引脚排列和引脚功能说明

限于篇幅,本文针对1602液晶显示芯片的功能描述仅限于与本作品相关部分。

首先说明1602液晶显示芯片在本作品上需完成的功能:①没有信号输入时液晶显示“fre= Hz”②有信号输入时液晶显示单片机RAM中的全局变量“fre”的即时数值(最多显示8位,不显示无效的“0”,如若fre=123,则液晶显示“fre=123Hz”)。

以下将结合具体程序来描述1602液晶显示模块在本作品中实现的功能:

①程序头文件

unsigned long int fre;

unsigned char time;

unsigned int count;

unsigned int count1;

sbit   LCD_RS=P1^0;                //片选信号

sbit   LCD_RW=P1^1;                //读写信号

sbit   LCD_E=P1^2;                 //使能信号

#define LCD_DB     P0              //数据信号

unsigned char character[10]={0};//在屏幕上显示的字符串

unsigned char character_1[]={"fre= Hz"};

unsigned char FLAG = 0;

void LCD_init(void);//初始化函数

void LCD_write_command(unsigned char command);//写指令函数

void LCD_write_data(unsigned char dat);//写数据函数

void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某个屏幕位置上显示一个字符,X(0-15),y(1-2)

void delay_n40us(unsigned int n);//延时函数

void timer_init();            //中断初始化函数

②函数设定

void LCD_write_command(unsigned char dat)  //写命令函数

{

LCD_DB=dat;

LCD_RS=0;//指令

LCD_RW=0;//写入

LCD_E=1; //使能

LCD_E=0;

delay_n40us(1);//写命令延时

}

void LCD_write_data(unsigned char dat)                //写数据函数

{

LCD_DB=dat;

LCD_RS=1;//数据

LCD_RW=0;//写入

LCD_E=1;//使能

LCD_E=0;

delay_n40us(1);              //写数据延时

}

1602芯片的4号引脚为RS(数据/命令选择端,1数据寄存器,0指令寄存器),5号引脚为RW(读写选择端,1读,0写),6号引脚为EN(使能端,1允许读写,0禁止读写),因此调用LCD_write_command函数时,变量dat将作为指令信号输入而控制1602芯片,调用LCD_write_data函数时,变量dat将作为数据信号输入1602芯片。

void LCD_init(void)              //液晶初始化函数

{

LCD_write_command(0x38);//设置8位格式,2行,5x7

LCD_write_command(0x38);//设置8位格式,2行,5x7

LCD_write_command(0x38);//设置8位格式,2行,5x7

LCD_write_command(0x0c);//整体显示,关光标,不闪烁

LCD_write_command(0x06);//设定输入方式,增量不移位

LCD_write_command(0x01);//清除屏幕显示

delay_n40us(100);//清屏延时

}

首先需要说明的是,执行三次LCD_write_command(0x38)的目的是让所有1602芯片都兼容。

进行功能设定时,指令格式如下:001 DL N F 00;DL=1时,数据长度为8位,DL=0时,数据长度为4位;N=1时显示双列字,N=0时显示单列字;F=1时显示5×10字形,F=0时显示5×7字形。本作品中采用8位数据格式,2行显示,5x7字符显示,故执行0011 1000B(0x38)指令。

进行显示器开关设定时,指令格式如下:0000 1DCB;D=1时,整体显示;C=1时,开启光标;B=1时,光标所在位置光标闪烁。本作品中采用关闭显示,关光标,不闪烁,故执行0000 1100B(0x0c)指令。

进行进入模式设定时,指令格式如下:0000 01 I/D S;I/D=1时,递增, I/D=0时,递减;S=1时,开启显示屏且整个屏移动;S=0时,屏幕不移动。本作品中采用增量不移位,故执行0000 0110B(0x06)指令。

清屏指令为0000 0001B(0x01)。

void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//显示一个字符

{

unsigned char address;

if(y==1)

address=0x80+x;              //显示在第一排的时候的x的地址

else

address=0xc0+x;              //显示在第二排的时候的x的地址

LCD_write_command(address);              //输入地址

LCD_write_data(dat);                            //输入数据

}

void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//显示一个数字

{

unsigned char address;

if(y==1)

address=0x80+x;              //显示在第一排的时候的x的地址

else

address=0xc0+x;              //显示在第二排的时候的x的地址

LCD_write_command(address);              //输入地址

LCD_write_data(dat+48);                            //输入数据

}

1.015.jpg (12.46 KB, 下载次数: 22)

2017-2-11 03:25 上传

表2 1602液晶显示地址(16列×02行)

根据表2可以了解到1602液晶第一行第一列显示位的地址为0x80,第二行第一列显示位的地址为0xC0,因此LCD_disp_char和LCD_disp_num中的参数y为1时输入的字符或数字将显示在第一行,参数y为0时输入的字符或数字将显示在第二行,出现在哪一列则由参数x决定。

1.016.jpg (139.53 KB, 下载次数: 20)

2017-2-11 03:25 上传

图1.10 1602液晶标准字符库

如图1.10所示,1602液晶可显示的每一个字符都有一个唯一的代码,其中“A”处于0100 0001B(十进制65)位置,“a”处于0110 0001B(十进制97)位置,“0”处于0011 0000B(十进制48)位置,我们知道“A”、“a”和 “0”的ASCII码分别为65、97和48,因此只要在参数dat处直接输入字母或数字的ASCII码即可,字母的ASCII码即为字母本身,数字的ASCII码则为48+数字。

void dis_num(void)

{

unsigned char i=0,j=0,k=0;

LCD_write_command(0x01);//清除屏幕显示

character[0] = fre/10000000;

character[1] = fre/1000000%10;

character[2] = fre/100000%10;

character[3] = fre/10000%10;

character[4] = fre/1000%10;

character[5] = fre/100%10;

character[6] = fre/10%10;

character[7] = fre%10;

character[8] = 'H';

character[9] = 'z';

for(i = 0;i<4;i++)                            //显示fre=

{

LCD_disp_char(i+0,1,character_1[ i]);

}

for(i = 0;i<10;i++)              //判断第一个不为0的数

{

if(character[ i]!=0)

break;

}

k = 8-i;

单片机c语言数字频率计课程设计,单片机数字频率计设计和调试 课程设计论文...相关推荐

  1. 51单片机c语言试题及答案,单片机C语言期末考试题..

    单片机C语言期末考试题..,单片机的c语言应用程序设计,单片机c语言编程,51单片机c语言程序100例,单片机c语言,单片机c语言编程思想,c语言开发单片机,c语言单片机程序,新概念51单片机c语言教 ...

  2. 单片机c语言电梯楼层,基于单片机五层电梯课程设计.pdf

    课程设计报告 课程名称 微机课程设计 设计题目 电梯模拟运行设计 专业班级 自动化1041 姓 名 王 会 学 号 1004421122 指导教师 刘文洲 蔡长青 起止时间 2013.12.23201 ...

  3. 单片机c语言程序开发洗衣机,单片机课程设计(洗衣机控制系统).doc

    实用标准文档 文案大全 PAGE 4 东北石油大学 课 程 设 计 课 程 课 程 单片机课程设计 题 目 洗衣机控制系统设计 院 系 电气信息工程学院 专业班级 测控14-1班 学生姓名 孔锡达 学 ...

  4. 单片机c语言模块化实例程序设计,单片机C语言模块化设计

    原标题:单片机C语言模块化设计 keil中实现 模块化编程.doc 在使用 KEIL 的时候,我们习惯上在一个.c 的文件中把自己要写的东西按照 自己思路的顺序进行顺序书写.这样是很普遍的写法,当程序 ...

  5. 单片机c语言编程教学大纲,《单片机C语言编程》教学大纲

    <单片机C语言编程>教学大纲 课程代码:000002336 课程英文名称:Microcontroller C Programming Language 课程总学时:24 讲课:16 实验: ...

  6. 51单片机c语言学习感想,51单片机实训心得体会

    [www.hywsbj.com--心得体会] 单片机实训有哪些心得体会呢?下面是小编为大家收集的资料,欢迎阅读哦. 51单片机实训心得体会 通过为期一周的单片机实训,是我们对这门课有了许多新的了解,弥 ...

  7. pic单片机c语言存储器定义,PIC单片机C语言程序设计1 7.PDF

    PIC单片机C语言程序设计1 7 学电子跟我来FOLLOW ME PIC 单片机C 语言程序设计(1) ◆ 丁锦滔 编者按:为了帮助具有PI C 单片机汇编语言知识的技术人员或工程师,快速掌握利用C ...

  8. 单片机c语言 i%3c%3c1,单片机C语言作业及上机习题及答案

    <单片机C语言作业及上机习题及答案>由会员分享,可在线阅读,更多相关<单片机C语言作业及上机习题及答案(37页珍藏版)>请在人人文库网上搜索. 1.第一次课熟悉winTC编译环 ...

  9. 单片机c语言小灯闪烁,单片机c语言闪烁灯程序.doc

    单片机c语言闪烁灯程序 1. 闪烁灯 1. 实验任务 如图4.1.1 所示:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮 灭,一亮一灭的时间间隔为0.2 秒. 2. 电路原理图 图4. ...

  10. 51单片机c语言工作手册,51单片机C语言编程手册

    51单片机C语言编程手册 1 第一章 介绍 这是一本关于Intel 80C51 以及广大的51 系列单片机的书这本书介绍给读者一些 新的技术使你的8051 工程和开发过程变得简单请注意这本书的目的可不 ...

最新文章

  1. 数据分析索引总结(下)Pandas索引技巧
  2. php之cookie
  3. 申报成功后怎样修改_【小白教程】12月第3期《申报成功后,如何更正,快快收藏!》...
  4. C# IEnumerable和IEnumerator的区别,如何实现
  5. DisplayMetrics
  6. mysql登录、导入导出、用户权限、事务操作汇总大全
  7. 循环取矩阵的某行_1.2 震惊! 某大二本科生写的矩阵乘法吊打Mathematica-线性代数库BLAS-矩阵 (上)...
  8. 卫生统计学v是什么意思_四川大学华西公共卫生学院报考常见问题答疑
  9. asp.net mysql打包_Asp.net与SQL一起打包部署安装
  10. 调参方法论:如何提高机器学习模型的性能?
  11. java 6 基础_java基础(6)
  12. 受力分析软件_管桁架结构的受力特点是什么?如何计算?
  13. winpe装双系统linux_Winpe下安装Ubuntu
  14. Wi-Fi 6 BSS着色和空间重用白皮书
  15. Windows Server 2003服务器开启远程桌面
  16. 题源报刊第三季--Lesson 3--Gender equality at work is a matter of respect,not just money
  17. 抽象基类与接口,共性与个性的选择!
  18. 孟子《生于忧患,死于安乐》日:“故天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。”...
  19. 2022-2028全球与中国锂电池隔膜市场现状及未来发展趋势
  20. 基于深度学习神经网络的农业病虫害识别(完整代码+数据)

热门文章

  1. 基于JAVA+SpringMVC+Mybatis+MYSQL的线上电器商城
  2. C++结构体实例和类实例的初始化 .
  3. leetcode [78] Subsets
  4. Parcel极速零配置Web应用打包工具
  5. Mysql - 解决Access denied for user ''@'localhost' to database 'mysql'问题
  6. 【Android】Fresco图片加载框架(二)————Producer
  7. Session和Cookie的学习笔记2
  8. 关于RICHEDIT的两个问题
  9. linux usb hcd nak,第16章通用串行总线接口(USB)mpc83xx中文手册.doc
  10. 网站安全配置---挂载路由导航