2014年6月22日 星期日

嵌入式系統 - 電吉他調音器

  今年2014 Spring 嵌入式系統期末專題,我們使用 STM32F429I-Discovery 開發的電吉他調音器,雖然不能調音....
  附上 HackpadGithub 連結


  我們使用102級林哲安學長所開發的開放原始碼 rtenv-plus 作業系統 (介紹) 當作基底,來開發我們的調音器。原本我們的目標是想要將 1000 元的電子琴化為擁有 30000 價值得電鋼琴,預期利用自製的彎取電阻來實作,但是自製彎曲電阻的缺點是每次彎曲所得到的電阻值不固定,還有琴鍵所造成的彎曲不易使彎曲電阻有代大的變化,再加上市面上的彎取電阻一條要 200 元,琴鍵有 61 個,我們還沒賺到 30000 元就先要噴 12000 元。後來我們將方向改為製作電吉他調音器,雖然這兩者沒有太大的關係XD

  調音器的系統架構是:利用電吉他磁生電的原理,從接頭取得電壓訊號,透過放大電路將訊號放大,並從板子的ADC讀取訊號,板子透過 FFT 將訊號基頻求出,最後 LCD 顯示告知使用者。我負責的部分是 FFT,原本打算自幹 FFT 出來,隊員說 ARM 有提供 DSP Library 用於數學運算,但是希望很快就沒了,我將範例程式移植到 rtenv-plus 上,但是不能運作。趕緊找 Jserv 老師幫助,原來是 FPU 沒有開啟,好了,一個問題解決了,又有更多的問題產生了,就算殺了一個問題,還有千千萬萬個問題!  DSP Library 要用到的 math library 不管怎麼 link 都找不到,library 沒有開啟 floating point extension,DSP Library 的 FFT 中有使用到 DSP 另一個函式 bitreversal ,查看 lst 檔案,就是沒有出現這段程式碼,而且板子執行到這裡就會掛點。最後還是到的原點,到網路上找尋可以使用的 FFT 原始碼,感謝別組組員的 2 積分阿XD,讓我可以得到這原始碼,DSP Library 我討厭你阿

  沒有成功的原因是 ADC 無法得到訊號。我們預設的取樣頻率是 4096 Hz,可是 ADC 的取樣頻率無法降這麼低,轉而修改 SystemTick 的頻率,可是最少只能降到 0.5ms (2000Hz),再降低的話 rtenv-plus 就會掛掉,可是降到 0.5ms 作業系統雖然可以執行,但是反而是 ADC 出問題了,DMA 中無法取得資料,用 USART 檢查發現都是一些無意義的資料。

  沒有做出來很可惜阿,還第一次體驗 26 小時沒闔眼,上次黑客松還有睡 3 小時,一起到系館頂樓看日出,台南盡收眼底阿。雖然沒有成功,可是這堂課我學到了很多理論的實做,系上的課程大多是理論教授,很少有實做,這次有機會看到一個作業系統的程式碼,好好的研究他是怎麼運作的,說實在的,在其中發現自己以前所學到的理論,我會超興奮的XD。現在多了一塊板子可以把玩,好想要再挑戰一次阿!

相關連結:

4 則留言:

  1. 不知道前一則留言有沒有成功, ADC Sample rate 如果比較高, 可以藉由 丟掉, 平均 等等方法降低喔(可以查一下 ADC Oversampling)

    回覆刪除
  2. 我比較好奇的是,電吉他效果器的效果有很多種,你們原本的目標是打算做哪種呢?如果是做最常用的distortion的話搞不好連FFT都可以不用做直接處理time-domain signal即可。

    回覆刪除
    回覆
    1. 我們原本是要做效果器沒錯,可是後來想要加上調音的功能,就必須使用FFT來分析基頻

      刪除