有鑑於近年來許多學校師生、maker技術愛好者甚至產業公司都有許多人在拿開源的Arduino板子去作工程應用,但是卻比較少人(尤其是學校師生)藉由這個軟硬體都開源的平台去探討與學習一些軟硬體技術細節。許多人只拿板子來做應用,相當可惜。事實上,因為這是一款軟硬體開源的平台,所以可以從其函數庫的程式碼以及電路設計中去找到很多可以學習專業知識和技術觀念的地方。
小弟不才,希望分享一些內容供讀者們參考
這篇文章來針對板子上的進行簡單的分析/探討/說明/拿手上有的UNO板子進行量測實驗,以一個韌體開發人員對於嵌入式系統發所需的基本硬體觀念來闡述(或許不會太深入講解硬體細節,自己也不是專攻硬體電路的電路專家,過去幾年主要的工作是偏向嵌入式系統軟韌體,對硬體方面比較常接觸的就是一些基本的介面電路),希望藉由文章讓初學者不會太害怕了解較簡單的硬體電路原理。
P.S. 因為有時候整理校正這種字數很多的文章到想睡覺時會整理到腦子不清楚,有時會導致誤將自己在記事本寫好的某段文字貼到不對的段落,往往事後自己重複檢查時才會發現Orz...已經盡量檢查校正,若有明顯錯誤還請大家熱心提醒,感謝
--------------------------------
如文章標題,這偏要探討Arduino UNO板子的電源選擇電路之動作原理分析 & 實際以手上的Arduino UNO板子(可能與官方版本UNO有差異)量測實驗,先從原理面來分析。
Arduino官方的Arduino UNO開發板的電路圖[1],請將此電路圖開啟並參照比對,為了方便說明,內文中的電路圖會截取[1]部分電路,並加上一些框線來配合說明。
如果要從Arduino UNO官方版本板子上面所提供的電源線接孔去輸入電源(當然是DC直流,這個應該不必多贅述),有兩種選擇:
(一) USB供電,如下圖
圖1 |
(二) 7~12V DC電源輸入孔(DC5.5*2.1mm電源插座母座接頭,也被稱DC Power Jack或DC Jack,以下簡稱DC Jack),雖然這種供電給Arduino板子的方式現在應該比較少人用。
圖2 |
市面上其他一些進階版本/簡化版本可能有些不同,這裡以Arduino官方的版本的UNO電路圖為主來說明。
有些電學背景或經驗的讀者就會好奇,Arduino板子是如何藉由電路設計去決定哪一種電源作為ATMEGA328P MCU系統的電源?
由圖3可看出 7~12V電源孔(DC Jack)母座的第2腳(PWRIN)即為電源正極輸出端,在經由編號為D1的二極體之後(可防止逆向電壓輸入以免導致板子上面元件因此毀損,因為當二極體於加上逆向偏壓時PN兩端是開路,也就是不導通狀態),會接到電路上標示為VIN端之處,並輸入NCP1117 LDO穩壓IC穩壓出5V,並且這5V然也有輸入另一顆LDO去穩壓輸出3.3V(如圖4的LP2985-33DBVR穩壓IC)。
圖3 ([1]) |
再來看到圖4,如果VIN是7~12V,經由兩個10K的電阻(RN1A與RN1B)分壓後,假設分到大約3.5V~6V(對應接到DC5.5的VIN的電壓大小,分一半,也就是VIN/2)的壓降在編號為RN1B的電阻(下方的電阻)上面 (也就是TP_CMP點。可能有人會疑問中間不是也有接到LMV358嗎,但OPA的輸入阻抗極大,所以這邊可先這樣看)。
圖4 ([1]) |
FDN340P是一顆PMOS(P型MOSFET,不清楚的讀者可自行google參考相關基礎)[2],在這裡將其作為開關用圖(D極與S極的導通on與截止off)。
圖5 ([2]) |
LMV358IDGKR是一款內含兩組OPA(Operational Amplifier)的IC [3],如果我沒看錯或漏看的話,LMV358IDGKR這顆IC本身所吃的電源VCC+接點與板子電源的連接狀況主要是被標示在[1]電路圖的最左上角上(之前我眼花漏看了,經網友提醒後更正)。
圖6 ([3]) |
當7~12V電源透過DC Jack接到VIN,RN1B分壓到3.5V~6V(對應7~12V)的電壓,而LMV358 OPA元件(U5A)在這裡是被用來作為類比電壓比較器,當第一組OPA的非反向輸入端(+端,也就是這顆OPA的腳位3),這個電壓如果大於加在反向輸入端(-端,也就是這顆OPA的腳位2)的3.3V時,LMV358 OPA(U5A)作為比較器會輸出一個類似我們數位電路的邏輯1的電壓(high level voltage)到FDN340P這顆PMOS的Gate極(閘極),也就是TP_GATE點,這邊的設計原意和目的應該是希望VGS(也就是VG-VS) > Vth,讓這顆PMOS的Drain極(汲極)與Source極(源極)為不導通(開路),但實際用手上的UNO板子進行量測的結果與此有落差(後續實驗結果與內容會敘述,如#1)。
另外,因為這顆PMOS的D極和S極之間還有一個二極體,所以我們要來分析看看這顆二極體是否會順向導通。從圖3可看出當7~12V電源如果有接上(DC Jack),NCP1117ST50T3G這顆LDO穩壓IC會穩壓並輸出5V,而這5V與上述PMOS的S極,同時也是PMOS上面內藏的二極體(body diode)的N極有相連,所以此時不論有無接上USBVCC時,該二極體都會因為無法得到足夠的順向偏壓而不會導通(矽二極體的順向偏壓所需導通的電壓也就是障壁電壓理論值是0.7V。從FDN340P Datasheet內容來看,經過這個PMOS內藏二極體body diode的電流與順向偏壓的關係可參考圖7第一張的IV曲線圖)。
圖7 ([2]) |
所以這狀況下(邏輯1的電壓(high level voltage)到FDN340P這顆PMOS的Gate極),FDN340P這顆PMOS的Drain極和Source之間極仍為開路(不導通) ,所以來自USB的電壓源USBVCC不會連接到+5V端(這應該是設計的用意,但實際用手上的UNO板子實際量測的結果與此有落差,後面內容會提及如#1。細心的讀者應該有注意到,穩壓IC輸出的5V同樣也會接到PMOS的S極)。
圖8 UNO電路設計目的原意 (截取並修改自[1]) |
而板子上主要IC的VCC都是接到這個+5V端,無論是拿來作為USB/UART轉換器的ATMEGA16U2(在某些UNO板子被替換成專用IC如CH340而不是用ATMEGA16U2 MCU、或是讓使用者編寫程式進行控制的ATMEGA328 MCU的VCC都是以這個+5V端的電壓做為電源),所以可看出在這種狀況下,Arduino UNO板子是選擇來自DC Jack的7~12V電源並經穩壓後的5V作為電源。
而另一種狀況,也就是如果在沒有接7~12V電源到DC Jack,而是接上USB電源線(USBVCC端有5V)的狀況下,RN1B電阻上面(TP_CMP端點)沒有壓降,LMV358 OPA的非反向輸入端被RN1B電阻pulled down到GND,所以LMV358 OPA作為比較器輸出一個觀念上類似我們數位電路的邏輯0的電壓(low level voltage),0V去輸出到FDN340P PMOS的閘極(也是TP_GATE點),按照一些書籍和網路資料的輔助說明,該處設計的原意目的似乎是希望這樣的狀況下讓VGS < Vth(但是實際上狀況也有落差,因為板子剛上電時,PMOS的S極與D極還沒導通,此時VS應該是0V。所以實際上須要靠PMOS上面D極與S極之間的二極體協助完成目的,後面會有較詳細的相關說明如#1),按照PMOS特性,當VGS < Vth的時候,S極和D極導通,所以USBVCC可以藉由PMOS連接到+5V端做為UNO板子的系統電源(當然也有輸入另一顆LDO去穩壓輸出3.3V)。
圖9 UNO電路設計目的原意 (截取並修改自[1]) |
註: 包含上述提到的OPA元件作為比較器輸出的邏輯0與邏輯1的部分,其實實際上這仍然是屬於類比電壓,因為OPA是類比式的電子元件,所以這樣的敘述方式,就硬體電路設計而言可能沒有很嚴謹,但希望讓一些純軟體背景、頂多只懂數位硬體觀念的讀者有個基本的了解(許多相關文章也是這麼描述)。
以上是原理面的分析探討,某些國內外書籍和網路文章也有類似部分的教學(如[6]與[7])。
--------------------------------
重頭戲來了,實際以手邊Arduino UNO進行實驗量測狀況
我手上的幾塊Arduino UNO板子的FDN340P PMOS的部分是被HM2301B(IC標號A1SHB) PMOS所取代(如圖11[5]),不確定是否還有一些電路的部分與官方的UNO版本有差異(畢竟這些板子就算被改過也未必都方便拿得到修改細節後的確切電路圖),另外也曾經看過某塊UNO板子的RN1B(圖12照片中的R14)的部分,似乎直接被一顆電容器取代。
圖10 |
圖11 ([5]) |
圖12 |
@實驗1: 只接DC Jack電源(DC 12V輸入) 或者USB電源以及DC Jack電源(DC 12V輸入)都接上:
(註解: 因我手上應該的UNO板子應該不是官方版本的UNO,所以下面講的LMV358可能根本不是LMV358而是LM358,導致電路行為異常,下面會有#1針對[8]進行相關說明)
類比電壓比較器的反向輸入(LM358[和官方電路指定IC款式不同] 裡面第一組OPA的PIN 2) = 3.3V
類比電壓比較器的非反向輸入(LM358 裡面第一組OPA的PIN3) = 5.65V
類比電壓比較器輸出(LM358 裡面第一組OPA的輸出PIN 1) = 3.77V
HM2301B PMOS的G極電壓VG = 3.77V
HM2301B PMOS的S極電壓VS = 5V
HM2301B PMOS的D極電壓VD = 5V
LMV358 裡面作為比較器的OPA的反向輸入端(PIN2)為板子上原先設計的給入電壓3.3V,而量測來自非反向輸入端(PIN3)的RN1B的壓降為5.65V(也就是12V扣掉二極體D1的順向偏壓0.7V之後大約是11.3V的一半),所以理所當然的,LM358(和官方電路指定的LMV358是不同的款式) 裡面第一組OPA的輸出(PIN 1)約為3.77V(作為類比電比較器來應用),也就是TP_GATE,同時這個輸出也接到HM2301B PMOS的G極,所以VG也約為3.77V,VS為5V(來自DC Jack再經過AMS1117穩壓IC輸出的5V,如圖13),因為VGS (-1.23V) < Vth,至於Vth是多少,可參考HM2301B Datasheet[5]內Page 3左下方的IV特性曲線圖(如圖14,但要看懂這些需要一點經驗與思考),VGS如果是-1.23V其實已經足以讓這顆PMOS處於一定程度的導通狀態(若要讓PMOS截止,則VGS在相關條件下的合理範圍內要盡量大一些,以這邊的狀況來說就是希望讓OPA作為比較器輸出5V到PMOS的G極,所以比較器輸出電壓同時也就是VG,但現在該電壓的大小只有3.77V),所以此時HM2301B PMOS的D極和S極是導通的,VS和VD都是5V。
圖13 (截取並修改自[1]) |
圖14 ([5]) |
而在只接DC Jack電源(DC 12V輸入) 而沒接USB電源線的狀況下是這樣的結果,這就是和上述原理所設計的目的不太一樣的地方了(後續內容#1之處會提及主因)。照理說在有接DC Jack電源(DC 12V輸入)的狀況下,設計原意應該是希望PMOS的G極有高電壓(數位邏輯1)之下的D極和S極之間不導通(開路),以隔絕來自USB的電源(USBVCC)灌入+5V端。不確定這是否是接上PMOS的G極之後才拖下來的電壓(3.77V)? 但從量測結果看起來,D極和S極確實沒截止(沒斷開)而是導通的。
不確定是否是因為有一些非官方版本的UNO電路設計的差異造成這些狀況(後續內容#1之處會提及主因),個人覺得關鍵是如果OPA 輸出(TP_GATE端)到PMOS的G極的電壓夠大,這樣VGS(VG -VS)就不會小於Vth (PMOS導通條件是VGS < Vth,與NMOS的狀況相反),如此就會讓有接DC Jack電源的狀況下,PMOS的D極與S極不導通(截止)。
(註: 按照LMV358 Datasheet,這顆IC的最大Supply voltage是5.5V,通常輸出電壓會有個Swing範圍,看是比VCC低多少)
否則本來就會因為OPA輸出3.77V而導致VGS (-1.23V) < Vth進而導致PMOS的D極和S極導通,而失去了原本希望此時PMOS的D極和S極應該是不導通(截止)的設計用意。
曾經想過,不知會不會是官方為了區分官方與非官方版本的UNO所故意留下的伏筆?但如果看官方給的UNO的layout應該也會得知才對
#1: 2020/12/04凌晨更新:
按照對岸網友的討論與實驗[8](和我上述遇到的狀況一樣,看起來也是一篇原創文章),似乎是因為我們手上的UNO板子上面的LMV358根本都被換成了LM358 ,所以在比較器高電位輸出時的電壓才會只有3.77V左右而導致VGS (-1.23V) < Vth進而導致PMOS沒辦法進入截止狀態,而網友將UNO板子上的OPA IC(原先官方指定的LMV358的位置)明確換成LMV358 IC,結果就正常了。
從外觀包裝表面上來看,LMV358和LM358是 Pin to Pin compatible(IC腳位兼容)。但在實際使用上,當然須去了解這兩顆IC之間的特性差異
這邊針對這部分做了一些基本的調查,LMV358有Rail to Rail軌對軌輸出特性(輸出的電壓範圍可和工作電壓的範圍相同),能輸出接近5V的電壓,能使得VGS > Vth,進而讓PMOS處於截止狀態,USBVCC端不會與S極的+5V端導通。
不過因為現在較少人會使用DC Jack供電給Arduino UNO,所以這件事情(LMV358經常被換成了LM358)就也沒那麼明顯(應該是因為比較不妨礙常用到的主要Arduino UNO應用功能),所以才會沒有經常被拿出來討論
(Ref[8]: 【原創】為什麼你的Arduino會漏電, https://www.arduino.cn/thread-90169-1-1.html )
而實際上,過去較舊版本的Arduino UNO官方版本電路圖[9]似乎也曾經拿LM358來做一樣的事情(當然當時的狀況可能也還會有些其他差異,或許當時這樣是OK的,詳情我不清楚),如圖15,可參照: https://www.arduino.cc/en/uploads/Main/arduino-uno-schematic.pdf
整體來說大概是Arduino官方後來也逐漸改進了電路設計
圖15 ([9]) |
@實驗2: 只接USB電源:
類比電壓比較器的反向輸入(LM358[和官方電路指定的LMV358不同款式] 裡面第一組OPA的PIN 2) = 3.3V
類比電壓比較器的非反向輸入(LM358 裡面第一組OPA的PIN3) = 2V
類比電壓比較器輸出(LM358 裡面第一組OPA的輸出PIN 1) = 0V
HM2301B PMOS的G極電壓VG = 0V
HM2301B PMOS的S極電壓VS = 5V
HM2301B PMOS的D極電壓VD = 5V
這個情況之下的量測結果看起來就比較符合原先的設計目的。不過實際上,因為現在沒有了來自DC Jack的(7~12V)電源電壓到+5V端點,而+5V端點是連接到PMOS的S極,所以在電路剛上電的時刻,VS應該是0V,而VG也是0V,所以VGS(0V) > Vth所以PMOS的應該不會導通。但是PMOS上面的二極體的N極在電路剛上電的時刻如同VS是0V(同一點),而二極體的P極是USBVCC的5V(因為這時USB電源有接上),所以剛好在PMOS的body diode(內藏二極體)順向偏壓的狀況下讓這個二極體導通 (P極與N極導通,但這時這二極體的兩極前後的電壓會有落差,落差值就是順向偏壓)。這時候,S極有電壓了(此時VS電壓大小為USBVCC的5V扣掉內藏二極體的順向篇壓),而G極依然0V,就使得VGS < Vth條件成立,導致PMOS的D極和S極導通,所以這時候量測到的VS和VD都一樣是5V,而這時PMOS上面D極與S極之間的二極體變回不導通,因為這時候二極體的P和N這兩端的電壓就也都是5V(VS和VD),所以VS和VD之間也不會有因二極體須要克服障壁電壓所需之順向偏壓的壓差。
值得注意的是,若對照官方UNO電路圖的VIN(PC1,47uF電容器+極那一點的電壓),在這個沒有接電源到DC Jack的狀況下,量測到VIN仍有4.2V的電壓(還沒研究其原因),所以RN1B分到大約2.1V,並且連接到LM358裡面的第一組OPA比較器的非反向輸入端,這個2.1V小於反向輸入端的3.3V所以OPA作為比較器輸出0V到PMOS的G極,所以VG為0V,按照PMOS特性,此時D極和S極導通,USBVCC灌入+5V端,作為UNO板子的系統電源。
也因為有做實際實驗量測,把UNO版子這些電源相關的部分的一些元件的位置都弄清楚了(沒看Layout圖),這邊標示出來給讀者們參考,如圖16 (PMOS左邊的那顆綠色的扁扁的元件是接在USB VCC電源端的保險絲,當然這類元件也不一定都是綠色的,當時標註照片時我沒標註到所以就在這裡用文字補充說明)。
圖16 |
另外關於一些與官方UNO板子的IC型號的差異,官方UNO板子電路圖上的U1也就是NCP1117 穩壓IC,我手上的UNO板子是被替換為AMS1117,在一些細節之外,在Arduino UNO板子上面的基本應用方式大致上應該差不多(細節我沒去仔細深入比較);而再次如前述內容強調LMV358 IC在許多非Arduino官方的UNO板子是被用LM358 IC取代(這就是關鍵了,我手上的UNO板子應該都是如此,才導致上述的實驗結果,與[8]遇到的狀況一樣。但這狀況在大多數人的應用情況和使用習慣下,大概是因為不太妨礙到主要常用的功能,所以沒有經常被提出來討論)。
Ref:
[1] Arduino(TM) UNO Rev3 schematic, https://content.arduino.cc/assets/UNO-TH_Rev3e_sch.pdf
[2] FDN340P, http://www.farnell.com/datasheets/82023.pdf
[3] LM321, LMV324, LMV358 LMV3xx Low-Voltage Rail-to-Rail Output Operational Amplifier, https://www.ti.com/lit/ds/symlink/lmv358.pdf?ts=1606682102563&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FLMV358
[4] LMx58-N Low-Power, Dual-Operational Amplifiers, https://www.ti.com/lit/ds/symlink/lm158-n.pdf?fbclid=IwAR15LRas0SHAu_YLQ9BR_aURSs-LwSzO1-I6Ve3ihWZ0pwZmxKUEq3sQVU4
[5] HM2301B(A1SHB), https://datasheetspdf.com/pdf-file/1088456/H&MSemiconductor/A1SHB/1
[6] Understanding Arduino UNO Hardware Design(The Power part), https://www.allaboutcircuits.com/technical-articles/understanding-arduino-uno-hardware-design/
[7] answer-id.com(Jagat’s Question), https://answer-id.com/zh/50803415?fbclid=IwAR0Nbi0MwuorBLD3KbWaVrH4u-M9-qS7dT34JDJM-i7YI3Q1veN9liwGtIE
[8] 【原創】為什麼你的Arduino會漏電, https://www.arduino.cn/thread-90169-1-1.html
[9] Arduino UNO Reference Design, https://www.arduino.cc/en/uploads/Main/arduino-uno-schematic.pdf
感謝各路網友交流分享經驗 與 內文筆誤內容提醒 (謝謝幾位網友/朋友)
如果有相關實驗經驗的朋友也歡迎分享交流,謝謝
孫文良 (阿良的嵌入式系統技術學習區)
【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】
留言列表