可編程定時(shí)/計(jì)數(shù)器提高輸出頻率準(zhǔn)確度方法
將單片機(jī)內(nèi)置或?qū)S每?strong>編程定時(shí)/計(jì)數(shù)器作脈沖發(fā)生器,一般輸入脈沖由晶振產(chǎn)生經(jīng)過整形或分頻后形成,有很高的頻率準(zhǔn)確度和穩(wěn)定度。設(shè)輸入脈沖頻率為fin,期望輸出脈沖頻率為f,應(yīng)置入脈沖發(fā)生器的計(jì)數(shù)值N=fin/f。當(dāng)f為fin的約數(shù),則N為整數(shù),f與fin的準(zhǔn)確度相同;當(dāng)f不為fin的約數(shù),則N 也不為整數(shù),N=n+δ,其中n為N的整數(shù)部分,δ為 N 的純小數(shù)部分。由于計(jì)數(shù)值只能為整數(shù),實(shí)際計(jì)數(shù)值Np只能取N的近似數(shù)n或n+1,競(jìng)爭(zhēng)輸出脈沖頻率fp=fin/Np。因Np的近似,fp與f間必然存在誤差,且此誤差分量較之因fin準(zhǔn)確度和穩(wěn)定度有限引起的誤差分量可能大得多。f的準(zhǔn)確度主要受Np的近似影響。本文在不計(jì)由fin準(zhǔn)確度和穩(wěn)定度影響的條件下,分析由Np引起f誤差的特點(diǎn),探討消除或減小因Np引起f誤差的方法,從而提高f的準(zhǔn)確度。
1 單時(shí)鐘源時(shí),因Np近似影響輸出頻率準(zhǔn)確度分析
當(dāng)脈沖發(fā)生器輸入脈沖為fin時(shí),若最大計(jì)數(shù)值為nmax,則Np取值可能為1,2,…,nmax,有nmax種可能,相應(yīng)fp被離散為fin, fin/2,…,fin/nmax,也有nmax種取值的可能。令fin/(nmax+1)=0,這些離散頻率將0~fin頻段分成nmax個(gè)子頻段,對(duì)于任一f∈(0,fin),總對(duì)應(yīng)一n,使f∈(fin/n+1),fin/n)。Np取n或n+1,近似N,實(shí)際上是用fin/n或fin/(n+1) 來近似f。當(dāng)f為fin的約數(shù)時(shí),Np=N,fp=f,絕對(duì)誤差Δf=fp-f=0,相對(duì)誤差r=Δf/f=0;當(dāng)f不為fin的約數(shù)時(shí),Δf≠0,r≠0。Δf和r的值與Np的取值方案有關(guān),有以下三種情況:
①Np=n時(shí),fp=fin/n>f, Δf>0,r>0,Δf隨f的增大而減小。F趨近于fin/(n+1)時(shí),Δf和r趨于極大值;Δf趨近于fin/n-fin/(n+1)=fin/[n(n+1)]時(shí),r趨近于1/n。采用此方案時(shí),f越接近于fin/(n+1),f的準(zhǔn)確性越差,如圖1口Δf(f)曲線。
②Np=n+1時(shí),fp=fin/(n+1)<f,f<0,r<0,| Δf|隨f的增大而增大。F趨近于fin/n時(shí),|Δf|和|r|趨于極大值;Δf趨近于fin/(n+1)-fin/n=-fin/[n(n+1)])時(shí),r趨近于-1/n。采用此方案時(shí),f越接近于fin/n,f的準(zhǔn)確性越差,如圖2中-Δf(f)曲線。
③以|Δf|為最小原則,f∈[fin/(n+1),fin/(n+1)+fin/2n(n+1)]時(shí),Np=n+1,fp=fin/(n+1),則Δf<0,r<0;f∈[fin/(n+1)+fin/2n(n+1),fin/n]時(shí),Np=n,fp=fin/n,則Δf>0,r>0;當(dāng)f=fin/(n+1)+fin/[2n(n+1)]時(shí),|Δf|和|r|達(dá)到極大值。Δf=±fin/2[n(n+1)],r=±1/(2n+1)。采用此方案時(shí),f越接近fin/(n+1)+fin/[2n(n+1)],f的準(zhǔn)確性越差(見圖2)。
綜合以上三種方案的誤差情況,因Np近似引起的輸出頻率誤差有以下特點(diǎn):
①三種方案的Δf(f)曲線都是由一組分辯率為-1的平行線段組成,子頻段越寬,斜線段越長(zhǎng)。說明各子頻率的最大絕對(duì)誤差值max(|Δf|)及max(|r|)與子頻段寬度成正比,而子頻段的寬度與n成反比。
②方案③各子頻段的max(|Δf|)和max(|r|)為前面方案一半,說明方案③較前兩方案更合理。以后討論Np取值時(shí)都按方案③。
③ 評(píng)價(jià)發(fā)生器的準(zhǔn)確度,是用給定頻段最大相對(duì)誤差的大小。最大相對(duì)誤差大小取值越小,則發(fā)生器的準(zhǔn)確度越高。在子頻段[fin/(n+1),fin/n] 中,其極大值為1/(2n+1)。由此可以看出,fin一定時(shí),f越大,n越??;子頻段的|r|極大值越大,準(zhǔn)確度越低。對(duì)于給定輸出頻段的準(zhǔn)確度,可以用該頻段頻率上限對(duì)應(yīng)的子頻段|r|的極大值來評(píng)價(jià)。換言之,提高了輸出高頻段的準(zhǔn)確度,也就提高了整修輸出頻段的準(zhǔn)確度。
表1是設(shè)fin=10 7Hz,f在不同數(shù)量級(jí)Hz頻段,由N近似影響f準(zhǔn)確度的指標(biāo)。
從表1可以看出,f每增加1個(gè)數(shù)量級(jí),max(|r|)增加1個(gè)數(shù)量級(jí),max(|Δf|)增加2個(gè)數(shù)量級(jí)。
2 提高輸出頻率準(zhǔn)確度的方法
在給定可編程定時(shí)/計(jì)時(shí)器條件下,針對(duì)Np引起輸出頻率誤差的特點(diǎn),可以采取不同方法消除或減小輸出頻率誤差,從而提高輸出頻率的準(zhǔn)確度。
(2)脈沖發(fā)生器僅需有限個(gè)確定頻點(diǎn)輸出時(shí)的情況
脈沖發(fā)生器僅需有限個(gè)確定頻點(diǎn)輸出時(shí),以下兩種方法可以消除因計(jì)數(shù)值近似引起的輸出頻率誤差。
①單時(shí)鐘公倍數(shù)法。若取fin為這些頻點(diǎn)的公倍數(shù),則其中每個(gè)頻點(diǎn)f對(duì)尖的N都為整數(shù),從而消除了因計(jì)數(shù)值近似引起的輸出頻率誤差。采用此法須注意,一是fin不得超出脈沖發(fā)生器的允許輸出頻率上限;二是確定已知頻點(diǎn)的有效位數(shù)時(shí),要考慮到晶振的準(zhǔn)確度和穩(wěn)定度。
② 多時(shí)鐘源公倍數(shù)法。采用單時(shí)鐘公倍數(shù)法確定的fin超出脈沖發(fā)生器輸入頻率上限時(shí),可以采用二時(shí)鐘源或多時(shí)鐘源公倍數(shù)法。二時(shí)鐘源公倍數(shù)法的具體做法是,將各輸出頻點(diǎn)分成兩級(jí),分別求出各組對(duì)應(yīng)的公倍數(shù)fin1及fin2,若此fin1或fin2有一個(gè)大于脈沖發(fā)生器輸入頻率上限時(shí),則重新分且,直到兩組的公倍數(shù)fin1及fin2都達(dá)到輸入頻率上限要求。電路上設(shè)置相應(yīng)的兩振蕩電壓及二選一開關(guān),根據(jù)輸出頻率而將對(duì)應(yīng)的fin1或fin2切換到脈沖發(fā)生器的輸入端。若分成兩組后,無論怎樣調(diào)整分組都不能使fin1及fin2同時(shí)滿足輸入頻率上限要求,則可采用多時(shí)鐘源公倍數(shù)法。考慮到增加時(shí)鐘源數(shù)后,給軟硬件帶來的復(fù)雜性,在滿足輸入頻率上限要求的前提下,時(shí)鐘源數(shù)應(yīng)盡量少。
(2)已知輸出頻率上限,不能確定具體期望輸出頻率時(shí)的情況
已知輸出頻率上限,不能確定具期望輸出頻率時(shí),盡量提高fin或增加時(shí)鐘源數(shù),縮小近似子頻段寬度,減小子頻段內(nèi)可能出現(xiàn)的max(|r|)及max(|Δf|)。
①提高時(shí)鐘源fin法。若要求輸出頻率上限為fmax,則對(duì)應(yīng)Nmin=fin/fmax=nmin+δ。輸出頻段可能出現(xiàn)的max(|r|)=1/(2nmin+1)若能使fin增大,則nmin增大,max(|r|)相應(yīng)減小,從而提高了輸出頻率的準(zhǔn)確度。
②多時(shí)鐘源等分子頻段法。提高時(shí)鐘源fin,受脈沖發(fā)生器允許輸入上限頻率的制約,若還要提高輸出頻率準(zhǔn)確度,可以增加時(shí)鐘源數(shù),將[fin/(nmin+1),fin/nmin]子頻段作M等分,則可鈄max(|r|)縮小M倍。
設(shè)有M個(gè)時(shí)鐘源,其頻率分別為fin,fin1,…,finM-1,可通過M選一開關(guān),接入其一到脈沖發(fā)生器的輸入端,經(jīng)過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個(gè)子敬意。用量小|Δf|原則通過切換進(jìn)相應(yīng)的時(shí)鐘源,f可以用fin/(nmin+1),finM-1/nmin,…,fin1/nmin,fin/nmin來近似。各子區(qū)間 max(|r|M)=(|r|)/M。一般地,當(dāng)n>nmin時(shí),M-1個(gè)增加的時(shí)鐘finj(j=1,2,…,M-1),經(jīng)n分頻后不一定能將 [fin/(n+1),fin/n]作M部分,但能使此子頻段分割,且各子區(qū)間寬度都小于fin/[M·nmin(nmin+1)],各子區(qū)間內(nèi)的max (|r|)小于max(|r|m)。
3 實(shí)驗(yàn)結(jié)果
我們對(duì)多時(shí)鐘源等分子頻段法進(jìn)行了實(shí)驗(yàn),可編程定時(shí)/計(jì)數(shù)器采用Intel 8254-2,取fin=10MHz,fmax=10kHz,M=5,則nmin=1000,用頻率計(jì)將各振蕩器輸出頻率標(biāo)定為: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置入不同計(jì)數(shù)值,分別用各時(shí)鐘源輸入時(shí),測(cè)出Intel 8254-2輸出頻率,結(jié)果如表2所列。
從表2可以看出,在單一時(shí)鐘源時(shí),計(jì)數(shù)器兩相鄰實(shí)際輸出頻率之差最大值為10.0Hz,輸出頻率準(zhǔn)確度為±5.0 Hz,而在5時(shí)鐘源時(shí),計(jì)數(shù)器兩相鄰實(shí)際輸出頻率之差最大值為2.0Hz,輸出頻率準(zhǔn)確度為±1.0Hz,輸出頻率準(zhǔn)確度得到提高,為單時(shí)鐘源時(shí)的5倍。