|
本帖最後由 Chamberplus 於 2010-5-6 10:24 AM 編輯 b' s. U9 Q6 v1 `9 K2 z
7 t$ B1 u: M( c6 q0 b# p大家在系統應用上會常用到A/D 的問題,但也常常是用十根手指頭的觀念在寫程式。2 ]; V9 r- l4 W: `% g
+ F* H! A4 g2 G6 M; d6 W( B: k6 a4 A- o來講一個系統應用的觀念,如果您也是常寫一些MCU 韌體程式的話,或許,會有一些幫助吧。
+ w6 l' F# v; U; R2 l, B5 y' a9 d3 O
尤其是作一些機電整合的韌體程式,
7 }/ C3 `' X6 Y: m( G: }, C$ \/ T
2 x( b+ \3 w, {1 ^: d寫這種程式,您就不要把那一般寫LED 跑馬燈的程式觀念拿來湊合。
# X5 y+ ~* ]2 B" d7 B/ z0 T$ V$ M8 q& L6 g h) q
我個人覺得:如果,只是要您寫個簡單的I/O 控制程式,或是一個簡單的步進馬達控制程式, f5 U! |% K6 \8 b- ]
! k6 U* l- w4 l9 [+ |. j- V
您可能就是把我們手指頭上的十個手指拿出來湊合的寫。反正是程式嘛,就是幫我們人腦做事的嘛!
5 @) D1 U' b2 N! @: t0 J" ~4 S* a w, R( w/ _/ }) v8 s! E
...(略)
- e- `. U5 N1 [
4 h" w: `* C3 y今天我們來講一個一般系統輸入參數的處理問題,譬如說是一個類比輸入參數(A/D Parameter)。
! |, ~- F- n L; s9 J, X, N5 b! }/ z& E2 V( u& e
我們都知道:雖然是類比輸入,但是我們在韌體程式的讀取過程,
* d* s7 W" D" a9 [5 @9 W( _4 \) d; ^& R# H( H1 Z
卻仍然是數位分時處理方式(Discrete)。還是得一個、一個值慢慢讀進來。! n! O" ?6 j2 l( O6 q! ~, _! d
) ~* f5 K- v5 A2 K! m2 ^3 F
難免就會發生所謂多久取一個值?!(連續性)...還有一個很重要的觀念:軟體濾波處理。(Filter)5 F7 l, @+ U E/ q
% [- e4 v m0 I6 Z0 W9 B8 h6 ~硬體電路上的濾波電路是鐵定有的(一般都只是低通濾波),
9 M* T2 p: I6 }+ R2 S9 B8 i
/ s: M, G4 D& v, m0 A; S4 `; e但您怎麼知道輸入的值會不會有波動峰值呢?瞬間的變化時合理嗎?!
2 n6 i8 ^ c! x0 p- y4 t! Q, D3 q2 O9 c: d: z1 @, }6 e
尤其是一些屬於比較機械特性的參數,譬如環境溫度、電瓶電壓等...
" t% x. F0 {; x' ~
, H$ h6 T+ t, a這些東西都是屬於自然現象的參數。(廢話...這種東西才需要A/D啊)$ M) N t& A+ Q0 v+ y6 i; i' ^
7 w0 X8 c! ?4 E- Q! s' \& N: J所以,在軟體上也必須有一些軟體濾波作法,,,我相信如果您幸運一點的話,, Q" t( p+ Z! h( P; j
) E- x# [& N9 C; k2 a$ a剛好有個老鳥工程師願意帶您,而也願意傾囊相授教您...) P3 \' `7 G% f' B. q( |3 E
" e5 g1 q: r+ ]" n您可能就知道這個東西就是:讀個十遍或二十遍,然後取平均就好了!????????
6 N0 p! n( [" F1 J5 C' ^& A9 S" t/ z, N( J" s4 O I
是嗎?!
' ?6 O0 p, F; ~. t/ C2 f6 ^8 J
" R7 m7 W7 c2 M+ m---/ t1 E+ l: S; I
tw.myblog.yahoo.com/chamberplus-taiwan/article?mid=1905&prev=1925&next=1901 |
|