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