基于CPLD和单片机的频率计设计.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于CPLD和单片机的频率计设计 引言: 随着电子技术与计算机技术的不断发展,以单片机为核心的测量控制系统层出不穷。在被测信号中,较多的是模拟和数字开关信号,而且还经常遇到以频率为参数的被测信号,例如流量、转速、晶体压力传感器以及经过参变量一频率转换后的信号等。本次试验采用测频法,通过方案优化,达到了较高的精度。 该测频系统的设计采用AT89C51单片机和具有内部结构重组、现场可编程的CPLD芯片相结合起来,实现了对IHz~10MHz信号频率的高精度测量。系统的整体稳定性和精度较高,达到了测频对精准度的要求。 正文: 实验设计原理 1.1 实验基本框架 图一 传统的测频原理是在一定的时间间隔T内测某个周期信号的重复变化次数N,其频率可表示为f=N/T,其原理框图如图2所示。这种测量方式的精度随被测信号频率的下降而降低。 图二 关于误差的分析将在下文中阐述。 1.2 本实验采用等精度测频的原理为: 首先,Clock即标准时钟信号进过分频产生周期为1.25s,占空比为80%的闸门信号,从而闸门宽度为1s,将分频产生的信号和被测信号相与的结果即为计数器的技术时钟信号,在这1s的时间宽度内技术到的结果就是被测信号的频率值,通过多路选择器,有单片机发送地址,每次四位将数据传送给单片机,经过单片机的代码转换,使用7个8段数码管显示。 具体原理如图三所示。 图三 1.3 CPLD模块逻辑设计 1.3.1分频模块的实现 分频器采用25位的二进制计数器,产生周期1.25s,占空比80%的宽度为1s的闸门信号。 下图为在ISE仿真环境下的闸门输出。 图四 1.3.2计数器 计数器采用28的BCD码计数,局部计数方式如下: if((en==1b1)(clr==1b0)(q34b1001)) begin q3 =q3+4b0001; end else begin q3=4b0000; 下图为在ISE仿真环境下的计数结果: 图五 鉴于数据较大,所以,我们仿真时候只选取了12位数据,结果是正确的。 1.3.2多路选择器 有单片机提供3位地址信号,每次送四位数据给单片机,传送7次数据即可。 1.4 单片机主控模块 P1口用来作为数码管的7个位选信号; P2口用来向单片机提供段选码; Latch:即与案例框图中由分频链给单片机的时钟信号,为了实现单片机与CPLD工作的同步而做的;在Latch信号为高电平期间单片机取数据,而此时,CPLD由于闸门为低电平使得计数停止;在Latch为低电平时,单片机部取数,而CPLD在计数。从而保证两者的正常工作。 P0口的低四位用来取数,P3口地高三位用来传送地址; 单片机采用定时中断显示,每1ms改变一位,实现动态显示。 测频精度分析 图六 计数法测频误差示意图 说明:∵ f x = 由误差合成公式有  上式中第一项为量化误差,是由于被测信号与门控闸门信号不相关引起的。 设主门的开启时间为T ,被测信号周期为Tx ,主门开启时刻至下一个计数脉冲的前沿为, 主门关闭时刻至下一个计数脉冲的前沿为,如上图所示。 其最大误差为±1 个量化单位,则最大量化误差的相对值为。 由式得到,被测频率越高,闸门时间越长,则量化误差越小. 但闸门时间太长,则降低测量速度,且受到显示位数的限制。 实验结果 在试验中,频率计在1HZ到1KHZ段的误差很小,几乎可仪忽略不计,在高频时的进度也很好,如下表示: 信号/HZ 333 555 777 10k 100k 500k 1M 5M 9M 测量值/HZ 333 555 777 10024 100K 500012 1000134 5000154 9000223 附录:mcu部分 #include reg51.h sbit Dig1 = P1^0; sbit Dig2 = P1^1; sbit Dig3 = P1^2; sbit Dig4 = P1^3; sbit Dig5 = P1^4; sbit Dig6 = P1^5; sbit Dig7 = P1^6; sbit Latch = P3^0; //latch in sbit Clr_data = P3^

文档评论(0)

godaddy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档