基于MSP430的等精度频率计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MSP430G2553的等精度频率计
电气410 马唯焜2140401286摘要:本系统以超低功耗MSP430G2553单片机为核心处理芯片来测量信号的频率,通过定时器A0和A1以及A1中的捕获器,采用等精度法完成信号频率测量,测量精度在全频域内相同,实测范围在1Hz到208.2KHz之间。
一、方案论证
1.方案分析
方案一:使用测频法进行频率测量。测频法即在限定的时间内(如1s)检测到来脉冲的个数,然后计算出1s内的脉冲数即为待测信号的
频率。测高频信号时较为准确,测低频和中频信号时误差较大。
方案二:使用测周法进行频率测量。测周法即记录一个脉冲的相邻两个上升沿到来的时刻,相减得到该脉冲的周期,由此计算出其频率。
测低频信号时较为准确,测中频信号和高频信号误差较大。
方案三:使用等精度法进行频率测量。等精度法即开启有限定时间长度的预闸门信号后,在待测信号的第一个上升沿同时分别开启对待测
信号和对基准时钟的计数器;预阀门信号到时关闭后,在待测信号的第
一个上升沿同时分别关闭对待测信号和基准时钟的计数器,之后通过计
数值计算得出信号频率。等精度法理论上在全频域内有相同的测量误
差,且误差仅与预闸门信号时间长度和基准信号频率有关,故测频范围
较广时更为适合。
考虑到本设计要求测频范围较广,以及测频法和测周法在中频区的误差
不可避免,最终选用等精度法进行测量。
2.总体方案设计
等精度法测量的实际闸门时间T cp恰好是待测信号周期的整数倍,能消除待测信号计数器±1个脉冲误差的影响,在整个量程内维持相同的测量精度。本项目中,分别使用MSP430G2553的内置定时器TimerA0定时1s作为预闸门信号,定时器TimerA1作为基准时钟的计数器,捕获器
TACCR1上升沿捕获作为待测信号的计数器。测量原理如图示,两个计数
器均在预闸门信号开启后的第一个上升沿启动,在预闸门信号关闭后的第一个上升沿停止,实际闸门时间T cp与预闸门时间T GR不完全相等但相差不超过一个待测信号周期。
二、理论分析和计算
设在某次实际闸门时间T cp内,待测信号计数值为N x,基准时钟f B的计数值为N B,则待测信号的频率为
f x=N x
N B
f B(1)待测信号计数值N x无计数误差,若忽略基准时钟f B的误差,则由基准时钟计数±1个脉冲带来的测频相对误差为
δ=|f x′−f x
f x |×100%≤1
N B
=1
T GB f B
(2)
其中,f x为待测信号频率的真实值,f x′=N x
N B±1
f B为待测信号频率的测量值。
由(2)可看出,测频的相对误差与被测信号的频率f x无关,仅与闸门时间T GB和基准时钟f B有关,故在全频段误差相同。本项目中,设定闸门时间T GB= 1s,基准时钟f B=32768Hz,计算得理论相对误差为0.00305%,符合设计要求。
三、软件设计
程序流程图如下。开始后,在初始化函数中对系统时钟、I/O口、定时器进行配置,并清空计时器。随后TimerA0开始1s定时作为预闸门信号,预闸门开启后的第一个待测信号上升沿开启TimerA1和P1.3引脚中断功能对基准时钟和待测信号脉冲的计数。预闸门信号关闭后待测信号的第一个上升沿来临,在P1的中断函数中检测忙信号(busy)的值,若busy为1,即仍在计数过程中,则计
算频率的值,并将忙信号复位为0;若忙信号为0,则清除所有计数后开始下一次计数。
四、 实际测试
使用TFG6080 dds 函数信号发生器,输出最大值为2.6V 的方波信号,接msp430g2553的P1.3,上电后设置方波为不同频率,得到的测量结果及相对误差如下: 实际频率/Hz 1 1.5 2 2.5 3 测量频率/Hz
1.000031 1.500023 1.999878
2.500038
3.000183 相对误差/%
0.0031 0.0015 0.0061 0.0015 0.0061
3.5 4 5 10 20 50 100 3.499982 3.999837
4.999886 9.999729 19.99974 49.99974 99.99790 0.0005
0.0041 0.0023 0.0027 0.0013 0.0005 0.0021
200 500 1k 2k 5k 10k 20k 199.9948 499.9918 999.9766 1999.977 4999.916 9999.915 19999.83 0.0026
0.0016 0.0023 0.0012 0.0017 0.0009 0.0009
50k 100k 200k 208.2k 计算频率
Y
N
计数完毕?
关闭预闸门信号
清除计数 开启预闸门信号 系统初始化
开始
五、反思总结
本次任务中主要有两个难题,一是测频精度要求,二是测频范围要求。关于这两个问题我们做了很多尝试和探索,现总结如下。
首先说精度的问题。在最初时,我从测频常规思路去考虑,选择了最直观也是最简单的测频法和测周法,分别对高频和低频信号进行测量,最后再整合一下,便自认为完成了设计。但在实验室中实测时发现,此两种方法在各自的使用频段都存在较大的误差,且对于中频信号,两者的测量结果都不理想,这样的精度显然不能达到要求。在老师的提点下,我们遂改用等精度法测量频率。等精度法全频段等误差的优良性使得程序得到了极大的简化,且大大提高了测量的精确度,完美的解决了第一个难题。
其次是测频范围问题。这一问题自始至终贯穿着整个任务过程,始终困扰着我们。综合考虑之后,我们认为单片机内部门电路的传输时延,CPU时钟频率有可能限制了对高频信号的测量。TTL逻辑门的传输时延一般为纳秒级,而频率1Mhz的信号周期为微秒级,故其影响较小。CPU的主频决定了指令周期的大小,本任务中使用DCO=16MHz作为主时钟源,其机器周期为0.0625us,一个指令周期包含1-6个机器周期,最大时长为0.365us,而1MHz的信号其周期为1us,与指令周期较为接近。程序在中断函数中对待测脉冲进行边沿计数,与此同时还有其他控制逻辑相关的指令需要运行,故降低了检测速度,出现“漏数”脉冲个数的现象,使测频范围变小。
最后,虽然由于时间和器材限制,我们没有制作实际的电路,但我们设想如果要测量频率为208KHz-1MHz的信号,可以先使用分频电路将信号进行分段分频,200-400KHz用2分频,400-800KHz用4分频,800-1000KHz用6分频,使高频信号输入到处理器内时变为可测范围以内的信号,这样就能扩展测频范围。但是,缺点是误差会乘以一个与分频倍数相等的因子。