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