Download presentation
Presentation is loading. Please wait.
Published by浑 尚 Modified 7年之前
1
CH4 類比訊號 最簡單的互動設計 – Arduino 一試就上手 孫駿榮、吳明展、盧聰勇
2
類比訊號充斥在自然界中,人們說話的聲音、 溫度的變化、天色的轉換、颱風來襲時的風力 大小。 它是一種有連續性變化的信息,它有各式各樣 的頻率、大小、還有數以萬計的信號發送源。 光線明暗的變化、聲音大小的改變、物體承受 壓力的極限、溫度濕度對於設備的影響,這些 想要去量測的訊號,都是類比訊號。 類比訊號的介紹
3
我們需要轉換需要的物理數值來驅動我們的系 統做適當的應對。 類比訊號的介紹
4
為了方便我們的系統能夠接收類比訊號,在讀 取前需要做轉換的動作,把類比訊號轉換成數 位訊號 (Analog to Digital, AD) 類比訊號經過對時間軸等分取樣之後成為離散 訊號,即可被系統程式讀取。再對資訊內容整 理後成為數位訊號。 需要非常注意取樣的頻率以及資料的解析度, 頻率越快和解析度越高的結果越能接近原本的 訊號特性。 AD 轉換
5
原始 SIN 波訊號 AD 例子
6
原始 SIN 波訊號間隔 2 時間單位取樣 AD 例子
7
原始 SIN 波訊號間隔 5 時間單位取樣 AD 例子
8
原始 SIN 波訊號間隔 10 時間單位取樣 AD 例子
9
取樣頻率的不同,就會造成取樣後的圖形與最 原始的圖形有差異,影響之後的判斷。此外當 解析度不同時,系統所能得到的結果,也會影 響整體性能的好壞。 AD 例子
10
有了數位訊號的發明,讓我們可以使用單純的 0 與 1 兩種表示方法,將類比轉換成數位資料,提 高其抗干擾和面對環境傷害的能力 類比訊號轉換
11
在系統中的 AD 轉換是把所有要讀取的類比訊號 轉換成為電壓數值,而這些數值大小的變化、 極值便是我們系統輸入的一部分,需要轉換的 可能是壓力值、溫度等環境參數,由這些資料 我們才可以決定系統該做怎樣的輸出。 電路中的訊號轉換
12
若系統核心採用沒有 AD 轉換的晶片、或者對於 微處理器本身所含有的 AD 性能不滿意時,可以 找尋專門負責 AD 轉換的晶片。 例如: ADC0804 就是一個 8-bit 的 AD 轉換晶片 電路中的訊號轉換
13
ADC0804 基本測試圖 電路中的訊號轉換
14
這個數值只要觀察規格表中,它是擁有幾 bit 的 轉換能力 舉 ADC0804 這個例子來說,它可以量測 0 - 5V 的電壓變化,又這顆 IC 的解析度是 8-bit ,所以 將這可量測區間除以 2 的 8 次方: 這就是所謂的解析度,也就是當訊號有超過 0.02V 的變化時,才會量測的出來。 解析度
15
由於數位訊號只有 0 跟 1 兩種變化,簡單來看一 個 2-bit 解析度的轉換器,他只能夠表示底下 4 種 數值: 2-bit 的轉換器只能把 0-5V 分解成 4 等分: 00 : 0-1.25V 、 01 : 1.25-2.5V 、 10 : 2.5-3.75V 、 11 : 3.75-5V 這四個區間。 解析度 數位訊號值表示的數值 000 011 102 113
16
AD 轉換需要時間來處理訊號的轉換,這會關係 到系統所讀取到資訊正確性,當系統每次要求 取得數值的間隔小於 AD 轉換所需要的時間時, 就會發生可能是錯誤的量測值或是取得與上一 筆相同的資料,所以必須等待一定的時間後才 可以再度執行 AD 轉換獲得下一個新的值。 轉換時間
17
參考電壓在 AD 的轉換當中扮演了吃重的角色, 它當作是量測當中的基準量。 電壓不太穩定的情況下可能會導致量測的數值 有比較大的跳動。 假設今天要量測的訊號大於晶片能使用的電壓 時,可以採取分壓的方式將電壓降至系統可以 負擔的大小,而分壓電阻的匹配就需要注意來 避免過大的輸入導致晶片燒毀。 參考電壓
18
在這邊會看到一個單位叫做 LSB , Least Significant Bit ,中文叫做最低有效位元 ( 第 0 位 ) ,通常就是 指最低 1 位的解析度 例: 10000001 在這個例子中,最右邊的 1 就是 LSB ,而最左邊 的 1 則是, MSB , Most Significant Bit ,最高有效位 元 ( 第 7 位 ) ,這些名詞會常常出現在模組的規格 表 (datasheet or spec.) 中,千萬不要搞錯了唷。 誤差
19
Arduino 裡的 ATMega 系列 IC , PDIP 封裝方式有 6 隻 AD 腳位可供使用,而 TQFP 與 QFN/MLF 則 有 8 隻 AD ,皆為 10-bit 的解析度,每一格可量測 電壓變化約為 0.0049V ,絕對誤差的部分達到 正負 2LSB 。 Arduino 中的 AD
21
在 Arduino 中要量測類比訊號是一件非常簡單的 事, ATMEGA328 中支援 6 個 AD 腳位可以使用 ,我們先透過一個最簡單的方式來試試看量測 Arduino 板子上的電源: 量測
22
sensorValue = analogRead(analogInPin); 程式當中的精華所在,就屬這行程式了!當我 們有類比訊號的輸入時,使用 analogRead 即可 讀取刮號內的接腳訊號,此程式為第 0 隻腳。讀 取到的值會儲存在 sensorValue 這個變數中。 程式 I
24
Arduino 是 10-bit 精度的類比轉換。 Arduino 經由函 式讀取到的值需要經過換算,由於我們的參考 電壓是 5 伏特,因此公式如下: 程式 I
25
輸入訊號改為 3.3 伏特 程式 I
26
假如今天我們系統需要一個準確的數值時,除 了硬體上面的改進外,例如:防干擾、採用較 為穩定的參考電壓等,我們也可以透過程式的 方式來做些改進。 程式 II
27
程式 4-2 秀了一個最 簡單的處理雜訊的方 法,取平均。經由 5 次的數值讀取後,再 取得平均值做為輸出 的資料。 程式 II // 多次讀取接腳的類比訊號數值 sensorValue = analogRead(analogInPin); sensorValue += analogRead(analogInPin);
28
關於更多的濾波方法,可以查詢一些信號處裡 的書籍,再提供一種比取平均更簡單的方式: sensorValue = 0.7*sensorValue + 0.3*analogRead(analogInPin); 此方法是採信任制,兩個參數的比值可以任意 調整,這個範例的數值表示較為信任之前的數 值,故新的數值當中,有 7 成的比重是前一次的 資料,只有 3 成是新讀取到的。若採用各 5 成的 表示,就等同於取平均的方式。 程式 II
29
可變電阻( variable resistor , VR )顧名思義就 是可以改變電阻值的一種裝置,常見於一些旋 鈕,或是用於阻抗匹配時。最低的阻值接近 0 歐 姆,最高則是依據選擇購買的不同而有所不同 。 可變電阻
30
可變電阻與 Arduino 接線圖
31
當接線都確定無誤後,當旋鈕左轉到底時,讀 到的數值應該是最小的情況;而右轉到底應該 可以讀到數值為 1023 ,這樣表示右轉時電阻值 會逐漸變小,左轉則是逐漸增大。 方向可能依使用的元件和使用者的角度有所差 異。 可變電阻與 Arduino
32
光敏電阻( photoresistor )是一種特殊的電阻, 阻值的大小為依照所在環境的光線強弱而決定 ,光線越亮,電阻值越小;反之,越暗電阻值 越大。 光敏電阻
33
當手邊有的光敏電阻太大的時候,會造成讀取 到的數值沒有任何變化,這時候可以加上另外 一顆電阻,配成一個簡單的分壓電路: 光敏電阻
34
將光敏電阻置於 R2 的位置,下面範例 R1 選擇 1k 的電阻,適當的選擇兩者的比例,便可以得到 比較明顯的訊號變化值。 光敏電阻
35
所有的訊號量測都是在讀取電壓值的改變,擁 有解析度越高的 AD 轉換,我們就可以得到越接 近於原始訊號的量測值。而幾乎所有的類比感 測器,都是以可變電阻為雛形下去做相關的變 化,除了光敏電阻外,常見的還有壓力感測。 壓力感測
36
圖中的 FSR 就是感測 模組的符號,而下面 RM 表示可以匹配的 電阻,這顆電阻的大 小也會影響量測出來 的變化,如圖所示: FSR 壓力感測
37
這個範例直接將第 0 隻腳的 AD 訊號讀取進 來後,若只是初期測 試,建議 0.1 或 0.2 秒 就夠了,先觀察訊號 變化是否如你預期, 再來調整量測的週期 速度。 Arduino 中的範例
38
有點像是觸控螢幕中,想要調整音量大小時, 可以直接用手滑動來做改變的感應器,不過這 沒辦法記錄前一次按下的位置,只能夠針對每 一次按下去的位置來做量測。 位置感測
Similar presentations