李勝銘, 顏科宇, 吳振宇
(大連理工大學 創(chuàng)新創(chuàng)業(yè)學院, 遼寧 大連 116024)
隨著電子設計自動化(Electronic Design Automation,EDA)技術的發(fā)展,計算機仿真軟件不斷改進,為電子系統(tǒng)設計提供極大便利[1-4]。使用仿真軟件,可使電路修改簡便,降低硬件設計周期與成本[5-6]。Proteus是電子電路與單片機協(xié)同仿真的流行軟件。音樂點陣頻譜具有趣味性強,觀賞性好等特點。其融合模擬電路、數字電路、單片機控制、信號處理等技術,常見于大學生創(chuàng)新實踐活動中。本文采用Proteus與代碼調試平臺(Code Composer Studio,CCS)進行LED點陣的電路設計與單片機程序調試。通過使用MSP430單片機,實現點陣屏驅動、快速傅里葉(FFT)算法以及動態(tài)音樂頻譜顯示[7]。
如圖1所示,系統(tǒng)以MSP430單片機為控制核心,利用數字芯片對點陣屏進行邏輯驅動控制,通過行與列配合實現對點陣上任意LED亮滅??紤]到單片機管腳資源,采用將驅動芯片級聯的方式節(jié)約單片機端口。因為音頻信號為交流信號,不能直接進行單片機采樣,因此設計加法器電路,將音頻信號變換到單片機模擬采集量程內。單片機將音頻采樣,通過FFT算法實現音頻信號從時域到頻域變換,然后驅動點陣屏顯示。因視覺暫留效應,快速掃描點陣屏時,人眼看到多個LED同時點亮,實現音樂頻譜。
圖1 系統(tǒng)設計框圖
主控制器選用MSP430F235單片機,內部具有16位CPU、48個I/O管腳、16KB閃存、2KB內存、兩個16位定時器等資源。單片機內置模數轉換器(A/D)模塊,滿足信號采樣的需求,無需額外增加模數轉換芯片。此外充足的存儲空間也足以容納音頻采樣數據和計算變量。
2.2.1 行驅動74HC138芯片
74HC138芯片也稱3-8譯碼器,即能將3種輸入狀態(tài)翻譯成8種輸出狀態(tài),見表1。其中,E1~E3為使能條件,A0~A2為3位2進制碼輸入數據。當E1、E2
表1 74HC138真值表
為低電平,E3為高電平時,8個輸出端Y0~Y7將輸入數據譯出7個高電平與1個低電平。否則,74HC138將保持所有輸出為高電平。
為節(jié)約單片機管腳,采用分時復用方式,通過單片機的4個I/O口控制2片74HC138芯片,實現對點陣屏的16行的控制。如圖2所示。
圖2 74HC138行驅動電路圖
圖2中,2片74HC138芯片的A0~A2端口并聯,U2的E3和U3的E1連接至D端口。D為高電平時U3可輸出低電平,為低電平時U2可輸出低電平。U2、U3輸出端接點陣屏LED管負端,由于二極管單向導通特性,只有74HC138輸出低電平時對應行的LED才點亮。因此對A、B、C、D進行不同邏輯組合,兩芯片只有一個對應輸出端口為低電平,也就是每次輸出都只掃描點陣屏特定一行。程序設計上,對 A、B、C、D賦值使74HC138的輸出端輪流為低電平,實現對點陣每一行的顯示控制。
2.2.2 列驅動74HC595芯片
圖3 74HC595列驅動電路圖
如圖3所示,為控制點陣屏的32列,采用4片74HC595芯片級聯的方式,數據只需從第一個芯片的DS管腳輸入。74HC595芯片OE接地端,使芯片輸出一直有效,MR接電源正端防止數據清零,輸出端接點陣屏LED正端。各芯片SH_CP與ST_CP并聯,接到SCK端和 STR端,SCK在DS送完一位數據后,產生上升沿,使數據移位,以便后一位數據輸入。當對應32列的4個字節(jié)數據發(fā)送完畢,STR產生上升沿將數據一同輸出,實現對點陣屏每一列的顯示控制。
如圖4所示,為能完整采集音頻信號,音頻信號處理電路使用741運算放大器設計反向加法器,將音頻信號與正偏置電壓相加后進行放大。此時,音頻信號將偏置到MSP430單片機A/D采樣量程范圍內。考慮實際信號的大小與調整方便,放大信號通過電位器分壓之后再接入單片機采樣管腳[8-9]。
圖4 音頻采樣電路圖
在電參量測量分析中,任意周期信號可以分解為直流分量和一組不同幅值、頻率、相位的正弦波。系統(tǒng)對音頻信號進行周期性采樣,通過FFT,變換成一組正弦函數的組合[10-11]。正弦函數的幅值和頻率用來描述在信號所占成分的多少。
音頻信號一般是無周期性且隨時間連續(xù)變化的信號x(t),理想情況下,將x(t)做傅里葉變換可得頻域表達式:
(1)
而MSP430單片機只能采集到連續(xù)信號x(t)的一系列離散信號值x(nt)。所以需借助離散信號x(nt)分析信號的頻域特點[12-13]。對于有限長離散信號有:
(2)
由WN的周期性以及對稱性,可知x(n)能分解成一個偶數序列x1(n)和一個奇數序列x2(n),且x1(n)和x2(n)的長度都是N/2。因此可得:
(3)
故x(k)可表示為:
k=0,1,…,N-1
(4)
由于:
(5)
則有:
(6)
又X1(k)和X2(k)均以N/2為周期,且
(7)
所以X(k)又可表示為:
(8)
(9)
式(8)和(9)稱為蝶形運算;WN為旋轉因子。經過時域抽取存入倒序數組中,如果兩個輸入相距b個點,用數組中的位置進行計算,蝶形運算可表示為
(10)
(11)
根據歐拉公式:
(14)
可再進一步轉化:
(15)
為了表達簡便,令:
(16)
得:
(17)
(18)
考慮到單片機不適合進行浮點運算,為保證計算速率,編程時提前將需用到的正、余弦函數值存入數組。采用查表法免去正、余弦計算,同時進行適當取舍取為整數,避免進行浮點運算。
此外,由蝶形運算的形式可知,若無倒序數組的整理,結果將會亂序。因此使用雷德算法解決此問題。雷德算法可給出自然順序排列的二進制數,其下面一個數總比上面的數大1,而倒序二進制數的下面一個數是上面一個數在最高位加1并由高位向低位進位而得到[14]。其規(guī)律實則為鏡像顛倒,即將序號的十進制轉化為二進制數,然后把二進制最低位當作最高位,最高位當作最低位再轉化為十進制。因此系統(tǒng)程序中,按時間抽取法采64個點,按此規(guī)律列編寫一個包含64個元素的采樣存儲序列表的數組,從而保證數據為所需順序。
MSP430單片機編程使用CCS集成開發(fā)平臺。系統(tǒng)程序主要分為采樣、FFT算法、點陣屏顯示3大部分。單片機A/D采樣設置為單通道連續(xù)采樣模式,每次采樣64個點之后結束,進入FFT運算。根據前文對FFT算法分析,單片機在計算時采用基數2時間抽取算法[15-16]。其工作流程如圖5所示。
點陣屏掃描顯示時,FFT計算結果存入LED[32]數組中。數組各元素表示不同頻率,元素值表示各頻率的相對高低。行掃描不斷循環(huán),每掃一行就判斷LED[i]元素與所掃行的大小,如果元素值大則點亮點陣中LED,反之不亮。完成一次掃描后,元素值減小,形成音頻柱降落效果。
本設計采用Proteus軟件和CCS軟件對點陣屏系統(tǒng)電路以及FFT算法進行設計、調試、驗證、仿真。首先在Proteus軟件中設計系統(tǒng)各功能電路,然后通過CCS軟件編寫測試代碼,修改生成單片機.hex執(zhí)行文件。Proteus軟件裝載執(zhí)行文件,運行觀察效果。為滿足視覺暫留效應,在Proteus軟件中提前設置好仿真速度,將幀數減少并增加時間步長。信號采用音頻激勵源,格式為.WAV,如圖6所示。
圖5 基數2時間抽取算法流程圖
激勵源設置好振幅和通道模式。系統(tǒng)運行,開始仿真。如圖7所示,點陣屏上音頻柱隨音樂不斷起伏。
圖6 音頻導入
圖7 系統(tǒng)仿真效果圖
在Proteus與CCS的聯合仿真下,直接驗證了電路硬件與軟件算法方案的正確性。在仿真基礎上,制作的實物如圖8所示。
圖8 基于MSP430的音樂點陣頻譜實物
本文設計了基于Proteus仿真軟件與CCS集成開發(fā)平臺下的音樂點陣頻譜設計。通過實踐驗證,可實現點陣屏的電路硬件設計、MSP430單片機的點陣屏驅動、音樂信號采集、音樂頻譜顯示等功能。此外系統(tǒng)還具有較大的擴展性:在此設計思路基礎上,可進行更多點陣顯示屏的設計與應用,同時也為Proteus與CCS的聯合仿真提供參考。