《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技术 > 设计应用 > 基于串口的基线PIC单片机内部振荡器的重新校准
基于串口的基线PIC单片机内部振荡器的重新校准
2014年微型机与应用第19期
刘宝成,韩 伟
内蒙古民族大学 物理与电子信息学院,内蒙古 通辽028043
摘要: 基线PIC单片机多数都有内部振荡器。对于时间敏感型应用,如果丢失内部振荡器校准值,就必须对振荡器进行重新校准。本文以PIC10F202为例,研究了一种基于异步串行通信原理,利用接收端的时钟信号,对基线PIC单片机的内部振荡器进行重新校准的方法。该方法简单实用,不用设计复杂的外部电路,也不需要使用信号源、示波器或频率计。实际测试表明,校准精度满足出厂参数要求。此外,该方法还可在单片机的允许振荡频率范围内将振荡器频率标定为某一特定频率值。
Abstract:
Key words :

  摘 要基線PIC單片機(jī)多數(shù)都有內(nèi)部振蕩器。對于時間敏感型應(yīng)用,如果丟失內(nèi)部振蕩器校準(zhǔn)值,就必須對振蕩器進(jìn)行重新校準(zhǔn)。本文以PIC10F202為例,研究了一種基于異步串行通信原理,利用接收端的時鐘信號,對基線PIC單片機(jī)的內(nèi)部振蕩器進(jìn)行重新校準(zhǔn)的方法。該方法簡單實用,不用設(shè)計復(fù)雜的外部電路,也不需要使用信號源、示波器或頻率計。實際測試表明,校準(zhǔn)精度滿足出廠參數(shù)要求。此外,該方法還可在單片機(jī)的允許振蕩頻率范圍內(nèi)將振蕩器頻率標(biāo)定為某一特定頻率值。

  關(guān)鍵詞: 基線PIC單片機(jī);內(nèi)部振蕩器;重新校準(zhǔn)

0 引言

  大部分基線PIC單片機(jī)都具有一個4 MHz或8 MHz的內(nèi)部振蕩器,出廠時精度校準(zhǔn)為±1%[1-6]。為保證單片機(jī)時鐘信號的精度,使用時應(yīng)將出廠時內(nèi)部時鐘振蕩器校準(zhǔn)值(Internal Clock Oscillator Calibration Value)寫入振蕩器校準(zhǔn)寄存器OSCCAL中。內(nèi)部時鐘振蕩器校準(zhǔn)值存放在單片機(jī)程序存儲器的最后一個單元中,在對器件擦除、編程、調(diào)試過程中,可能造成出廠校準(zhǔn)值丟失。這種情況下,對于時間敏感型的應(yīng)用,必須要對振蕩器進(jìn)行重新校準(zhǔn)。

  在公開的文獻(xiàn)中有一種通過單片機(jī)內(nèi)部定時/計數(shù)器測量外部輸入的標(biāo)準(zhǔn)時鐘信號周期實現(xiàn)對單片機(jī)內(nèi)部振蕩器進(jìn)行重新校準(zhǔn)的方法[7]。這種方法需要設(shè)計一個外部振蕩電路及顯示電路,而且受基線PIC單片機(jī)較少的程序存儲器空間(如PIC10F200只有256個程序存儲單元)的限制,編寫該測試程序需要一定的技巧性,實現(xiàn)起來比較困難。另外,用4個LED實現(xiàn)的顯示電路,也存在著記錄數(shù)據(jù)麻煩、容易出錯,甚至需要輔助頻率計或示波器才能確認(rèn)數(shù)據(jù)的問題。下面介紹一種基于單片機(jī)的校準(zhǔn)方法,該方法編程簡單,不需要設(shè)計硬件電路,也不需要信號源、頻率計或示波器來對基線PIC單片機(jī)內(nèi)部振蕩器進(jìn)行重新校準(zhǔn)。這種方法基于異步串行通信原理,利用接收端的時鐘信號實現(xiàn)(注:本文作者已經(jīng)把該方法申請了發(fā)明專利,專利申請?zhí)枺?01410027051.3)。

1 內(nèi)部振蕩器校準(zhǔn)的依據(jù)

  含有內(nèi)部振蕩器的基線PIC單片機(jī)大多數(shù)都有一個振蕩器校準(zhǔn)寄存器OSCCAL,這個寄存器的高7位是內(nèi)部振蕩器的校準(zhǔn)位,其最低位對于不同的單片機(jī),有的定義為1/4振蕩頻率(INTOSC/4)輸出使能位,有的沒有定義。高7位校準(zhǔn)位的取值范圍是0000000 ~ 1111111,與振蕩器輸出頻率的關(guān)系如圖1所示[1-6]。改變這7位的值,就能改變振蕩器輸出的頻率。

001.jpg

2 基于串口的重新校準(zhǔn)方法

  將需要重新校準(zhǔn)內(nèi)部振蕩器的單片機(jī)作為異步串行通信的發(fā)送端,計算機(jī)作為接收端。在設(shè)定的波特率和數(shù)據(jù)幀格式下,每改變一次寫入單片機(jī)校準(zhǔn)寄存器OSCCAL的值,即每改變一次單片機(jī)內(nèi)部振蕩器的振蕩頻率,就將特定字符0x55、0xAA以及當(dāng)前OSCCAL寄存器中的值通過串口發(fā)送出去。當(dāng)寫入校準(zhǔn)寄存器OSCCAL的值讓單片機(jī)內(nèi)部振蕩器工作頻率滿足通信波特率要求時,在接收端就能獲得所發(fā)送的特定字符0x55、0xAA和校準(zhǔn)值。

  根據(jù)異步串行通信原理,當(dāng)一幀數(shù)據(jù)為10 bit時,理論上發(fā)送和接收波特率最大允許誤差是5%[8]。如果考慮到傳輸導(dǎo)線引起的信號畸變,實際上發(fā)送和接收波特率能夠允許的最大誤差要小于5%,在EIA-232標(biāo)準(zhǔn)中限定為4%[9]。因為測試時的傳輸導(dǎo)線很短,傳輸導(dǎo)線引起的誤差可以忽略。假定所用計算機(jī)的串口時鐘信號是精確的,則異步串行通信所允許的誤差,體現(xiàn)在測試過程中就是,當(dāng)單片機(jī)以標(biāo)稱頻率為中心的±4%頻率范圍內(nèi)的多個頻率點發(fā)出數(shù)據(jù)時,在計算機(jī)端都能正確接收。因此,只要保證在連續(xù)改變單片機(jī)振蕩頻率時,是由小到大或由大到小順次變化的,則在計算機(jī)端能夠正確接收到的多組數(shù)據(jù)中的校準(zhǔn)值(校準(zhǔn)值是二進(jìn)制補(bǔ)碼,見圖1)出現(xiàn)的次序也是由小到大或由大到小順次排列的。這些由小到大或由大到小順次排列的校準(zhǔn)值所對應(yīng)的單片機(jī)內(nèi)部振蕩器工作頻率范圍是以標(biāo)稱頻率為中心,-4% ~ +4%或+4% ~ -4%。顯然,這些能夠在計算機(jī)中正確接收,順次排列的多組數(shù)據(jù)中,中間那組數(shù)據(jù)里的最后一個數(shù)值就是找到的校準(zhǔn)值。

3 重新校準(zhǔn)方法的軟件設(shè)計

  重新校準(zhǔn)方法的程序設(shè)計主要是指單片機(jī)的程序設(shè)計,因為多數(shù)的基線PIC單片機(jī)沒有集成硬件串口組件,所以采用單片機(jī)I/O引腳通過軟件實現(xiàn)模擬串口。計算機(jī)端的串口調(diào)試助手軟件使用任何一款現(xiàn)成的串口調(diào)試軟件即可,不需要也沒必要自行編寫。

  下面的程序設(shè)計是以PIC10F202為例,其他基線PIC單片機(jī)的程序設(shè)計與此類似。

  3.1 主程序設(shè)計


002.jpg


  在主程序中為方便測試,配置字的設(shè)置是missing image file引腳為主復(fù)位,代碼保護(hù)關(guān)閉,禁止看門狗。主程序流程圖如圖2所示,GP0引腳為模擬串口的發(fā)送引腳。因為OSCCAL寄存器的高7位才是校準(zhǔn)位,所以O(shè)SCCAL寄存器的值每次加2才使內(nèi)部振蕩器工作在下一個相鄰的頻率值。頻率值是由小到大順次改變的。

  3.2 子程序的設(shè)計


003.jpg


  串行口發(fā)送子程序流程圖如圖3所示。設(shè)計的通信波特率是9 600 b/s,則每發(fā)送一位數(shù)據(jù)的持續(xù)時間是missing image file。數(shù)據(jù)的幀格式是1 bit起始位、 8 bit數(shù)據(jù)位、1 bit停止位。

  因為涉及到精確的串口發(fā)送時序,整個測試程序用匯編語言編寫,在MPLAB IDE V8.92下編譯,僅占用68個程序存儲單元和5 B數(shù)據(jù)存儲器。

4 測試數(shù)據(jù)及結(jié)果分析

  4.1 測試流程

  為了便于比較測試結(jié)果,測試的流程如下:首先,取一個全新的PIC10F202,通過PICkit 3讀出出廠校準(zhǔn)值是0x16,并記錄下來;然后,將測試程序通過PICkit 3下載到這個PIC10F202中。在5.0 V工作電源下,將PIC10F202通過MAX232電平轉(zhuǎn)換模塊與計算機(jī)串口相連,在計算機(jī)中運行串口調(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)值。

004.jpg

  4.2 實測數(shù)據(jù)

  測試時采用一臺帶原生串口的DELL D400筆記本計算機(jī)(數(shù)據(jù)表中的計算機(jī)1)和一臺普通臺式計算機(jī)(數(shù)據(jù)表中的計算機(jī)2)。按上述測試流程將PIC10F202輸出的TTL電平轉(zhuǎn)換為RS232電平后與計算機(jī)原生串口相連。每臺計算機(jī)均隨機(jī)測試10次,獲得的測試數(shù)據(jù)如表1所示。表中14/16是指校準(zhǔn)值是0x14或0x16,這是因為接收到的正確數(shù)據(jù)組數(shù)是偶數(shù),所以取中間的兩個校準(zhǔn)值中的任意一個。

005.jpg

  為驗證基于串口的基線PIC單片機(jī)內(nèi)部振蕩器的重新校準(zhǔn)方法是否可以使用USB轉(zhuǎn)串口模塊代替原生串口,還對常用的CP2102和PL2303兩種USB轉(zhuǎn)串口模塊進(jìn)行了測試。表2、表3分別是使用CP2102 USB轉(zhuǎn)串口模塊和PL2303 USB轉(zhuǎn)串口模塊隨機(jī)進(jìn)行10次測試獲得的數(shù)據(jù)。

  4.3 結(jié)果分析

  由表1、表2、表3可知,使用原生串口,計算機(jī)1獲得的校準(zhǔn)值與事先讀取的PIC10F202出廠校準(zhǔn)值一致,都是0x16;計算機(jī)2獲得的10次隨機(jī)測試結(jié)果是0x14或0x16,如果取10次測試中出現(xiàn)次數(shù)多的值作為最終結(jié)果,則校準(zhǔn)值為0x14。使用CP2102模塊,計算機(jī)1得到的校準(zhǔn)值可取0x14或0x16;計算機(jī)2的校準(zhǔn)值是0x14。使用PL2303模塊,計算機(jī)1獲得的校準(zhǔn)值是0x18或0x1A,10次中出現(xiàn)次數(shù)多的是0x18;計算機(jī)2獲得的校準(zhǔn)值也是0x18或0x1A,10次中出現(xiàn)次數(shù)多的同樣是0x18。為驗證獲得的校準(zhǔn)值是否在允許精度范圍內(nèi),采用100 MHz示波器TDS 220,對標(biāo)準(zhǔn)校準(zhǔn)值附近0x0C ~ 0x20范圍內(nèi)的12個校準(zhǔn)值的振蕩器輸出頻率進(jìn)行了測量,結(jié)果如表4所示,其中INTOSC/4是用示波器測得的從PIC10F202的GP2引腳輸出的1/4內(nèi)部振蕩頻率,INTOSC是計算值。

006.jpg

  從表4可知,對于實驗所用的PIC10F202,校準(zhǔn)值在0x10 ~ 0x18范圍內(nèi)均滿足校準(zhǔn)精度為±1%的出廠要求。出廠校準(zhǔn)值0x16的輸出頻率與標(biāo)稱振蕩頻率的誤差為0.5%。對于計算機(jī)1和計算機(jī)2,獲得校準(zhǔn)值的振蕩頻率與標(biāo)稱振蕩頻率的誤差分別是:使用原生串口為0.5%和0%;使用CP2102 USB轉(zhuǎn)串口模塊為0%或0.5%和0%;使用PL2303 USB轉(zhuǎn)串口模塊都是1%。因此,無論是使用原生串口還是USB轉(zhuǎn)串口模塊都能實現(xiàn)對基線PIC單片機(jī)內(nèi)部振蕩器的重新校準(zhǔn),而且滿足校準(zhǔn)精度±1%的要求。推薦使用計算機(jī)原生串口或CP2102模塊。由于條件所限沒有對其他USB轉(zhuǎn)串口模塊進(jìn)行測試。

5 結(jié)束語

  綜上所述,使用串口,利用異步串行通信接收端的時鐘信號進(jìn)行基線PIC單片機(jī)內(nèi)部振蕩器的重新校準(zhǔn)方法,滿足校準(zhǔn)精度的要求。該方法的新穎之處在于:既不需要構(gòu)建外部電路,也不需要使用信號源、示波器或頻率計,只需編寫一個單片機(jī)內(nèi)部的重新校準(zhǔn)測試程序,使用計算機(jī)串口調(diào)試助手軟件及附加一個電平轉(zhuǎn)換電路模塊或常見的USB轉(zhuǎn)串口模塊即可實現(xiàn)。因此,在基線PIC單片機(jī)內(nèi)部振蕩器的重新校準(zhǔn)上具有廣泛的使用價值。另外,這種方法還可以將基線PIC單片機(jī)內(nèi)部振蕩器的頻率在允許頻率范圍內(nèi)重新標(biāo)定為非出廠標(biāo)稱頻率值。同時,可以推廣到其他具有內(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è)計技術(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.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。

相關(guān)內(nèi)容