|
本帖最後由 Chamberplus 於 2010-5-6 10:24 AM 編輯 , M" G' i8 f* K2 t
8 j, j# q& R$ T; y5 v& \大家在系統應用上會常用到A/D 的問題,但也常常是用十根手指頭的觀念在寫程式。
: _) r' m& `3 P, ?1 ~- i3 F1 P! k% O7 C' G6 P# P9 c$ y5 P
來講一個系統應用的觀念,如果您也是常寫一些MCU 韌體程式的話,或許,會有一些幫助吧。0 R' W7 E! C; D5 x% P" o
4 }2 y9 }( x- `9 B4 p尤其是作一些機電整合的韌體程式,5 w I* k; Q+ N' [* E/ G* B# ^
& g. M8 V% ?' ]: m( h* m, I; s
寫這種程式,您就不要把那一般寫LED 跑馬燈的程式觀念拿來湊合。3 y5 ~1 I" r) B" g0 m
% k9 p1 {5 m6 T) } {5 ^% k1 `
我個人覺得:如果,只是要您寫個簡單的I/O 控制程式,或是一個簡單的步進馬達控制程式,# J, M n) @; o, R1 S! D
0 H* O5 S" v+ T; i8 Z& F
您可能就是把我們手指頭上的十個手指拿出來湊合的寫。反正是程式嘛,就是幫我們人腦做事的嘛!) r1 Z7 a1 u) ^! n
X' C8 e! Z6 k9 v- b! V' ?- i4 N...(略)
0 V: K+ E& b, _& O A" \7 e1 k
) ~8 w }- {8 n! C! W1 p* ^ ^( A今天我們來講一個一般系統輸入參數的處理問題,譬如說是一個類比輸入參數(A/D Parameter)。
) }# @" P4 e" h& P
1 ]) f# k4 v) Y. v; U我們都知道:雖然是類比輸入,但是我們在韌體程式的讀取過程,
5 Q! Q7 k- ?! x, `2 Z8 k2 q4 w& X, M7 s# r4 x4 J4 `- k- b
卻仍然是數位分時處理方式(Discrete)。還是得一個、一個值慢慢讀進來。' z% z5 c; G' `7 ^, H7 j8 z9 |
% G1 }$ }6 Y$ f* |# j( z2 y
難免就會發生所謂多久取一個值?!(連續性)...還有一個很重要的觀念:軟體濾波處理。(Filter) x# U" J3 z/ H4 j$ n
* T; Q" [ p% p5 S! w" Q
硬體電路上的濾波電路是鐵定有的(一般都只是低通濾波),# T' r) B* ?7 f% i d# Q2 T. _
* w1 L/ I! ^& P9 c6 w# O但您怎麼知道輸入的值會不會有波動峰值呢?瞬間的變化時合理嗎?!
2 _/ w5 [8 @9 w2 q v5 A4 ]" O8 o* B$ Z. i: Y9 ^) _
尤其是一些屬於比較機械特性的參數,譬如環境溫度、電瓶電壓等...( | H% M! n+ v2 @- [, B
" p, r2 X6 D. ~4 f+ _" g0 b8 F5 G
這些東西都是屬於自然現象的參數。(廢話...這種東西才需要A/D啊)
$ f2 _ [. ]$ T7 q- D) i$ p" |$ y9 H* _4 }; e# P' G# f
所以,在軟體上也必須有一些軟體濾波作法,,,我相信如果您幸運一點的話,
+ _; T1 }& n, C( f$ o) D% v* B, D+ E" ^+ E" z2 [5 D
剛好有個老鳥工程師願意帶您,而也願意傾囊相授教您...2 O M8 @0 s; @3 K2 f9 I
! w7 y+ @' c N" n. f您可能就知道這個東西就是:讀個十遍或二十遍,然後取平均就好了!????????( d6 q1 F' }" B9 M6 b9 I0 F
" C( S; T# P- T是嗎?!
- c& Z: o/ |( `% {# @" [; V
$ F% c* D& Z8 n5 |: R+ d- Q% t6 F---6 u3 L* t+ R1 m0 Z% n6 P$ F+ K
tw.myblog.yahoo.com/chamberplus-taiwan/article?mid=1905&prev=1925&next=1901 |
|