100MHz高速计数器在STM32F103系列嵌入式系统中的设计与实现
2015-05-30杨卫东班奎峰杨红天
杨卫东 班奎峰 杨红天
【摘要】 近几年发展成熟的Cotex-M3系列嵌入式单片机,由于其低功耗、低成本和高性能的特点,使其在高端工业仪表和仪器应用得以迅速普及。但30MHz以上级别的计数器,无法在STM32F103系列单片机上直接实现,原有仪器硬件方案是采用高速FPGA实现计数。针对原有仪器硬件方案进行改进,将MCS51单片机换成STM32F103VET6嵌入式单片机,去掉FPGA的计数器,用嵌入式单片机直接实现100MHz高速计数器功能。以达到简化原设计的复杂程度。
【关键词】 高速计数器 嵌入式系统
一、输入信号的分频处理
针对STM32F103VET6计数器上限只能到27MHz的情况,决定对被测高频信号进行4分频后,进入单片机。如此,信号在100MHz时输入单片机的信号频率为25MHz,就达到了频率设计目标。选择FAIRCHILD公司的74AC74(双D触发器)来实现4分频,74AC74在SV电源工作条件下,-40。-85°范围内fmax≥125MHz。4分频原理图见图1。
二、计时器系统的主要误差分析
l、基本误差。计数器在每秒计数期间,由于信号和秒时钟的偶然关系,计数器具有±1个字的基本误差。
2、四分频器误差。由于单片机内的计数器工作在四分频信号,则计数器的所有误差均会被放大4倍。
3、单片机1秒中断误差。单片机内部1秒中断时间到,到执行读出计数器数据这个过程中,每次操作延迟的时间有一定的差别,导致误差;并且在读数期间也有可能产生新的计数,若是碰到计数进位情况,会产生很大的偶然性误差。这两种误差也会因4分频被放大4倍。
三、计时器系统误差处理
1、消除计数器基本误差。对于计数器的此项误差,通过软件将前后两次计数值,做简单的均值滤波就可以消除。
2、降低4分频器误差。由于4分频器均会将所有误差放大4倍,影响最大。发挥STM32F103VET6的多计数器长处,用两个计数器对信号技术,一个对信号的上升沿计数,一个对信号下降沿计数。这样处理后,实际的分频系数就降低为2了。若想消除此项误差,在双计数器技术的条件下,选择计数器速度超过50MHz的单片机才能实现。
3、消除单片机1秒中断误差。为了消除此项误差,只能采用硬件操作来完场计数器的读数,而不能用软件中断方式来实现。笔者是这样解决的,针对计数器有外部捕获功能,若每秒产生一个不收软件控制的捕获信号即可。从这个思路出发,充分发挥嵌入式单片机优势,通过单片机内的PWM发生器,产生一个不用软件参与的1Hz信号,将这个PWM引脚连接到计数器的捕获引脚上,就达到目的了。也可以采用单独的实时时钟芯片产生这个信号。
4、降低1秒时间基准误差。由于此项误差不来源于单片机本身,而是来源于外部的石英晶体振荡器,最简单的办法是采用高精度和稳定度的石英晶体振荡器。
四、软件流程图
设计中充分运用STM32F103VET6的计数器外设,完全避开了软件对计数器工作的干扰,计数器的运行消耗MCU资源极少,只在每秒计算信号频率时才运行一次计算程序,软件流程见图7,计算公式如下:
本次1秒F=(N*65536+本次捕获计数器值-前次捕获计数器值)*分频系数
N*65536计数器工作在16位模式,每次中断代表有65536信号进入计数器
分频系数=2
信号频率=(本次1秒F+前次1秒F)/2