找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9794|回复: 6
收起左侧

基于51单片机的数字频率计设计资料,含仿真工程和源代码

  [复制链接]
ID:348166 发表于 2018-7-21 21:44 | 显示全部楼层 |阅读模式


本文提出设计数字频率计的方案,重点介绍以单片机AT89C52为控制核心,实现频率测量的数字频率设计。测频的基本原理是采用在低频段直接测频法,在低频段直接测频法的设计思路,硬件部分由单片机和数计显示电路组成;软件部分由信号频率测量模块和数据显示模块等模块实现。应用单片机的控制功能和数学运算能力,实现计数功能和频率的换算。设计的频率计范围能够达到1Hz~9999Hz,满足所要求的频率范围,测量精度较高。


一、引言
数字频率计是一种基础测量仪器,到目前为止已有 30 多年的发展史。早期,设计师们追求的目标主要是扩展测量范围,再加上提高测量精度、稳定度等,这些也是人们衡量数字频率计的技术水平,决定数字频率计价格高低的主要依据。目前这些基本技术日臻完善,成熟。应用现代技术可以轻松地将数字频率计的测频上限扩展到微频段。

随着科学技术的发展,用户对数字频率计也提出了新的要求。对于低档产品要求使用操作方便,量程(足够)宽,可靠性高,价格低。而对于中高档产品, 则要求有高分辨率,高精度,高稳定度,高测量速率;除通常通用频率计所具有的功能外,还要有数据处理功能,统计分析功能,时域分析功能等等,或者包含电压测量等其他功能。这些要求有的已经实现或者部分实现,但要真正完美的实现这些目标,对于生产厂家来说,还有许多工作要做,而不是表面看来似乎发展到头了。

随着数字集成电路技术的飞速发展,应用计数法原理制成的数字式频率测量仪器具有精度高、测量范围宽、便于实现测量过程自动化等一系列的突出特点。

  • 总体方案设计
    2.1主要工作和方法

设计一个数码管显示数字频率计。要求频率测量范围为1Hz-9999Hz。数字显示位数为四位静态十进制计数显示被测信号。先确定好数字频率计的组成部分,然后分部分设计,最后组成电路。

  • 电路原理分析
    3.1数字频率计概念
        数字频率计是一种直接用十进制数字现设被测信号频率的一种测量装置,它不仅可以测量正弦波、方波、三角波等信号的频率,而且还可以用它来测量被测信号的周期。经过改装,在电路中增加传感器,还可以做成数字脉搏计、电子称、计价器等。因此,数字频率计在测量物理量方面有广泛的应用。

2.1.2数字频率计组成

数字频率计由振荡器、分频器、放大整形电路、控制电路、计数译码显示电路等部分组成。其中的控制脉冲采用时钟信号源替代,待测信号用函数信号发生器产生。数字频结构原理框图如图2.1


图3.1 数字频率计结构

3.2控制电路
控制电路是整个数字频率计正常工作的核心部分,需仔细分析各种频率信号(计数、选通、锁存、清零)的时序关系,以最终控制计数译码显示电路的工作状态。由于功能要求识别的最小频率是1Hz,因此将选通信号的高电平时间定为1s,在这个时间段内允许待测信号输入进行计数,锁存和清零信号的输出均为高电平。在选通信号为低电平时关闭闸门,计数停止,处于数据锁存的时间段,此时的锁存信号为低电平,清零信号仍为高电平,直到选通信号的下一个高电平到来之前(开始下一个计数),清零信号端输出一个低电平实现数码管显示的清零,准备进入下一个计数周期。如此往复,以实现待测信号频率的反复测量。这几个信号的工作时序如图4.2所示。选通信号计数信号… 锁存信号

清零信号

                图3.2 控制电路各频率信号时序关系

当JK触发器的J、K端同时接高电平时,输出端的状态会随着每输入一个脉冲改变一次。因此JK触发器输入端的频率是输出端的两倍,这就是通常认为的二分频。将输出端加到下一个JK触发器的时钟端又可实现频率的再次二分频,以此类推可实现频率的逐次分频.根据控制电路各信号时序分析得知,选通信号的周期应大于等于锁存信号和清零信号,因此选用上述电路的Q2端作为选通信号的输出端,假定选通信号的高电平时间为1s,那Q2端的频率应为0.5Hz,由此可推出CP端和Q1端的信号频率分别为2Hz和1Hz。在Q2端的选通信号为高电平时,允许计数,频率计开始工作,当Q2端进入低电平段,频率计转为锁存阶段,直至下一个Q2端高电平到来前需要一个清零信号。观察图的工作时序可知,在Q2端的第二个高电平到来前,CP、Q1、Q2端均为低电平,用一个3输入的或门将这三个端口连接,输出一个低电平作为清零信号,加到计数译码显示电路的CLR端。由此得到选通信号周期为2s,计数时间为1s,锁存时间为0.75s,清零时间为0.25s。

四、具体电路实现
4.1仿真图


五、电路性能指标
5.1仿真过程
5.1.1输入1Hz

5.1.2输入100Hz

5.1.1输入1000Hz

5.1.4输入5000Hz

5.1.5输入9000Hz

5.2误差分析

       ——

测量值

     真实值

      误差

     1Hz

     1Hz

     1Hz

       0%

     100Hz

100Hz

100Hz

       0%

     1000Hz

1001Hz

1000Hz

       0.1%

     5000Hz

5001Hz

5000Hz

       0.02%

     9000Hz

9003Hz

9000Hz

       0.033%

     平均误差

      ——

     ——

       0.03%


六、总结和体会
对于本次设计一个测量1Hz~9999Hz的数码管显示数字频率计还是很成功的,误差只有0.03%。
我的体会就是系统的分析与设计过程也是对学习的总结过程,更是进一步学习和探索的过程。在这过程中,我对利用可编程控制器进行控制系统的设计与开发有了深刻的的认识,对机械手的工作原理有了进一步的掌握,对控制系统的分析与设计有了切身的认识和体会,并在学习和实践过程中增长了知识,丰富了经验。控制系统的开发设计是一项复杂的系统工程,必须严格按照系统分析、系统设计、系统实施、系统运行与调试的过程来进行。系统的分析与设计是一项很辛苦的工作,同时也是一个充满乐趣的过程。在设计过程中,要边学习,边实践,遇到新的问题就不断探索和努力,即可使问题得到解决。同时,在本次设计中,也深刻体会到理论和实践相集合的重要性。虽然之前收集了大量的资料但在实际应用中却有很大差异,出现了许多意想不到的问题。但经过长时间的摸索最终还是设计出达到要求的系统。由于时间紧迫,有些设计工作还有待完善,在以后的工作中我会继续努力,不断提高自己的技术水平,以适应未来的激烈竞争形势。


单片机源程序如下:


  1. #include <reg52.h >
  2. #include <intrins.h >
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit  k1=P3^0;
  6. sbit  k2=P2^0;
  7. sbit  LED=P2^1;
  8. unsigned  char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  9. unsigned  char code dispcode[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  10. unsigned  char count [8]={0, 0, 0, 0, 0, 0, 0, 0};
  11. unsigned  int  T0count =0;
  12. unsigned  char time1tick =0;
  13. unsigned  char i =0,a=0,j=0,y=0;
  14. unsigned  int x ;
  15. void pulse_init (void)
  16. {
  17.   TMOD =0x16;
  18.   TH0=0x00;
  19.   TL0=0x00;
  20.   TH1=(65536-50000)/256;
  21.   TL1=(65536-50000)%256;
  22.   ET0=1;
  23.   ET1=1;
  24.   EA=1;        
  25. }
  26. void delay (uint ms)
  27. {
  28.   unsigned char i,j;
  29.   for(i =0; i<ms; i ++)
  30.   for(j =0; j<250;j ++)
  31.   {
  32.         _nop_();
  33.         _nop_();
  34.     _nop_();
  35.    }
  36. }
  37. static void time0_int (void) interrupt 1 using 0
  38. {
  39.   T0count ++;
  40. }
  41. void t1(void) interrupt 3 using 0
  42. {
  43.   time1tick++;
  44.   TH1=(65536-50000)/256;
  45.   TL1=(65536-50000)%256;
  46.   if (time1tick==10*a)
  47.   {
  48.     time1tick=0;
  49.     TR0=0;
  50.     TR1=0;
  51.     ET0=0;
  52.     ET1=0;
  53.   }
  54. }

  55. void display (void)
  56. {
  57.   x=256*T0count+TL0;
  58.   i=7;
  59.   while(x)
  60.   {
  61.     count[i]=x%10;
  62.     x=x/10;
  63.     i--;        
  64.   }
  65.   while(i--)
  66.   {
  67.     count[i]=10;//修改
  68.   }
  69.   for(i=0;i<8;i++)
  70.   {     
  71.         if(i==7&&j==1)
  72.         {
  73.                 P1=0x80;
  74.                 delay(1);
  75.     }
  76.            P0=dispbit[i];
  77.            P1=dispcode[count[i]];
  78.            delay(1);
  79.   }
  80. }
  81. void main()
  82. {        

  83.   if(!k2)
  84.   {
  85.     delay(5);
  86.         if(!k2)
  87.         j=0;
  88.         else
  89.                 j=1;
  90.   }
  91.   switch(j)
  92. ……………………

  93. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png

所有资料51hei提供下载:

单片机课程设计201508402146.zip (330.07 KB, 下载次数: 351)

回复

使用道具 举报

ID:502024 发表于 2019-4-8 16:50 | 显示全部楼层
我想知道程序框图是什么。
回复

使用道具 举报

ID:724058 发表于 2020-4-28 22:12 | 显示全部楼层
用Proteus7.5终于打开了,新版打不开
51hei.png
回复

使用道具 举报

ID:772658 发表于 2020-6-9 09:51 | 显示全部楼层
非常感谢
回复

使用道具 举报

ID:777989 发表于 2020-6-14 16:06 | 显示全部楼层
感谢老铁
回复

使用道具 举报

ID:777989 发表于 2020-6-14 16:07 | 显示全部楼层
非常感谢
回复

使用道具 举报

ID:777989 发表于 2020-6-15 13:23 | 显示全部楼层
兄弟 为什么我下载的仿真不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表