等精度频率计设计C程序
51单片机频率精确测量C程序
51单片机频率精确测量C程序
测定脉冲频率,附带部分PROTUES仿真结果和C语言程序,希望能给广大电子爱好者带来方便。仿真结果十分精确,实际应用中可能会存在少许误差,通过相应的电路处理,可以满足使用要求。
很多场合需要用到对频率的精确测量,譬如你用霍尔传感器做测转速系统,就需要用到此模块,测量霍尔传感器输出的脉冲的频率,然后稍作运算,就可以实现转速的测量功能。本设计利用51单片机的外部中断(INT0)的捕捉功能,实现对脉冲的计数,同时配以T0的8位自动装入方式,实现准确计时1S,这1S内INTO捕捉到的脉冲数即为频率。通过PROUES仿真,证明这种方式误差极小(与网上流行的用定时器工作方式1定时1S的程序相比,误差大大缩小,尤其是对于频率在2K以上信号的测量)。
实例1、频率设定为5K,显示在4999和5000两数之间跳动
#include <reg52.h>
#define uchar unsigned char #define uint unsigned int
uint time_count,count,sum;
sbit duan=P2^6; //74HC573的LE端U5 LED的段选端
sbit wei=P2^7; //74HC573的LE端U4 LED的位选端
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码表
等精度频率计PROTUSE仿真
等精度频率计
一:系统设计要求
等精度频率计可以精测量,同时通过4位LED 数码管频率。最小显示频率率为0.001,测量误差为 0.0002。
二:系统结构框图
三:单元硬件设计说明
(1)LED 显示电路:LED 显示电路采用7SEG-MPX4-CC 显示模块和八个上拉电阻组成。
单片机 AT89C51
LED 显示
时钟电路
复位电路
信号发生器
显示数字的数量级
(2)时钟电路:时钟电路由一个12M晶振,和两个3pF电容组成,产生12M赫兹的方波脉冲信号做为单片机的内部时钟
(3)复位电路
(4)信号发生器
(5)显示选择器,用来指明当前频率选择的数量级单位。
四:软件设计与说明(包括在Protuse中的电路图)
(1)连接完毕的电路图
(2)主程序流程路
复位电路:复位电路由一个1uF的电容和一个10K的电阻组成是
毫秒级子程
序
(3)运行中的电路
5: 程序代码
//#include <at89x52.h>
#include <reg51.h>
#include <stdio.h>
#define uint unsigned int
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit Q0=P2^4;
sbit Q1=P2^5;
sbit Q2=P2^6;
sbit Q3=P2^7;
sbit LED1=P0^1;
sbit LED2=P0^2;
sbit LED3=P0^3;
uint t=0,number=0,count=0,k,a,b,c,d;
基于单片机C语言的数字频率计设计
文 章 编 号 :0 9— 55 20 ) 2— 1 1 0 10 3 7 ( 0 7 0 0 9 — 2
THE DE GN O F THE CYMOM E SI TER B ASED ON T HE SI NGL E CHI P COMP UTER C ANGU L AGE
A src : A ds nm to f i a cm m t ae nte C一 w s n ou e.T esf ae a porme i nug bt t a ei e dod6t y o e r sdo g h l eb h MS 5 a t cd h t r W rga dwt Cl g ae 1 ir d ow s h a
12 9
内 蒙 古 农 业 大 学 学 报
20 07拄
2 2 显示驱 动芯 片 M X 2 9简介 . A 71
基于SOPC的等精度数字频率计设计
De i n o qu lp e ii n di ia r q e y m e e a e n S PC s g f e a r c so g t lf e u nc t r b s d o O
K y o d :E u l r c in fe u n ymee ; P e w r s q a p e i o q e c tr F GA/ O C; o I r c so s r S P NisI p o e s r
0 引 言
随着 E A 技术 和大规 模 可 编程 器件 的发展 , D 电子 设 计 的方法 和实现 技术 趋 向多元 化 , 设计 手 段不 断 更新 , 硬 件和软件 的结合 成为 趋势 。 由于 S P O C将传 统 的 E A D 技术 、 嵌入式 系统等 融为一 体 , 在结 构上凝 为单 芯 片 , 目前
Li in ig Ga io io Ya g Su ig nJa yn oM am a n yn
( a l fE e to i a d E e t ia En i e rn Dain Un v r i fTe h o o y Dain 1 2 Ch n ) F u t o l cr n c n l crc l g n e ig, l ie st o c n l g , l 6 4, ia y a y a 10 Ab t a t s r c :A t o o d s g q a r cso r q e c t ri r p s d i hi p p r Th y o h sm e h d i t o me h d t e i n e u l e ii n f e u n y me e sp o o e n t s a e . p eke ft i t o o c n— s f u e t e e e d d Ni s I o t c r c 0 r c s o y t m a e n t e r q ie n s o h e f r a c n o t a d i r h mb d e o I s f o e mi r p o e s r s s e b s d o h e u r me t ft e p r o m n ea d c s , n g t c iv h e ml s n e r to fFPGA n c o r c s o . e m e s r me to a h p r m e e s r a ie y FP— o a he et es a e sit g a in o a d mir p 。 e s r Th a u e n fe c a a t r i e l d b z GA o i , n h a c l to c n r la d d s l y a e i p e e t d b c o r c s o . l g c a d t e c l u a i n, o to n i p a r m l m n e y mi r p o e s r Th o e c mb n t n o GA n i i a i fFP o a dm — co r e so o r p o e s r c mp e e h e s r me t o h r q e c p r d, u y c c e a d t e p le wi t . l t s t e m a u e n ft e f e u n y, e i o d t y l n h u s d h Th e u t h w h t er s ls s o t a , t e f e u n y me e s o i h p e ii n, o d s a i t l w O t a d s l sz . ti e i e h t t eSOPC r a ia i n o h r q e c t r i fh g r cso g o t b l y,o c S , n ma l ie I sv rf d t a , h i i e l to f z e u 1 r cso r q e c t r i a fe tv e m e h d q a e ii n f e u n y me e S n e f c i e n w t o . p
(完整版)基于FPGA的等精度频率计的设计与实现毕业设计
第一章课题研究概述
1.1课题研究的目的和意义
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。目前常用的测频方案有三种:
方案一:完全按定义式F=NT进行测量。被测信号Fx经放大整形形成时标ГX,晶振经分频形成时基TR。用时基TR开闸门,累计时标ГX 的个数,则有公式可得Fx=1ГX=NTR。此方案为传统的测频方案,其测量精度将随被测信号频率的下降而降低。
方案二:对被信号的周期进行测量,再利用F=1T(频率=1周期)可得频率。测周期时,晶振FR经分频形成时标ГX,被测信号经放在整形形成时基TX控制闸门。闸门输出的计数脉冲N=ГXTR,则TX=NГX。但当被测信号的周期较短时,会使精度大大下降。
方案三:等精度测频,按定义式F=NT进行测量,但闸门时间随被测信号的频率变化而变化。如图1所示,被测信号Fx经放大整形形成时标ГX,将时标ГX经编程处理后形成时基TR。用时基TR开闸门,累计时标ГX的个数,则有公式可得Fx=1ГX=NTR。此方案闸门时间随被测信号的频率变化而变化,其测量精度将不会随着被测信号频率的下降而降。本次实验设计中采用的是第三种测频方案。
等精度频率计是数字电路中的一个典型应用,其总体设计方案有两
种:
方案一:采用数字逻辑电路制作,用IC拼凑焊接实现。其特点是直接用现成的IC组合而成,简单方便,但由于使用的器件较多,连线复杂,体积大,功耗大,焊点和线路较多将使成品稳定度与精确度大打折扣,而且会产生比较大的延时,造成测量误差、可靠性差。
等精度频率计的研究与设计
中图分 类号 : 4 23 2 U 9 .+ 3
文 献标识 码 : A
1引言 。频 率 检测 是 电子测 量 领域 的最 会 由于 周期 性 的清 零信 号而 不 断 闪烁 。在每 基 本也 是最 重要 的测量 之一 。频 率 信号 抗 干 次测量开始时, 都必须重新对计数器清零。 扰能力强、 易于传输 , 可以获得较高的测量精 3 . 4锁存器模块。锁存器模块也是必不 度 , 以测频 方 法的研 究越 来越 受 到重 视 。 所 等 可 少 的 , 模块 测量 完成 后 , l d 号 的 测量 在 o 信 a 精度测量消除了对被测信号计数所产生的正 上升沿时刻将测量值锁存到寄存器中,然后 负1 误差 ,并 且 达 到 了在整 个测 试 频段 的等 输 出到 显示 模块 。 精度测量,测量信号的精度不随所测信号频 3 十进 制 计数 器 模 块 。计 数 器模 块 是 . 5 率 的变化 而 变化 。 由8 个带 有 异步 清 零端 ,进 位信 号输 出 的模 2等精度频率测量算法 。精度测频方法 为 l 的计 数模 块级 连 而成 。 十进 制计 数器 O 此 的 闸门 时间不 是 固定 的 值 ,而是 被测 信 号周 的 特殊之 处是 , 一时 钟使 能输入 端 E A, 有 N 用 期 的整 数 倍 , 即与 被 测 信 号 同步 , 因此 , 除 于锁 定计 数器 。 避 当高 电平计 数允 许 , 电平 时 低 了对被测信号计数所产生± 个字误差 , 1 并且 计数 禁止 。计 数器 模 块用 于对 输 入信 号 的脉 达到 了在 整个 测 试频 段 的等 精度 测 量 。在测 冲进 行计 数 , 模 块必 须 有计数 允 许 、 清 该 异步 量 过程 中 ,有 两个 计数 器 分别 对标 准 信号 和 零 等端 口, 于控 制模 块对 其进 行控 制 。 以便 被测信号同时计数 。首先给出闸门开启信号 3 . 示模 块 wk.baidu.com 本设 计 中设 计 了一个 3 6显 在 ( 置 闸 门上 升 沿 ) 时计 数 器 并 不 开始 计 位 的循环 计数 器 , 数结 果 输入 到译 码 器 , 预 ,此 将计 数, 而是等到被测信号的上升沿到来时, 计数 译码结果输出即可依次使能每个 L D。 E 4 顶层 模 块设计 器才真正开始计数 。然后预置闸门关闭信号 ( 降 沿) 时 , 数器 并 不 立 即停 止 计 数 , 下 到 计 而 数字 频率 计 的顶层 文件 如 图 1 : 是等到被测 信号的上升沿到来 时才结 束计 在硬件电路上,用 F G P A取代传统的集 数 , 成一 次测 量过 程 。 完 成 电路 和单 片 机作 为 主要 载体 ,除 了输 入 和 3 设计 仿 真 与实 现 。本 设 计 实现 信号 源 输 出显 示 等少 数 电路外 , 它 大部 分 电路都 其 模 块 、 制 模 块 、 数 模块 、 控 计 锁存 器 模 块 和 显 可 以集 成 在一 片 F G P A芯片 中 ,大 大降 低 了 示 器模 块 5大模 块 , 面 分别 介 绍 三个 模块 电路 的复杂 程 度 、 小 了体 积 、 下 减 电路 工作 也更 的结构 和实 现 方法 。 加 可靠 和稳 定 , 也大 为提 高 。 速度 在开 发方式 31信号 源模块 。信号 源是 为 了产 生 上 ,用 自顶向下的的系统开发方法取代 了传 . 1 z的门控信号和待测的定频信号 ,而对 统 的 自下而 上 的硬 件堆 砌式 开 发模 式 。借助 MH 输 入 系统 时 钟 c (0 H ) 分 频 的模 块 , l 5 M z进行 k 设计源代码 PN1 ZV D 对输入系统时钟 I MH .H c (0 H ) 分 频产 生 1 z信 号 。 l 5 M z进行 k MH 3 分 频 器 模 块 。 此 程 序要 求将 1 H . 2 M Z 的 输入 频率 分 别进 行 2 分频 f 生 50 H 1 产 0K Z 的 输 出 频 f q 0k、3分 频 ( 生 15 K Z e5012 产 2 H 的 输 出 频 率 f q2 k、5 分 频 ( 生 r 15) e 2 产 320 Z的输 出频 f q 15)2 15 H r 320、7分频 ( e 产生 7 1H 82 Z的输 出频 率 fq 82、9分频 f r 7 1)2 e 产生 15H 93 Z的输 出频 率 fq 93、1 分频 ( 生 r 15)2 1 e 产 4 8 Z的输 出 频 率 f q8)23分 频 f 生 8H r 48、1 e 产
基于AT89C51单片机频率计的设计(含程序)
AT89C51单片机频率计的设计
摘要基于
在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的关系。由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度。因此,频率的测量就显得尤为重要,测频方法的研究越来越受到重视。
频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其它领域。随着微电子技术和计算机技术的迅速发展,特别是单片机的出现和发展,使传统的电子侧量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代侧量仪器。频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。
为适应实际工作的需要,本次设计给出了一种较小规模和单片机(AT89C51)相结合的频率计的设计方案,不但切实可行,而且体积小、设计简单、成本低、精度高、可测频带宽,大大降低了设计成本和实现复杂度。频率计的硬件电路是用Ptotues绘图软件绘制而成,软件部分的单片机控制程序,是以KeilC做为开发工具用汇编语言编写而成,而频率计的实现则是选用Ptotues仿真软件来进行模拟和测试。
关键词:单片机;AT89C51;频率计;汇编语言
选题的目的意义
数字频率计的主要功能是测量周期信号的频率。其基本原理就是用闸门计数的方式测量脉冲个数。频率是单位时间( 1s )内信号发生周期变化的次数。如果我们能在给定的 1s 时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。
100MHz等精度频率计设计(基于某VerilogHDL)
某某:X中权
学号:152210303127
班级:电子1班
数电课设报告
100MHz等精度频率计设计〔基于Verilog HDL〕一、设计要求:
提供一个幅值为10mV ~ 1 V,频率为 1 ~ 100MHz的正弦信号,需测试以下指标:
1.频率:测频X围 1Hz ~ 100MHz,测频精度为测频全域内相对误差恒为百万分之一。
2.占空比:测试精度 1% ~ 99%
3.相位差:测试两个同频率的信号之间的相位差,测试X围 0 ~ 360 某某科技大学2017/10/12
二、设计分析
使用FPGA数字信号处理方法,首先需要将正弦信号转换成可读取的数字方波信号,再经过FPGA 设计计算得出所需测量值。
三、模电局部
首先选择比拟器,对于 100 MHz 信号,比拟器灵敏度需要达到5ns内,TI公司的LTV3501灵敏度为4.5ns,符合要求
由TLV3501数据手册得知:当频率低于 50MHz 的时候,正弦波的峰峰值需大于 20mV,频率高于
50MHz时,峰峰值需大于 1V。
然后需要选择放大器,当正弦波幅值为 10mV时,放大倍数需大于35。方法通过二级放大,一级用OPA847放大20倍,二级用OPA675放大8倍,得到总放大倍数160的正弦波。
经转换后的输出电压符合TTL电平要求,可以被识别出0和1。
四、数电局部
开发板:Cyclone IV E: EP4CE6E22C8
板载时钟为 50MHz,带4个按键和一个复位键〔按键按下为0,抬起为1〕,四个七段数码管〔共阳〕,FPGA的引脚可由杜邦线引出。
设计思路:
用51单片机完成等精度频率测量仪的设计毕业论文
测量误差ቤተ መጻሕፍቲ ባይዱ0.5%。
2.1.1 D触发器
图2-1
如图2-1所示,此为所需D触发器74HC164物理形状,74HC164为十四管脚的芯片,同步门逻辑控制电路由D触发器来产生产生同步门信号。D触发器(74HC164)控制单片机对标准频率信号和被测信号的计数开始和停止。
若在一定时间间隔T测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等于1s。闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通,被测脉冲信号通过闸门送到计数译码显示电路。秒信号结束时闸门关闭,计数器停止计数。由于计数器计得的脉冲数N是在1秒时间的累计数,所以被测频率fx=NHz。
等精度频率计设计VHDL程序
1 -----------------------------------------------------------------------------
2 -- Filename:
3 --
testbench.vhd
4 -- Description:
5 --
6 --
test bench module
7 -- Copyright (c) 2005 by JohnYuan
8 --
9 -- An X.M.U.T. Projects
free to use, but see documentation for conditions
10 --
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 -- Revision
-- Revision
-- --------
-- 1.0
--
--
-----------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164 .all;
use ieee.std_logic_unsigned .all;
-----------------------------------------------------------------------------
基于单片机的频率计设计
基于单片机的频率计设计
频率计是一种常用仪器,用于测量信号的频率。本文将介绍一种基于单片机的频率计的设计。
设计思路:
1. 选择合适的单片机:由于频率计需要精确测量信号的周期,所以选择一个具有高精度和稳定性的单片机至关重要。常用的单片机有
AT89S51、ATmega328等。
2.连接外部时钟源:为了提高计时的精度,可以选择连接一个外部时钟源,如晶振。将晶振连接到单片机的计时器输入引脚,通过计时器来计算脉冲信号的周期。
3.配置计时器模式:根据信号的特性,选择合适的计时器模式。常用的模式有边沿计数模式和脉冲计数模式。边沿计数模式适用于非连续的信号,脉冲计数模式适用于连续的信号。
4.初始化计时器:在程序中对计时器进行初始化,设置计时器的工作模式、计数范围等参数。还需设置中断使能和相应的中断处理函数。
5.开始计时:当信号输入到单片机的计时器引脚时,通过中断处理函数开始计时,记录起始时间。
6.结束计时:当信号的周期结束时,再次触发中断,记录结束时间。
7.计算频率:根据起始时间和结束时间,计算出信号的周期,再通过周期计算出频率。可以选择在显示器上显示频率或者通过串口通信输出。
8.重复计算:根据需要,可以选择连续计算多个信号的频率,以增加测量的准确性。
这个设计是一个基本的频率计,可以测量连续或间断的信号频率。根据实际需求,还可以进行一些改进和扩展,例如可以加入滤波电路来提高信号的稳定性和抗干扰能力,还可以增加输入和输出接口,方便与其他仪器和设备进行连接和通信。
总结:
基于单片机的频率计是一种常见的测量仪器,通过利用计时器来测量信号的周期,从而计算出信号的频率。这种设计简单易行,稳定性好,可以满足大多数频率测量的需求。在实际应用中,可以根据具体要求进行相应的改进和扩展。
频率测量的两种方法及等精度测量原理及实现
频率测量的两种方法及等精度测量原理及实现
频率测量在电子设计和测量领域中经常用到,因此对频率测量方法的研究在实际工程应用中具有重要意义。常用的频率测量方法有两种:频率测量法和周期测量法。频率测量法是在时间t内对被测信号的脉冲数N进行计数,然后求出单位时间内的脉冲数,即为被测信号的频率。周期测量法是先测量出被测信号的周期T,然后根据频率f=1/T 求出被测信号的频率。但是上述两种方法都会产生±1个被测脉冲的误差,在实际应用中有一定的局限性。根据测量原理,很容易发现频率测量法适合于高频信号测量,周期测量法适合于低频信号测量,但二者都不能兼顾高低频率同样精度的测量要求。
1 等精度测量原理等精度测量的一个最大特点是测量的实际门控时间不是一个固定值,而是一个与被测信号有关的值,刚好是被测信号的整数倍。在计数允许时间内,同时对标准信号和被测信号进行计数,再通过数学公式推导得到被测信号的频率。由于门控信号是被测信号的整数倍,就消除了对被测信号产生的±l周期误差,但是会产生对标准信号±1周期的误差。等精度测量原理如图1所示。
从以上叙述的等精度的测量原理可以很容易得出如下结论:首先,被测信号频率fx的相对误差与被测信号的频率无关;其次,增大测量时间段“软件闸门”或提高“标频”f0,可以减小相对误差,提高测量精度;最后,由于一般提供标准频率f0的石英晶振稳定性很高,所以标准信号的相对误差很小,可忽略。假设标准信号的频率为100 MHz,只要实际闸门时间大于或等于1s,就可使测量的最大相对误差小于或等于10-8,即精度达到1/100 MHz。
基于FPGA的等精度频率计的设计
基于FPGA的等精度频率计的设计
一、引言
频率计是一种广泛应用于电子领域的仪器设备,用于测量信号的频率。常见的频率计有软件频率计和硬件频率计两种。软件频率计主要基于计算
机软件,通过采集到的信号数据来计算频率。硬件频率计则是基于专用的
硬件电路,直接对信号进行采样和处理,具有实时性强、准确度高的优点。本文将基于FPGA设计一种等精度频率计,旨在实现高精度、高稳定性的
频率测量。
二、设计原理
本设计采用基于FPGA的硬件频率计方案,其主要原理是通过对输入
信号的时间计数,并结合固定参考值,计算出信号的频率。具体流程如下:
1.信号输入:将待测量的信号输入至FPGA芯片,输入信号的幅度应
符合输入电平范围。
2.信号计数:利用FPGA芯片内部的计数器,对输入信号进行计数,
并记录计数器的数值。计数器的值与输入信号的频率成反比,即计数器值
越大,信号频率越低。
3.定时器触发:通过定时器产生一个固定的参考信号,用于触发计数
器的复位操作。定时器的频率应足够高,以保证计数器能够实时精确计数。
4.数据处理:计数器值与定时器触发的时间周期共同决定了输入信号
的频率。通过计算参考值与计数器值的比例,可以得到准确的频率值。
5.结果输出:将计算得到的频率值输出至显示屏或其他外部设备,以
便用户进行查看。
三、设计方案
1.FPGA选型:选择一款适合频率计设计的FPGA芯片,要求其具有较高的计数能力、较大的存储空间和丰富的外设接口。
2.输入电路设计:设计一个合适的输入电路,将待测信号进行电平调整和滤波处理,以确保输入信号的稳定性和合适的幅度范围。
100MHz等精度频率计设计(基于某VerilogHDL]
数电课设报告
姓名:郑中权
学号:152210303127
班级:电子1班
江苏科技大学
2017/10/12
100MHz等精度频率计设计(基于Verilog HDL)
一、设计要求:
提供一个幅值为10mV ~ 1 V,频率为 1 ~ 100MHz的正弦信号,需测试以下指标:
1.频率:测频范围 1Hz ~ 100MHz,测频精度为测频全域内相对误差恒为百万分之一。
2.占空比:测试精度 1% ~ 99%
3.相位差:测试两个同频率的信号之间的相位差,测试范围 0 ~ 360
二、设计分析
使用FPGA数字信号处理方法,首先需要将正弦信号转换成可读取的数字方波信号,再经过FPGA设计计算得出所需测量值。
三、模电部分
首先选择比较器,对于 100 MHz 信号,比较器灵敏度需要达到5ns内,TI公司的LTV3501灵敏度为4.5ns,符合要求
由TLV3501数据手册得知:当频率低于 50MHz 的时候,正弦波的峰峰值需大于 20mV,频率高于50MHz 时,峰峰值需大于 1V。
然后需要选择放大器,当正弦波幅值为 10mV时,放大倍数需大于35。方法通过二级放大,一级用OPA847放大20倍,二级用OPA675放大8倍,得到总放大倍数160的正弦波。
经转换后的输出电压符合TTL电平要求,可以被识别出0和1。
四、数电部分
开发板:Cyclone IV E: EP4CE6E22C8
板载时钟为 50MHz,带4个按键和一个复位键(按键按下为0,抬起为1),四个七段数码
管(共阳),FPGA的引脚可由杜邦线引出。
设计思路:
51单片机设计数字频率计的代码
51单片机设计数字频率计的代码
前言
本文档将介绍如何使用51单片机设计数字频率计的代码。数字频率计是一种测量信号频率的仪器,通过测量信号周期的倒数来计算频率。在本文中,我们将使用51单片机来实现这个功能。
硬件准备
*51单片机开发板
*串口调试助手
*信号源
代码实现步骤
1.引入头文件
首先,在代码开头引入51单片机所需的头文件,包括re g51.h、
s t di o.h和se ri al.h。
#i nc lu de<r eg51.h>
#i nc lu de<s td io.h>
#i nc lu de<s er ia l.h>
2.定义全局变量
我们需要定义一些全局变量来存储计数器的值和频率值。
u n si gn ed in tc ou nt=0;
u n si gn ed lo ng fr equ e nc y=0;
3.初始化串口
使用串口调试助手来与单片机进行通信,需要在代码中初始化串口模块。
v o id in it_s er ia l()
{
T M OD&=0x0F;
T M OD|=0x20;
S C ON=0x50;
T H1=0x FD;
T L1=TH1;
T R1=1;
}
4.中断服务函数
我们需要定义一个中断服务函数来处理定时器溢出中断。在每次溢出时,计数器将自增,并计算频率值。
v o id in te rr up t_han d le r()i nt er ru pt1
{
i f(T F0==1)
{
T F0=0;
c o un t++;
i f(c ou nt>=1000)
1HZ到1MHZ 高精度频率计
--可以给4位数码管显示1HZ到1MHZ 等精度频率计--功能:4位显示的等精度频率计。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity frequency isport(clk:in std_logic; --基准时钟(10KHz)tclk:in std_logic; --被测信号 start:in std_logic; --复位信号alarm0,alarm1:out std_logic; --超量程,欠量程显示 dian:out std_logic_vector(3 downto 0); --小数点data1:out integer range 0 to 9999); --频率数据end frequency; architecture behav of frequency is signal q:integer range 0 to 9999; --预置闸门分频系数signal q1:integer range 0 to 10000; --被测信号计数器signal q2:integer range 0 to 20000; --基准信号计数器signal en,en1:std_logic; --预置闸门,实际闸门signal qq,qqq:integer range 0 to 200000000; --运算器 signal data0:integer range 0 to 9999; --频率数据中间信号beginprocess(clk) --此进程得到一个预置闸门信号beginif clk'event and clk='1' then if start='1' then q<=0;en<='0';elsif q=9999 then q<=9999;en<='0';else q<=q+1;en<='1';end if;end if;end process;process(tclk) --此进程计被测信号脉冲数,和得到一个实际闸门信号beginif tclk'event and tclk='1' thenif start='1' then q1<=0;en1<='0';elsif en='1' then q1<=q1+1;en1<='1';else en1<='0';end if;end if;end process;process(clk) --此进程完成在实际闸门时间内,计基准脉冲数 beginif clk'event and clk='1' thenif start='1' then q2<=0;elsif en1='1' thenif q2=20000 then q2<=20000;else q2<=q2+1;end if;end if;end if;end process;process(clk) --此进程完成等精度频率计的运算beginif clk'event and clk='1' thenif start='1' then data0<=0;dian<="0000";alarm0<='0';alarm1<='0';qqq<=0;qq<=00;elsif en1='0' thenif q1>=1000 then qq<=q1*10000; --根据q1的大小来判断小数点的位置if qqqelsif data0>=10000 then alarm0<='1'; --超量程显示 else data1<=data0;end if;elsif q1>=100 then qq<=q1*100000;if qqqelsif data0>=10000 then data1<=1000;dian<="0000"; else data1<=data0;dian<="0010";end if;elsif q1>=10 then qq<=q1*1000000;if qqqelsif data0>=10000 then data1<=1000;dian<="0010"; else data1<=data0;dian<="0100";
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 #include
2 #include
3 #include
4 #include
5 #include
6 #define uchar unsigned char
7 #define uint unsigned int
8 #define ulong unsigned long
9
10 code uchar m[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0x00};
11 // 0 1 2 3 4 5 6 7 8 9 灭
12 data uchar NS[]={0x0,0x0,0x0,0x0};//标准频率计数
13 data uchar NX[]={0x0,0x0,0x0,0x0};//待测频率计数
14 data ulong NSS,NXX,MM,F;
15 data ulong temp1,temp2;
16 data uchar shuju[]={0,0,0,0,0,0,0,0};//数码管数据
17 sbit CLR = P2^3;
18 sbit SEL2 = P2^2;
19 sbit SEL1 = P2^1;
20 sbit SEL0 = P2^0;
21 sbit CL = P2^4;
22 sbit START = P2^7;
23 //int i,j,k,l;
24 char *pNS;
//清零
25 char *pNSS;
26 char *pNX;
27 char *pNXX;
28
29 void delay(uint x);
30 void display();
31 void operation();
32 void outdata();
33
34 long powcyc(long c1,long c2)
35 {
36 long c3=1;
37 uchar ii;
38 for(ii=0;ii 39 { 40 41 c3*=c1; } 42 return c3; 43 } 44 45 void delay(uint x) 46 { 47 uchar j; 48 while((x--)!=0) 49 { 50 for(j=0;j<125;j++) 51 52 {;} } 53 } 54 55 void display() 56 { 57 uchar i; 58 for(i=0;i<8;i++) 59 { 60 TI=0; 61 62 63 SBUF=m[shuju[i]]; while(TI==0); } 64 } 65 66 67 void outdata() 68 { 69 70 71 72 73 74 75 76 77 78 uchar i; for(i=0;i<8;i++) { if(i==0) { shuju[0]=F/powcyc(10,7); temp1=F%powcyc(10,7); } { else 79 shuju[i]=temp1/powcyc(10,7-i);temp1=F%powcyc(10,7-i); 80 } 81 } 82 } 83 main() 84 { 85 86 uchar j,i,k,l; P0=0xff; 87 P2=0xff; 88 89 //Added by john 20060623 for(j=0;j<8;j++) 90 { 91 shuju[j] = 10; //all off 92 } 93 display(); 94 delay(500); //delay 500ms 95 96 for(j=0;j<8;j++) 97 { 98 99 shuju[j] = j; } //0-7 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 display(); delay(500); //delay 500ms for(j=0;j<8;j++) { shuju[j] = j + 2; } display(); delay(500); //2-9 //delay 500ms for(i=0;i<3;i++) { for(j=0;j<8;j++) { shuju[j] = 11; } display(); delay(500); //all on //delay 500ms for(j=0;j<8;j++) { shuju[j] = 10; } display(); delay(500); } //Added by john 20070623 while(1) { P0=0xff; P2=0xff; START=1; display(); pNS=NS; pNSS=&NSS; pNX=NX; pNXX=&NXX; CLR=0; CLR=1; CLR=0; CL=0; CL=1; delay(100); CL=0; //all off //delay 500ms if(START==0); { SEL2=SEL1=SEL0=0; for(i=0;i<4;i++) {NS[3-i]=P0;P2+=1;} SEL2=1;SEL1=0;SEL0=0; for(j=0;j<4;j++) {NX[3-j]=P0;P2+=1;} for(k=0;k<4;k++) {*(pNSS+k)=*(pNS+k);} for(l=0;l<4;l++)