前言
客戶反饋在批量生產(chǎn)階段,發(fā)現(xiàn)部分產(chǎn)品的MCU的RTC在低溫(0℃)下工作不正常,但是在常溫下又是正常的,且其他正常的MCU的RTC在常溫與低溫下都是正常的。
問題跟進
通過與客戶郵件溝通,了解到客戶使用的MCU型號是STM32F030C6T6TR。在產(chǎn)品的主從結(jié)構(gòu)中主要用作電源管理和時鐘管理。通過客戶的描述,似乎相同型號不同片子都存在較大的差異。
由于時間緊急,在了解到初步信息后拜訪客戶,針對客戶認為有問題的MCU芯片做針對性試驗。通過STM32CubMx生成測試工程,分別使用LSI(40K),LSE(32.768K),RTC工作時每秒通過LED1(PB5)取反一次(通過LED1燈是否閃爍來指示RTC是否工作正常),然后分別測量OSC管腳與PA8腳(輸出LSI或LSE),并對比ST官方的NUCLEO-F030板,最終測試結(jié)果如下:
1、當使用LSI時,無論常溫還是低溫下都能正常工作。
2、當使用LSE時,常溫下能正常工作,但在低溫(0℃)時,RTC不再工作(LED1停止閃爍),且PA8管腳無輸出,但保持為高電平,且此時OSC管腳此時是存在32.768K的波形的。
3、通過修改負載電容C1&C2的電容值從5.1pF修改到6.8pF時,原本低溫下不工作的RTC又能恢復(fù)正常工作。
4、對比ST官方的NUCLEO-F030板子,在常溫與低溫下均能正常工作。
從測試結(jié)果來看,通過修改負載電容的方式能讓原本不能正常工作的RTC恢復(fù)正常工作,這個似乎為客戶的負載電容不能精準的匹配系統(tǒng)的原因所致。
但客戶對于這個做法不接受的,理由是現(xiàn)在設(shè)計的負載電容5.1pF是通過測試后的值,精度可以達到6.5ppm,但如果改為6.8pF,那么精度將會變到大約30ppm,這個會影響到MCU的RTC的時間精準度,系統(tǒng)在長時間運行后,時間必然會偏差很大,超出設(shè)計合理范圍,這個是不允許的。
問題分析
既然客戶不接受修改負載電容,那么首先我們重新梳理下客戶的晶振設(shè)計各種參數(shù)是否準確,客戶的LSE電路設(shè)計如下所示:
如上圖,圖中的MR10 10Mohm這個反饋電阻在實際電路中是沒有加的,晶振使用的是TXC的,從晶振廠商提供的數(shù)據(jù)手冊中得到相關(guān)參數(shù)如下:
再者,由于客戶代碼中使用的LSE drive配置的是最高等級,從下圖芯片對應(yīng)的數(shù)據(jù)手冊中可以找到對應(yīng)的gm值為25uA/V,此時的驅(qū)動電流為1.6uA:
前面提到過AN2867這個文檔,我們打開這個文檔,在3.4節(jié),發(fā)現(xiàn)有這個要求:
也就是要求gain margin的值要求大于5,這樣晶振才能正常起振,那么gain margin又是如何計算的呢?接下來找到gainmargin 的計算公式,如下:
其中g(shù)m就是圖4中從數(shù)據(jù)手冊中提到的跨導(dǎo)值,STM32F030 LSE的不同驅(qū)動等級對應(yīng)著不同的gm值,由于我們的測試代碼使用的是CubeMx自動生成的代碼,其默認使用的是最高等級,且客戶使用的也是最高等級,因此,這個得出的gm值為25 uA/V, gm有了,那么上面公式中的gmcrit又該如何計算,我們接下來找到它的計算公式,如:
通過晶振對應(yīng)參數(shù),我們可以得出:
ESR =70KΩ,C0 =1.0pF, CL =7.0pF, 而F就是LSE的頻率,為32.768KHz.
于是:
g_mcrit =4 * 7E4 *POWER(2*PI()*32768,2) * POWER ((1.0E-12 + 7.0E-12),2) =7.6E-07
最終得到:
gain_magin =gm/g_mcrit=2.5E-05/7.6E-07 =32.89
這個值是遠大于5,因此,理論上不會存在晶振不起振是的問題,實際上當在低溫下,之前在測試中也有發(fā)現(xiàn)晶振也是有起振,有波形輸出的,只不過PA8腳沒有波形輸出,那個又是什么問題呢?
最終定位到LSE的驅(qū)動等級過高,在AN2867這個文檔中,有這樣的描述:
也就是說,在STM32F0和STM32F3中,當使用最高驅(qū)動模式(gm_crit_max=5uA/V, 見Figure9gm_crit_max)時,對應(yīng)地應(yīng)該只使用在CL=12.5pF的晶振上,以此避免振蕩回路飽和,從而導(dǎo)致啟動失敗。若此時使用了一個較小的CL(如CL=6pF),那么會導(dǎo)致振蕩頻率不穩(wěn)定和工作周期可能被扭曲。
AN2867隨后給出了一張表,列出了驅(qū)動等級與gm_min、gm_crit_max的關(guān)系,如下:
如上圖,對于STM32F0,當使用最高驅(qū)動模式High時,此時的gm_min=25 uA/V,這個與數(shù)據(jù)手冊中是一致的,另外gm_crit_max=5uA/V,正是上面所描述的。
也就是說,在使用最高驅(qū)動模式下,此時與之對應(yīng)的CL應(yīng)該使用12.5pF,而客戶所使用的CL是7pF,這個與手冊AN2867的建議內(nèi)容是不相符的。從圖4可以看出,在最高驅(qū)動等級模式下,此時驅(qū)動電流最大(1.6uA),但這里使用了一個比較小的負載電容(CL=7pF),按AN2867所述,此時有可能導(dǎo)致振蕩回路飽和,振蕩不穩(wěn)定,工作周期扭曲。
此時,應(yīng)該對應(yīng)地下調(diào)這個LSE驅(qū)動等級,減小驅(qū)動電流,這里有4檔(見Figure9):Low,Medium Low,Medium High,High. 目前使用的是High,正是它出了問題,為保守起見,使用Medium High相對合適。
如上圖,將LSEDRV[1:0]這兩個為修改為10即可,將原先低溫下RTC有問題的MCU芯片修改后再次放到低溫下進行驗證,測試結(jié)果為正常。由于此問題是部分芯片有可能會出現(xiàn)的問題,客戶需要對修改后的芯片進行持續(xù)跟蹤,至今沒有再反饋出現(xiàn)過此問題,由此,此問題基本解決。
總結(jié)
AN2867這個文檔總結(jié)了關(guān)于STM32晶振匹配方面的信息。里邊有提到,負載電容CL值越大,所需的驅(qū)動電流也就越大,但牽引度越小。這也就解釋了表1中通過增大C1&C2的電容值,原本出現(xiàn)問題的RTC能恢復(fù)正常的現(xiàn)象,這是由于C1&C2的電容值變大將導(dǎo)致負載電容CL變大,進而對應(yīng)所需的驅(qū)動電流也就跟著增加,這反而減少了在高驅(qū)動模式情況下振蕩回路出現(xiàn)飽和的機會。
-
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355751 -
STM32F0
+關(guān)注
關(guān)注
0文章
61瀏覽量
17103
原文標題:低溫下部分產(chǎn)品RTC不工作的問題探析
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論