可编程定时/计数器提高输出频率准确度方法

发布者:彭勇最新更新时间:2012-02-20 来源: 单片机与嵌入式系统应用 关键字:计数器  脉冲发生器  频率准确度 手机看文章 扫描二维码
随时随地手机看文章

将单片机内置或专用可编程定时/计数器作脉冲发生器,一般输入脉冲由晶振产生经过整形或分频后形成,有很高的频率准确度和稳定度。设输入脉冲频率为fin,期望输出脉冲频率为f,应置入脉冲发生器的计数值N=fin/f。当f为fin的约数,则N为整数,f与fin的准确度相同;当f不为fin的约数,则N 也不为整数,N=n+δ,其中n为N的整数部分,δ为 N 的纯小数部分。由于计数值只能为整数,实际计数值Np只能取N的近似数n或n+1,竞争输出脉冲频率fp=fin/Np。因Np的近似,fp与f间必然存在误差,且此误差分量较之因fin准确度和稳定度有限引起的误差分量可能大得多。f的准确度主要受Np的近似影响。本文在不计由fin准确度和稳定度影响的条件下,分析由Np引起f误差的特点,探讨消除或减小因Np引起f误差的方法,从而提高f的准确度。

1 单时钟源时,因Np近似影响输出频率准确度分析

当脉冲发生器输入脉冲为fin时,若最大计数值为nmax,则Np取值可能为1,2,…,nmax,有nmax种可能,相应fp被离散为fin, fin/2,…,fin/nmax,也有nmax种取值的可能。令fin/(nmax+1)=0,这些离散频率将0~fin频段分成nmax个子频段,对于任一f∈(0,fin),总对应一n,使f∈(fin/n+1),fin/n)。Np取n或n+1,近似N,实际上是用fin/n或fin/(n+1) 来近似f。当f为fin的约数时,Np=N,fp=f,绝对误差Δf=fp-f=0,相对误差r=Δf/f=0;当f不为fin的约数时,Δf≠0,r≠0。Δf和r的值与Np的取值方案有关,有以下三种情况:

①Np=n时,fp=fin/n>f, Δf>0,r>0,Δf随f的增大而减小。F趋近于fin/(n+1)时,Δf和r趋于极大值;Δf趋近于fin/n-fin/(n+1)=fin/[n(n+1)]时,r趋近于1/n。采用此方案时,f越接近于fin/(n+1),f的准确性越差,如图1口Δf(f)曲线。

②Np=n+1时,fp=fin/(n+1)

③以|Δf|为最小原则,f∈[fin/(n+1),fin/(n+1)+fin/2n(n+1)]时,Np=n+1,fp=fin/(n+1),则Δf<0,r<0;f∈[fin/(n+1)+fin/2n(n+1),fin/n]时,Np=n,fp=fin/n,则Δf>0,r>0;当f=fin/(n+1)+fin/[2n(n+1)]时,|Δf|和|r|达到极大值。Δf=±fin/2[n(n+1)],r=±1/(2n+1)。采用此方案时,f越接近fin/(n+1)+fin/[2n(n+1)],f的准确性越差(见图2)。

综合以上三种方案的误差情况,因Np近似引起的输出频率误差有以下特点:

①三种方案的Δf(f)曲线都是由一组分辩率为-1的平行线段组成,子频段越宽,斜线段越长。说明各子频率的最大绝对误差值max(|Δf|)及max(|r|)与子频段宽度成正比,而子频段的宽度与n成反比。

②方案③各子频段的max(|Δf|)和max(|r|)为前面方案一半,说明方案③较前两方案更合理。以后讨论Np取值时都按方案③。

③ 评价发生器的准确度,是用给定频段最大相对误差的大小。最大相对误差大小取值越小,则发生器的准确度越高。在子频段[fin/(n+1),fin/n] 中,其极大值为1/(2n+1)。由此可以看出,fin一定时,f越大,n越小;子频段的|r|极大值越大,准确度越低。对于给定输出频段的准确度,可以用该频段频率上限对应的子频段|r|的极大值来评价。换言之,提高了输出高频段的准确度,也就提高了整修输出频段的准确度。[page]

表1是设fin=10 7Hz,f在不同数量级Hz频段,由N近似影响f准确度的指标。

表1 

频段 10 2 10 3 10 4 10 5
max(|γ|) 5×10 -6 5×10 -5 5×10 -4 5×10 -3
max(|Δf|)/Hz 5×10 -4 5×10 -2 5 446

从表1可以看出,f每增加1个数量级,max(|r|)增加1个数量级,max(|Δf|)增加2个数量级。

2 提高输出频率准确度的方法

在给定可编程定时/计时器条件下,针对Np引起输出频率误差的特点,可以采取不同方法消除或减小输出频率误差,从而提高输出频率的准确度。

(2)脉冲发生器仅需有限个确定频点输出时的情况

脉冲发生器仅需有限个确定频点输出时,以下两种方法可以消除因计数值近似引起的输出频率误差。

①单时钟公倍数法。若取fin为这些频点的公倍数,则其中每个频点f对尖的N都为整数,从而消除了因计数值近似引起的输出频率误差。采用此法须注意,一是fin不得超出脉冲发生器的允许输出频率上限;二是确定已知频点的有效位数时,要考虑到晶振的准确度和稳定度。

② 多时钟源公倍数法。采用单时钟公倍数法确定的fin超出脉冲发生器输入频率上限时,可以采用二时钟源或多时钟源公倍数法。二时钟源公倍数法的具体做法是,将各输出频点分成两级,分别求出各组对应的公倍数fin1及fin2,若此fin1或fin2有一个大于脉冲发生器输入频率上限时,则重新分且,直到两组的公倍数fin1及fin2都达到输入频率上限要求。电路上设置相应的两振荡电压及二选一开关,根据输出频率而将对应的fin1或fin2切换到脉冲发生器的输入端。若分成两组后,无论怎样调整分组都不能使fin1及fin2同时满足输入频率上限要求,则可采用多时钟源公倍数法。考虑到增加时钟源数后,给软硬件带来的复杂性,在满足输入频率上限要求的前提下,时钟源数应尽量少。

(2)已知输出频率上限,不能确定具体期望输出频率时的情况

已知输出频率上限,不能确定具期望输出频率时,尽量提高fin或增加时钟源数,缩小近似子频段宽度,减小子频段内可能出现的max(|r|)及max(|Δf|)。

①提高时钟源fin法。若要求输出频率上限为fmax,则对应Nmin=fin/fmax=nmin+δ。输出频段可能出现的max(|r|)=1/(2nmin+1)若能使fin增大,则nmin增大,max(|r|)相应减小,从而提高了输出频率的准确度。

②多时钟源等分子频段法。提高时钟源fin,受脉冲发生器允许输入上限频率的制约,若还要提高输出频率准确度,可以增加时钟源数,将[fin/(nmin+1),fin/nmin]子频段作M等分,则可钭max(|r|)缩小M倍。

设有M个时钟源,其频率分别为fin,fin1,…,finM-1,可通过M选一开关,接入其一到脉冲发生器的输入端,经过nmin分频后,正好将[fin/(nmin+1),fin/nmin]M等分,即

fin1/nmin=fin/nmin-fin/[M·nmin(nmin+1)]

fin2/nmin=fin/nmin-2fin/[M·nmin(nmin+1)]

fin/nmin=fin/nmin-jfin/[M·nmin(nmin+1)]

finM-1/nmin=fin/nmin-(M-1)/[M·nmin(nmin+1)]

也即只要:finj=fin[1-j/[M(nmin+1)](j=1,2,…,M-1),就可以将子频段[fin/(nmin+1),fin/nmin]等分为M个子敬意。用量小|Δf|原则通过切换进相应的时钟源,f可以用fin/(nmin+1),finM-1/nmin,…,fin1/nmin,fin/nmin来近似。各子区间 max(|r|M)=(|r|)/M。一般地,当n>nmin时,M-1个增加的时钟finj(j=1,2,…,M-1),经n分频后不一定能将 [fin/(n+1),fin/n]作M部分,但能使此子频段分割,且各子区间宽度都小于fin/[M·nmin(nmin+1)],各子区间内的max (|r|)小于max(|r|m)。

3 实验结果

我们对多时钟源等分子频段法进行了实验,可编程定时/计数器采用Intel 8254-2,取fin=10MHz,fmax=10kHz,M=5,则nmin=1000,用频率计将各振荡器输出频率标定为:fin=10MHz,fin1=9 998 002.0Hz,fin2=9 996 004.0Hz,fin3=9 994 006.0Hz,fin4=9 992 008.0Hz。再将Intel 8254-2置入不同计数值,分别用各时钟源输入时,测出Intel 8254-2输出频率,结果如表2所列。

表2 

         输入
     输出
计数值
fin=1000000 fin1=9998002.0 fin2=99960 4.0 fin3=9994006.0 fin4=9992008.0
1000 10000.0 9998.0 9996.0 9994.0 9992.0
1001 9990.0 9988.0 9986.0 9984.0 9982.0
1002 9980.1 9978.0 9976.1 9974.1 9972.1
1003 9970.1 9968.1 9966.1 9964.1 9962.1

从表2可以看出,在单一时钟源时,计数器两相邻实际输出频率之差最大值为10.0Hz,输出频率准确度为±5.0 Hz,而在5时钟源时,计数器两相邻实际输出频率之差最大值为2.0Hz,输出频率准确度为±1.0Hz,输出频率准确度得到提高,为单时钟源时的5倍。

关键字:计数器  脉冲发生器  频率准确度 引用地址:可编程定时/计数器提高输出频率准确度方法

上一篇:用W78E51单片机实现的自动拨号器
下一篇:单片机系统在测控领域的探讨

推荐阅读最新更新时间:2024-03-16 12:53

ABB机器人IRB1410零点计数器更新方法教程
同步标记(ABB IRB1410) 下图所示:irb 1410的校准范围位置。 更新转数计数器 简介: 本节介绍如何对每根操纵器轴执行粗略校准,即使用FlexPendant更新每根轴的转数计数器值。 步骤1:手动将操纵器运转至同步位置 按本步骤手动将机械臂运行到同步位置。 轴4和轴6的正确校准位置 当操纵机械臂至同步位置时,应确保下述机械臂的轴4和轴6正确定位,这一点极为重要。否则,这些轴可能会按错误的顺序进行校准,从而导致机械臂校准错误。 确保这些轴按照正确的校准值而不仅仅是校准标记进行定位。在位于下臂上底座或框架法兰盘下的标签上可找到
[机器人]
定时器/计数器T1的定时实例
1、本例使用定时器1的定时中断控制2个LED实现不同的闪烁频率。 2、实现方法:通过给定时器T1设置适当的初值,实现50MS的定时中断,由于要控制两个LED以不同的频率闪烁,因而需要设置两个变量来分别计算中断次数。 3、在keil c51中新建工程ex46,编写如下程序代码,编译并生成ex46.hex文件 #include //包含头文件 sbit LED1=P1^0; //端口位定义 sbit LED2=P1^1; unsigned char counter1,counter2; //定义全局变量,用以存储定时器的中断溢出次数 //主函数 void main(void) { EA = 1; //开总中断
[单片机]
定时器/<font color='red'>计数器</font>T1的定时实例
10MHz频率计数器(续)
10MHz频率计数器(续)
[电源管理]
10MHz<font color='red'>频率</font><font color='red'>计数器</font>(续)
60H脉冲发生器电路图
60H脉冲发生器电路图 是由12为二进制串行计数器/分频器CD4040和六反相器CD4069等构成的60Hz数字钟时基电路。 电路中,CD4069的门I和门II构成震荡频率为32768Hz的晶体振荡器。其输出经CD4069的门III整形后送至CD4040的 端。CD4040的输出由二极管VD1~VD3置成分频系数为21+25+29=546,经分频后在输出端Q9上便可输出一个60Hz的时钟信号供给数字钟集成电路。 图2a是另一种60Hz脉冲发生电路。它由集成电路CD4060和谐振频率为30720Hz的晶振等元件组成。CD4060是14位二进制串行计数、分频器和振荡器。CD4060内部分为两部分,其中一部分是14
[模拟电子]
60H<font color='red'>脉冲发生器</font>电路图
C51单片机的定时器计数器怎么用?
方法有很多的,给你一个,你可以调试一下,你可以通过不同的晶振去计算定时器初值,如果你懂定时器这部分很好调通的 #include sbit p1_0=P1^0; int i; //全局变量 void timing(void) //晶振为3.6864M { TMOD|=0x01; //定时器T0,工作方式1 TH0=0xC3; TL0=0xC7; //这两个寄存器存的是计数器的计数开始的值,这两个值累加至溢出后正好是50ms ET0=1; //使T0中断可以溢出 EA=1; //开启总中断 TF0=0; //溢出位清零 TR0=1; //开启T0 } /********定时中断
[单片机]
51单片机定时器的应用
interrupt中断的关键字,n是中断号提供中断程序的入口地址。 0-INT0 1-T0 2-INT1 3-T1 4-串行中断 5-T2 直接访问寄存器和端口 定义 sfr P0 0x80 sfr P1 0x81 sfr ADCON; 0xDE sbit EA 0x9F 操作 ADCON = 0x08 ; P1 = 0xFF ; io_status = P0 ; EA = 1 ; 在使用了interrupt 1 关键字之后,会自动生成中断向量 在 IS
[单片机]
基于FPGA电火花加工脉冲电源的设计与研究
引 言       数控电火花(electrical discharge machining,EDM)机床是一种实现工件精密加工的特种加工工具。早期的电火花成型加工机床的脉冲电源电路是用分立元件组成,或者是用单片机来实现。分立元件电路设计复杂,电路调试困难,基于单片机或者是32位的嵌入式CPU的脉冲电源性能有了很大的提高,也具有了很高的智能性,但对于不同的处理器,其移植性不太好,而且如果硬件电路一旦完成就不能进行更改与升级。而采用现场可编程门阵列FPGA在很好的继承单片机或者是嵌入式CPU设计的电源的优点的同时,还拥有一些新的特点。本文提出的方案采用的是Altera公司的cylone II芯片,将Altera提供的NIOS II
[电源管理]
STC89C52单片机定时器/计数器详解(含程序和定时器2)
89C51和89C52还是有一些区别的,首先我们要明确,89C51有两个计数器T0和T1,89C52还有一个T2。   PS—串行口中断优先级控制位   PT1—TC1中断优先级控制位   PX1—外部中断1优先级控制位   PT0—TC0中断优先级控制位   PX0—外部中断0优先级控制位   同优先级的中断请求,按默认顺序响应。   【说明】   1. 本文里类似的x均可取值为0或1。   2. TC指TImer/Counter,即定时器/计数器。   3. 机器周期是单片机的基本操作周期,一个机器周期内单片机完成一项基本操作,如取指等。一个机器周期包含12个时钟周期。时钟周期是时钟频率的倒数。   4. T
[单片机]
STC89C52单片机定时器/<font color='red'>计数器</font>详解(含程序和定时器2)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved