Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
嵌入式作業系統設計與實作
電吉他調音器
楊震
向澐
丁士宸
李昆憶
呂科進
鄭聖文
二十六小時的堅持 , 雖然尚未完成
成果 - 電吉他調音器
系統架構
Stm32F429
Discovery
Guitar
Battery
ADC
USB
Buzzer Timer
Operating System:
Rtenv Plus
調音器程式流程
音訊輸入
ADC 轉換
快速傅立葉轉換 (FFT)
音調頻率 , 可表示為音名
電吉他
電吉他的拾音器是由磁鐵和線圈構成,會產生磁場
當弦被撥動時,磁場會收到干擾,產生電壓
聲音頻率、音名
C D E F G A B
Do Re Mi Fa Sol La Si
不同的音調及音高會對應至不同之頻率 , 以鋼琴中央
C 而言 , 頻率約為 261.6Hz
類比數位轉換 (ADC)
●
透過 ADC 將外部類比訊號轉成離散數位訊號
●
採用單一頻道連續取樣模式
●
利用 DMA 來搬移 ADC 產生的資料來減少 CPU 花費在讀
寫的時間
●
將取樣的結果做快速傅立葉轉換來取得頻率
開發問題
●
DMA 的模式無法搞定, Normal mode 搬移資料完成後
無法重新啟動。
●
若不以 DMA 完成後再計算,則勢必要定時取樣
●
更動排程時間造成作業系統無法預知的行為
開發問題
●
從示波器上看到,電吉他會產生一個正負約 0.2mV
的正弦波來回振動
●
然而硬體的 ADC 只能量到最多 0 ~ 3.6V 之間的電壓,
導致負電壓量測不到
問題:如何量到完整的波形?
●
答案:調整基準點、波形 -> 以平移放...
平移、放大電路 , 使用 OAP
測試 , 感謝工科系、電機系支援 !
電路成品
平移、放大電路 , 使用 OAP
原訊號
調整後
快速傅立葉轉換 (Fast Fourier Transform)
與 Discrete Fourier Transform 一樣,將訊號從
time domain 轉換成 frequency domain
DFT 的缺點:運算量過大: N^2
...
快速傅立葉轉換 (Fast Fourier Transform)
  
快速傅立葉轉換 (Fast Fourier Transform)
  
快速傅立葉轉換 (Fast Fourier Transform)
  
FFT 概念:將 DFT 拆成奇偶兩部分
快速傅立葉轉換 (Fast Fourier Transform)
F(0)
F(1)
F(2)
F(3)
F(4)
F(5)
F(6)
F(7)
0
1
2
3
4
5
6
7
0
2
4
6
1
3
5
7
0
4
2
6
1
5
3
7
開發問題
ARM 有提供 CMSIS DSP Library ,可是在開發上
遇到重重困難
VFP Register 問題
將 compiler 版本更新至 4.8.4 以上
需要開啟 FPU
-DARM_MATH_CM4
-D__FPU_US...
開發問題
ARM 有提供 CMSIS DSP Library ,可是在開發上
遇到重重困難
VFP Register 問題
將 compiler 版本更新至 4.8.4 以上
需要開啟 FPU
-DARM_MATH_CM4
-D__FPU_US...
開發問題
編譯 flag 的優化層級為 – O0 ,造成部分 Library
程式碼沒有被優化 -> 硬作 !
開發問題
ARM FFT 調用函式:
arm_cfft_f32() 所需的 arm_bitreversal_32.s ,一
直沒有被 link 進來 , 試過很多方法,依然無解
-> 毅然決然,到網路上找尋 FFT 4096 的原始碼
開發問題
板子的 floatint point extension 沒有被開啟
-> 還是硬幹
/libraries/CMSIS/Include/core_cm4.h
/libraries/CMSIS/Device/ST/STM32F4xx/S...
開發問題
ARM 有提供 CMSIS DSP Library ,可是在開發上
遇到重重困難
VFP Register 問題
將 compiler 版本更新至 4.8.4 以上
需要開啟 FPU
-DARM_MATH_CM4
-D__FPU_US...
節拍器程式流程
計算節拍週期
設定定時器發聲 ( 蜂鳴器 )
延遲
單位 :BPM (Beat Per Minute)
表示一個指定的音符,例如四分音符在一分鐘內出
現的次數 ( 例如四分音符在一分鐘內出現的次數 ,
120 為 BPM 值,表示每分鐘演奏 120 個四分音符 )
樂譜上常記有音樂速度標記如 :...
蜂鳴器 (Buzzer)
利用 timer 對一個 GPIO 以固定頻率輸出即可發出聲音
因此改變 timer 的時間就能發出不同高低的聲音
LCD 模組 ( 觸控螢幕 )
優點 : 使用者互動界面
缺點 : 電阻式觸控螢幕 , 流暢度有待加強
LCD 繪圖原理
Layer
圖層是一排排的 Pixel 刷新
如果在更新完就立即顯 , 就會出現閃爍情況
開發問題
圖形更新問題 ( 圖層閃爍 )
解決方案 :Double buffer
硬體過新 , 軟體 Library 有 bug (ST Library)
開發問題
圖形更新問題 ( 圖層閃爍 )
解決方案 :Double buffer
硬體過新 , 軟體 Library 有 bug (ST Library)
解決畫面閃爍 - Double buffer
Show layer Hidden layer
解決畫面閃爍 - Double buffer
Hidden layer
Show layer
圖案先繪製到下面的 buffer
解決畫面閃爍 - Double buffer
Hidden layer
Show layer
繪圖完畢
解決畫面閃爍 - Double buffer
Show layer
Hidden layer
圖層交換
Thanks for listening!
Demo Time!
Upcoming SlideShare
Loading in …5
×

嵌入式作業系統設計與實作 - 電吉他調音器

2,212 views

Published on

  • Be the first to comment

嵌入式作業系統設計與實作 - 電吉他調音器

  1. 1. 嵌入式作業系統設計與實作 電吉他調音器 楊震 向澐 丁士宸 李昆憶 呂科進 鄭聖文
  2. 2. 二十六小時的堅持 , 雖然尚未完成
  3. 3. 成果 - 電吉他調音器
  4. 4. 系統架構 Stm32F429 Discovery Guitar Battery ADC USB Buzzer Timer Operating System: Rtenv Plus
  5. 5. 調音器程式流程 音訊輸入 ADC 轉換 快速傅立葉轉換 (FFT) 音調頻率 , 可表示為音名
  6. 6. 電吉他 電吉他的拾音器是由磁鐵和線圈構成,會產生磁場 當弦被撥動時,磁場會收到干擾,產生電壓
  7. 7. 聲音頻率、音名 C D E F G A B Do Re Mi Fa Sol La Si 不同的音調及音高會對應至不同之頻率 , 以鋼琴中央 C 而言 , 頻率約為 261.6Hz
  8. 8. 類比數位轉換 (ADC) ● 透過 ADC 將外部類比訊號轉成離散數位訊號 ● 採用單一頻道連續取樣模式 ● 利用 DMA 來搬移 ADC 產生的資料來減少 CPU 花費在讀 寫的時間 ● 將取樣的結果做快速傅立葉轉換來取得頻率
  9. 9. 開發問題 ● DMA 的模式無法搞定, Normal mode 搬移資料完成後 無法重新啟動。 ● 若不以 DMA 完成後再計算,則勢必要定時取樣 ● 更動排程時間造成作業系統無法預知的行為
  10. 10. 開發問題 ● 從示波器上看到,電吉他會產生一個正負約 0.2mV 的正弦波來回振動 ● 然而硬體的 ADC 只能量到最多 0 ~ 3.6V 之間的電壓, 導致負電壓量測不到 問題:如何量到完整的波形? ● 答案:調整基準點、波形 -> 以平移放大電路解決 ● 將完整波形 level-shift 到正電壓區 ● 利用放大電路增加波形的可分辨力
  11. 11. 平移、放大電路 , 使用 OAP
  12. 12. 測試 , 感謝工科系、電機系支援 !
  13. 13. 電路成品
  14. 14. 平移、放大電路 , 使用 OAP
  15. 15. 原訊號
  16. 16. 調整後
  17. 17. 快速傅立葉轉換 (Fast Fourier Transform) 與 Discrete Fourier Transform 一樣,將訊號從 time domain 轉換成 frequency domain DFT 的缺點:運算量過大: N^2 FFT : N lg N
  18. 18. 快速傅立葉轉換 (Fast Fourier Transform)   
  19. 19. 快速傅立葉轉換 (Fast Fourier Transform)   
  20. 20. 快速傅立葉轉換 (Fast Fourier Transform)    FFT 概念:將 DFT 拆成奇偶兩部分
  21. 21. 快速傅立葉轉換 (Fast Fourier Transform) F(0) F(1) F(2) F(3) F(4) F(5) F(6) F(7) 0 1 2 3 4 5 6 7 0 2 4 6 1 3 5 7 0 4 2 6 1 5 3 7
  22. 22. 開發問題 ARM 有提供 CMSIS DSP Library ,可是在開發上 遇到重重困難 VFP Register 問題 將 compiler 版本更新至 4.8.4 以上 需要開啟 FPU -DARM_MATH_CM4 -D__FPU_USED=1 -D__FPU_PRESENT=1 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  23. 23. 開發問題 ARM 有提供 CMSIS DSP Library ,可是在開發上 遇到重重困難 VFP Register 問題 將 compiler 版本更新至 4.8.4 以上 需要開啟 FPU -DARM_MATH_CM4 -D__FPU_USED=1 -D__FPU_PRESENT=1 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  24. 24. 開發問題 編譯 flag 的優化層級為 – O0 ,造成部分 Library 程式碼沒有被優化 -> 硬作 !
  25. 25. 開發問題 ARM FFT 調用函式: arm_cfft_f32() 所需的 arm_bitreversal_32.s ,一 直沒有被 link 進來 , 試過很多方法,依然無解 -> 毅然決然,到網路上找尋 FFT 4096 的原始碼
  26. 26. 開發問題 板子的 floatint point extension 沒有被開啟 -> 還是硬幹 /libraries/CMSIS/Include/core_cm4.h /libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c
  27. 27. 開發問題 ARM 有提供 CMSIS DSP Library ,可是在開發上 遇到重重困難 VFP Register 問題 將 compiler 版本更新至 4.8.4 以上 需要開啟 FPU -DARM_MATH_CM4 -D__FPU_USED=1 -D__FPU_PRESENT=1 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  28. 28. 節拍器程式流程 計算節拍週期 設定定時器發聲 ( 蜂鳴器 ) 延遲
  29. 29. 單位 :BPM (Beat Per Minute) 表示一個指定的音符,例如四分音符在一分鐘內出 現的次數 ( 例如四分音符在一分鐘內出現的次數 , 120 為 BPM 值,表示每分鐘演奏 120 個四分音符 ) 樂譜上常記有音樂速度標記如 : Allegro - 快板( 120 - 168 bpm ) Moderato - 中板( 90 - 115 bpm ) Andante - 行板( 76 - 108 bpm ) ...Etc
  30. 30. 蜂鳴器 (Buzzer) 利用 timer 對一個 GPIO 以固定頻率輸出即可發出聲音 因此改變 timer 的時間就能發出不同高低的聲音
  31. 31. LCD 模組 ( 觸控螢幕 ) 優點 : 使用者互動界面 缺點 : 電阻式觸控螢幕 , 流暢度有待加強
  32. 32. LCD 繪圖原理 Layer 圖層是一排排的 Pixel 刷新 如果在更新完就立即顯 , 就會出現閃爍情況
  33. 33. 開發問題 圖形更新問題 ( 圖層閃爍 ) 解決方案 :Double buffer 硬體過新 , 軟體 Library 有 bug (ST Library)
  34. 34. 開發問題 圖形更新問題 ( 圖層閃爍 ) 解決方案 :Double buffer 硬體過新 , 軟體 Library 有 bug (ST Library)
  35. 35. 解決畫面閃爍 - Double buffer Show layer Hidden layer
  36. 36. 解決畫面閃爍 - Double buffer Hidden layer Show layer 圖案先繪製到下面的 buffer
  37. 37. 解決畫面閃爍 - Double buffer Hidden layer Show layer 繪圖完畢
  38. 38. 解決畫面閃爍 - Double buffer Show layer Hidden layer 圖層交換
  39. 39. Thanks for listening!
  40. 40. Demo Time!

×