基于fpga等精度频率计设计内容摘要:

量脉冲宽度,测得 CNT2 计数值 N2 则可以计算出 : AT89C51 单片机性能 其引脚如图 36: 图 36 AT89C51 的引脚图 AT89C51 是一个内含 4K 字节可编程可擦除的快闪存储器 (Flash Memory)和128 个字节 RAM。 低电压,高性能 CMOS 结构的 8位单片机。 采用 ATN 工 EL 高密度非易失存储器制造技术制造,与工业标准的 MCS51指令集和输出管脚相兼容。 由于将多功能 8位 CPU 和快闪存储器组合 在单个芯片中, ATMEL 的 AT89C51 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 (1) AT89C51 的主要特性如下 : 与 MCS51 兼容 .4K字节可编程快闪存储器 .寿命 :1000 次写 /擦 .数据保留时间 :十年 .128*8 位内部 RAM .32可编程 I/0 线 .两个 16 位定时器 /计数器 .五个中断源 .可编程串行通道 .低功耗的闲置和掉电模式 .片内振荡器和时钟电路 (2)其管脚的具 体说明如下 : P0 口 :P0 口为一个 8 位漏级开路双向工 I/0 口,每个引脚可驱动 8 个 TTL门。 当 P1 口的管脚输入数据时,应先把口置 ’ 1’。 作为外部地址 /数据总线使用时,用于传送 8 位数据和低 8 位地址。 在快闪编程时, P0 口输入,当快闪进行校验时, P0 口输出,此时 P0 外部必须被拉至高电平。 P1 口 :P1 口是一个内部提供上拉电阻的 8 位双向 I/0 口, P1 口缓冲器能驱动 4 个 TTL 门。 P1 口管脚写入‘ I’后,被内部上拉为高,可用作输入。 P2 口 :P2 口是一个内部提供上拉电阻的 8 位双向 I/0 口, P2 口缓冲器可驱动 4 个 TTL门,当 P2口被写‘ 1’时,其管脚被内部上拉电阻拉高,作为输入。 P2口当用作外部程序存储器或外部数据存储器进行存取时, P2口输出 16位地址的高八位。 P3 口 :P3 口管脚是八个带内部上拉电阻的双向 I/0 口,可驱动 4 个 TTL 门。 当 P3 口写入‘ 1’后,被内部上拉为高电平,并用作输入。 P3 口也可作为 AT89C51的一些特殊功能口,如下表所示 : 管脚备选功能 P3. 0 RXD(串行输入口 ) P3. I TYD(串行输出口 ) /INTO(外部中断 0) /INTI(外部中断 I) P3. 4 TO(计时器 0 外部输入 ) P3. 4 TI 计时器 1 外部输入 ) P3. 6/WR(外部数据存储器写选通 ) P3. 7 /RD(外部数据存储器读选通 ) P3口同时为快闪编程和编程校验接收一些控制信号。 单片机控制电路 单片机测频控制电路如图 37所示,由单片机完成整个测量电路的测试控制、数据处理和显示输出, CPLD 完成各种测试功能。 图 37 单片机测频控制电路 (1)由于 CPLD 在对频率进行计数时,采用 32 位二进制计数器, 8 位数据总线的单片机分四次将 32 位数据全部读出。 利用 AT89C51 的 PO 口读计 数器 COUNT 输出B [7. .0]标准频率信号的值, P2口读计数器 COUNT 输出 B[15.. 8)被测信号的值。 被读出的四组 8位数据通过 AT89C51 的 SSO, SS1 地址编码选择。 由 P1 口输出控制。 (2) CS:由单片机的 P1. 0 口控制。 CS=0 时,等精度测频。 CS=1 时,测脉宽。 (3) CLR:系统全清零功能。 (4) ED2:脉宽计数结束状态信号, ED2=1 计数结束。 (5) AS:自校和测频选择。 AS= 1 测频, AS=0 自校。 (6) STROBE:为预置门闸,门宽可通过键盘由单片机控制, STROBE=1 时,预置门打开 :STROBE=0 时,预置门关闭。 (7) ED l:测频计数结束状态信号, ED1=0 时计数结束。 (8) SSO, SSI:计数位读出选通控制。 若令 SS= [SS 1, SSO],则当 SS=0. 1, 2, 3时可从 PO口和 P2 口由低 8位至高 8位分别读出两组 4个 8位计数值 (9) FS 为标准频率信号输入,此频率来源于 501lIz的有源晶振。 (10) FX 为被测信号输入,此信号是经过限幅整形电路后的信号。 (11) FC 为自校频率,取自单片机的外接晶振。 键盘接口电路 键盘接口电路如图 38 所示。 键盘控制命令由并入串出移位寄存器 74LS165读入。 当某一键盘按下时,该线为低电平,在单片机主程序中置 P3. 2 为‘ 039。 ,将键值置入,然后再将 P3. 2 与 P3. 5 口置 ` 139。 ,将键盘值读入单片机,从而实现对键盘动态扫描,实时将键盘命令交单片机处理。 图 38键盘接口电路 显示电路 图 39中, AT89C51 以串行通信方式 0,即同步移位寄存器方式通过 P3. 0, P3. 1 实现显示码传送, 8个共阳极数码管由 8片串入并出 74LS164 驱动,由于 74LS164 芯片输出低电平时具有 8MA 的灌电流能力,在静态显示方式下足以保证显示亮度。 因为 74LS164 输出没有锁存功能,因此,在传送信号时输出端数码怜会有瞬间闪烁,但由于系统采用 12MHz 晶振。 传送波特率高达 1M,且一次发送数据很少,故闪烁并不明显。 P3. 4 用于键盘和显示电路的切换选通。 另外,由于键盘和显示电路共享单片机的串行口,在每次显示前,程序必须将 P3. 2 置‘ 039。 ,将 74LS165 的输出置‘ 139。 ,才能保证 P3. 0 口正确传送显示数据。 图 39显示电路 FPGA 模块的顶层设计 在本测频系统中,对标准频率信号和被测信号进行测试功能的工作由 FPDA来完成。 其硬件电路的实现在前面已述,其软件部分由 VHDL 语言实现。 下面将给出由 VHDL 语言实现的顶层模块程序。 频率计测试模块 DJDPLJ. VHD 见附录。 FPGA 模块仿真 对以上各功能模块分别编译后,其频率 /周期测量仿真图结果如下图 44 所示 :(以下所有的仿真波形图的标准频率为 FS=50MHz) 图 44 频率调期侧盈仿真图 脉宽 /占空比测量仿真图结果如下图 45所示 : 图 45脉宽 /占空比测量仿寡图 单片机主程序 图 46表示单片机主程序流程图。 系统初始化后,主程序不断扫描键盘子程序,当某键按下时,程序跳转到相应的子程序执行其功能,然后返回继续执行键盘扫描程序。 程序见附录 v 测频、测周期、测脉宽及测占空比子程序 当键盘子程序扫描到测频键按下时,读入键值后跳转到测频子程序。 测频子程序先置测频控制位 CLR (P1. 6) . AS (P1. 4),将 CPLD内的计数器清零,选择测量被测信号。 并将 CS (P1. 3)置零,即为选择测频。 然后通过键盘将预置门的时间值读入单片机,打开预置门进行测频计数,等预置门时间到后,关断预置门, CPLD 关断预置门后将给单片机一个结束信号,单片机读到结束信号后,通过置 [SS1, SS 田的四个编码状态,分四次将测频结果的 32 位数据读入单片机,计算后将结果转换为 BCD 码送 LED 显示输出。 开始 初始化 键盘扫描 测频键 测 T 键 测 D 键 脉宽键 调用测 F 子程序 调用测 T 子程序 调用测 D 子程序 调用测脉宽子程序 测频子程序 见附录。 测周期时只要将计算结果由频率值取倒数转换为周期值即可。 自校子程序与测频子程序相同。 脉宽测量子程序与周期测量子程序基 本一致,脉宽测量是将被测信号的脉宽作为闸门信号对标准频率进行计数。 占空比子程序是分别测出高低电平的脉宽计数值 Nl, N2,由公式 :占空比 =Nl/ (Nl+N2) 100%算出。 具体程序见附录。 键盘扫描、时间值输入及计数值计算子程序 该程序采用查询方式。 程序开始后,先在 LED 上给出 CPUREADY 的提示字,然后进入键盘扫描方式。 单片机通过 74LS165 不断查询键盘。 当有键输入时,将键值读入到预存单元 .用软件延时 10mS 消抖,再读键值,和原键值进行比较,若和原值不相同,重新扫描键盘,若相同, 则跳转到相应入口执行子程序。 键盘设有三个时间值键,分别为 , 1 s 和 l0S,来控制预置门的开关时间。 在执行功能子程序之前会提示先输入时间值 (在 LED 上显示 ENTERSJ)。 其程序执行过程与键盘扫描子程序相同。 单片机读入测频计数结果后,还要根据等精度测频原理进行计算,才能得到最终的测量结果。 这部分计算主要包括 :四字节数乘法子程序。 八字节数除以四字节数除法子程序。 二进制转换 BCD 码子程序。 具体程序见附 频率计测试模块 DJDPLJ. VHD LIBRARY IEEE。 USE。 USE。 ENTITY DJDPLJ IS PORT(CHEKF, FINPUT, CHOICE: IN STD_ LOGIC。 START, CLRTRIQ FSTD, TF: IN STD 少 OGIC。 SEL: IN STDLOGICVECTOR(2 DOWNTO 0)。 OO: OUT STDLOGIC_ VECTOR(7 DOWNTO 0)。 EEND: OUT STD_ LOGIC。 CPBZ ENDD: OUT STD_ LOGIC)。 END ENTITY DJDPLJ。 ARCHITECTURE ART OF DJDPLJ IS COMPONENT FIN IS PORT(CHKF, FIN, CHOIS: IN STDLOGIC。 FOUT: OUT STD_ LOGIC)。 END COMPONENT FIN。 COMPONENT CONTRL IS PORT(FIN, START, CLR, FSD: IN STDLOGIC。 CLK1, EEND, CLK2, CLRC: OUT STD LOGIC)。 END COMPONENT CONTRL。 COMPONENT CNT IS PORT(CLK, CLR: IN STD_ LOGIC。 Q: OUT STDLOGIC_ VECTOR(31 DOWNTO 0))。 END COMPONENT CNT。 COMPONENT CONTRL2 IS PORT(FIN, START, CLR: IN STD_ LOGIC。 ENDD, PUL: OUT STD_ LOGIC)。 END COMPONENT CONTRL2。 COMPONENT GATE IS PORT(CLK2, FSD, CNL, PUL: IN STDwe LOGIC。 CLKOUT: OUT STD_ LOGIC)。 END COMPONENT GATE。 SIGNAL INCLK: STDLOGIC。 SIGNAL FOUT, CLRC: STDLOGIC。 SIGNAL CLKI, CLK2, CLKOUT, PUL: STD 一 LOGIC。 SIGNAL Q I, Q2: STD_ LOGIC_ VECTOR(31 DOWNTO 0)。 BEGIN 00=Q1(7 DOWNTO 0) WHEN SEL=000 ELSE Q1(15 DOWNTO 8) WHEN SEL=001”ELSE Q1(23 DOWNTO 16) WHEN SEL=010 ELSE Q1(31 DOWNT024) WHEN SEL=011 ELSE Q2(7 DOWNTO 0) WHEN SEL=100 ELSE Q2(15 DOWNTO 8) WHEN SEL=101 ELSE Q2(23 DOWNTO 16) WHEN SEL=110 ELSE Q2(31 DOWNTO 24) WHEN SEL=111”ELSE 00000000。 FENPIN: PROCESS(FSTD) IS BEGIN IF FSTD39。 EVENTAND FSTD=’ J’THEN INCLK=NOT INCLK。 END IF。 END PROCESS FENPIN。 FCH:FINPOR。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。