基礎硬體觀念

數位腳位(Digital Pins)

86Duino 的數位腳位(86Duino 的數位腳位被對應到 Vortex86EX 的 GPIO 腳位)可以在執行階段設定為輸入或是輸出,我們將在以下的文章說明如何設定以及各狀態相關的特性。

數位腳位設定為 INPUT 時的特性

86Duino 的數位腳位預設為輸入,如果要數位腳位作為輸入使用,直接使用即可,不需透過 pinMode() 設定。當數位腳位被設定為輸入時,會處於高阻抗狀態。當狀態為 INPUT 的數位腳位連接到其他電路上時,所造成的負載是很小的,意味著很小的電流就可以對外部電路的變化做出反應。(在 Arduino 的課程中可以看到狀態為 INPUT 的 pin 可以用來完成一些特別的任務,像是實作電容式觸摸傳感器、把 LED 當作光電二極體讀取或是把類比傳感器當作 RCTime 讀取)

然而這也意味著當數位腳位被設定為輸入且沒有連接東西時,會回傳貌似隨機的值,其值會受到環境的電子噪音或是鄰近腳位的電容耦合影響。

數位腳位設定為 INPUT_PULLUP 時的特性

在 Vortex86EX 裡有內建 75K 歐姆的上拉電阻,可以在程式中啟用內建的上拉電阻,只要使用 pinMode() 設定數位腳位為 INPUT_PULLUP 即可。

當數位腳位為 INPUT_PULLUP 狀態時,如果沒有連接東西在數位腳位上,會回傳 HIGH。如果連接傳感器在狀態為 INPUT_PULLUP 的數位腳位上時,傳感器的其他腳位應該要接地,以簡單的開關為例,當開關沒被按下時,連接的數位腳位會回傳 HIGH,切換器被按下時,連接的數位腳位會回傳 LOW

數位腳位設定為 INPUT_PULLUP 時,由於連接了上拉電阻數位腳位會提供電流,足以讓連接在該腳位的 LED 亮起,但是亮度會很低。如果發現 LED 的亮度很低,可以檢查是否是數位腳位設定為 INPUT_PULLUP

注意: 86Duino 的數位腳位可以負載的電壓上限為 5V,意味著藉由數位腳位輸入 5V 的電壓給 86Duino 不會造成該腳位與 86Duino 的損壞。

數位腳位設定為 OUTPUT 時的特性

86Duino 的數位腳位可以使用 pinMode() 設定為 OUTPUT。當數位腳位被設定為 OUTPUT 時,會處於低阻抗狀態,這意味著設定為 OUTPUT 的數位腳位,可以提供足夠的電流給其他的電路或裝置。86Duino 提供的電流可以是正的也可以是負的,最高可達 16mA,這樣的電流可以使 LED 亮起(別忘了串聯電阻)或是使大多數的傳感器作用,但是不足以使螺線管、繼電器或馬達正常運作。

數位腳位被設定為 OUTPUT 時,如果在該腳位發生短路的情況或是連接到需要大電流的裝置,可能會使數位腳位內的電晶體或是 Vortex86EX 損壞。通常這樣的情況會使得 Vortes86EX 對應到該數位腳位的腳位損壞,但其他的功能則可正常運作。基於以上的理由,建議在數位腳位與欲連接的裝置間加入 470 歐姆或 1K 歐姆的電阻,除非連接電阻後使得最大電流不足以使用。

脈衝寬度調變(Pulse Width Modulation, PWM)

脈衝寬度調變是將類比信號轉換為脈波的一種技術。藉由產生方波並調整數位訊號 ON 和 OFF 的比例,可以模擬出設備能產生的最高電壓到 0V 之間的電壓(以 86Duino 為例,可以模擬出 3.3V ~ 0V 的電壓)。脈衝寬度調變中數位訊號 ON 所佔的寬度稱為脈衝寬度(pulse width),想要模擬出預期的電壓就必須調整脈衝寬度。假如週期性的產生調整好脈衝寬度的方波,並且頻率足夠快的話,以脈衝寬度調變供電給 LED 為例,會像是提供穩定電壓的電源給 LED。(在 86Duino Coding IDE 的選單 File->Sketchbook->Examples->Analog 中有一個 Fading 的範例,是以脈衝寬度調變控制 LED 的亮度)

下圖由綠線切成了五格,每一格代表一個周期,而周期的倒數代表頻率。以 86Duino 為例,86Duino 的脈衝寬度調變頻率為 1000Hz,而周期為 1 毫秒。在程式中可以使用 analogWrite() 產生脈衝寬度調變,analogWrite() 可以輸入的範圍是 0-255,在下圖中可以看到 analogWrite(255),會產生數位訊號一直為 ON 的脈衝寬度調變,analogWrite(127) 會產生脈衝寬度為 50% 的脈衝寬度調變。

類比輸入腳位(Analog Input Pins)

86Duino 內建多通道類比數位轉換器(基於漸近法),該轉換器可以把連續的物理量(如電壓)轉換為數位的值,大多用來讀取類比感測器的值。

86Duino 內建的類比數位轉換器解析度為 11-bit,採樣率為 100ksps,可以負載的最大電壓為 3.3V。使用類比數位轉換器時應該注意輸入電壓不能大於 3.3V,如果輸入的電壓大於 3.3V 會使得類比數位轉換器無法正常運作甚至損壞。在程式中可以使用 analogRead() 讀取經由類比數位轉換器轉換後的值。

See also

pinMode()
digitalWrite()
digitalRead()
analogWrite()
analogRead()


新手上路主頁面

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.