總網頁瀏覽量

顯示具有 IoT 標籤的文章。 顯示所有文章
顯示具有 IoT 標籤的文章。 顯示所有文章

2023年5月24日 星期三

嵌入式「系統」不是純軟體,包含軟體與硬體(亦包含電路)。推薦全華科技出版的一本電子電路相關書籍


多年前還在讀碩士班時,覺得這本電子電路的書籍(如下圖,來源連結)很不錯(並非刻意幫該書籍打廣告)。雖然後來是以嵌入式系統軟硬體整合開發為主(包含沒有作業系統以及有作業系統的系統軟韌體開發以及周邊電路整合設計),但從高職開始接觸這些始終覺得很有親切感。


來源連結


不過印象深刻的是,當時在成功大學工程科學系資訊組(資訊工程與應用組)的研究所讀碩士班時,該組的所有師生,除了自己之外,幾乎完全沒有其他任何人對於類比電子電路有基礎及興趣....(甚至對數位電路有興趣的也不多),只有一位大學部專題生跟著我做一些相關方面。

其實對於物聯網(IoT)之中的感測單元/嵌入式系統來說,上述的方面絕對是重要的,否則如果一個IoT系統之中的感測電路子系統所產生的訊號是錯的,導致raw data是錯的,如果這些基本的輸入內容本身就是有問題的,根本不能期望用了(輸入到)什麼酷炫神奇AI演算法並以上層軟體整合執行之後,系統的結果就會正常,就好比人吃白飯,不可能會拉出金銀珠寶;又好比不可能用純語音訓練出來的語音model去做影像辨識、不可能沒有任何硬體單元之下就可以拿到感測資料(精確來說,世界上沒有甚麼「純軟體」這種事情,只是藉由可程式化的方式(分層)操控電腦這個「硬體系統」去完成功能)。但坦白說從碩士班許多同儕、業界的同事發甚至主管的狀況來看,「以為數據資料處理辨識演算法可以取代感測訊號處理電路」是某些純軟體的人有些觀念錯誤的地方(包含業界一些老闆和主管),但是成大工程科學系其實在大學部有一些電路相關的必修學科課程,也有微控制器系統相關的必選課程,但顯然對於許多人來說,修課的效果可能是極為有限,許多人其實有修過課,但就幾乎好像是沒修過一樣。而其實我在一些選擇走資訊軟體方向的電機系畢業學生身上也有看到一樣的狀況,並不是工程科學系的學生才有如此的狀況。

此外,也有一些具備電路、MCU韌體開發相關背景的資深業界主管,誤以為自己所做的系統不是嵌入式系統。換句話說,很多方面都問題來自於自身不擅長的跨領域問題(雖然以學校科系來說,工程科學系號稱是主打跨領域的系所)。

嵌入式系統是具備特定功能的電腦「系統」,包含硬體與軟體,絕對 不是 只有作業系統或者只有上層應用程式,很多人常誤以為嵌入式系統就是有跑作業系統軟體的系統,這也是常見的錯誤認知。事實上,多去查詢基本定義即可得知,歐美的專業領域課本也常列出,例如Muhammad Ali Mazidi等人所著作的「The 8051 Microcontroller and Embedded Systems (2nd Edition)」,從書名就可理解我上述所說,該原文書的進一步詳情可參考留言處,而這類原文書通常會將這些基本名詞的定義做出說明。

又要講實話了,台灣有很多人很愛嘴上談「學術」兩字,但是實際上似乎大多不太會想去把基本名詞定義給弄清楚,這是蠻奇怪的事情,如果重視學術就該有基本的嚴謹度,而不是只是把「學術」兩字掛在嘴巴上好像很高尚,但卻缺乏實質的內涵,偉大的工程開發貴在對細節的用心,包含這些名詞基本定義和用語。


-----

歡迎各方洽談合作,務實/踏實追求共好。

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章


2023年5月16日 星期二

感謝各家產業界工程師學員的在課後的主動心得分享回饋肯定

最近對於一位AIoT相關產品開發的軟韌體工程師學員於其開發過程中所遇到的 Arm Cortex-A9 processor(with MMU) based SoC/MCU(廠牌為 瑞薩/Renesas之 bootloader、chip internal/external RAM的access以及對應的flow、linker script等方面的相關問題和狀況進行解析及說明。


-------



-------


另外,於上個月的另一位於IC設計產業任職的軟韌體工程師在之前的課後主動心得分享回饋如下:


(現在較重視保養喉嚨&課程學員人數控管了)


感謝各路軟韌體工程師學員們,對於我的嵌入式系統技術諮詢課程的支持鼓勵~!!
歡迎各方洽談合作,務實/踏實追求共好!

-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章




2022年8月23日 星期二

又有產業界的RD工程師,因為需要用到8051 MCU做產品開發,來洽談上課輔導合作。很歡迎!

近期,又有一間設備商使用到8051 MCU在做設備產品開發,該司之中有機械(電機電子/機構/控制) 和 資訊工程背景 的幾位工程師來洽談上課輔導合作,

主要希望奠定MCU/嵌入式系統軟韌硬體(從MCU架構、軟韌體 到 介面電子電路)的相關基礎,以及針對現在的產品開發現況進行諮詢。

很歡迎~! 🙏🎉

-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章

2022年8月15日 星期一

看到國內知名的IC設計公司於2022年持續推出新的8051系列MCU產品


下圖是 偉詮電子(老牌知名Fabless IC設計公司)網頁 ,列出他們於2022年6月推出的8051 (52)系列MCU產品 (http://www.weltrend.com.tw/zh-tw/product/index/13)



http://www.weltrend.com.tw/zh-tw/product/index/13

 
下一張圖則是 鉅亨網新聞: "MCU廠固產能 笙泉擬發公司債2億元" (記者魏志豪 台北2021/06/15) https://news.cnyes.com/news/id/4661532 的內容
https://news.cnyes.com/news/id/4661532


過去我已經說過N次了,8051系列的MCU,依然活耀於產品市場[1]-[3],

主要是其產品開發生態系要消失也不是那麼容易的事,連更老舊的6502 based的MCU都還有些產品在用[2][4]...

更何況因為8051基本款的MCU因架構單純適合初學者走紮實學習導向 (打一些電腦底層軟硬體基礎),MCU的應用本來就是掌握基礎精隨之後,其餘都只是延伸,拿哪一款去學的差異不大,但8051基本款的好處是架構單純,且其技術資料、學習資源及開發工具易於取得與使用,所以適合學習基礎 (才不會因複雜的架構而忽略了一些重點的學習而變成"只會"直接呼叫API來用而沒有去紮實理解周邊應用和操作原理,以及晶片內的架構觀念、理論基礎)。

即便有這麼多客觀的證據,仍然還是一直會有以訛傳訛的外行說法(例如說學8051沒用了之類的,其實有沒有用的關鍵根本不在於學哪款MCU,而8051適合的原因只是在於架構簡單適且學習資源豐富,適合初學者打穩基礎)。

Ref: 

[1] 偉詮電子(老牌知名Fabless IC設計公司)網頁 http://www.weltrend.com.tw/zh-tw/product/index/13

[2] 鉅亨網新聞: "MCU廠固產能 笙泉擬發公司債2億元" (記者魏志豪 台北2021/06/15) https://news.cnyes.com/news/id/4661532

[3] 笙泉科技(老牌知名Fabless IC設計公司)網頁 http://www.megawin.com.tw/zh-tw/product/index/8051_MCU

[4] 笙泉科技(老牌知名Fabless IC設計公司)網頁 http://www.megawin.com.tw/zh-tw/product/series/IO_Type_6502_MCU?fbclid=IwAR1luT_oLjiHkvwWiBNr7pZwgsEJvVwkMrVa9Dyu4YzOBCJwUSwpNsf_bVA

-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:


本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章

2022年7月24日 星期日

「Arduino語言」(Arduino Language) 的本質之簡易說明

 把一些對「Arduino語言」(Arduino Language) 的本質是什麼程式語言的相關內在此簡單分享一下,為了簡單說明也會寫得粗略(rough)一些,供有在玩Arduino的朋友們參考。

https://www.arduino.cc/reference/en/



其本質就是C/C++沒錯,Arduino的許多library code也都是C++或C code,看副檔名就會知道,而若改過一些Arduino library code去做實驗,就會發現在Arduino最上層的code在層次上(就是所謂使用者應用程式層)的code和這些.cpp/.c的library code基本上也是在使用者按下Arduino IDE的驗證鈕或上傳鈕時被一起編譯的。

了解的方式很多,例如可以看一下main.cpp,去看setup()和loop()是怎麼來的。https://github.com/....../blob/master/cores/arduino/main.cpp

而另一個角度,可從Arduino cross-compilation  toolchain是什麼(以avr based的MCU款式的Arduino board例如UNO來說可了解一下avr-g++)去了解,就會比較知道其本質。

-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:


本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章

2022年7月15日 星期五

2年前回成大帶碩士生執行產學合作案的足跡



台灣的業界和學界各自還是有很多不同的文化和想法,要促成兩者合作成功,是真的要花不少心力。


----------------

個人簡歷: https://sites.google.com/view/wenliangsun/

‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:


本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章

2022年7月3日 星期日

【感謝文】感謝給予肯定的各界朋友們

 【感謝文】

近期希望來上課的韌體工程師的學經歷背景越來越多元,

包含擁有頂尖大學工學博士學位的韌體工程師、大型知名網通設備系統廠的軟體工程師、美商BIOS工程師、網頁工程師、頂大工程系所研究生、資訊科教師等等,

幾乎都是看到部落格的課程介紹文章與技術文章而來。

很感謝這些朋友的捧場🙏,

讓小弟我有機會在教學的過程中能更了解除了IC設計公司(IC design house)以外的更多產業的工程師現況(因為小弟我過去除了擔任顧問的經驗之外,本身專職工程師的時期都是在IC設計公司任職)。

最大宗旨還是希望課程內容/諮詢內容都能直接對所有學員的產業工作有所幫助。

也很感謝許多正向表示欣賞與肯定的各方朋友們🙏,例如很榮幸在前陣子能受邀參與勞動部&工研院所舉辦的韌體職訓課綱專家會議,提供自己的經驗看法與建議,並且讓小弟我能有機會能舉薦後續審查委員的學界代表。以及所有曾經來洽談合作的所有科技新聞媒體與產業公司和工程師學員們 🙏

-------

個人簡歷: https://sites.google.com/view/wenliangsun/

‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:


本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章


2022年2月17日 星期四

【 DFROBOT SKU:SEN0165 ORP氧化還原度感測器之sample code重點部分分析記錄】

延續上一篇的DFROBOT SKU:SEN0165 ORP氧化還原度感測器之訊號處理電路設計分析文章,這邊主要來延續介紹這款感測器套件之官方sample code重點部分分析記錄,某些較容易看出的部分就先暫時省略過。

註解: 這裡是隨意拿紙來寫的簡單計算過程,下標符號大小寫並不嚴謹,請見諒~

上篇文章主要介紹 的簡易電路分析計算過程 (使用克希荷夫電流定律)

註解: ORP是Oxidation-Reduction Potential的縮寫,表示溶液的氧化還原電位

該感測器套件的MCU端的軟韌體sample code於該DFROBOT SKU:SEN0165 ORP氧化還原度感測器感測器套件之官方說明網頁

(...省略部份)

#define VOLTAGE 5.00    //system voltage

(...省略部份)

orpValue = ((30*(double)VOLTAGE*1000)-(75*avergearray(orpArray, ArrayLenth)*VOLTAGE*1000/1024))/75-OFFSET;

//convert the analog value to orp according the circuit

注意上面的code的VOLTAGE我故意用兩個不同的顏色標記(紅色、藍色)是有原因的,看完下面內容就會知道。

其實可由下圖推導整理看出,上述code的orpValue就是如同其變數名稱,就是要還原出sensor端子輸出電壓訊號 (未經訊號處理電路模組處理的原始感測器輸出電壓訊號值) 的值,並且透過UART印出該值的字串形式以便觀看。

眼尖的看倌一定會發現其實主要是這款感測器套件的官方sample code寫得太長,其實不需要寫這麼長

sample code之中的1000就是K (1K);

sample code之中VOLTAGE/1024的部分,基本上就是ADC step voltage,而avergearray(orpArray, ArrayLenth)就是經過一些平均處理後的Vout

那為何上面的code的VOLTAGE故意用兩個不同的顏色標記?

要注意這個sample code可能比較是針對是Atmage328p(或其它ADC的類比輸入範圍電壓Vref預設為5V的) MCU based 的Arduino,所以sample code是把 提供給感測器輸出訊號處理電路模組的電壓 以及 你使用的ADC step voltage的Vref看成是一樣的。但實際上這兩者在實際應用上可能不同,例如你的嵌入式處理器晶片如果是用吃3.3V的,而卻又供5V給感測器輸出訊號處理電路模組,那麼情況就與sample code去define同一個VOLTAGE的狀況不同了。

舉例來說,從電路分析式子可以看出,假設你所使用的MCU/SoC內的ADC(或者外接的獨立的ADC IC)的Vref是3.3V,而若提供給感測器輸出訊號處理模組的電源則是5V的話,其實上面兩個VOLTAGE可能必須是不同的值

第一個(30*(double)VOLTAGE*1000)VOLTAGE是你提供給感測器訊號模組的電源電壓;

而後面的(75*avergearray(orpArray,ArrayLenth)*VOLTAGE*1000/1024)裡面的VOLTAGE/1024這個部分就是就是你所使用的MCU/SoC內的ADC(或者外接的獨立的ADC IC)的step voltage,所以其實這個(第二個)VOLTAGE就是ADC的類比輸入範圍電壓(Vref)。而1024就是精度10 bits的ADC的狀況 (如果你用的ADC的精度不同就要改)。

但如果 所使用的MCU/SoC內的ADC(或者外接獨立的ADC IC)的類比輸入範圍電壓Vref就 等同提供給感測器輸出訊號處理模組的電源的話 (就如同sample code預設的情況),那就如同sample code一樣去定義VOLTAGE是同一個值即可。

如果這兩篇文章你有看懂,就會發現,說穿了,上述sample code中的((30*(double)VOLTAGE*1000)-(75*avergearray(orpArray, ArrayLenth)*VOLTAGE*1000/1024))/75-OFFSET; 如果理解電路以及sample code的目的、原理和計算,其實sample code的這行code是可以簡化成另一種寫法,不一定要寫成這麼長,看倌們看懂了嗎?

(hint: 重點在上一篇文章的計算結果和這篇文章的計算結果,根本就是一樣的嘛,根本沒必要把這行code寫得如此落落長)。


此外,補充一下,這感測器套件的感測器輸出訊號處理電路模組中的LM2662M是一顆Switched Capacitor Voltage Converter IC(可參見TI的官方Datasheet ,部分如下圖)

 TI LM2662M Datasheet

-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:


本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章




2020年12月3日 星期四

【你所不知道的Arduino】Arduino UNO電源選擇電路之設計機制與動作原理分析 & 實際進行實驗量測結果之差異探討

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文同時並未註明出處)

有鑑於近年來許多學校師生、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 JackDC 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(如圖4LP2985-33DBVR穩壓IC)


圖3 ([1])


再來看到圖4,如果VIN7~12V,經由兩個10K的電阻(RN1ARN1B)分壓後,假設分到大約3.5V~6V(對應接到DC5.5VIN的電壓大小,分一半,也就是VIN/2)的壓降在編號為RN1B的電阻(下方的電阻)上面 (也就是TP_CMP點。可能有人會疑問中間不是也有接到LMV358嗎,但OPA的輸入阻抗極大,所以這邊可先這樣看)

圖4 ([1])


FDN340P是一顆PMOS(PMOSFET,不清楚的讀者可自行google參考相關基礎)[2],在這裡將其作為開關用圖(D極與S極的導通on與截止off)

圖5 ([2])


LMV358IDGKR是一款內含兩組OPA(Operational Amplifier)IC [3],如果我沒看錯或漏看的話,LMV358IDGKR這顆IC本身所吃的電源VCC+接點與板子電源的連接狀況主要是被標示在[1]電路圖的最左上角上(之前我眼花漏看了,經網友提醒後更正)。

圖6 ([3])

7~12V電源透過DC Jack接到VINRN1B分壓到3.5V~6V(對應7~12V)的電壓,而LMV358 OPA元件(U5A)在這裡是被用來作為類比電壓比較器,當第一組OPA的非反向輸入端(+端,也就是這顆OPA的腳位3),這個電壓如果大於加在反向輸入端(-端,也就是這顆OPA的腳位2)3.3V時,LMV358 OPA(U5A)作為比較器會輸出一個類似我們數位電路的邏輯1的電壓(high level voltage)FDN340P這顆PMOSGate(閘極),也就是TP_GATE點,這邊的設計原意和目的應該是希望VGS(也就是VG-VS) > Vth,讓這顆PMOSDrain(汲極)Source(源極)不導通(開路)但實際用手上的UNO板子進行量測的結果與此有落差(後續實驗結果與內容會敘述,如#1)

另外,因為這顆PMOSD極和S極之間還有一個二極體,所以我們要來分析看看這顆二極體是否會順向導通。從圖3可看出當7~12V電源如果有接上(DC Jack)NCP1117ST50T3G這顆LDO穩壓IC會穩壓並輸出5V,而這5V與上述PMOSS極,同時也是PMOS上面內藏的二極體(body diode)N極有相連,所以此時不論有無接上USBVCC時,該二極體都會因為無法得到足夠的順向偏壓而不會導通(矽二極體的順向偏壓所需導通的電壓也就是障壁電壓理論值是0.7V。FDN340P Datasheet內容來看,經過這個PMOS內藏二極體body diode的電流與順向偏壓的關係可參考圖7第一張的IV特性曲線圖)

7 ([2])

所以這狀況下(邏輯1的電壓(high level voltage)FDN340P這顆PMOSGate)FDN340P這顆PMOSDrain極和Source之間極仍為開路(不導通,所以來自USB的電壓源USBVCC不會連接到+5V(這應該是設計的用意,但實際用手上的UNO板子實際量測的結果與此有落差,後面內容會提及如#1。細心的讀者應該有注意到,穩壓IC輸出的5V同樣也會接到PMOSS)

圖8 UNO電路設計目的原意  (截取並修改自[1])


而板子上主要ICVCC都是接到這個+5V端,無論是拿來作為USB/UART轉換器的ATMEGA16U2(在某些UNO板子被替換成專用ICCH340而不是用ATMEGA16U2 MCU、或是讓使用者編寫程式進行控制的ATMEGA328 MCUVCC都是以這個+5V端的電壓做為電源),所以可看出在這種狀況下,Arduino UNO板子是選擇來自DC Jack7~12V電源並經穩壓後的5V作為電源。

而另一種狀況,也就是如果在沒有7~12V電源到DC Jack,而是接上USB電源線(USBVCC端有5V)的狀況下,RN1B電阻上面(TP_CMP端點)沒有壓降,LMV358 OPA的非反向輸入端被RN1B電阻pulled downGND,所以LMV358 OPA作為比較器輸出一個觀念上類似我們數位電路的邏輯0的電壓(low level voltage)0V去輸出到FDN340P PMOS的閘極(也是TP_GATE),按照一些書籍和網路資料的輔助說明,該處設計的原意目的似乎是希望這樣的狀況下讓VGS < Vth(但是實際上狀況也有落差,因為板子剛上電時,PMOSS極與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款式不同] 裡面第一組OPAPIN 2) = 3.3V

類比電壓比較器的非反向輸入(LM358 裡面第一組OPAPIN3) = 5.65V

類比電壓比較器輸出(LM358 裡面第一組OPA的輸出PIN 1) = 3.77V

HM2301B PMOSG極電壓VG = 3.77V

HM2301B PMOSS極電壓VS = 5V

HM2301B PMOSD極電壓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 PMOSG極,所以VG也約為3.77VVS5V(來自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 PMOSD極和S極是導通的,VSVD都是5V。
圖13 (截取並修改自[1])



圖14 ([5])

而在只接DC  Jack電源(DC 12V輸入而沒接USB電源線的狀況下是這樣的結果,這就是和上述原理所設計的目的不太一樣的地方了(後續內容#1之處會提及主因)照理說在有接DC  Jack電源(DC 12V輸入)的狀況下,設計原意應該是希望PMOSG極有高電壓(數位邏輯1)之下的D極和S極之間不導通(開路),以隔絕來自USB的電源(USBVCC)灌入+5V端。不確定這是否是接上PMOSG極之後才拖下來的電壓(3.77V)? 但從量測結果看起來,D極和S極確實沒截止(沒斷開)而是導通的。

不確定是否是因為有一些非官方版本的UNO電路設計的差異造成這些狀況(後續內容#1之處會提及主因),個人覺得關鍵是如果OPA 輸出(TP_GATE)PMOSG極的電壓夠大,這樣VGSVG -VS)就不會小於Vth PMOS導通條件是VGS < Vth,與NMOS的狀況相反),如此就會讓有接DC Jack電源的狀況下,PMOSD極與S極不導通(截止)。

(: 按照LMV358 Datasheet,這顆IC的最大Supply voltage5.5V,通常輸出電壓會有個Swing範圍,看是比VCC低多少)

否則本來就會因為OPA輸出3.77V而導致VGS (-1.23V) < Vth進而導致PMOSD極和S極導通,而失去了原本希望此時PMOSD極和S極應該是不導通(截止)的設計用意。

曾經想過,不知會不會是官方為了區分官方與非官方版本的UNO所故意留下的伏筆?但如果看官方給的UNOlayout應該也會得知才對

#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不同款式] 裡面第一組OPAPIN 2) = 3.3V

類比電壓比較器的非反向輸入(LM358 裡面第一組OPAPIN3) = 2V

類比電壓比較器輸出(LM358 裡面第一組OPA的輸出PIN 1) = 0V

HM2301B PMOSG極電壓VG = 0V

HM2301B PMOSS極電壓VS = 5V

HM2301B PMOSD極電壓VD = 5V

這個情況之下的量測結果看起來就比較符合原先的設計目的。不過實際上,因為現在沒有了來自DC Jack(7~12V)電源電壓到+5V端點,而+5V端點是連接到PMOSS極,所以在電路剛上電的時刻,VS應該是0V,而VG也是0V,所以VGS(0V) > Vth所以PMOS的應該不會導通。但是PMOS上面的二極體的N極在電路剛上電的時刻如同VS0V(同一點),而二極體的P極是USBVCC5V(因為這時USB電源有接上),所以剛好在PMOS的body diode(內藏二極體)順向偏壓的狀況下讓這個二極體導通 (P極與N極導通,但這時這二極體的兩極前後的電壓會有落差,落差值就是順向偏壓)。這時候,S極有電壓了(此時VS電壓大小為USBVCC5V扣掉內藏二極體的順向篇壓),而G極依然0V,就使得VGS < Vth條件成立,導致PMOSD極和S極導通,所以這時候量測到的VSVD都一樣是5V而這時PMOS上面D極與S極之間的二極體變回不導通,因為這時候二極體的P和N這兩端的電壓就也都是5V(VSVD),所以VSVD之間也不會有因二極體須要克服障壁電壓所需之順向偏壓的壓差。

值得注意的是,若對照官方UNO電路圖的VIN(PC147uF電容器+極那一點的電壓),在這個沒有接電源到DC Jack的狀況下,量測到VIN仍有4.2V的電壓(還沒研究其原因),所以RN1B分到大約2.1V,並且連接到LM358裡面的第一組OPA比較器的非反向輸入端,這個2.1V小於反向輸入端的3.3V所以OPA作為比較器輸出0VPMOSG極,所以VG0V,按照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,亦可先點擊參考這篇介紹文章