終于把頻譜顯示做出來了,不過只用來顯示頻譜似乎太單調了,所以又順便做了個耳放,這樣就比較實用了!功放制作花費大,而耳放我倒是沒有做過(成本相對比較低),所以就選擇它了!
這個方案用的是CD3315+TDA2822+Mega8L,外加一片LM386做電平移動。同時,把模擬信號放大到適合MEGA8ad采樣的程度。整個方案使用芯片比較少,成本相對較低,最貴就是那些點陣了(總共用了三個點陣來顯示頻譜)。
數字部分原理圖
模擬部分原理圖
上面給出的整個系統電路圖,包括兩數字部分和模擬部分。其實,電路圖比較簡單,代碼編寫倒是很花時間。
整個系統采用一個mega8控制,代碼比較多。這次用mega8也算是用到極致了:用了一個外部中斷(紅外接收)、兩個定時器(一個adc采樣,一個掃描點陣),同時加上內部eeprom存儲DSP音頻設置數據。(本來還加了pwm功能,實在是代碼沒地方寫了,最后舍棄了)
模擬部分
前端音頻處理。這個耳放通過CD3315可以對音頻信號實現非常好的處理。輸入到TDA2822驅動耳機,可以很明顯聽出處理前后的效果,尤其是音質不怎么樣的mp3或者其他音頻,只要通過CD3315進行高低音的調節,就可以調出非常好的效果(媲美媚族MP3音質)。
不過,耳機不能太爛。CD3315(PT2315,TDA7315)這幾個芯片都是管腳通用的音頻數字調節芯片,一塊芯片就可以實現對兩個聲道的音頻信號的主音量、高/低音、左/右聲道、超重低音、靜音實現數字控制,而且效果特好。
后端輸出采用TDA2822(這個是一個雙聲道的音頻放大芯片,常用于收音機和錄音機上)。和CD3315搭配起來,效果非常好,驅動能力大,音質也不錯。
整個系統的電源全部來自USB(可以從電腦或MP3充電器上取電),因為系統功耗不是很大(不過,無論是電腦電源還是MP3電源,都是開關電源,紋波都比較大,所以如何抑制紋波是一個重點!我通過實驗發現,加電感可以很好的抑制紋波!比加電容效果好得多),所以,從USB得到電源之后就把正負電源線都經過電感,同時,數字和模擬部分也都用電感連接,在沒有聲音輸入的時候,耳機里也聽不到噪聲!
因為系統會偶爾斷電,所以要保證時鐘在斷電之后也能正常跑,就必須加備用電源!(供ds1302用)我選擇的是用電容充電來提供電壓,用兩個4700uF的電容并聯供電(據網友介紹,一個100uF的電容就可以跑1個小時)。
數字部分
1、主控部分由mega8控制。
整個系統的運行都是在mega8控制之下工作。系統分兩個模式:音樂模式(M00)和時鐘模式(M01),系統默認進入音樂模式。
在音樂模式下,mega8主要處理FFT和頻譜顯示,同時兼顧紅外遙控對該模式下的一些數據進行修改。在時鐘模式下,mega8則主要控制時鐘顯示,同時監視鬧鐘,同音也兼顧紅外遙控,以修改時鐘或鬧鐘。在音樂模式下,如果長時間沒有音頻信號輸入,則系統自動跳到時鐘模式顯示時間。
程序流程
2、ADC采樣。
音頻信號因為是有正負的,而mega8又不支持對負電壓進行采樣。所以,要一個電平移動電路,同時由于有時音頻信號會比較小,需要放大適當倍數才比較好處理。所以我采用了一個LM386。這個芯片不但可以實現信號放大,更重要的是,可以實現電平轉移。把原來的正負信號,轉換為單一極性的信號。
選擇200倍的固定增益,然后通過在輸入端加一個可調電阻,控制輸出大小,這樣很好的解決了adc的采樣問題。
3、FFT變換。
根據納醛斯特律,音頻信號的最高頻率大概20Khz,所以adc的采樣頻率設置為40Khz。FFT根據這個采樣頻率,計算各個頻率分量的幅值大小。因為mega8的sram只有1K,所以最大只能支持64點的FFT變換,也就是顯示的頻段最多32個,實際上由于第一個頻率是直流分量,所以只有31個頻段。
設fo 為adc的采樣頻率,N為傅立葉變換的點數,則最小分辨頻率f為:f=fo/N。這樣,這個頻譜顯示的最低頻率就是625Hz,每向右移一個,頻率加625Hz。
正因為這樣,所以低頻頻段的頻譜顯示不是很好。不過,可以通過加大采樣點數或者降低采樣頻率來提高最小分辨率。
4、點陣驅動。
這個耳放的驅動我用595來做列驅動,行驅動用了d882,這個驅動電流比較大(Ice=3A)。595驅動電流大,而且具有三態輸出,比74164好用。理論上計算,要達到1A的電流才能滿足要求,但實踐發現,整個系統跑起來也不到200ma,d882有點大材小用。這樣,由這兩種實現了點陣的行列的驅動,再用一個595控制8個d882,大大減少了對mega8的io口使用。
接收部分直接用一個38k的接收頭。整個系統的硬件:
頻譜顯示:
頻譜顯示
頻譜顯示
頻譜顯示
頻點測量:
1.825Khz時,對應的頻顯
(審核編輯: 智匯小新)
分享