基于DSP的高精度数字频率计的设计
键盘定时中断扫描
为满足系统实时性要求、完成键盘操作的实时响应,本系统设置了一个5ms的时基,采用事件管理器的EVB的time4定时周期中断来完成。对键盘扫描、命令形成与标志位设置功能,都在定时器中断服务子程序完成。键盘定时中断扫描流程图如图5所示。
本文引用地址:https://www.eepw.com.cn/article/163945.htm
|
捕获中断测频
本系统使用TMS320F2812事件管理器模块的捕获单元来测频,捕捉被测信号的有效电平跳变沿,由内部的计数器记录一个周波内标频脉冲个数,并通过相应的运算来得到被测频率的大小。此模块主要包括捕获与定时的初始化设置与捕获中断子程序两部分。
捕获中断测频子程序的部分代码如下:
(1)void InitEv1(void)//捕获1初始化设置
{
EALLOW;
SysCtrlRegs.HISPCP.all = 0x00;// 外设高速时钟
EDIS;
EvaRegs.CAPCONA.bit.CAP1EDGE=1; //检测上升沿,计算周期脉冲宽度
EvaRegs.CAPFIFOA.bit.CAP1FIFO=0; //CAP1FIFO空
EvaRegs.CAP1FBOT=0;//栈底清零
EvaRegs.CAP1FIFO=0;
EvaRegs.EVAIFRC.bit.CAP1INT=1;//清捕获中断1标志位
EvaRegs.EVAIMRC.bit.CAP1INT=1; //捕获1中断使能
}
(2)interrupt void CAPINT1_isr(void)//捕获中断1子程序
{
CAP1_t1=EvaRegs.CAP1FIFO;//
CAP2_t1=EvaRegs.CAP1FIFO;
if(CAP2_t1>CAP1_t1)
temp1=CAP2_t1-CAP1_t1;
else
temp1=CAP2_t1+EvaTimer1InterruptCount*65535-CAP1_t1;
f1= 1171875.0/(float)temp1;
value=f1;
fpart = modf(value, ipart);
a1=(long)ipart;//获得频率的32位整数
*(Uint16 *)0x80008=a10x0ffff;//获的低16位
*(Uint16 *)0x80009=(a10xffff0000)>>16;//获的高16位
EvaRegs.EVAIFRC.bit.CAP1INT=1;//清捕获中断1标志位
EvaRegs.EVAIMRC.bit.CAP1INT=1; //捕获1中断使能
PieCtrlRegs.PIEACK.bit.ACK3 = 1;//开外设中断应答
}
LCD显示处理
LCD的显示分为信息区与显示区两部分。其中信息区包括固定信息(显示烟台大学DSP实验室等),显示区包括通道号信息与各通道的频率值信息的显示。本模块主要包括LCD的初始化设置与频率值的显示等子程序。
实验结果
本系统测试了如表1中的6组数据,并做出了误差分析。输入信号频率与实测信号频率如表1所示。
|
误差分析:本系统的误差主要来自如下两个方面,即计数脉冲和门控信号不同步以及晶振不稳定。
结束语
本文设计了一种具有高精度和简单结构特点的测频系统,由于在实现上简单,可以满足低成本的要求,使测频电路大为简化,便于工程应用,具有较大的应用价值。
经过反复测试后得出:系统的测频误差可达到0.1%,由于采用了实时的键盘定时中断扫描,可以较好地满足实时性要求。
评论