摘 要: 基線PIC單片機(jī)多數(shù)都有內(nèi)部振蕩器。對(duì)于時(shí)間敏感型應(yīng)用,如果丟失內(nèi)部振蕩器校準(zhǔn)值,就必須對(duì)振蕩器進(jìn)行重新校準(zhǔn)。本文以PIC10F202為例,研究了一種基于異步串行通信原理,利用接收端的時(shí)鐘信號(hào),對(duì)基線PIC單片機(jī)的內(nèi)部振蕩器進(jìn)行重新校準(zhǔn)的方法。該方法簡(jiǎn)單實(shí)用,不用設(shè)計(jì)復(fù)雜的外部電路,也不需要使用信號(hào)源、示波器或頻率計(jì)。實(shí)際測(cè)試表明,校準(zhǔn)精度滿足出廠參數(shù)要求。此外,該方法還可在單片機(jī)的允許振蕩頻率范圍內(nèi)將振蕩器頻率標(biāo)定為某一特定頻率值。
關(guān)鍵詞: 基線PIC單片機(jī);內(nèi)部振蕩器;重新校準(zhǔn)
0 引言
大部分基線PIC單片機(jī)都具有一個(gè)4 MHz或8 MHz的內(nèi)部振蕩器,出廠時(shí)精度校準(zhǔn)為±1%[1-6]。為保證單片機(jī)時(shí)鐘信號(hào)的精度,使用時(shí)應(yīng)將出廠時(shí)內(nèi)部時(shí)鐘振蕩器校準(zhǔn)值(Internal Clock Oscillator Calibration Value)寫入振蕩器校準(zhǔn)寄存器OSCCAL中。內(nèi)部時(shí)鐘振蕩器校準(zhǔn)值存放在單片機(jī)程序存儲(chǔ)器的最后一個(gè)單元中,在對(duì)器件擦除、編程、調(diào)試過(guò)程中,可能造成出廠校準(zhǔn)值丟失。這種情況下,對(duì)于時(shí)間敏感型的應(yīng)用,必須要對(duì)振蕩器進(jìn)行重新校準(zhǔn)。
在公開的文獻(xiàn)中有一種通過(guò)單片機(jī)內(nèi)部定時(shí)/計(jì)數(shù)器測(cè)量外部輸入的標(biāo)準(zhǔn)時(shí)鐘信號(hào)周期實(shí)現(xiàn)對(duì)單片機(jī)內(nèi)部振蕩器進(jìn)行重新校準(zhǔn)的方法[7]。這種方法需要設(shè)計(jì)一個(gè)外部振蕩電路及顯示電路,而且受基線PIC單片機(jī)較少的程序存儲(chǔ)器空間(如PIC10F200只有256個(gè)程序存儲(chǔ)單元)的限制,編寫該測(cè)試程序需要一定的技巧性,實(shí)現(xiàn)起來(lái)比較困難。另外,用4個(gè)LED實(shí)現(xiàn)的顯示電路,也存在著記錄數(shù)據(jù)麻煩、容易出錯(cuò),甚至需要輔助頻率計(jì)或示波器才能確認(rèn)數(shù)據(jù)的問(wèn)題。下面介紹一種基于單片機(jī)的校準(zhǔn)方法,該方法編程簡(jiǎn)單,不需要設(shè)計(jì)硬件電路,也不需要信號(hào)源、頻率計(jì)或示波器來(lái)對(duì)基線PIC單片機(jī)內(nèi)部振蕩器進(jìn)行重新校準(zhǔn)。這種方法基于異步串行通信原理,利用接收端的時(shí)鐘信號(hào)實(shí)現(xiàn)(注:本文作者已經(jīng)把該方法申請(qǐng)了發(fā)明專利,專利申請(qǐng)?zhí)枺?01410027051.3)。
1 內(nèi)部振蕩器校準(zhǔn)的依據(jù)
含有內(nèi)部振蕩器的基線PIC單片機(jī)大多數(shù)都有一個(gè)振蕩器校準(zhǔn)寄存器OSCCAL,這個(gè)寄存器的高7位是內(nèi)部振蕩器的校準(zhǔn)位,其最低位對(duì)于不同的單片機(jī),有的定義為1/4振蕩頻率(INTOSC/4)輸出使能位,有的沒(méi)有定義。高7位校準(zhǔn)位的取值范圍是0000000 ~ 1111111,與振蕩器輸出頻率的關(guān)系如圖1所示[1-6]。改變這7位的值,就能改變振蕩器輸出的頻率。
2 基于串口的重新校準(zhǔn)方法
將需要重新校準(zhǔn)內(nèi)部振蕩器的單片機(jī)作為異步串行通信的發(fā)送端,計(jì)算機(jī)作為接收端。在設(shè)定的波特率和數(shù)據(jù)幀格式下,每改變一次寫入單片機(jī)校準(zhǔn)寄存器OSCCAL的值,即每改變一次單片機(jī)內(nèi)部振蕩器的振蕩頻率,就將特定字符0x55、0xAA以及當(dāng)前OSCCAL寄存器中的值通過(guò)串口發(fā)送出去。當(dāng)寫入校準(zhǔn)寄存器OSCCAL的值讓單片機(jī)內(nèi)部振蕩器工作頻率滿足通信波特率要求時(shí),在接收端就能獲得所發(fā)送的特定字符0x55、0xAA和校準(zhǔn)值。
根據(jù)異步串行通信原理,當(dāng)一幀數(shù)據(jù)為10 bit時(shí),理論上發(fā)送和接收波特率最大允許誤差是5%[8]。如果考慮到傳輸導(dǎo)線引起的信號(hào)畸變,實(shí)際上發(fā)送和接收波特率能夠允許的最大誤差要小于5%,在EIA-232標(biāo)準(zhǔn)中限定為4%[9]。因?yàn)闇y(cè)試時(shí)的傳輸導(dǎo)線很短,傳輸導(dǎo)線引起的誤差可以忽略。假定所用計(jì)算機(jī)的串口時(shí)鐘信號(hào)是精確的,則異步串行通信所允許的誤差,體現(xiàn)在測(cè)試過(guò)程中就是,當(dāng)單片機(jī)以標(biāo)稱頻率為中心的±4%頻率范圍內(nèi)的多個(gè)頻率點(diǎn)發(fā)出數(shù)據(jù)時(shí),在計(jì)算機(jī)端都能正確接收。因此,只要保證在連續(xù)改變單片機(jī)振蕩頻率時(shí),是由小到大或由大到小順次變化的,則在計(jì)算機(jī)端能夠正確接收到的多組數(shù)據(jù)中的校準(zhǔn)值(校準(zhǔn)值是二進(jìn)制補(bǔ)碼,見圖1)出現(xiàn)的次序也是由小到大或由大到小順次排列的。這些由小到大或由大到小順次排列的校準(zhǔn)值所對(duì)應(yīng)的單片機(jī)內(nèi)部振蕩器工作頻率范圍是以標(biāo)稱頻率為中心,-4% ~ +4%或+4% ~ -4%。顯然,這些能夠在計(jì)算機(jī)中正確接收,順次排列的多組數(shù)據(jù)中,中間那組數(shù)據(jù)里的最后一個(gè)數(shù)值就是找到的校準(zhǔn)值。
3 重新校準(zhǔn)方法的軟件設(shè)計(jì)
重新校準(zhǔn)方法的程序設(shè)計(jì)主要是指單片機(jī)的程序設(shè)計(jì),因?yàn)槎鄶?shù)的基線PIC單片機(jī)沒(méi)有集成硬件串口組件,所以采用單片機(jī)I/O引腳通過(guò)軟件實(shí)現(xiàn)模擬串口。計(jì)算機(jī)端的串口調(diào)試助手軟件使用任何一款現(xiàn)成的串口調(diào)試軟件即可,不需要也沒(méi)必要自行編寫。
下面的程序設(shè)計(jì)是以PIC10F202為例,其他基線PIC單片機(jī)的程序設(shè)計(jì)與此類似。
3.1 主程序設(shè)計(jì)
在主程序中為方便測(cè)試,配置字的設(shè)置是missing image file引腳為主復(fù)位,代碼保護(hù)關(guān)閉,禁止看門狗。主程序流程圖如圖2所示,GP0引腳為模擬串口的發(fā)送引腳。因?yàn)镺SCCAL寄存器的高7位才是校準(zhǔn)位,所以O(shè)SCCAL寄存器的值每次加2才使內(nèi)部振蕩器工作在下一個(gè)相鄰的頻率值。頻率值是由小到大順次改變的。
3.2 子程序的設(shè)計(jì)
串行口發(fā)送子程序流程圖如圖3所示。設(shè)計(jì)的通信波特率是9 600 b/s,則每發(fā)送一位數(shù)據(jù)的持續(xù)時(shí)間是missing image file。數(shù)據(jù)的幀格式是1 bit起始位、 8 bit數(shù)據(jù)位、1 bit停止位。
因?yàn)樯婕暗骄_的串口發(fā)送時(shí)序,整個(gè)測(cè)試程序用匯編語(yǔ)言編寫,在MPLAB IDE V8.92下編譯,僅占用68個(gè)程序存儲(chǔ)單元和5 B數(shù)據(jù)存儲(chǔ)器。
4 測(cè)試數(shù)據(jù)及結(jié)果分析
4.1 測(cè)試流程
為了便于比較測(cè)試結(jié)果,測(cè)試的流程如下:首先,取一個(gè)全新的PIC10F202,通過(guò)PICkit 3讀出出廠校準(zhǔn)值是0x16,并記錄下來(lái);然后,將測(cè)試程序通過(guò)PICkit 3下載到這個(gè)PIC10F202中。在5.0 V工作電源下,將PIC10F202通過(guò)MAX232電平轉(zhuǎn)換模塊與計(jì)算機(jī)串口相連,在計(jì)算機(jī)中運(yùn)行串口調(diào)試助手軟件,選擇相應(yīng)的端口,設(shè)置與PIC10F202相同的波特率、幀格式,并設(shè)置接收顯示為十六進(jìn)制模式,觀察接收到的數(shù)據(jù),如圖4所示。在圖4中用橫線標(biāo)出了顯示55、AA、XX(XX為當(dāng)前頻率的校準(zhǔn)值)的連續(xù)數(shù)據(jù)塊,校準(zhǔn)值為0x02~0x2A,其中中間的0x16就是找到的標(biāo)稱校準(zhǔn)值。
4.2 實(shí)測(cè)數(shù)據(jù)
測(cè)試時(shí)采用一臺(tái)帶原生串口的DELL D400筆記本計(jì)算機(jī)(數(shù)據(jù)表中的計(jì)算機(jī)1)和一臺(tái)普通臺(tái)式計(jì)算機(jī)(數(shù)據(jù)表中的計(jì)算機(jī)2)。按上述測(cè)試流程將PIC10F202輸出的TTL電平轉(zhuǎn)換為RS232電平后與計(jì)算機(jī)原生串口相連。每臺(tái)計(jì)算機(jī)均隨機(jī)測(cè)試10次,獲得的測(cè)試數(shù)據(jù)如表1所示。表中14/16是指校準(zhǔn)值是0x14或0x16,這是因?yàn)榻邮盏降恼_數(shù)據(jù)組數(shù)是偶數(shù),所以取中間的兩個(gè)校準(zhǔn)值中的任意一個(gè)。
為驗(yàn)證基于串口的基線PIC單片機(jī)內(nèi)部振蕩器的重新校準(zhǔn)方法是否可以使用USB轉(zhuǎn)串口模塊代替原生串口,還對(duì)常用的CP2102和PL2303兩種USB轉(zhuǎn)串口模塊進(jìn)行了測(cè)試。表2、表3分別是使用CP2102 USB轉(zhuǎn)串口模塊和PL2303 USB轉(zhuǎn)串口模塊隨機(jī)進(jìn)行10次測(cè)試獲得的數(shù)據(jù)。
4.3 結(jié)果分析
由表1、表2、表3可知,使用原生串口,計(jì)算機(jī)1獲得的校準(zhǔn)值與事先讀取的PIC10F202出廠校準(zhǔn)值一致,都是0x16;計(jì)算機(jī)2獲得的10次隨機(jī)測(cè)試結(jié)果是0x14或0x16,如果取10次測(cè)試中出現(xiàn)次數(shù)多的值作為最終結(jié)果,則校準(zhǔn)值為0x14。使用CP2102模塊,計(jì)算機(jī)1得到的校準(zhǔn)值可取0x14或0x16;計(jì)算機(jī)2的校準(zhǔn)值是0x14。使用PL2303模塊,計(jì)算機(jī)1獲得的校準(zhǔn)值是0x18或0x1A,10次中出現(xiàn)次數(shù)多的是0x18;計(jì)算機(jī)2獲得的校準(zhǔn)值也是0x18或0x1A,10次中出現(xiàn)次數(shù)多的同樣是0x18。為驗(yàn)證獲得的校準(zhǔn)值是否在允許精度范圍內(nèi),采用100 MHz示波器TDS 220,對(duì)標(biāo)準(zhǔn)校準(zhǔn)值附近0x0C ~ 0x20范圍內(nèi)的12個(gè)校準(zhǔn)值的振蕩器輸出頻率進(jìn)行了測(cè)量,結(jié)果如表4所示,其中INTOSC/4是用示波器測(cè)得的從PIC10F202的GP2引腳輸出的1/4內(nèi)部振蕩頻率,INTOSC是計(jì)算值。
從表4可知,對(duì)于實(shí)驗(yàn)所用的PIC10F202,校準(zhǔn)值在0x10 ~ 0x18范圍內(nèi)均滿足校準(zhǔn)精度為±1%的出廠要求。出廠校準(zhǔn)值0x16的輸出頻率與標(biāo)稱振蕩頻率的誤差為0.5%。對(duì)于計(jì)算機(jī)1和計(jì)算機(jī)2,獲得校準(zhǔn)值的振蕩頻率與標(biāo)稱振蕩頻率的誤差分別是:使用原生串口為0.5%和0%;使用CP2102 USB轉(zhuǎn)串口模塊為0%或0.5%和0%;使用PL2303 USB轉(zhuǎn)串口模塊都是1%。因此,無(wú)論是使用原生串口還是USB轉(zhuǎn)串口模塊都能實(shí)現(xiàn)對(duì)基線PIC單片機(jī)內(nèi)部振蕩器的重新校準(zhǔn),而且滿足校準(zhǔn)精度±1%的要求。推薦使用計(jì)算機(jī)原生串口或CP2102模塊。由于條件所限沒(méi)有對(duì)其他USB轉(zhuǎn)串口模塊進(jìn)行測(cè)試。
5 結(jié)束語(yǔ)
綜上所述,使用串口,利用異步串行通信接收端的時(shí)鐘信號(hào)進(jìn)行基線PIC單片機(jī)內(nèi)部振蕩器的重新校準(zhǔn)方法,滿足校準(zhǔn)精度的要求。該方法的新穎之處在于:既不需要構(gòu)建外部電路,也不需要使用信號(hào)源、示波器或頻率計(jì),只需編寫一個(gè)單片機(jī)內(nèi)部的重新校準(zhǔn)測(cè)試程序,使用計(jì)算機(jī)串口調(diào)試助手軟件及附加一個(gè)電平轉(zhuǎn)換電路模塊或常見的USB轉(zhuǎn)串口模塊即可實(shí)現(xiàn)。因此,在基線PIC單片機(jī)內(nèi)部振蕩器的重新校準(zhǔn)上具有廣泛的使用價(jià)值。另外,這種方法還可以將基線PIC單片機(jī)內(nèi)部振蕩器的頻率在允許頻率范圍內(nèi)重新標(biāo)定為非出廠標(biāo)稱頻率值。同時(shí),可以推廣到其他具有內(nèi)部振蕩器單片機(jī)的類似應(yīng)用中。
參考文獻(xiàn)
[1] Microchip Technology Inc.PIC10F200/202/204/206 6-Pin, 8-Bit Flash Microcontrollers Data .http://ww1.microchip.com/downloads/en/DeviceDoc/40001239E.pdf.
[2] Microchip Technology Inc.PIC10F220/222 6-Pin, 8-Bit Flash Microcontrollers Data Sheet[EB/OL].[2014-02-16].http://ww1.microchip.com/downloads/en/DeviceDoc/41270E.pdf.
[3] Microchip Technology Inc.PIC12F508/509/16F505 8/14-Pin, 8-Bit Flash Microcontrollers [2014016].http://ww1.microchip.com/downloads/en/DeviceDoc/41236E.pdf.
[4] Microchip Technology Inc.PIC12F510/16F506 8/14-Pin, 8-Bit Flash Microcontroller Data Sheet[EB/OL].[2014-0216].http://ww1.microchip.com/downloads/en/DeviceDoc/41268D.pdf.
[5] Microchip Technology Inc. PIC12F519 8-Pin, 8-Bit Flash Microcontroller Data Sheet[EB/OL].[2014-02-16].http://ww1.microchip.com/downloads/en/DeviceDoc/41319B.pdf.
[6] Microchi[20140216].http://ww1.microchip.com/downloads/en/DeviceDoc/40001652B.pdf.
[7] Benabadji N.基線PIC微控制器的內(nèi)部振蕩器的重新校準(zhǔn)[J].電子設(shè)計(jì)技術(shù),2008,15(8):100.
[8] 李朝青.PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù)[M].北京:北京航空航天大學(xué)出版社,2001.
[9] ANSI/TIA/EIA-232-F-1997. Interface between data terminal equipment and data circuit-terminating equipment employing serial binary data interchange[S].1997.