您該如何即時來處理這個電壓變化呢?!譬如:
您每 15 mSec 讀一次 A/D ,然後讀十遍(150 mSec)之後,您才得到一個新的平均值。
當然啊,老前輩會跟您說:您還要在程式裡,加入一段判斷式:萬一誤差太大的,
就捨棄不納入平均計算。什麼是誤差太大?!基準是什麼?!為什麼要讀十遍?!
讀八遍不行嗎?!讀16 遍不是更好嗎?!直接右移四次不是更好嗎?!...
萬一有一次捨棄了...剩下15 個值時?怎麼辦?!...
----那您跟我說:這樣子的推理觀念的數學依據(科學依據)是什麼?!大家高興就好?!
那做出來的東西,他今天高興就正常...明天他不高興就給您出狀況...那大家幹嘛還學科學?!
所以依據工程數學上的式子解釋:如果您依據一階濾波器的公式,
您只要在每兩個15 mSec 之間就可以取得一個濾波後的新值...
上式中的 Looptime 就是您這個 15 mSec~
而時間常數您可以取 500mSec。在機械上或是許多類比訊號上是綽綽有餘的。
好~我們在依據上述的公式來算:
如果您電瓶電壓的舊值是 30 V...當您讀到新的A/D 值為 40 V時。
好吧 ...這個值算誤差太大呢?還是合理?!...原來十根手指頭的算法,就沒有章法了。
但如果我們把他真正的套到上述的公式裡:我們以一階濾波器原理公式:算出的答案是:
Value(n) = 30 + (1-e**(-15/500))(40-30)
= 30 +(0.02955447)*10 = 30.2955447 V。
以一般自然現象的結果來看:瞬間40 V 我們認為是不合理的,
但如果經過 500 mSec 的連續讀到這個值時,這個東西可能是真的值了...
但以我們這個一階濾波器公式來看,,,他 500mSec後的值也差不多這個值了!
不信您可以實際去算一算。
(注意喔,.當您第二次帶公示時,這個Value(n-1) 是30.2955447 而不是30 !!
依此類推...(500 mSec 大概要算34 遍)。
好了...這個答案跟您說:您根本不需要去15 mSec 讀十遍...還在那取其中幾次算?!
...500 mSec 您算三遍,也不一定比較準...程式在判斷式上,還要寫個落落長...
也不知道在算什麼?!也沒工程數學根據?下回寫程式還是心裡虛虛的!
------
好了...本單元的議題講完了。大家都應該知道結果了吧...有那麼簡單嗎?!
但問題來了...您知道這個自然對數的值是多少嗎?! e = 2.718281828(維基百科) !
如果您是用PC 來寫程式,當然沒問題啊...用Double Floating 宣告,給他用力的
往下算就對了!但很不幸的 ,一般這一種應用都是在單晶片微處理器(微控器)上,
如果更不幸是8 Bits 的MCU 的話!(應該幾乎都是吧!)那就更不幸了...
沒有留言:
張貼留言