找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2610|回復: 7
收起左側(cè)

ATMEGA8L和STC8H1K08內(nèi)部RC振蕩器精度測試

[復制鏈接]
ID:383215 發(fā)表于 2022-6-6 22:17 | 顯示全部樓層 |閱讀模式
看了一個關于單片機內(nèi)部RC頻率校正的帖子,對我做的電路非常擔憂,我這個電路既有18B20,又有串口通信,沒有外接晶體,萬一內(nèi)部RC振蕩器精度不夠,就白忙乎了。本想做個簡易恒溫箱,覺得太麻煩,突然想到,用電吹風加溫一樣可以測試,正好我的電路上有兩個18B20,把兩個18B20放在單片機旁邊,用電吹風加熱,18B20測試到的溫度和芯片的溫度應該相差不會太大。首先百度了一下波特率如何計算?搜到這樣一段話:當波特率為9600bps時,傳輸一個bit的時間間隔大約為104.16us;波特率為115200bps時,傳輸一個bit的時間間隔大約為8us。用計數(shù)器算了一下,基本上知道如何計算波特率,再用電腦通過串口調(diào)試助手發(fā)送0x7f。
01.jpg
0x7f的波形原來是這個樣子,波特率選9600bps,示波器測量一個bit的寬度是105us和9.549k,經(jīng)過計算,波特率分別為9523bps和9549bps。
02.jpg
這是0x7f、0x55、0xaa波形,屏幕可以顯示18個bit的寬度是1.87ms和534.4Hz,經(jīng)過計算,波特率分別為9525bps和9616bps,基本接近9600bps,由于我的示波器是虛擬示波器,誤差肯定有,但是搞不清是電腦發(fā)送的誤差還是示波器的誤差?又由于示波器測到的波形寬度,Hz的精度高于mS,之后的測量就只記錄Hz了。
接下來測試ATMEGA8L在常溫26度的波特率,增加一個0x7f的發(fā)送,著重測量0x7f的波形,按9bit長度是266.2Hz,經(jīng)過計算,波特率為2395bps,實際上波特率就是2400bps,我編程序的時候根本沒有考慮具體的波特率是多少,只用示波器看波形,用100Hz的過零信號發(fā)送,1秒鐘發(fā)送100個字節(jié),每個字節(jié)的寬度占過零脈沖的一半左右就可以了。
03.jpg
我的這個電路是從機的兩個18B20測到的溫度值用串口發(fā)送到主機,主機數(shù)碼管的3、4和5、6位顯示溫度,我用電吹風把從機加溫到60度以上,我看見溫度值顯示正常就說明沒有問題了,繼續(xù)測量也就是為了得到一個比較精確的誤差值。60度的時候,9個bit0x7f的波形長度是264.1Hz,經(jīng)過計算,波特率分別為2376bps。進一步計算,26度的常溫和60度以上的溫度,ATMEGA8L的內(nèi)部RC振蕩器的頻率僅僅出現(xiàn)0.788%的誤差,連1%的誤差都沒有達到,據(jù)說串口通信最大誤差不要超過5%,通常誤差在2.5%以內(nèi)是沒有問題的。至于18B20的最大誤差,以前就測試過, 18B20寫時序為1的時候?qū)纫笞罡,最少延時16μS,最佳延時20μS,最大延時24μS,算下來18B20的最大誤差居然達到±16%,更是不用擔心。
接下來測試STC8H1K08,26度常溫,9個bit0x7f的波形長度是260.5Hz,經(jīng)過計算,波特率為2344bps。再接下來的測試簡直跌破眼鏡,0x7f的波形加溫到60度以上的值和常溫26度的值居然一模一樣,都不相信自己的眼睛了,又試了幾遍,還是一樣,STC單片機的內(nèi)部RC振蕩器會有那么高級?難道有溫度補償?不可能,換一片試試。
04.jpg
由于我自己做的測試板非常方便,左右一交換,重新寫一下程序,就是換了一片做測試,26度常溫,9個bit0x7f的波形長度是260.3Hz,60度以上高溫,9個bit0x7f的波形長度長度是260.7Hz,又測試一片,26度常溫,9個bit0x7f的波形長度是260.7Hz,60度以上高溫,9個bit0x7f的波形長度是259.8Hz,不用計算波特率了,三片STC8H1K08常溫26度和60度以上高溫,內(nèi)部RC振蕩器頻率的最大誤差只有0.34%。繼續(xù)再測試另外一片ATMEGA8L,算出兩片ATMEGA8L常溫高溫RC振蕩器頻率最大誤差0.86%。
總體而言,無論是ATMEGA8L還是STC8H1K08,內(nèi)部RC振蕩器的精度基本夠用,沒有特別特殊的要求,不需要外接晶體,ATMEGA8L內(nèi)部RC振蕩器最高頻率是8兆,STC8H1K08內(nèi)部RC振蕩器最高頻率高達35兆,理論上STC8H1K08內(nèi)部RC振蕩器比ATMEGA8L內(nèi)部RC振蕩器精度高4倍以上。我用ATMEGA8L內(nèi)部RC振蕩器僅僅是1兆,這個速度大概相當于傳統(tǒng)89C51單片機外接8兆左右晶體的速度,基本夠我用了,STC8H1K08內(nèi)部RC振蕩器我也只用1兆,感覺比ATMEGA8L內(nèi)部RC振蕩器1兆的速度還要快一些,由于有的STC8H1K08內(nèi)部RC振蕩器不能燒寫到1兆,只有被迫使用1.2兆。
忍不住測試常溫ATMEGA16,5V供電和3.3V供電的內(nèi)部RC振蕩器誤差達到了4%,STC8H1K08,5V供電和3.3V供電的內(nèi)部RC振蕩器誤差竟然只有0.04%,證明電壓的變化造成的RC振蕩器誤差超過溫度,STC的表現(xiàn)比AVR更好一些,看來我準備用STC8H1K08替代ATMEGA8L是比較放心的。雖然我的這個測試精度不是很高,也有一定局限性,但是,基本上還是八九不離十,影響單片機內(nèi)部RC振蕩器的精度也就是電壓和溫度,只要不是電池供電,電壓的影響可以忽略不計,剩下的只有溫度了,我這里是南方,一年四季很少有低于零度的情況,我做的這個東西又不太可能到北方去用。我用最低的單片機內(nèi)部RC振蕩器編程,又用較低的波特率通信,是為了降低單片機內(nèi)部RC振蕩器的精度要求,不知道我的測試方法還有這些理念有沒有什么錯誤?歡迎大家批評指正!

評分

參與人數(shù) 2黑幣 +25 收起 理由
wulin + 15 謝謝分享
高高的白楊 + 10 很給力!

查看全部評分

回復

使用道具 舉報

ID:390416 發(fā)表于 2022-6-7 09:23 | 顯示全部樓層
85度以內(nèi),STC精度是0.3% 這個他們是做到了的。
回復

使用道具 舉報

ID:91150 發(fā)表于 2022-6-7 09:56 | 顯示全部樓層
贊賞這篇文章,這種工作態(tài)度。收藏這篇文章。
"示波器是虛擬示波器"是哪一種?USB接口專門的?聲卡虛擬的?
回復

使用道具 舉報

ID:383215 發(fā)表于 2022-6-7 12:09 | 顯示全部樓層
人人學會單片機 發(fā)表于 2022-6-7 09:23
85度以內(nèi),STC精度是0.3% 這個他們是做到了的。

可能有的芯片高于這個值,不是所有STC單片機都能達到這個值,這方面STC至少比AVR單片機還要好用一些,AVR單片機可以校正內(nèi)部RC振蕩器,也很準確,只是我做的電路要求不高,無需校正。
回復

使用道具 舉報

ID:383215 發(fā)表于 2022-6-7 12:11 | 顯示全部樓層
wjhhhhh 發(fā)表于 2022-6-7 09:56
贊賞這篇文章,這種工作態(tài)度。收藏這篇文章。
"示波器是虛擬示波器"是哪一種?USB接口專門的?聲卡虛擬的 ...

hantai的一種,300元左右,USB接口,號稱20兆帶寬的雙蹤示波器,基本夠我用,那個什么寶上就有。
回復

使用道具 舉報

ID:401564 發(fā)表于 2022-6-7 19:18 | 顯示全部樓層
我一般是先看數(shù)據(jù)手冊,結(jié)合自己設計對時間精度的要求去計算誤差
如果不是有很多多余的時間,是沒有必要去做那么多測試的
RC時鐘在單片機上,二十多年前就開始用了,STC也是這幾年才開始普及的
回復

使用道具 舉報

ID:383215 發(fā)表于 2022-6-10 13:51 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-6-7 19:18
我一般是先看數(shù)據(jù)手冊,結(jié)合自己設計對時間精度的要求去計算誤差
如果不是有很多多余的時間,是沒有必要去做 ...

可能每個人的習慣不同吧,我覺得所有計算最終還是要通過測試來驗證,那還不如直接通過測試來的快,所以我現(xiàn)在編程的習慣是多測試,少計算。
回復

使用道具 舉報

ID:879348 發(fā)表于 2022-6-10 14:06 | 顯示全部樓層
在規(guī)格書溫度范圍內(nèi)串口通信是無壓力的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表