版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.设计原理描述考虑到只基于单片机的频率测量计设计主要是以单片机为基础,原理简单,但由于自身精度问题,测量的范围小。而基于FPGA和单片机结合的频率测量设计主要是以单片机作为系统的主控部件,FPGA完成对时序逻辑控制、计数功能,能较好的利用了FPGA的高精度、高速等方面的优势。所以,本次智能仪器的大作业我采用的是单片机作为系统的主控部件,实现整个电路的测试信号控制、数据运算和控制数码管的显示输出等。一块复杂的现场可编程门阵列芯片完成各种时序逻辑控制、计数功能。FPGA单片机放大整形数码管显示被测信号 图 1系统组成原理框图如图1所示。由一片FPGA完成各种测试功能,对标准频率(采用系统内部时钟
2、)和被测信号进行计数。单片机对整个测试系统进行控制,包括对FPGA测量过程的控制、测量结果资料的处理、键控制信号的读入与处理,最后将测量结果送LED显示。被测信号整形部分主要对被测信号限幅、放大再经过整形后送入FPGA。FPGA的标准测试频率为40MHz。单片机由外接12MHz标准晶振提供时钟电路。其核心部分为单片机和可编程芯片FPGA。所有信号包括基准频率信号、被测信号以及自校输入信号均可在430单片机的控制下送入FPGA芯片中,单片机将每次测试结果读入内存RAM中,经运算处理后,送入12864显示电路显示。用单片机软件查询键盘控制命令情况,实现开始功能、预置门时间控制功能等。4.硬件的单元
3、模块设计 4.1信号整形电路 为了提高共模抑制比和输入信号的范围,由AD620构成前置放大电路。放大后的信号经过耦合电容去掉直流,再由LM311组成的过零比较电路整形为方波,施密 特触发器74HC14去抖后送入FPGA测量频率。电路如图 图4-1 被测信号整形电路4.2 单片机主控模块单片机测频控制电路如图4-2所示,由单片机完成整个测量电路的测试控制、数据处理和显示输出,FPGA完成各种测试功能。 (1)由于FPGA在对频率进行计数时,采用两组32位二进制计数器,8位数据总线的单片机分八次将64位元数据全部读出。利用89C51的P0口读计数器输出标准频率信号和被测信号的值。被读出的八组8位数
4、据通过89C51的SS0, SS1,SS2地址编码选择,由P2口输出控制。(2) CLR:系统全清零功能。(3) GATE:为预置门闸,门宽可通过键盘由单片机控制,GATE=1时预置门打开;GATE =0时,预置门关闭。(4) START:测频计数结束状态信号,START由“1”变为“0”时计数结束。(5) SS2,SS1,SS0:计数字读出选通控制。若令SS=SS2,SS1, SS0,则当SS=0,1,2,3时可从P0口由低8位至高8位分别读出标准信号的四个8位计数值。当SS=4,5,6,7时同样可从P0口由低8位至高8位分别读出被测信号的四个8位计数值。(6) FS:为标准频率信号输入,此
5、频率来源于FPGA内部的40MHz的振荡晶体。(7) FX:为被测信号输入,此信号是经过限幅放大整形电路后的信号。图4-2 单片机测频控制电路4.3测频模块的工作原理及设计4.3.1 等精度测频法等精度测频的方法是:采用频率准确的高频信号作为标准频率信号,保证测量的闸门时间为被测信号的整数倍,并在闸门时间内同时对标准信号脉冲和被测信号脉冲进行计数,实现整个频率测量范围内的测量精度相等,当标准信号很高,闸门时间足够长时,可实现高精度的频率测量。等精度测频原理示意图如图3-3所示图3-3中的门控信号是可预置的宽度为Tpr的脉冲。COUNT1和COUNT2是两个可控计数器。标准频率信号从COUNT1
6、的时钟输入端CLK输入,其频率为Fs;经整形后的被测信号从COUNT2的时钟输入端CLK输入,设其实际频率为Fxe,测量频率为Fx。当门控信号为高电平时,被测信号的上沿通过D触发器的Q端同时启动计数器COUNT1和COUNT2。对被测信号Fx和标准频率信号Fs同时计数。当门控信号为低电平时,随后而至的被测信号的上沿将使这两个计数器同时关闭。设在一次门控时间Tpr中对被测信号计数值为Nx。对标准频率信号的计数值为Ns。则:Fx/Nx=Fs/Ns(标准频率和被测频率的门宽时间Tpr完全相同)就可以得到被测信号的频率值为:Fx=(Fs/Ns)*Nx图3-3 等精度测频原理示意图误差分析如下:在一次测
7、量中,由于Fx计数的起停时间都是由该信号的上升沿触发的,在Tpr时间内对Fx的计数Nx无误差;在此时间内Fs的计数Ns最多相差一个脉冲,即|et|1,则下式成立:Fx/Nx=Fs/NsFxe/Nx=Fs/(Ns+et)所以有:Fx= (Fs/Ns) *NxFxe=Fs/(Ns+ et)*Nx根据相对误差公式有:Fxe/Fxe=lFxe-Fxl/Fxe代入整理得:Fxe/Fxe=Iet|/Ns又因为:|et |1所以: |et |/NS1/Ns即: |=Fxe/Fxe1/ Ns其中:Ns=Tpr*Fs由以上推导结果可得出下面结论:(1)相对测量误差与频率无关。(2)增大 Tpr或提高Fs,可以增
8、大Ns,减少测量误差,提高测量精度。(3)标准频率误差为Fs/Fs,由于晶体的稳定度很高,标准频率误差可以进行校准。(4)等精度测频方法测量精度与预置门宽度和标准频率有关,与被测信号的频率无关。在预置门时间和常规测频闸门时间相同而被测信号频率不同的情况下,等精度测量法的测量精度在整个测量范围内保持恒定不变,而常规的直接测频法 (在低频时用测周法,高频时用测频法),其精度会随着被测信号频率的下降而下降。4.3.2 FPGA模块逻辑设计本设计频率测量方法的主要测量控制框图如图3-4所示。图中预置门控信号GATE是由单片机发出,GATE的时间宽度对测频精度影响较少,可以在较大的范围内选择,只要FPG
9、A中32 位计数器在计40 M信号不溢出都行,但是由于单片机的数据处理能力限制,实际的时间宽度较少,一般可在100.1s间选择,即在高频段时,闸门时间较短;低频时闸门时间较长。这样闸门时间宽度Tc依据被测频率的大小自动调整测频,从而实现量程的自动转换,扩大了测频的量程范围;实现了全范围等精度测量,减少了低频测量的误差。图3-4中Count1和Count2是2个可控的32 位高速计数器,EN是他们的计数允许信号端,高电平有效。基准频率信号从Count1的时钟输入端BCLK输入,设其频率为Fs;待测信号经前端放大、限幅和整形后,从与Count2相似的32 位计数器Count2的时钟输入端CLK输入
10、,测量频率为Fx,START为计数结束标志位,当START由高电平变为低电平时,计数结束。XUANZE是一个可控数据选择器,当输入(SS2,SS1,SS0)=0、1、2、3时输出标准频率计数器的值,当输入(SS2,SS1,SS0)=4、5、6、7时输出被测频率计数器的计数值。图4-4 等精度频率计数框图测量开始后,首先单片机发出一个清零信号CLR,使2个32 位的计数器和D触发器置0,然后单片机再发出允许测频命令,即使预置门控信号GATE为高电平,这时D触发器要一直等到被测信号的上升沿通过时,Q端才被置1,即使两个EN同时为1,将启动两个计算器,系统进入计算允许周期。这时,计数器Count2和
11、Count1分别对被测信号和标准频率信号同时计数。当Tpr秒过后,预置门控信号被单片机置为低电平,但此时2个32 位的计数器仍然没有停止计数,一直等到随后而至的被测信号的上升沿到来时,才通过D触发器将这2个计数器同时关闭。设在某一次预置门控时间Tpr中对被测信号计数值为Nx,对标准频率信号的计数值为Nb,则根据闸门时间相等,可得出公式(1): Fx/Nx=Fs/Ns则:Fx=(Fs/Ns)*Nx5.软件设计5.1频率计的VHDL设计本设计采用Xilinx公司Spartan_3S200AN FPGA, 应用标准化的硬件描述语言VHDL有非常丰富的数据类型,他的结构模型是层次化的,利用这些丰富的数
12、据类型和层次化的结构模型,对复杂的数字系统进行逻辑设计,逐步完善后进行自动综合生成符合要求的、在电路结构上可实现的数字逻辑,再下载到可编程逻辑器件中,即可完成计数器的设计任务。下面是本次设计的VHDL描述源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity PLG is Port ( BCLK : in STD_LOGIC; -标准频率时钟信号 CLK : in STD_LOGIC; -待测频率时钟信号 CLR : in S
13、TD_LOGIC; -清零和初始化信号GATE : in STD_LOGIC; -预置门控制信号 SS : in STD_LOGIC_VECTOR (2 downto 0); -数据输出控制START : out STD_LOGIC; -结束标志DATA : out STD_LOGIC_VECTOR (7 downto 0); -数据输出end PLJ; architecture Behavioral of PLJ is Signal BJSQ :STD_LOGIC_VECTOR (31 downto 0); Signal JSQ :STD_LOGIC_VECTOR (31 downto 0)
14、; Signal EN: STD_LOGIC;begin START <= EN ; DATA <= BJSQ(7 downto 0)when SS="000" else BJSQ(15 downto 8)when SS="001" else BJSQ(23 downto 16)when SS="010" else BJSQ(31 downto 24)when SS="011" else JSQ(7 downto 0)when SS="100" else JSQ(15 downto
15、8)when SS="101" else JSQ(23 downto 16)when SS="110" else JSQ(31 downto 24); BZN: process (BCLK,CLR,EN) begin if CLR='1' then JSQ <= (others => '0'); elsif CLK'event and CLK='1' then if EN='1' then BJSQ <= BJSQ+1; end if; end if; end pr
16、ocess; ZN: process (CLK,CLR,EN) begin if CLR='1' then JSQ <= (others => '0'); elsif CLK'event and CLK='1' then if EN ='1' then JSQ <= JSQ+1; end if; end if; end process; process(CLK ,CLR) begin if CLR='1' then EN <='0'elsif CLK'even
17、t and CLK='1' thenEN<=GATE;end if;end process;end Behavioral; 5.2 单片机的汇编语言编程5.2.1单片机主程序图4-1表示单片机主程序流程图。各种测试功能流程如下:系统初始化后,主程序不断查询键盘,当开始键按下后,程序转到测频子程序执行测频功能。那么读入开始键之后马上跳转到测频子程序,测频子程序先置测频控制位CLR(P1.0),将FPGA内的计数器清零,然后通过健盘将预置门的时间值读入单片机,打开预置门进行测频计数,等预置门时间到后,关断预置门,CFPGA关断预置门后将给单片机一个结束信号,单片机读到结束信号
18、后,通过置 SS2,SS1,SS0的八个状态,分八次将测频结果的64位数据读入单片机,空闲状态程序始终扫描键盘,等待输入,并在LED上显示CPUREADY的字样,执行完某一功能后程序又会回到键盘扫描状态上来。主程序流程图:P1.5是否按下P1.6是否按下P1.7是否按下开始初始化存预置门时间调测频子程序调显示子程序 结束是是否否否是5.2.2 测频子程序测频子程序流程图:开预置门读预置门时间计数清零定时时间到了吗?关预置门结束标志位结束?读入计数结果调用乘法子程序Fs*Nx调用除法子程序Fs*Nx/Ns转为BCD码,字节展开返回是否是否开始当有键按下后,单片机转到测频子程序,执行测频功能。单片
19、机首先向FPGA发出一个清零信号CLR(P1.0),将FPGA内的计数器清零,然后通过键盘将预置门的时间值读入单片机,打开预置门使FPGA开始计数,此时间值就是计数时间,等预置门时间到后,关断预置门后将给单片机一个结束信号,单片机读到结束信号后,通过置 SS2,SS1,SS0的八个状态,分八次将测频结果的64位数据读入单片机,单片机通过等精度的测频公式:Fx=(Fs/Ns)*Nx计算出被测信号的频率值,并将此频率值转换为相应的BCD码,为后面的显示功能作准备。5.2.4单片机程序清单 /*最小系统测试*/#include <msp430x14x.h>#define CPU_F (d
20、ouble)8000000)#define delay_us(x) _delay_cycles(long)(CPU_F*(double)x/1000000.0)#define delay_ms(x) _delay_cycles(long)(CPU_F*(double)x/1000.0)#define uchar unsigned char#define uint unsigned int#define ulong unsigned long/*12864应用指令*/#define CLEAR_SCREEN0x01 /清屏指令:清屏且AC值为00H#define AC_INIT0x02 /将AC
21、设置为00H。且游标移到原点位置#define CURSE_ADD0x06 /设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)#define FUN_MODE0x30 /工作模式:8位基本指令集#define DISPLAY_ON0x0c /显示开,显示游标,且游标位置反白#define DISPLAY_OFF0x08 /显示关#define CURSE_DIR0x14 /游标向右移动:AC=AC+1#define SET_CG_AC0x40 /设置AC,范围为:00H3FH#define SET_DD_AC0x80#define P50 0#define P51 1#defi
22、ne P55 5#define P56 6#define P57 7#define P52 2#define P53 3#define P54 4#define RS_CLRP5OUT &= (1 << P55) /RS置低#define RS_SETP5OUT |= (1 << P55) /RS置高#define RW_CLRP5OUT &= (1 << P56) /RW置低#define RW_SETP5OUT |= (1 << P56) /RW置高#define EN_CLRP5OUT &= (1 <<
23、P57) /E置低#define EN_SETP5OUT |= (1 << P57) /E置高#define PSB_CLRP5OUT &= (1 << P50) /PSB置低,串口方式#define PSB_SETP5OUT |= (1 << P50) /PSB置高,并口方式#define RST_CLRP5OUT &= (1 << P51) /RST置低#define RST_SETP5OUT |= (1 << P51) /RST置高#define DataPort P4OUT /P4口为数据口#define pi
24、nlv P2OUT#define clr_CLRP5OUT &= (1 << P52) /RW置低#define clr_SETP5OUT |= (1 << P52)#define gate_CLRP5OUT &= (1 << P53) /RW置低#define gate_SET P5OUT |= (1 << P53)/#define start_CLRP1OUT &= (1 << P12) /RW置低/#define start_SETP1OUT |= (1 << P12) unsigned lo
25、ng int y,z; unsigned long int bb; unsigned long int cc; unsigned long int dd; unsigned long int ee; unsigned long int ff; unsigned long int gg; unsigned long int hh; unsigned int a; unsigned int b; unsigned int c; unsigned int d; unsigned int e; unsigned int f; unsigned int g; unsigned int h;uchar l
26、cdd="0123456789"/float aa;void Clock_Init() uchar i; BCSCTL1&=XT2OFF; /打开XT振荡器 BCSCTL2|=SELM1+SELS; /MCLK为8MHZ,SMCLK为8MHZ do IFG1&=OFIFG; /清除震荡标志 for(i=0;i<100;i+) _NOP(); /延时等待 while(IFG1&OFIFG)!=0); /如果标志为1,则继续循环等待 IFG1&=OFIFG;void Port_init()P4SEL = 0x00; /液晶并行输出 P4DI
27、R = 0xFF; P5SEL = 0x00; /液晶控制端口; 单片机clr,gate输出端 P5.2 P5.3 P5DIR = 0xff; P2SEL = 0x00; / 读入FPGA输出的频率值 P2DIR = 0x00; P1SEL = 0x00; /P1.0 start输入端,为零时开始转换 P1DIR = 0x00; P3SEL = 0x00; /计数值控制信号输出 P3DIR = 0xff; PSB_SET; /液晶并口方式RST_SET; /复位脚RST置高void LCD_write_com(unsigned char com)RS_CLR;RW_CLR;EN_SET;Dat
28、aPort = com;delay_ms(5);EN_CLR;void LCD_write_data(unsigned char data)RS_SET;RW_CLR;EN_SET;DataPort = data;delay_ms(5);EN_CLR;void LCD_clear(void)LCD_write_com(0x01);delay_ms(5);void DisplayCgrom(uchar addr,uchar *hz)LCD_write_com(addr); delay_ms(5);while(*hz != '0')LCD_write_data(*hz);hz+;
29、delay_ms(5);void Display() uint dat0,dat1,dat2,dat3,dat4,dat5,dat6; unsigned long int x; x=50000000*z/y; dat0=x/1000000; dat1=x%1000000/100000; dat2=x%1000000%100000/10000; dat3=x%1000000%100000%10000/1000; dat4=x%1000000%100000%10000%1000/100; dat5=x%1000000%100000%10000%1000%100/10; dat6=x%10; /da
30、t7=x%10; DisplayCgrom(0x80,"电压表仪电学院"); delay_ms(5); DisplayCgrom(0x90,"有效值:"); delay_ms(5); DisplayCgrom(0x88,"峰峰值:"); delay_ms(5); LCD_write_com(0x98); delay_ms(5); LCD_write_data(lcdddat0) ; delay_ms(5); LCD_write_data(lcdddat1) ; delay_ms(5); LCD_write_data(lcdddat2) ; delay_ms(5); LCD_write_data(lcdddat3) ; delay_ms(5); LCD_write_data(lcdddat4) ; del
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法务融合机制研究报告
- 关于手机发展的研究报告
- 洛阳考古挖掘现状研究报告
- 汉服来料缎面工艺研究报告
- 科技成果 研究报告
- 化疗放疗相关问题研究报告
- 酒吧管理措施对策研究报告
- 关于敬字的研究报告
- 2026河南郑州市郑东新区春华学校、郑州市郑东思贤学校招聘备考题库附答案详解【基础题】
- 2026云南农业大学后勤服务有限公司第一批就业见习人员招聘15人备考题库及答案详解(历年真题)
- 尾箱集市商业计划书
- 精酿馆策划方案
- 少先队德育知识讲座
- 中医康复实训室方案及流程
- (完整)CRH380A动车组轮对检修流程及改进方案
- 四川省省属卫生事业单位公开招聘卫生专业技术岗位人员公共科目笔试大纲
- 船舶液压系统常见故障分析及解决方案
- 2023年中级注册安全工程师《安全生产专业实务(建筑施工安全)》真题及答案
- THSPP 0010-2023 欧标茶生产茶园栽培技术规程
- 危化品考试题库及答案参考
- 1213 日本当代建筑的坡屋顶的知识
评论
0/150
提交评论