網頁

搜尋此網誌

2009年3月22日 星期日

分享TMS320F2812學習心得

有鑑於 DSP 的學習對於很多人來說都很陌生,又有點畏懼,在此和大家分享我的 DSP 學習心得,期望能提供大家做為參考,另外也鼓勵大家不要畏懼,這種東西是很簡單的,比起你應付一些難搞的人來說,學習DSP是有道理可以依循的!

我用的是德州儀器 ( Texas Instruments Incorporated.) 的TMS320F2812這個 DSP ,因為當時念電力電子技術,需要用到所謂的數位控制,所以才用這個系列。這裡感謝胡教授 (K.I. Hwu) 的指導與實驗室的資源,有幸能參與你的計畫案,讓我們這群學生永生難忘更要感謝其碩士班學長們的教導,以及他們熱心的協助,這間實驗室的同學我太需要感謝他們了。

特別感謝黃老師 (Simon Huang) 和其實驗室同學的交流,讓我在短時間內能學習DSP這項工具,並且和我的同學一起教學相長,還有和您們一起參加「台灣大學燃料電池機的計畫,難能可貴的機會,使我見識到台大團隊的能力,由衷感謝您們,沒有您們的協助,沒有這些學習心得分享給大家。

開發用的工具是:VP2812EVM,VP2812EVM為旺陽電企業股份有限公司 (Value Provider International Corp.) 所研發生產,可以展現德州儀器公司的 TMS320F2812 DSP 大部份的特性及功能之模擬板。他是長下圖這個樣子:(有圖有真相)


要如何開始學DSP呢?

如果有人肯教當然是最好的,肯教你又不留一手的又是更少的!如果沒有也沒關係,天助自助者!基本上,你最好是學過MCU之類的微控制器,像是8051之類的,總之,你要懂一點電腦、微處理機的運作基礎原理。

假設你已經知道MCU了,也已經用過了。先恭喜你,DSP已經會了一半,因為這些東西(DSP、MCU、MPU)都是大同小異的,你可以用類比的概念來學習,察覺他們之中相同和相異之處,學起來就會更快更順手!簡單來說,一般的MCU像是轎車,DSP則像是跑車,DSP速度較快也較複雜,導致有人說他難,本來複雜的東西就比較難懂一些!

接著,上網收集DSP的所有datasheet和Example,這些都是學習的主要資料!非常重要。俗話說,模仿學習的第一步,先run一些範例程式,調一調參數,觀察其輸出變化。如果不懂,再去看datasheet,datasheet看不懂就去玩玩範例程式,這是一個疊代過程,疊幾次之後,通常你會懂一些東西。

你一定會問,靠!datasheet那麼多,要怎麼看。別的DSP我不知道,TMS320F2812來說,你大概只要印三本出來看,分別是:
  • spru078c_TMS320x281x System Control and Interrupts Reference Guide (Rev. C).pdf這是整個DSP的運作精神,了解中斷並運用中斷,還有系統中的參數(比如clock等)設定,如果都懂的話,整個DSP你都可以用的得心應手!
  • spru060d_TMS320x281x Analog-to-Digital Converter (ADC) Reference Guide (Rev. D).pdf這是做控制的輸入部分。
  • spru065c_TMS320x281x Event Manager (EV) Reference Guide (Rev. C).pdf這是控制的輸出部分。
你應該要有個疑問!啊,控制器的PI要怎麼寫呢?上面三本只有輸入跟輸出,PI要怎麼生出來。這時候Example範例程式就有用了,TI的範例當中,有三個很有用:
  • sprc097_Peripheral_Examples_v100,學DSP可以先用這個來切入,詳細又簡單的程式,可以讓你有感覺。
  • sprc087_IQmath_Library,因為TMS320F2812是Fixed-Point的處理器,如果運算需要浮點數,可以用這個Library來模擬完成此需求功能。
  • sprc080_dmclib_v322,這是用來做馬達控制的範例程式,有很多有用的Function可以參考,其中PID控制器就是一個,依樣畫葫蘆,你可以修修改改完成你要的工作。
資料收集好之後,萬事俱備,只欠東風。剩下要怎麼開始呢?我的建議是這樣:
  1. 先玩玩PWM這塊功能,用Example的範例程式也沒關西,觀察輸出的現象,改一改程式然後感覺一下DSP的行為。
  2. PWM能夠調整之後,再來玩玩ADC的部分,因為ADC是輸入功能,你要知道ADC的輸出才會有感覺,最簡單的方式是用ADC來調整PWM,怎麼寫?用兩個程式,把他"接"起來,ADC的輸出=PWM的輸入。因為PWM你已經用過了,基本上不會有錯,把ADC接近來如果不會動,大概就是ADC這塊的問題。
  3. 最後再玩玩中斷、系統這一塊,記得Simon Huang曾說過:能夠完美操作DSP的中斷,將能將DSP的功能發揮地淋漓盡致。事實也是如此!
以上大概是我學習DSP的學習心得,希望你也能夠順利學習。大致上依照這個方式來學,我想是最省時的,然後你要有個觀念:「做你能做的,改變你能改變的」,再來就是「先從簡單的開始」,你要想:「你會什麼東西,你有什麼能力,你要怎麼克服,靜下心來,一步一步就會成功」,因為我就是這樣走過來的,學DSP是簡單的,學做人處事是最難的,尤其遇到那種你無法預期的一些人。

下圖是以前用DSP做的Switching Power Supply,Power Satge是由國哲同學製作的,這是一個升壓型(Boost Type)轉換器,給大家參考參考,鼓勵你也可以做這樣的東西。

最後想跟大家提倡的觀念:

寫程式沒什麼了不起,用DSP也沒什麼了不起。程式人人會寫,電路也人人都會做,只要是接受過訓練的,做這些都沒有太大問題,差別在於等級問題,你做的可能是80分,我做的可能是79分,而做出100分的東西通常很少,也很少是一個人完成,100分的產物通常是一個Team完成!

這些東西也不過是這樣,程式是死的,而人是活的。在許可範圍內,你寫的程式其實要跟大家分享,一個人的想法一定有限,由眾人集合起來的價值會是更大的。想想看,這些程式等你死掉的時候,還會有價值嗎?DSP也許早就改朝換代了。

當Free Source很多時,資源不再是壟斷的,對所有人都有利!實在搞不懂有些人藏東藏西,怕別人知道他腦袋的東西,甚至做出自私自利傷害別人的行為,我真得不懂,也不了解。人的價值不在於這些實體,而是在於背後的精神,這些精神是別人怎麼學寫學不懂的,這才是價值!

3 則留言:

  1. dear t5318019
    i introduce myself first.
    i never believe dsp library,
    and always doubt of dsp AppNote.

    我相信你對一件事情的執著,但我也接受PH.D等級的作法.
    接受不代表認同,只代表可承受這些事情的發生.

    分享你一則文章,國防役課程裏面有學到的[justice]
    關鍵字: justice 國防役 文章
    ptt可以找到心得報告.

    我支持copyright也接受copyleft的想法.
    文明的進步代表著以更快速的學習前人心血結晶
    並且改善與創新的方式表現舊有的事物.
    但絕不是抄襲或把前人努力結果占為己有.

    撰寫DSP程式這只是一種工具,只是代表會操作DSP
    就如同操作WINDOWS系統不代表了解內部運作演算.
    我想什麼是[死掉之後還有的價值]
    應該是Concept可以永遠流傳吧!
    當然這不是指花拳繡腿毫無參考價值的學術文章
    也不是指曇花一現無法實用的硬體電路
    而是讓一群人或一個人對你保持尊重認同你的想法

    開放資源不是濫用資源,當你生活水準提高[不是代表有錢
    而是你懂得環保懂得永續]
    我不會想要用山寨機的或者沒有保固的產品
    因為我不想製造太多垃圾

    我相信中國與印度的崛起或者是四十年前台灣的崛起
    是因為資本主義的美國以成本與速度的考量讓所謂的技術
    開放給較低技術的國家給予大量複製與壓榨勞工.
    現有優渥的環境是拜前人努力抄襲與大量複製的結果.

    分享一本很有理想的書[國家的品格] [in ntut lib]
    內容有點偏執但是可以參考.


    希望過往煙硝味可以換得清新自然空氣.
    你我還有PH.D等級的人也只是要混口飯吃罷了.
    不然唸書要幹麻.
    花了45mins寫這狗屁倒灶的東西.

    回覆刪除
  2. 請問輸入及輸出接角如何接?EX:ADCIN有兩組0-7 PWM也有兩組輸出,如果我由A組ADC輸入0-4 5個PIN的量測訊號,我要他們得連乘結果,我該由何PIN來取得結果(雖然PWM是輸出但這是控制訊號)?謝謝!!

    回覆刪除
  3. Dear chin,

    連乘結果不一定需要從PWM輸出,可以改由GPIO輸出觀察結果,因為是數位訊號,你可以直接讀取暫存器的數值,或是接個DAC用電表讀取輸出電壓,這樣就知道結果是不是正確了。

    回覆刪除

熱門文章