数字频率计讲解Word文档下载推荐.docx
《数字频率计讲解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字频率计讲解Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
它是通过具有高性能、低成本、低功耗的单片机对信号进行捕获、计数,用软件处理数据,实现高速、高精度的测频。
综合以上三种方案,选择方案三。
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