王啟明 郭寧峰 周艷艷
摘要:通過對音樂頻譜儀原理的研究,利用STC8A4K60S2A12單片機控制技術、離散傅里葉變換快速算法,通過單片機內置的ADC采集音頻信號,并將采集到的音頻信號轉換成數字信號。設計并實現一個音樂頻譜儀,通過LED點陣將音樂頻譜顯示出來。
關鍵詞:單片機;傅里葉變換;LED點陣
中圖分類號:TP393? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)27-0211-02
時代在不斷發(fā)展,生活水平在不斷提高,人們在解決基本生活所需的同時,也更加注重對生活品質的追求,音樂頻譜儀就是在這種追求之下的產物。它促進了音樂的可視化,把原本只能“聽”的音樂,變得能夠“看”到,使音樂在給人聽覺享受的同時,也帶來視覺上的享受;幫助錄音師對錄制的音頻進行加工處理,使音頻變得更加豐富,有層次感。更廣泛的,是它在家庭影院、卡拉OK等音響系統(tǒng)中,實時顯示音樂信號的頻譜將為音響系統(tǒng)增添不少色彩。本文設計并實現一個基于STC8A4K60S2A12單片機的音樂頻譜系統(tǒng),具有電路結構簡單、易開發(fā)、生產成本低等特點。能夠較好地滿足人們在生活中的需求。
1 系統(tǒng)的基本結構
本系統(tǒng)以STC8A4K60S2A12單片機為控制核心,利用其內部集成的一個12位15通道的高速ADC轉換器收集來自外界的音頻信號,并將音頻信號(電信號)轉化為數字信號。通過快速傅里葉變換(FFT)對離散后的數字信號進行處理和運算。FFT計算出頻譜值以后,由LED頻譜顯示電路負責在單片機的控制下把頻譜直觀地顯示出來。此外,本系統(tǒng)還包括按鍵控制的開關和開始動畫等其他功能。
2 硬件設計
2.1復位電路
復位電路用來將中央處理器及其他功能模塊同時恢復到一個確切的初始狀態(tài),以備下次運行時從該初始狀態(tài)重新開始。復位方式有手動按鈕復位、上電復位、積分型上電復位、看門狗型復位電路等。本系統(tǒng)采用的是手動按鈕的復位方式,并通過六引腳自鎖開關來作為系統(tǒng)的開關按鈕,以實現手動復位的功能。六引腳自鎖開關是一種雙刀雙擲開關,引腳有2排,每排3個引腳,中間一根是公共端,對應它左右兩個引腳一個常開一個常閉,另一排與此一樣,而且常開對常開,常閉對常閉。值得注意的是如果不把它們連接起來,它們就是完全獨立的兩組。
六引腳自鎖開關引腳圖如下:
2.2 STC8A4K60S2A12控制芯片
STC8A4K60S2A12單片機是一款宏晶科技公司生產的STC8系列單片機,這種系列的單片機具有不需要外部晶振和外部復位的特點,是以超強抗干擾、超低價、高速、低功耗為目標的8051單片機,在相同的工作頻率下,STC8系列單片機比傳統(tǒng)的8051約快12倍(速度快11.2~13.2倍),依次按順序執(zhí)行全部的111條指令,STC8系列單片機僅需147個時鐘,而傳統(tǒng)的8051則需要1944個時鐘。STC8系列單片機是STC8生產的單時鐘/機械周期(1T)的單片機,是寬電壓、高速、高可靠、低功耗、強抗靜電、較強抗干擾的新一代8051單片機。它的指令代碼完全兼容傳統(tǒng)8051。因為STC8系列單片機的眾多優(yōu)點,它常被用于學習和開發(fā)。
2.3模數轉換電路
STC8A4K60S2A12單片機內置的ADC通過對模擬信號的量化和編碼來實現模數轉換。量化是將模擬信號(音頻信號)量程分成許多離散量級,并確定輸入信號所處的量級。編碼則是對每一個量級分配一個唯一數字碼,并確定與輸入信號所對應的代碼。ADC轉換口位于單片機P1口,有12位15通道的高速ADC。其輸入電壓量程為0~Vcc,如果被測電壓大于ADC的輸入電壓,則需要在輸入ADC引腳之前加入電阻分壓和放大器電路。ADC的時鐘頻率范圍為SYSclk/2/1~SYSclk/2/16,每固定16個ADC時鐘可完成一次模數轉換。當模數轉換完成后,12位的轉換結果會自動保存到寄存器ADC_RES和ADC_RESL中,以備后續(xù)使用。
2.4 LED顯示驅動
本設計采用74HC595芯片作為LED的顯示驅動。74HC595內含8位串入,串/并出位移寄存器和8位三態(tài)輸出鎖存器(即具有高電平、低電平和高阻抗三種輸出狀態(tài))。寄存器和鎖存器分別有各自的時鐘輸入(SCLK和SLCK),都是上升沿有效。當SCLK從低到高電平跳變時,串行輸入數據(SER)移入寄存器;反之,當SLCK從低到高電平跳變時,寄存器的數據信息傳入鎖存器。清除端(CLR)的低電平只對寄存器復位(QS為低電平),而對鎖存器沒有影響。當輸出允許控制(OE)為高電平時,并行的輸出(Q0~Q7)為高阻態(tài),而串行的輸出(QS)不受影響。數據信息從SER口送入74HC595,在每個SCLK的上升沿,SER口上的數據信息移入寄存器,在SCLK的第9個上升沿,數據信息開始從QS移出。如果把第1個74HC595的QH和第2個74HC595的SDA相接,數據信息就可以移入第2個74HC595中,按照上面的接法一個一個接下去,就可接任意多個(本設計接了3個)。數據信息全部送完后,會給SLCK一個上升沿,寄存器中的數據信息就會置入鎖存器,此時如果OE為低電平,數據信息就會從芯片的并口Q0~Q7輸出,把Q0~Q7與LED的8段相連,LED就可以實現顯示了。
3 軟件設計
3.1 開機動畫
很多電腦和手機的系統(tǒng)有含有開機動畫的模塊,它的作用是豐富系統(tǒng)功能、增加系統(tǒng)的娛樂性。擁有一個華麗漂亮的開機動畫,可以消除用戶在等待系統(tǒng)啟動時產生的焦慮,從而使用戶變得心情舒暢。本系統(tǒng)雖然啟動時間很短,但仍然添加了開機動畫模塊,以呈現更加炫酷的視覺效果。動畫實現的原理非常簡單,即利用人眼的余暉效應,快速顯示動作連續(xù)的“圖片”,就可以達到動畫的視覺效果。本系統(tǒng)中,利用取模軟件對畫好的圖形進行取模,并將結果傳入代碼定義好的數組中存儲。通過每組數據的顯示和適當的延時,實現開機動畫的功能。
3.2 ACD程序
系統(tǒng)運行時,首先是對ADC各寄存器的設置,對于ADC控制寄存器(符號為ADC_CONTR),它的主要功能是啟動AD轉換,遷擇通道,設置轉換頻率 ,查詢是否完成轉換等。本系統(tǒng)代碼進行對ADC_CONTR中的ADC_START位和ADC_FLAG位的宏定義,以實現其自動清零和軟件清零的操作。具體代碼為:#define ADC_START (1<<6) //自動清零 #define ADC_FLAG? ?(1<<5) //軟件清零。通過ADC配置寄存器(符號為ADCCFG)中的SPEED位來控制ADC的轉換時間,SPEED[3:0]共有16種不同的模式,分別是0000至1111,不同的模式代表著不同的CUP時鐘數。本系統(tǒng)采用0010即CUP時鐘數為96就能滿足系統(tǒng)的要求。ADCCFG中的RESFMT位是用來控制ADC轉換結果格式的,本系統(tǒng)中通過將其置0來實現把轉換結果左對齊的設置,并由ADC_RES保存結果的高8位,ADC_RESL保存結果的低4位(結果的保存是自動的)。ADC轉換結束后,結果通過return語句返回給復數的實部,以用于FFT程序的操作。
3.3 FFT算法
FFT算法是離散傅里葉變換(DFT)的快速算法。于1965年由J.W.庫利和T.W.圖基提出。采用這種算法能使計算機計算離散傅里葉變換所需要的乘法次數大為減少。特別的,被變換的抽樣點數N越多,FFT算法計算量的節(jié)省就越顯著。
該算法的核心部分是關于蝶形算法的運算。對于點數為N = 2^L的FFT運算,可以分解為L階蝶形圖級聯,每一階蝶形圖內又分為M個蝶形組,每個蝶形組內包含K個蝶形。根據這一點我們就可以構造三層循環(huán)來實現蝶形運算。另外,蝶形算法還涉及了復數的乘法和加法等運算,在編寫程序過程中,需要把復數的運算轉化為實數運算。
3.4 LED顯示程序
因為無法同時控制所有LED燈的亮滅,所以我們退而求其次,先對第一行的LED燈輸入亮滅數據。當處于亮狀態(tài)的LED燈保持一定時間后,再對第二行的LED燈傳入控制亮滅的數據,以此類推,直至對每一行LED燈都傳入了數據。當最后一行結束后,就重新回到第一行,重復循環(huán)上面的操作。根據人眼的余暉效應,當循環(huán)速度達到每秒24次及以上時,人們就可以看到連續(xù)的動態(tài)效果。
4 結束語
本文提出了一種設計簡單、應用場景廣泛的音樂頻譜儀系統(tǒng),該系統(tǒng)以STC8A4K60S2A12單片機為控制核心,將原本只能聽的音樂通過生動的影像展現出來,豐富了人們的視聽體驗。該設為物聯網基礎應用實訓項目,通過該項目的設計,增加了學生對物聯網的理解,為進進入物聯網領域打開了大門。
參考文獻:
[1] 郭天祥51單片機C語言教程[M].北京:電子工業(yè)出版社,2009.
[2] 李逸家.基于51單片機的LED點陣音樂頻譜顯示器[J].工業(yè)控制計算機,2015,28(04):137-138,140.
[3] 陳蘭,江朋友,閃靜潔.基于單片機的多功能音樂頻譜儀的設計與實現[J].科技視界,2018(7):45-46.
[4] FFT在單片機上的實現畢業(yè)設計[D].洛陽:河南科技大學,2013.
[5] 陳特放,吳繼發(fā).單片機實現音頻頻譜顯示的快速算法研究[J].電子工程設計,2009,17(11).
【通聯編輯:唐一東】