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

40
嵌入式作業系統設計與實作 電吉他調音器 楊震 向澐 丁士宸 李昆憶 呂科進 鄭聖文

Upload: -

Post on 13-Nov-2014

924 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

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

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

楊震向澐丁士宸李昆憶呂科進鄭聖文

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

二十六小時的堅持,雖然尚未完成

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

成果 - 電吉他調音器

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

系統架構

Stm32F429Discovery

Guitar

Battery

ADC

USB

Buzzer TimerOperating System:

Rtenv Plus

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

調音器程式流程

音訊輸入

ADC轉換

快速傅立葉轉換(FFT)

音調頻率,可表示為音名

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

電吉他

電吉他的拾音器是由磁鐵和線圈構成,會產生磁場

當弦被撥動時,磁場會收到干擾,產生電壓

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

聲音頻率、音名

C D E F G A BDo Re Mi Fa Sol La Si

不同的音調及音高會對應至不同之頻率,以鋼琴中央C而言 ,頻率約為261.6Hz

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

類比數位轉換(ADC)

● 透過ADC將外部類比訊號轉成離散數位訊號● 採用單一頻道連續取樣模式● 利用DMA來搬移 ADC產生的資料來減少CPU花費在讀寫的時間

● 將取樣的結果做快速傅立葉轉換來取得頻率

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

開發問題

● DMA的模式無法搞定, Normal mode搬移資料完成後無法重新啟動。

● 若不以DMA完成後再計算,則勢必要定時取樣● 更動排程時間造成作業系統無法預知的行為

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

開發問題

● 從示波器上看到,電吉他會產生一個正負約0.2mV的正弦波來回振動

● 然而硬體的ADC只能量到最多0 ~ 3.6V之間的電壓,導致負電壓量測不到

問題:如何量到完整的波形?● 答案:調整基準點、波形 -> 以平移放大電路解決

● 將完整波形level-shift到正電壓區● 利用放大電路增加波形的可分辨力

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

平移、放大電路,使用 OAP

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

測試 ,感謝工科系、電機系支援!

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

電路成品

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

平移、放大電路,使用 OAP

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

原訊號

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

調整後

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

快速傅立葉轉換 (Fast Fourier Transform)

與 Discrete Fourier Transform 一樣,將訊號從time domain 轉換成 frequency domain

DFT 的缺點:運算量過大:N^2

FFT: N lg N

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

快速傅立葉轉換 (Fast Fourier Transform)

 

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

快速傅立葉轉換 (Fast Fourier Transform)

 

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

快速傅立葉轉換 (Fast Fourier Transform)

 

FFT 概念:將 DFT 拆成奇偶兩部分

Page 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

Page 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

Page 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

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

開發問題

編譯 flag 的優化層級為 –O0,造成部分 Library程式碼沒有被優化 -> 硬作 !

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

開發問題

ARM FFT 調用函式:arm_cfft_f32()所需的arm_bitreversal_32.s,一直沒有被link進來,試過很多方法,依然無解

->毅然決然,到網路上找尋 FFT 4096 的原始碼

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

開發問題

板子的 floatint point extension 沒有被開啟->還是硬幹

/libraries/CMSIS/Include/core_cm4.h

/libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c

Page 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

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

節拍器程式流程

計算節拍週期

設定定時器發聲(蜂鳴器)

延遲

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

單位 :BPM (Beat Per Minute)

表示一個指定的音符,例如四分音符在一分鐘內出現的次數(例如四分音符在一分鐘內出現的次數,120為 BPM值,表示每分鐘演奏 120個四分音符 )

樂譜上常記有音樂速度標記如 :Allegro - 快板( 120 - 168 bpm)Moderato - 中板(90 - 115 bpm)Andante - 行板(76 - 108 bpm)

...Etc

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

蜂鳴器(Buzzer)

利用timer對一個 GPIO以固定頻率輸出即可發出聲音因此改變 timer的時間就能發出不同高低的聲音

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

LCD模組 (觸控螢幕 )

優點 :使用者互動界面缺點 :電阻式觸控螢幕 ,流暢度有待加強

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

LCD繪圖原理

Layer

圖層是一排排的Pixel刷新

如果在更新完就立即顯 ,就會出現閃爍情況

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

開發問題

圖形更新問題(圖層閃爍 )解決方案 :Double buffer

硬體過新,軟體Library有 bug (ST Library)

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

開發問題

圖形更新問題(圖層閃爍 )解決方案 :Double buffer

硬體過新,軟體Library有 bug (ST Library)

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

解決畫面閃爍 - Double buffer

Show layer Hidden layer

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

解決畫面閃爍 - Double buffer

Hidden layer

Show layer

圖案先繪製到下面的 buffer

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

解決畫面閃爍 - Double buffer

Hidden layer

Show layer

繪圖完畢

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

解決畫面閃爍 - Double buffer

Show layer

Hidden layer

圖層交換

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

Thanks for listening!

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

Demo Time!