如文章標題,這偏要探討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極(源極)為不導通(開路),但實際狀況似乎與此有落差(後續實驗結果與內容會敘述)。
另外,因為這顆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)。
圖7 ([2]) |
所以這狀況下(邏輯1的電壓(high level voltage)到FDN340P這顆PMOS的Gate極),FDN340P這顆PMOS的Drain極和Source之間極仍為開路(不導通) ,所以來自USB的電壓源USBVCC不會連接到+5V端(這應該是設計的用意,但實際狀況似乎與此有落差,後面內容會提及。細心的讀者應該有注意到,穩壓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極之間的二極體協助完成目的,後面會有較詳細的相關說明),按照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輸入)都接上:
類比電壓比較器的反向輸入(LMV358 裡面第一阻OPA的PIN 2) = 3.3V
類比電壓比較器的非反向輸入(LMV358 裡面第一阻OPA的PIN3) = 5.65V
類比電壓比較器輸出(LMV358 裡面第一阻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的一半),所以理所當然的,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(按照HM2301B Datasheet,其Vth大約是-0.4V至-1V[5]),所以此時HM2301B PMOS的D極和S極是導通的,VS和VD都是5V,而這時PMOS上面D極與C極之間的二極體變回不導通(因為這時候二極體的P和N這兩端的電壓就也都是5V(VS和VD),所以VS和VD之間也不會有因二極體須要克服障壁電壓所需之順向偏壓的壓差。
圖13 (截取並修改自[1]) |
而在只接DC Jack電源(DC 12V輸入) 而沒接USB電源線的狀況下是這樣的結果,這就是和上述原理所設計的目的不太一樣的地方了。照理說在有接DC Jack電源(DC 12V輸入)的狀況下,設計原意應該是希望PMOS的G極有高電壓(數位邏輯1)之下的D極和S極之間不導通(開路),以隔絕來自USB的電源(USBVCC)灌入+5V端。不確定這是否是接上PMOS的G極之後才拖下來的電壓(3.77V)? 但從量測結果看起來,D極和S極確實沒截止(沒斷開)而是導通的。
不確定是否是因為有一些非官方版本的UNO電路設計的差異造成這些狀況,個人覺得關鍵是如果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應該也會得知才對
@實驗2: 只接USB電源:
類比電壓比較器的反向輸入(LMV358 裡面第一阻OPA的PIN 2) = 3.3V
類比電壓比較器的非反向輸入(LMV358 裡面第一阻OPA的PIN3) = 2V
類比電壓比較器輸出(LMV358 裡面第一阻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極有電壓了,而G極依然0V就使得VGS < Vth條件成立使得PMOS的D極和S極導通,所以量測到的VS和VD都一樣是5V。
值得注意的是,若對照官方UNO電路圖的VIN(PC1,47uF電容器+極那一點的電壓),在這個沒有接電源到DC Jack的狀況下,量測到VIN仍有4.2V的電壓(還沒研究為什麼,不知道是否是穩壓IC的輸出端有來自USB的5V所產生類似倒灌的現象),所以RN1B分到大約2.1V,並且連接到LMV358 裡面第一組OPA比較器的非反向輸入端,這個2.1V小於反向輸入端的3.3V所以OPA作為比較器輸出0V到PMOS的G極,所以VG為0V,按照PMOS特性,此時D極和S極導通,USBVCC灌入+5V端,作為UNO板子的系統電源。
也因為有做實際實驗量測,把UNO版子這些電源相關的部分的一些元件的位置都弄清楚了(沒看Layout圖),這邊標示出來給讀者們參考,如圖14。
圖14 |
另外關於一些與官方UNO板子的IC型號的差異,官方UNO板子電路圖上的U1也就是NCP1117 穩壓IC,我手上的UNO板子是被替換為AMS1117,在一些細節之外,在Arduino UNO板子上面的基本應用方式大致上應該差不多(細節我沒去仔細深入比較);而LMV358 IC在某些UNO板子是用LM358 IC取代,這是類似型號,網路資料指出LMV358是LM358低功耗版本(詳情我還沒確認),在此處的基本應用原理幾乎相同。
没有评论:
发表评论