|
本帖最後由 Chamberplus 於 2010-5-6 10:24 AM 編輯 Y/ E: |- _! L' i* E r( Q; w+ I* m
2 x$ z7 |0 I$ D& T
大家在系統應用上會常用到A/D 的問題,但也常常是用十根手指頭的觀念在寫程式。! ?: D# a( w6 v6 `
( S" W8 I6 k6 u# ^$ V! {& V2 O來講一個系統應用的觀念,如果您也是常寫一些MCU 韌體程式的話,或許,會有一些幫助吧。
) ~" \1 i( s8 n* n9 L O* o/ Y" {8 o- _# N
尤其是作一些機電整合的韌體程式,' }3 j8 v6 Q+ [/ A" g
# j1 N9 I% l( X7 f' A0 n
寫這種程式,您就不要把那一般寫LED 跑馬燈的程式觀念拿來湊合。
2 `8 a; ^4 X1 J( O' @4 ^7 M, R8 U# O# R) |3 W
我個人覺得:如果,只是要您寫個簡單的I/O 控制程式,或是一個簡單的步進馬達控制程式,
! D- l. @1 V- E% K- e4 A
- P1 O$ y, V8 `* y8 J您可能就是把我們手指頭上的十個手指拿出來湊合的寫。反正是程式嘛,就是幫我們人腦做事的嘛!6 r c; [( E& ]4 W$ ^3 J- w2 m
+ m$ _/ q. v! J: O5 d
...(略)2 N3 S0 S- Z6 t" R( K0 D
. b3 _% X6 ~) T0 w1 Y今天我們來講一個一般系統輸入參數的處理問題,譬如說是一個類比輸入參數(A/D Parameter)。
) S0 x1 Q' z( X% x
9 y# z7 p2 _7 z8 n" u7 V我們都知道:雖然是類比輸入,但是我們在韌體程式的讀取過程,
0 L) B/ `% T' B, S* ]$ d) A' y5 V8 p0 `3 P% \" ], I4 T
卻仍然是數位分時處理方式(Discrete)。還是得一個、一個值慢慢讀進來。
- o9 M1 e/ y8 h& N: y7 K' E, L6 s/ N% s) ]) h
難免就會發生所謂多久取一個值?!(連續性)...還有一個很重要的觀念:軟體濾波處理。(Filter)) e7 b& G5 ]0 {, r& K) w
# H& m7 Q/ A% j n硬體電路上的濾波電路是鐵定有的(一般都只是低通濾波),# j1 \: }7 \( l# G
, w, S2 y1 u1 \7 o8 L4 q- @# d但您怎麼知道輸入的值會不會有波動峰值呢?瞬間的變化時合理嗎?!9 @+ U' E3 C0 g9 \' a# h
9 V. z# [2 [* F; E3 x" J0 R. V; c, C
尤其是一些屬於比較機械特性的參數,譬如環境溫度、電瓶電壓等...
$ |9 W2 o1 R; I: v
; L9 l* U, ~, n( j1 C3 }2 K9 D( l( h, p這些東西都是屬於自然現象的參數。(廢話...這種東西才需要A/D啊)" a& @4 }5 b& ~- j
8 d6 \, y$ S8 |& |- L8 a
所以,在軟體上也必須有一些軟體濾波作法,,,我相信如果您幸運一點的話,
/ J" U' d h6 n+ o; D1 G7 I. j. A5 r0 l6 g8 q4 e2 X: G, D
剛好有個老鳥工程師願意帶您,而也願意傾囊相授教您...
( b& x! H" @* r7 w
( b" ~' Z3 p i) p您可能就知道這個東西就是:讀個十遍或二十遍,然後取平均就好了!????????0 y, V* c3 E H, C
; {9 a# A# c0 V
是嗎?!
# j( L; I4 c; ?- J& v1 l. Y/ t0 l% F) Q2 q! ~$ x+ y+ B8 p
---
+ w, [4 }7 g9 P1 C, d1 [tw.myblog.yahoo.com/chamberplus-taiwan/article?mid=1905&prev=1925&next=1901 |
|