数字频率计讲解Word文档下载推荐.docx

上传人:b****6 文档编号:21322855 上传时间:2023-01-29 格式:DOCX 页数:18 大小:212.96KB
下载 相关 举报
数字频率计讲解Word文档下载推荐.docx_第1页
第1页 / 共18页
数字频率计讲解Word文档下载推荐.docx_第2页
第2页 / 共18页
数字频率计讲解Word文档下载推荐.docx_第3页
第3页 / 共18页
数字频率计讲解Word文档下载推荐.docx_第4页
第4页 / 共18页
数字频率计讲解Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数字频率计讲解Word文档下载推荐.docx

《数字频率计讲解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字频率计讲解Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

数字频率计讲解Word文档下载推荐.docx

它是通过具有高性能、低成本、低功耗的单片机对信号进行捕获、计数,用软件处理数据,实现高速、高精度的测频。

综合以上三种方案,选择方案三。

2、时间间隔测量方法的论证与选择

游标法。

使用两种频率的时钟信号,要实现高精度、高分率的测量,对时钟频率的稳定度非常高,对电路的工作效率很高,不易实现。

模拟法。

在被测信号间隔T期间对电容进行充电,测量精度理论上非常高,但电容的充放电过程存在非线性现象,限制了测量范围。

计数法。

量化时钟在被测信号上升沿计数器输出计数脉冲个数,测量范围广,容易实现,且能够做到实时处理。

3、控制系统的论证与选择

用FPGA可编程逻辑器件作为控制及数据处理的核心,通过对外部的A/D控制,将采集到的模拟信号(正弦波、方波、矩形波)进行数字转换,再由计数模块对转换后的数据进行计数,通过显示模块输出。

用STM32F407单片机作为主控芯片。

STM32F407是Cortex_M4主频带DSP,利用它强大的数据处理能力和更加灵活的逻辑控制功能,克服了传统频率计精度不高、结构复杂、稳定性差的问题。

主控芯片对外围放大整形处理后的信号进行捕捉,利用其内部定时器产生1s闸门时间,触发捕捉进行脉冲计数。

被测信号经过全波整流后输入到测量有效值芯片,进行数据处理和输出。

其系统方案如图1

图1

FPGA有很强的时序控制能力,但控制能力不如STM32F407,并且在数字信号处理上较弱,在测量有效值和数据显示上也比较麻烦,此外,FPGA的功耗较大,而STM32F407数字处理能力强,且功耗低,综合考虑,本设计选择方案二。

二、系统理论分析与计算

1、频率测量原理分析

用单片机中的定时器产生1s的闸门信号,计数器记录的周期个数为1s内被测信号的周期信号,即为被测信号的频率。

其中,测量频率的误差与闸门的信号精度直接有关,为保证在1s内被测信号的周期信号误差在10-4量级,要求闸门信号的精度为10-5量级。

当被测信号频率增高时,在闸门脉冲表精度不变的情况下,计数器的误差会增大,但相对误差不会增大,然而对于频率较低时会出现严重的误差,所以我们采用了STM32F407的触发捕捉来实现高速度高精度的测频,频率算法示意图如图2。

图2频率算法示意图

误差分析:

触发捕捉测频法是基于频率的定义(即f=N/t)对信号的频率进行测量,经分析有

由于

所以

考虑到极限情况,相对误差最大值为

式中,∆f/f为测量频率时的相对误差;

∆N/N为计数值的相对误差;

∆t/t为时间的相对误差。

测量时间t为1s,如果要减小∆N/N误差,就要增大f,而本设计触发捕捉方法就是为了高速、高精度地测量1Hz

100MHz的信号,因此这项误差可以很小,基本忽略。

2、时间间隔测量原理分析

如图3为时间间隔测量原理图,量化时钟频率为f0,对应的周期T0=1/f0,在待测脉冲上升沿计数器输出计数脉冲个数M、N,T1、T2为待测脉冲上升沿与下一个量化时钟脉冲上升沿之间的时间间隔,则待测脉冲时间间隔Tx为:

Tx=(N-M)·

T0+T1-T2

(1)

然而,计数法得到的是计数脉冲个数M,N,因此其测量的脉冲时间间隔为:

Tx=(N-M)·

T0

(2)

比较表达式

(1)

(2)可得计数法的测量误差为∆=T1-T2,该误差称为计数法的原理误差。

除了原理误差之外,计数法还存在时标误差,其产生的原因是量化时钟的稳定度∆T0/T0。

通过提高量化时钟的频率可以减小测量误差。

而本设计采用的STM32F407单片机主频为72MHz,可以高精度的测量时间间隔。

图3

3、宽带通道放大器原理分析

在实现频率和周期测量功能时,题目要求被测信号有效值电压范围50mV

1V,STM32F407内部集成12位A/D转换,采样的精度为1/4096,对50mV电压采样,当基准电压为5V时则5V被分成4096份,则:

则n=40.96,则其精度约为1/41,远大于1/4096,误差较大,所以要对被测信号进行放大,50mV放大至少100倍,也就要求增益至少为100的放大器,又被测信号的频率范围在1

10MHz,由

增益带宽积=带宽

增益

计算可知,增益带宽积不小于

所以要设计一个增益带宽积不小于1G的放大器电路,本设计采用K544对信号进行放大,输入到整形电路中。

4、正弦波有效值测量原理

正弦波有效值:

把角速度当作时间来简化计算。

把2π当作周期T,把小片段角度d£当作小片段时间

在一个周期T内的有效值,即是计算一个周期T内的热量值相同的等效电压:

一个周期T内的热量值(假设电阻R=1):

∫u^2×

,即相当于∫u^2×

d£,用角度时u=sin£,则

d£=∫sin2£×

d£

在0~2π区间作积分:

=(2π/2-1/4×

sin4π)-(0/2-1/4×

sin0)=π

等效电压U0产生的热量值=U0^2×

2π等于

=π

故U0^2×

2π=π最终得:

U0=0.707即有效值等于峰值的0.707倍,而被测信号为全波信号,则全波整流的有效值只要计算0~π即可:

=(π/2-1/4×

sin2π)-(0/2-1/4×

sin0)=π/2

π=π/2

最终得:

U0=0.707即有效值等于峰值的0.707倍。

方案:

由于整流电路比较复杂,为了简化电路,本设计直接采用有效值芯片AD637进行测量,其3db带宽为8MHz,符合要求,然后输入到STM32F407中,可以直接实现有效值的测量。

5、脉冲信号占空比测量方法分析

占空比是指正脉冲的得持续时间与脉冲周期的比值。

即 

占空比=(脉冲宽度/信号周期)

100%

测量方法:

数字测量法

A、信号连接单片机定时器的捕获端口(上升触发)测量方波的周期T,并记录最后一次上升沿的时刻值。

B、信号同时连接单片机外部中断(下降沿触发),进入中断后读取定时器的时间,减去A步骤中保留的上升沿时刻,得到高电平宽度W。

C、W/T就是信号的占空比。

6、提高仪器灵敏度的措施

为提高仪器的灵敏度,测频方法选择用触发捕捉,用同一个脉冲捕捉并初始化计数器,提高采样速率,减少中断服务函数的执行时间,实现高速测频。

通过对晶振的双精度补偿,基本实现测量无误差,实现高精度。

再者,STM32F407供电电压为2~3.6V,在测量小信号时,可提高测量精度。

三、电路与程序设计

1、电路的设计

在实际测试中,由于被测信号幅度有大有小,因此要对输入电路的幅度进行调整,且测量电路通常为数字电路,而数字电路一般对信号边沿敏感,因此输入电路应有整形功能,即能够产生能被STM32F407单片机识别的脉冲信号;

在被测信号放大之间,还要进行阻抗变换,输入阻抗越高,对被测电路影响越小。

本系统总体框图如图4。

图4系统总体框图

(1)放大整形电路设计

放大整形电路框图如图5

图5放大整形电路框图

放大整形本题设计测频范围为1Hz-100MHz,考虑到输入电路的频响,输入电路分为低频段:

1Hz-500KHz;

高频段:

500KHz-100MHz。

低频放大:

U06A和U06B完成阻抗变换和信号放大,LM311完成整形;

信号幅度调整和高输入阻抗功能由场效应管输入电路实现,C91、C92、R92、R93将输入信号限定在0V以上(直流);

D6、D7用于对在信号限幅,使进入场效应管的信号不大于0.7Vpp;

Q1(K544)场效应管实现信号放大,K544截止频率>

100MHZ;

输入电路输入阻抗大于400千欧;

其整形电路由高速比较器完成,本设计选用TL311,响应度>

50MHz。

高频放大整形电路见附录1。

(2)STM32F407最小系统电路设计

STM32F407是ST推出的32位RISC(精简指令集计算机)微控系列的产品,采用高性能的内核,工作频率为72MHz,内置高速储存器。

STM32F407微处理器不能独立工作,其最小系统必须由相关的外围电路辅助,包括3.3V电源、8MHz晶振时钟、复位电路、数字和模拟间的去耦电路、调试接口(JTAG)、串行通信接口等电路。

如图7STM32F407最小系统框图,STM32F407最小系统电路原理图见附录1

图7STM32F407最小系统框图

2、程序的设计

(1)程序功能描述与设计思路

1、程序功能描述

根据题目要求,软件部分实现对被测信号频率、有效电压值等的测量。

2、程序设计思路

被测信号通过定时器2的外部触发引脚,通过设置定时器2的从模式控制寄存器TIM2_SMCR的ETPS可将外部信号实现4分频;

设置TIM2_SMCR的ECE使能外部时钟使能位,外部时钟输入为ETRF,设置SMS使触发输入TRGI为上升沿,TRGO重新初始化计数器,并且产生一个更新寄存器的信号。

分频寄存器TIM2_PSC设置为0分频,TIM2_ARR设置16位计数器最大值为0xffff,当外部信号计数到0xffff时,会产生更新中断标志位UIF置1。

  定时器2对TIM2_SMCR将触发输入TRGI设置为TIM4_TRGO,从控制器模式设置为复位模式/TRGI的上升沿初始化定时器。

通过设置定时器2的比较捕捉寄存器1的CC1S为11,将IC1映射在TRC上,当TIM4溢出事件时,会触发定时器2将TIM2_CNT的值锁存到TIM2_CCR1中,并清除所有定时器的计数器。

(2)程序流程图

1、主程序流程图

2、中断子程序流程图

四、测试方案与测试结果

1、测试方案

用数字万用表检测硬件电路连接和元器件的完好;

通过软件不断的调试程序,并仿真测试,利用示波器测试信号发生器产生的信号,最后,硬件和软件联调,测量不同频率的信号,观测并记录数据。

2、测试条件与仪器

测试条件:

检查多次,仿真电路和硬件电路与系统原理图完全相同,并且检查无误。

硬件电路无虚焊。

测试仪器:

信号发生器、数字电压表。

3、测试结果及分析

(1)测试结果(数据)

被测信号为三角波时,测量的数据如表1

表1

10Hz

100Hz

1KHz

1MHz

10MHz

40MHz

50mV

12Hz

99Hz

998Hz

999.9KHz

9.999MHz

200mV

500mV

1V

被测信号为方波时,测量的数据如表2

表2

20mV

16Hz

999Hz

100mV

测试显示结果见附录1

(2)测试分析与结论

本次设计的数字频率计能够实现1Hz~40MHz范围内的频率测量,被测信号小于100Hz时,测量相对误差的绝对值较大,被测信号大于100Hz时,测量相对误差的绝对值小于10-4,且频率较高时,能够消除绝对误差。

本次设计完成了题目的基本要求和发挥部分的部分要求。

五、总结

本设计采用STM32F407F407单片机作为主控芯片,它是一款高性能、低成本、低功耗的单片机,目前在许多有关单片机设计的问题中,得到了广泛的应用,在本次设计中使用STM32F407F407芯片可实现高精度频率的测量,也可减少外围器件的使用。

经测试,本次所设计频率计的测量范围可达1Hz~100MHz,测量相对误差的绝对值不大于10-4,可对有效值在50mV~1V之间的周期信号进行测量,也可对AB两路信号的时间间隔进行测量,且测量相对误差的绝对值不大于10-2。

所设计的频率计满足题目的要求。

六、参考文献

[1]Walt 

Jung.运算放大器应用技术手册[M].北京:

人民邮电出版社,2009.

[2]华成英,童诗白.模拟电子技术基础[M].北京:

高等教育出版社,2007.

[3]徐江丰,陈曦.相关计数法数字频率计的研究与实现[J].电子技术(上海),2003(4):

16-18.

[4]张志成.基于STM32F407单片机的频率计的设计[J].电子科技,2013(20):

1-9.

附录1:

STM32F407最小系统电路原理图

高频放大整形电路

测试显示结果

附录2:

部分源程序

#include"

STM32f407f10x.h"

CaiJi.h"

//配置系统时钟,使能各外设时钟

voidRCC_Configuration(void)

{

SystemInit();

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

//时钟配置

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO,ENABLE);

}

voidGPIO_Configuration(void)

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOF,&

GPIO_InitStructure);

GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&

voidNVIC_Configuration(void)

NVIC_InitTypeDefNVIC_InitStructure;

#ifdefVECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);

#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;

//NVIC配置

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&

NVIC_InitStructure);

voidTIM3_Configuration(void)//TIM2初始化函数

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

TIM_ICInitTypeDefTIM_ICInitStructure;

TIM_DeInit(TIM3);

TIM_TimeBaseStructure.TIM_Period=0xffff;

TIM_TimeBaseStructure.TIM_Prescaler=?

;

//此值保密,呵呵,大家自己可以算一下,唯一奥,不然不准

TIM_TimeBaseStructure.TIM_ClockDivision=0;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3,&

TIM_TimeBaseStructure);

TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;

//通道选择

TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;

//上升沿触发

TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;

//管脚与寄存器对应关系

TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;

//输入预分频。

意思是控制在多少个输入周期做一次捕获,如果

//输入的信号频率没有变,测得的周期也不会变。

比如选择4分频,则每四个输入周

//期才做一次捕获,这样在输入信号变化不频繁的情况下,可以减少软件被不断中断的次数。

TIM_ICInitStructure.TIM_ICFilter=0x0;

//滤波设置,经历几个周期跳变认定波形稳定0x0~0xF

TIM_ICInit(TIM3,&

TIM_ICInitStructure);

//TIM_PWMIConfig(TIM3,&

//根据参数配置TIM外设信息

TIM_SelectInputTrigger(TIM3,TIM_TS_TI2FP2);

//选择IC2为始终触发源

TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);

//TIM从模式:

触发信号的上升沿重新初始化计数器和触发寄存器的更新事件

TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);

//启动定时器的被动触发

TIM_Cmd(TIM3,ENABLE);

//启动TIM2

TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE);

//打开中断使能CC1中断请求

STM32f407f10x_it.c文件

STM32f407f10x_it.h"

xpt2046.h"

#include"

delay.h"

externintpinlv;

externintcaiji;

externintm_timer;

voidTIM3_IRQHandler(void)

if(TIM_GetITStatus(TIM3,TIM_IT_CC2)==SET)

{

pinlv=TIM_GetCapture2(TIM3);

caiji=720000000/pinlv;

//caiji=30000;

TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);

//清楚TIM的中断待处理位

二.中断法CaiJi.C文件

voidExit_Configuration

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1