close
連續三個星期, 每次放假就來個颱風. 今天來的颱風名字叫作 [薔蜜], 同樣地搞到安排好的行程亂亂, 假日旅遊的計畫告吹. 無處可去, 整理筆記.


問題 1: 10bit 的ADC數據, 可以表示的數目為 0x000 - 0x3FF, 或者 0 - 1023, 但是轉換後的數據, 大約在 +/-2的範圍內跳動, 雖然並沒有測量實際的溫度, 但轉換後的溫度讀數, 因此大約在+/-1度C的範圍跳動, 這樣的結果並不合理, 因為實際的空氣溫度的變動不可能在一秒內如此跳動. 可能的原因是轉換電壓的過程中, 種種 [噪聲] 或電壓波動引至.




簡單而有效的方法是重複取樣, 把最高最低的值去掉, 再以算術平均法求得結果並且顯示. 這不是新發明, 而是數百年的數學結論 - standard deviation, 標準差的求取, 好像小學的數學或高中的統計學都有教過.


問題 2: 每個溫度傳感器的特性都不一, 所以需要每個做校正, 但是如果需要用到很精密的校正設備, 就違背了DIY簡單易行的原則. 不過只要用心設計, 性能相當於市賣HK$$$$的儀器. 只是人家是賣錢的, 因為不是人人都想DIY, 付錢買簡單了事.







有同學埋怨說, 已經用單一個 Voltage divider 作為 ADC的輸入, 目地是測量 ADC的輸出及準確度, 但是結果表明, ADC的輸出一直在跳動, 大約是在 1- 4 的範圍左右, 而且換算得到的 Vref 並非 1.1V, 而是 1.075464V.

這樣的結果, 有幾個可能性, 1) 這個系統的電壓不穩定, 2) 這個東西已經到達極限, Atmel 的 MCU性能不佳, 3) 設計不好.

回頭來看看人家的 DATA SHEET 裡面明明白白寫的很清楚,
1) +/-2 LSB Absolute Accuracy;
2) Selectable 1.1V ADC reference Voltage;

怎麼樣理解 DATA SHEET 裡面內容,

1) 2 LSB, 意思是 bit 0 和 bit 1, 準確度不能保證, 2^1+2^0 = 2 +1 = 3, 所以就算所有設計製造都是 100% 完美, ADC 的結果也可能每次都不同, 誤差在 +/-3, 範圍就是6.

2) 如果參照以上的絕對誤差, 當然每次ADC 結果有可能會不同, 推算出 ADC 的參考電壓就不會是 1.1, 而是有一點點誤差. 再加上每個元件的誤差, 1.075464 並不是怪事. 好的設計, 是用誤差最大的普通的零件做到最好的準確度.

學校教的可能是完美的例子, 現實生活裡面的卻是例外, 一個個接近但不一樣的事實. 學習寬容的態度, 處理實際的情況, 儘量在最寬鬆的條件底下完成目標, 才是好的作法.

令人痛恨的事情是, 很多學校裡面教出來的小朋友, 永遠在埋怨這樣不好, 那個不精確, 卻從來沒有看看到底有沒有折衷的方案達成目標.  人人必須接受誤差存在, 這個世界是不完美的, 所以要先理解必然的不完美, 然後學習應對, 最後以折衷的方案允許不完美但同樣達到目標.

這個例子看來, ATTINY13 的 ADC 準確度只有 +/-3, 實驗的結果在大約是在 1- 4 的範圍內左右跳動, 應該是合理的現象, 除非有更專業的器材可以用來作進一步確認. 既然這樣, 直接捨棄 2 LSB的資料, 結果應該不再隨機跳動. 並且 1.075464, 差不多就是 1.1, 既然找到方法推算 Vref, 直接套用作為校正的方法, 就完全能達到目標. 埋怨, 可能是遇到問題而不知所措的表現, 如果理解問題後而不想辦法卻還在埋怨...................





如何從 ADC 的結果, 反推到底真正的 Vref 是多少? 參照上面的公式,

ADC = Vin x 1024 / Vref

理論上, Vref = 1.1, 假如, Vin = 0.7V, 推出

ADC = 0.7 x 1024 / 1.1 = 651 或 652 (只有整數部份)

實際上, 很有可能, 當 Vin = 0.7V 時, ADC的結果偏離很大, 不是651或652. 需要先用其他電壓表或 DMM, 測量 Vin, 同時讀出 ADC, 再重新編排上面的公式如下,

Vref = Vin x 1024 / ADC

這樣的話就會發現, 其實每一顆 ATTINY13 的 Vref, 雖然理論上是 1.1, 實際就是都有一點點差別, 不過, 這樣的微小差別是固定的, 意思就是說, 只要替某一顆算好了, 除非用在別處, 否則不必要每次都算. 只要得到這個數字, 就可以替 ADC 的結果作補償 (compensation), 然後得到正確的 Vin 值.

Noise, 可能是隨機的, 但最終還是人發出來的.........世界要步趨完美, 首先就要把人發出來的 Noise 過濾. ADC result and the noise, 通指隨機及人發出來的.



校正 (calibration), 意思就是讓這個溫度計的讀數, 反映實際的溫度 (嚴格來說是反映接近實際的溫度). 使用兩點校正法, 通常忽略線性誤差, 但是可以保證校正範圍內的準確度. 基本上, 隨便就可以有不錯的結果, 以當天的為例, 先以室溫 26*C 再加上電腦排熱口的另一個溫度 60*C, 參考水銀溫度計的讀數校正後, 再以這個溫度傳感器測量開水的溫度, 結果為 100.3*C, 相當不錯的表現. 如果可以, 用冰水混合物提供 0*C, 以及另外 200*C 作為參考溫度, 校正應該更加準確.

酒精燈和簡單的裝備, 提供開水作為 100*C 的參考溫度 (嚴格來說, 還要補償氣壓及水的純度對沸點的影響, 不過 DIY 的目的, 希望以 $1 得到 99.5% 的準確度就足夠, 不需要為了得到另外的0.5%, 可能付出的 $XXXX). 當然, 黑松汽水早就喝光光了, 二奶罐裝的是水龍頭打開就有的自來水 (雖然寫成 [水喉水] 比較實際, 不過正統的文字都寫作[自來水] )



待校正測溫用的 DIODE, 還有 200*C 的水銀溫度計, 都是便宜又好買. 校正的過程, 中學都有教過, 燒開水, 放溫度計, 讀數, 記錄, 計算.............


下一節, 就用這個溫度傳感器, 記錄一下悶燒鍋 (真空煲) 的保溫程度, 如果不合格的, 就拿去退貨, 因為同樣大小的悶燒鍋, 價格從 NT800 到 NT6000 都有, 到底貴在那裡, 有了保溫程度的紀錄資料, 自然就明白, 結論...TBC...................

arrow
arrow
    全站熱搜

    xiaolabaDIY 發表在 痞客邦 留言(0) 人氣()