2017年4月11日 星期二

A/D計算方法-透過自然數

出處

那我們來作個簡單的實驗:譬如您一個簡單的電瓶電壓為 30 V。

您該如何即時來處理這個電壓變化呢?!譬如:

您每 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 的話!(應該幾乎都是吧!)那就更不幸了...

沒有留言:

張貼留言