番外篇1-MCU的輸入訊號

1.關於本篇番外

這兩天被問到關於訊號的種類,讓我有點不知道怎麼回答,有些東西久了就會變成理所當然,就好比說,為什麼汽車要加油?為什麼加油就會動?我管那麼多幹嘛,總之加油之後油門踩下去會動就對了。

就因為這樣的感覺,讓我有點不知道怎麼回答MCU輸入的訊號,所以我想整理一下我的觀念,檢視一下是否有錯。

(說不定我認知很久的東西是錯的 Orz)

2.MCU輸入訊號的種類

我將MCU的輸入訊號歸類為兩大類,也就是「數位訊號」以及「類比訊號」,什麼是數位訊號,亦即常說的零(0)與壹(1),什麼是類比訊號?類比訊號指的就是一隨時間改變的連續電壓訊號,聽起來有點抽象(我也這麼認為),簡單說,有著特定電壓準位且會在特定範圍內改變,對於MCU來說就是類比訊號,對比數位訊號來說,通常只有高電位VDD(1)以及VSS(0)兩種電壓準位而已。

而這兩種訊號的輸入作用對於MCU來說也就是完全不一樣的。

a.數位訊號

回歸到硬體電路上,並沒有存在什麼1,0的問題,這些都是進到程式裡面,給「人」看的一種表示方式而已,對於硬體來說終究存在的只是一電壓,這電壓很純正的,就是物理特性的電壓,沒啥好爭議的,但是為什麼一電壓輸入給MCU的時候他會有0與1的差別?

通常高電位VDD(通常可能是5V或3.3V)就被稱作為1,而VSS(通常為0V)也就被稱作為0。

但是更細說一點的話,每個MCU在電壓的判斷點上面,例如舉例Cypress CY8C4245的IC來說,

Vhigh = 0.7×VDD, Vlow = 0.3×VDD

spec中通常會標示其輸入的轉換電壓值(如下圖)

gpioThresholdVoltage

 

補充資料:Logic signal voltage levels

b.類比訊號

類比訊號的取得通常是一串數值,該數值經由A/D功能轉換而來,換句話說,如果MCU沒有支援A/D轉換功能的時候,就無法取得類比電壓訊號,不過目前99.999%的MCU都有A/D轉換的功能。

相較於數位訊號,對於MCU來看只有0與1兩種結果,類比訊號則是要將外部I/O腳上的電壓,轉換成MCU所能夠處理的訊號,亦即上述的A/D轉換功能,將類比的電壓轉換為一種數位的訊號,而這種數位訊號的格式,會因為不同的MCU而有所不同,其原因在於每個MCU所提供的A/D轉換功能的性能、架構不盡相同,但在A/D轉換功能內均有幾個重要的選項是共同的,舉例如下:

1.解析度

解析度直接影響了輸出結果的精度,例如8bit的解析度只能由0~255,而16bit解析度則能從0~65535,假設我們以不帶正負符號且滿刻度為5V的情況下來看時:

8bit每digital的解析度為 5 ÷ 255 ≒ 0.020V

16bit每digital的解析度為 5 ÷ 65535 ≒ 0.000076V

(註:解析度越高理論上越好,但我認為卻不能成為A/D性能的主要評比項目,有爭議請提出討論)

2.轉換速率

顧名思義就是設定A/D轉換的時間需要多久,這通常會影響到輸出結果的準確度,不過與其A/D架構會有關係。

3.參考點(reference voltage)

reference voltage是所有A/D都很重要的東西,這是A/D量測的一個基準,A/D量測可以想像成是一種比較,用一個已知的東西,去比較未知的東西,當已知的東西(reference voltage)不準的時候,當然A/D轉換出來的東西也就不會是準的了。

4.輸入範圍

各MCU再使用A/D module的時候均要將I/O腳設定成Analog Pin同時,選擇參考電壓的時候通常spec上也會標住其輸入電壓範圍,有些可以設定正負符號,有些則不行。

 

 

關於A/D的介紹相信Google搜尋就可以找到批哩啪啦一大堆,所以,講再多好像也不會比別人強。

 

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料