這是一篇補之前關於一個A/D 的系統應用問題的延伸篇。
1. 一個A/D 的系統應用問題
2.一個A/D 的系統應用問題(續篇-實驗結果)
3.一個A/D 的系統應用問題(續篇-精進版)
4.一個A/D 的系統應用問題(續篇-範例版)
---
隨著現在MCU 的應用精準度的提升,所以我們常用的A/D 有時也會覺得 8 bits 不夠用,
但是現在MCU 隨隨便便送您個 10 bits ...12 bits 的A/D 也好像不是什麼大不了的事。
反而,沒有的~或是解析度不夠的...還會被客人打槍,要求降價以求取市場機會。
但實際系統應用上,是不是真的需要用到這麼高的解析度?!可能還見仁見智。
不管如何,有越好的A/D 在我們系統應用上,當然是可以提升量測的精準度。
但不一定完全是好事啊...因為我們在數學運算與處理上,也會變得比較複雜。
對於一般常用的 8 bits MCU 來說:更是額外的負擔。
譬如以我們之前所舉的例子來說,明明是電池 40 V的東西,如果我們用到
8 bits 的表示方式,就算外加求到小數點來說:頂多用到 16 bits 變數就偷笑了。
但如果您是超過 8 bits 來說:您又要求達到一樣小數點的話....您可能也不能用
24 bits 這麼奇怪的變數常數,您就非得要宣告成 32 bits 了。
然後您又要用 8 bits 運算能力的MCU來處理運算 32 bits 的變數...唉~系統應用上的
解析度能力還沒提升,當場MCU運算能力當場先變差了。
所以啦....您不要覺得您可以用那一種超過8 bits ADC 的MCU 就很偉大了,
如果您沒有搞清楚您系統應用上額外所帶來的負擔的話,您也沒多厲害啊。
----------------
所以啦,從此您應該更可以體會到我一直強調的 32 bits MCU 的未來重要性。
他所帶來的不只是一些高階IC 設計製造技術的提升,最重要的還有這一層的系統
應用的觀點...否則,像搞那些I2C 、SPI 或是這一種高解析度的 A/D ...他們所帶來
的便利性當然可以在IC 設計與規劃下,一直提升其性能...這是無容置疑的。
但是呢?您MCU 本身的處理能力夠嗎?...塞給您真正好的周邊,但您卻又處理不來?
那又何必強求呢?---- 但是可悲的是:您不做又不行。因為別人可以這樣子搞啊。
---
以我的觀點來看:現在您想玩 8bits MCU ?!沒有什麼好講的,您也只能從系統應用端
去強化自己的系統應用能力,否則,別無他途...您不想搞這麼累、辛苦的系統應用?!
那您就選擇 32 bits MCU 產品本身的市場吧。
但真的...對國內許多傳統MCU 廠來說:他們就是想像以前一樣:賺Easy Money...
但您覺得可能嗎?就像我之前回答讀者問題說的:18 年前可以寫8051 韌體程式
養家活口,但現在行嗎?!...現在您想開雜貨店養家活口?!您怎麼不去觀察7-11
便利商店的經營模式呢?...哪有這好康的事呢?!
--------
所以啦...像我們這一種也沒啥能力可以玩得起 32 bits MCU 的LKK 工程師,
我們也只好回頭好好的搞好我們自己的系統應用價值了。
所以,我們也就不得不提昇自己的系統應用價值, 一樣拿 8 bits MCU ...
一樣要把超過 8 bits A/D 搞到可以輕鬆使用。
以下就是我們得搞定的系統應用結果:
我們舉一樣的例子:從目前簡單系統值,取得新的只差10 的量測值...來看如何處理吧。
當然我們底層的轉換運算副程式就得改寫...又不能佔太多程式或運算時間...也不能犧牲
運算準確值(如果犧牲了運算準確性...那幹嘛還要用高解析度的A/D 啊?!)。
以下是就運算結果: 從290 到 300 的結果...(290, 300 都是> 8 bits 值)。
一樣的隨著迭代運算可以往新值 300 逼近。
當然啊...當您隨著兩者之間誤差變大,您所需的時間就越長...您當然就得調整您
系統上的時間常數。(這是順便回答有某位讀者問我的問題...)這些都是跟您所專注
的系統應用條件所需要定義的...譬如:量電池,跟量無刷馬達感應電動勢是不一定的
特性的。....這個就是我說的:您自己本身的系統應用專業領域的分析能力。
(所以啦...您不要以為在學校念那些工程數學或是在自動控制理論上玩那些MATLab
是幹什麼用的?!...寫程式不是Try and Error ,上班也不是每天打完卡,就坐下來
用十根手指頭拼命寫程式的啦!)
譬如:我們舉另一個例子...兩者之間的誤差變化量較小一點。(就是他的濾波能力
不需要這麼大的時間常數...)我們也順便看一下同樣的程式來處理負方向的運算能力
...
我們就可以發現...他的迭代運算時間就變得比較短了。也達到我們在系統應用的要求。
--------------------------------------
------------------------------------------------------------------
從這些例子裡,我還是要一直強調一點...寫程式本身真的不是什麼大學問,現在這個時代
您會寫程式不是什麼多偉大的事。您自己不努力建立自己的系統整合分析能力...
您就不要怪人家老闆怎麼會虧待您呢?
當然啊...同理,您會搞一棵 8 bits MCU ,再給您外加一組 12 bits ADC...
您也不一定會賣得比較好,因為我說了:公司內請的就是庸庸碌碌的工程師,
每天為著無知的客戶疲於奔命...大家都一樣的啦。
如何要把一棵MCU 發揮的淋漓盡致,真的您要回頭想一想:您自己本身在學校裡,
有沒有真的努力用功唸書...不是叫您考試考一百分,而是您自己有沒有從學習研讀中,
瞭解這些理論基礎真正延伸到實際工程應用端?那是培養一種工程分析的靈敏度...
一種Sense...一種Feeling...
最後舉一個簡單的例子:上回有讀者提到他用 32 bits ARM MCU 之ADC ...搭配
硬體上的DMA,來做外部狀態量測,但總覺得量測數據不準,也不穩...甚至懷疑
此32 bits ARM MCU 不好用,懷疑此MCU有問題之疑慮。
當然啊...有合理的懷疑是沒錯啦...但您又能如何證明您是對的呢?!
我的座右銘:當您證明別人是錯的時,您自己本身也不一定對啊。
當我聽到這一個現象時,我就先質疑從量測到DMA 資料傳輸的資料匯流排的頻寬問題:
當您的ADC 是一般SAR ADC (串列轉換方式)...譬如他的轉換速率是 200 kpbs ...
(很厲害了啦...如果他還是 10 bits 或12 bits 的)他的一組資料Ready 好...也得要
200/10 或200/12 ...當場只剩下20 kbps 或更低...那覺得您的DMA 要跑多快啊?
超過100 kbps ,可能嗎?!那DMA 抓的是什麼資料?!第二點:那您要不要
加入這篇文章的簡單的 First order Lag filter ?!那自己估的系統應用上的
時間常數為何?自己的程式處理能力夠嗎?!(當然對32 bits ARM MCU 應該
輕鬆一點吧!)....這些總總的疑問,您有沒有真的從頭思考過一次?!
那您為何沒有如此思考?!很簡單...因為您以前沒有好好的唸過書,因為您心裡
根本沒有建立過這樣的系統分析觀念與能力,就像您叫一位小學畢業生,
要他用解聯立方程式的方式來求取一些未知數一樣。....
----------------------------------------
我還是要一直強調:真的有點擔心...12 年免試升學會讓許多學生不會努力用功唸書,
這些都是很基礎的數理解析能力的培養,美國的高中生最令人詬病的就是:數理能力
比東方國家差,...只是因為他們國家資源到處充沛,他們的學生可以在未來社會環境
或是企業中培養,但是我們國內企業的在職進修與教育訓練條件真的比較差...
一旦過了那個黃金學習時間...最後辛苦的還是您自己本身啊。
如果您是其中受害者的話,您就應該懂得這一種道理啊。
文章中的範例結果,就當作參考值看吧。...