產(chǎn)品中用到自動溫控功能,選用的 LM75 芯片,控制和數(shù)據(jù)為 IIC 數(shù)據(jù)接口,地址設(shè)定為 0111B。MCU 為新茂的 51 兼容單片機(jī) SM5964。研發(fā)階段使用的和 LM75 兼容的芯片 DS75。前面程序經(jīng)過了仿真,時序滿足 LM75 要求。板子做回來上板即正常應(yīng)用,后來換用一個 LM75兼容的芯片――TCN75,功能也正常??汕靶┨焐a(chǎn)部門說產(chǎn)品沒有溫度顯示,于是拿來生產(chǎn)用的樣品進(jìn)行實(shí)驗(yàn)分析。
生產(chǎn)采購的是 LM75A,帶來的幾片樣品測試結(jié)果――沒有溫度輸出。經(jīng)過對 LM75、LM75A、DS75、TCN75 的 datasheet 仔細(xì)比較,發(fā)現(xiàn) LM75A 電壓適用范圍更大了些,速度更快了些,溫度精度也有所提高。不過,芯片的默認(rèn)狀態(tài)是相同的,我們的 SM5964 輸出時序也是能滿足 LM75A 芯片需求的。經(jīng)過一天的時序調(diào)整和數(shù)據(jù)手冊的對比,確認(rèn)不是程序的問題,于是懷疑芯片是假貨或者存在質(zhì)量問題。下面是單片機(jī) P3.5 口的 SDA 和 SCL 在沒有焊 LM75 芯片時的輸出波形。
按照 LM75A 的數(shù)據(jù)手冊,在下面的褐色標(biāo)記的地方 LM75A 會給出一個低電平應(yīng)答。
下面是使用 TCN75 時的 SDA 測得波形,從波形可以看到有應(yīng)答信號(后面也有正常的溫度數(shù)據(jù)輸出)。下圖中褐色標(biāo)記的地方與上圖中的應(yīng)答信號對應(yīng)。
注意下面紅色標(biāo)記的地方,低電平有一個小臺階,這是因?yàn)閱纹瑱C(jī)和 TCN75 同時為低電平時會把電平拉的更低,那個向下的臺階對應(yīng)的點(diǎn)就是 TCN75 應(yīng)答有效的時間點(diǎn)(在時鐘下降沿輸出應(yīng)答信號和數(shù)據(jù))。
而LM75A 則沒有應(yīng)答信號,也沒有溫度數(shù)據(jù)輸出,波形跟沒有焊LM75A 時完全相同。LM75A沒有正確的應(yīng)答,后面也沒有溫度輸出。于是初步認(rèn)為 LM75A 為假或有質(zhì)量問題。
但也有另一種可能,就是芯片已經(jīng)損壞。電壓超過額定電壓燒毀芯片?LM75A 支持2.7-5.5V 電壓。靜電擊穿?LM75A 可以抗 2kV 靜電,即使有失效也只能是偶爾有,絕不會是這樣大規(guī)模的失效。電平?jīng)_突?從課本或其它資料里我們看到單片機(jī)的輸出是一個 NMOS 加一個弱上拉電阻的結(jié)構(gòu)。而 LM75A 只有數(shù)據(jù)腳會有輸出,不過,數(shù)據(jù)腳又是 OD 輸出。不會出現(xiàn)電平?jīng)_突的啊!
為進(jìn)一步調(diào)查原因,我們又從其他廠商處進(jìn)了三個不同批次的 LM75A,經(jīng)驗(yàn)證有又一個批次中的兩片不能用,另兩個批次可以用。這似乎更加迷惑。不過,這次測量有了新的發(fā)現(xiàn):
考慮到電平?jīng)_突的微小可能性,我在單片機(jī)和 LM75A 的數(shù)據(jù)線之間串了一個 33 歐的電阻,再測量單片機(jī)數(shù)據(jù)輸出腳信號,看到了上面紅色標(biāo)記處的半高窄脈沖。這個脈沖所處的位置就是單片機(jī)數(shù)據(jù)線輸出由 0 向 1 跳轉(zhuǎn)的時間點(diǎn),而在此前,LM75A 數(shù)據(jù)線此前已經(jīng)輸出低電平信號。理論上,這個脈沖應(yīng)當(dāng)是沒有的。雖然示波器平時總出故障,但經(jīng)過試驗(yàn)測試,發(fā)現(xiàn)這個脈沖不是示波器開玩笑,而是確實(shí)存在的。在 P0.1、P1.1、P2.1、P3.1 口上均加300 歐的下拉電阻,通過程序讓這幾個管腳高低電平來回反轉(zhuǎn),單獨(dú)查看這個脈沖。
P0 口即使觸發(fā)電平調(diào)到 520mV 也一直沒有觸發(fā)沿,因?yàn)?P0 口作為普通 IO 時沒有上拉電阻,從效果看是一個等效的 OD 輸出,所以不會有窄脈沖出現(xiàn)。而 P1、P2、P3 口都有一個窄脈沖,從波形上看,脈沖的高度為 3.7V 左右,脈沖寬度為 150ns。因?yàn)槲覀兊氖静ㄆ鞑?/span>樣為 400MS/s,帶寬也只有 25M,所以我們能看到的這個脈沖是存在嚴(yán)重失真的,估計(jì)實(shí)際脈沖峰值應(yīng)能超過 4V,而且實(shí)際脈沖寬度要比 150ns 更小。這個脈沖是怎么出來的?這個脈沖是SM5964 獨(dú)有的還是51 系列單片機(jī)都有的?我找了一片ATMEL 的AT89C55 也測了一遍,同樣測量到了幾乎相同的脈沖,下面只給出 AT89C55 的 P3.1 腳測到的對應(yīng)波形:
下面是常見資料里單片機(jī)管腳的輸出結(jié)構(gòu)(上拉電阻+NMOSFET):
如果真是上面的結(jié)構(gòu),上拉電阻至少要在 50k 以上,絕不會出現(xiàn)那樣的正脈沖的。于是推測單片機(jī)的輸出是一個 CMOS 結(jié)構(gòu),低電平向高電平的跳轉(zhuǎn)過程是:1)將 NMOS 關(guān)閉;2)開啟 PMOS;3)再通過控制 PMOS 的柵極電壓(可能利用恒流源)來使 PMOS 等效為一個比較大的上拉電阻。從 2 到 3 的過程就是這個脈沖產(chǎn)生的過程。在這個過程中,如果 LM75A 輸出有一個低電平(OD 門),那么瞬間會形成一個“圖騰柱”結(jié)構(gòu),有一個很大的電流。這個電流持續(xù)時間比較短,TCN75 可以承受,不過,有些批次的 LM75A 就沒有辦法承受,所以數(shù)據(jù)腳引線(Core to Pin)熔斷或 NMOSFET 失效斷路。這點(diǎn)跟失效的 LM75A 數(shù)據(jù)線等同開路的測試結(jié)果很吻合。
這很可能是工藝改良引起的。隨著工藝的改良,芯片從核到引腳的引線越來越細(xì),硅片刻蝕精度的提高也使單個門占用的面積越來越小,所以抗瞬態(tài)大電流的能力變?nèi)酢?/span>
至于為什么采用這種結(jié)構(gòu),可能是受早期電阻集成工藝的影響(早期 MOSFET 實(shí)現(xiàn)起來比?一個電阻要容易的多,用 MOS 管代替電阻是集成工藝中的一種重要方法);也有可能是為補(bǔ)償上升沿,使上升沿更陡些,不過,這種可能性比較小。至于其真正原因暫時無從考證。因?yàn)楣ぷ髟?,沒有對其他 51 系列單片機(jī)進(jìn)行測量,不知道是不是所有的 51 系列單片機(jī)都是這樣。
因?yàn)槭苁静ㄆ飨拗?,所以沒有辦法測量到這個脈沖的實(shí)際峰值高度和寬度,也就沒有辦法確定那個瞬態(tài)電流的大小。要想看到比較真實(shí)的脈沖,至少要用帶寬在 100M 以上,采樣速率在 200MS/s 以上的示波器。從這點(diǎn)可以看到,雖然我們的單片機(jī)系統(tǒng)數(shù)據(jù) IO 最高頻率只有 1MHZ(IIC 數(shù)據(jù)只有幾 kHz),但是看這個 100ns 左右的脈沖要用到 100M 帶寬的示波器。這就是傳說中的“低速未必低頻”。
也許之后你不會再說一個 25M 帶寬的示波器能滿足單片機(jī)開發(fā)需求了^_^
注:
為避免該類事故再次發(fā)生,51系列單片機(jī)在應(yīng)用到IIC接口時,數(shù)據(jù)線上要注意串一個 100 歐左右的電阻。
(補(bǔ)記:)
前段時間將該筆記發(fā)到網(wǎng)上,有朋友看到,告知了該脈沖發(fā)生的原因,并發(fā)給我一份51 的硬件手冊。下面是 P1 口和 P3 口真正的 IO 結(jié)構(gòu)圖:
其輸出結(jié)構(gòu)確實(shí)是類似 CMOS 的結(jié)構(gòu),當(dāng)輸出為 0 時,NMOSFET 導(dǎo)通,輸出低電平;從 0向 1 跳轉(zhuǎn)過程中,P1 會導(dǎo)通 2 個時鐘周期,這是為提高沿的上升速度。P1 的導(dǎo)通電流是 P3導(dǎo)通電流的 100 倍,應(yīng)當(dāng)可以達(dá)到 100mA 左右(廠家及工藝不同會有一些差異)。P2 的導(dǎo)通電流只有 P3 的 1/10,使用 P2 是為穩(wěn)定高電平――因?yàn)?IO 腳的低電平毛刺經(jīng)反相器能關(guān)斷P3,此時由 P2 提供微弱電流。通常的高電平輸出主要是 P3 導(dǎo)通提供的電流。而從 0 向 1跳轉(zhuǎn)過程中,短時間內(nèi) P1 導(dǎo)通導(dǎo)致器件燒毀。從結(jié)構(gòu)上看,連續(xù)的寫 1 不會出現(xiàn)該窄脈沖,與實(shí)驗(yàn)測試結(jié)果吻合。(段中 P1、P2、P3 指上圖中的 PMOSFET。)
另外一位朋友看到這篇筆記后做了實(shí)驗(yàn),將觀察到的實(shí)現(xiàn)結(jié)果告訴給我,下面是他的測量設(shè)備信息及測量結(jié)果:
示波器采樣頻率1GS/s,帶寬100M。
單片機(jī)為AT89C51ED2,下拉電阻330歐姆。
脈沖幅值為4.40V,寬度為100nS。上升時間20nS,下降時間30nS。
這個測量結(jié)果比較真實(shí),從實(shí)驗(yàn)結(jié)果可以推測這位朋友使用的是 24M 晶振,那么真實(shí)脈沖寬度比 100ns 還要略小些(考慮下降沿比上升沿慢,實(shí)際寬度應(yīng)為 90ns 左右),而且會有更高一些的峰值(從能量關(guān)系可以算出實(shí)際峰值要略超過 4.6V)。按 5V 供電,脈沖高度為4.6V 計(jì)算的話,這個 PMOS 的導(dǎo)通電阻只有 330/(4.6/(5-4.6) )=29 歐。如果 LM75A 的OD 門 NMOSFET 導(dǎo)通電阻為 21 歐,那么電流會達(dá)到 100mA,即使時間只有 80ns,仍足以對芯片造成危協(xié)。以前我們也遇到過 IIC 接口 AD 芯片工作不穩(wěn)定的問題,也是這個原因。
這種 70 年代的 IO 結(jié)構(gòu),在 30 多年后的今天終于導(dǎo)致新問題的發(fā)生,也許這是那些設(shè)計(jì) 51 芯片的工程師們當(dāng)時沒有預(yù)料到的。