李勝銘, 顏科宇, 吳振宇
(大連理工大學(xué) 創(chuàng)新創(chuàng)業(yè)學(xué)院, 遼寧 大連 116024)
隨著電子設(shè)計(jì)自動(dòng)化(Electronic Design Automation,EDA)技術(shù)的發(fā)展,計(jì)算機(jī)仿真軟件不斷改進(jìn),為電子系統(tǒng)設(shè)計(jì)提供極大便利[1-4]。使用仿真軟件,可使電路修改簡(jiǎn)便,降低硬件設(shè)計(jì)周期與成本[5-6]。Proteus是電子電路與單片機(jī)協(xié)同仿真的流行軟件。音樂(lè)點(diǎn)陣頻譜具有趣味性強(qiáng),觀賞性好等特點(diǎn)。其融合模擬電路、數(shù)字電路、單片機(jī)控制、信號(hào)處理等技術(shù),常見于大學(xué)生創(chuàng)新實(shí)踐活動(dòng)中。本文采用Proteus與代碼調(diào)試平臺(tái)(Code Composer Studio,CCS)進(jìn)行LED點(diǎn)陣的電路設(shè)計(jì)與單片機(jī)程序調(diào)試。通過(guò)使用MSP430單片機(jī),實(shí)現(xiàn)點(diǎn)陣屏驅(qū)動(dòng)、快速傅里葉(FFT)算法以及動(dòng)態(tài)音樂(lè)頻譜顯示[7]。
如圖1所示,系統(tǒng)以MSP430單片機(jī)為控制核心,利用數(shù)字芯片對(duì)點(diǎn)陣屏進(jìn)行邏輯驅(qū)動(dòng)控制,通過(guò)行與列配合實(shí)現(xiàn)對(duì)點(diǎn)陣上任意LED亮滅。考慮到單片機(jī)管腳資源,采用將驅(qū)動(dòng)芯片級(jí)聯(lián)的方式節(jié)約單片機(jī)端口。因?yàn)橐纛l信號(hào)為交流信號(hào),不能直接進(jìn)行單片機(jī)采樣,因此設(shè)計(jì)加法器電路,將音頻信號(hào)變換到單片機(jī)模擬采集量程內(nèi)。單片機(jī)將音頻采樣,通過(guò)FFT算法實(shí)現(xiàn)音頻信號(hào)從時(shí)域到頻域變換,然后驅(qū)動(dòng)點(diǎn)陣屏顯示。因視覺暫留效應(yīng),快速掃描點(diǎn)陣屏?xí)r,人眼看到多個(gè)LED同時(shí)點(diǎn)亮,實(shí)現(xiàn)音樂(lè)頻譜。

圖1 系統(tǒng)設(shè)計(jì)框圖
主控制器選用MSP430F235單片機(jī),內(nèi)部具有16位CPU、48個(gè)I/O管腳、16KB閃存、2KB內(nèi)存、兩個(gè)16位定時(shí)器等資源。單片機(jī)內(nèi)置模數(shù)轉(zhuǎn)換器(A/D)模塊,滿足信號(hào)采樣的需求,無(wú)需額外增加模數(shù)轉(zhuǎn)換芯片。此外充足的存儲(chǔ)空間也足以容納音頻采樣數(shù)據(jù)和計(jì)算變量。
2.2.1 行驅(qū)動(dòng)74HC138芯片
74HC138芯片也稱3-8譯碼器,即能將3種輸入狀態(tài)翻譯成8種輸出狀態(tài),見表1。其中,E1~E3為使能條件,A0~A2為3位2進(jìn)制碼輸入數(shù)據(jù)。當(dāng)E1、E2

表1 74HC138真值表
為低電平,E3為高電平時(shí),8個(gè)輸出端Y0~Y7將輸入數(shù)據(jù)譯出7個(gè)高電平與1個(gè)低電平。否則,74HC138將保持所有輸出為高電平。
為節(jié)約單片機(jī)管腳,采用分時(shí)復(fù)用方式,通過(guò)單片機(jī)的4個(gè)I/O口控制2片74HC138芯片,實(shí)現(xiàn)對(duì)點(diǎn)陣屏的16行的控制。如圖2所示。

圖2 74HC138行驅(qū)動(dòng)電路圖
圖2中,2片74HC138芯片的A0~A2端口并聯(lián),U2的E3和U3的E1連接至D端口。D為高電平時(shí)U3可輸出低電平,為低電平時(shí)U2可輸出低電平。U2、U3輸出端接點(diǎn)陣屏LED管負(fù)端,由于二極管單向?qū)ㄌ匦裕挥?4HC138輸出低電平時(shí)對(duì)應(yīng)行的LED才點(diǎn)亮。因此對(duì)A、B、C、D進(jìn)行不同邏輯組合,兩芯片只有一個(gè)對(duì)應(yīng)輸出端口為低電平,也就是每次輸出都只掃描點(diǎn)陣屏特定一行。程序設(shè)計(jì)上,對(duì) A、B、C、D賦值使74HC138的輸出端輪流為低電平,實(shí)現(xiàn)對(duì)點(diǎn)陣每一行的顯示控制。
2.2.2 列驅(qū)動(dòng)74HC595芯片


圖3 74HC595列驅(qū)動(dòng)電路圖
如圖3所示,為控制點(diǎn)陣屏的32列,采用4片74HC595芯片級(jí)聯(lián)的方式,數(shù)據(jù)只需從第一個(gè)芯片的DS管腳輸入。74HC595芯片OE接地端,使芯片輸出一直有效,MR接電源正端防止數(shù)據(jù)清零,輸出端接點(diǎn)陣屏LED正端。各芯片SH_CP與ST_CP并聯(lián),接到SCK端和 STR端,SCK在DS送完一位數(shù)據(jù)后,產(chǎn)生上升沿,使數(shù)據(jù)移位,以便后一位數(shù)據(jù)輸入。當(dāng)對(duì)應(yīng)32列的4個(gè)字節(jié)數(shù)據(jù)發(fā)送完畢,STR產(chǎn)生上升沿將數(shù)據(jù)一同輸出,實(shí)現(xiàn)對(duì)點(diǎn)陣屏每一列的顯示控制。
如圖4所示,為能完整采集音頻信號(hào),音頻信號(hào)處理電路使用741運(yùn)算放大器設(shè)計(jì)反向加法器,將音頻信號(hào)與正偏置電壓相加后進(jìn)行放大。此時(shí),音頻信號(hào)將偏置到MSP430單片機(jī)A/D采樣量程范圍內(nèi)。考慮實(shí)際信號(hào)的大小與調(diào)整方便,放大信號(hào)通過(guò)電位器分壓之后再接入單片機(jī)采樣管腳[8-9]。

圖4 音頻采樣電路圖
在電參量測(cè)量分析中,任意周期信號(hào)可以分解為直流分量和一組不同幅值、頻率、相位的正弦波。系統(tǒng)對(duì)音頻信號(hào)進(jìn)行周期性采樣,通過(guò)FFT,變換成一組正弦函數(shù)的組合[10-11]。正弦函數(shù)的幅值和頻率用來(lái)描述在信號(hào)所占成分的多少。
音頻信號(hào)一般是無(wú)周期性且隨時(shí)間連續(xù)變化的信號(hào)x(t),理想情況下,將x(t)做傅里葉變換可得頻域表達(dá)式:

(1)
而MSP430單片機(jī)只能采集到連續(xù)信號(hào)x(t)的一系列離散信號(hào)值x(nt)。所以需借助離散信號(hào)x(nt)分析信號(hào)的頻域特點(diǎn)[12-13]。對(duì)于有限長(zhǎng)離散信號(hào)有:
(2)

由WN的周期性以及對(duì)稱性,可知x(n)能分解成一個(gè)偶數(shù)序列x1(n)和一個(gè)奇數(shù)序列x2(n),且x1(n)和x2(n)的長(zhǎng)度都是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)稱為蝶形運(yùn)算;WN為旋轉(zhuǎn)因子。經(jīng)過(guò)時(shí)域抽取存入倒序數(shù)組中,如果兩個(gè)輸入相距b個(gè)點(diǎn),用數(shù)組中的位置進(jìn)行計(jì)算,蝶形運(yùn)算可表示為
(10)
(11)

根據(jù)歐拉公式:
(14)
可再進(jìn)一步轉(zhuǎn)化:
(15)
為了表達(dá)簡(jiǎn)便,令:
(16)
得:
(17)
(18)
考慮到單片機(jī)不適合進(jìn)行浮點(diǎn)運(yùn)算,為保證計(jì)算速率,編程時(shí)提前將需用到的正、余弦函數(shù)值存入數(shù)組。采用查表法免去正、余弦計(jì)算,同時(shí)進(jìn)行適當(dāng)取舍取為整數(shù),避免進(jìn)行浮點(diǎn)運(yùn)算。
此外,由蝶形運(yùn)算的形式可知,若無(wú)倒序數(shù)組的整理,結(jié)果將會(huì)亂序。因此使用雷德算法解決此問(wèn)題。雷德算法可給出自然順序排列的二進(jìn)制數(shù),其下面一個(gè)數(shù)總比上面的數(shù)大1,而倒序二進(jìn)制數(shù)的下面一個(gè)數(shù)是上面一個(gè)數(shù)在最高位加1并由高位向低位進(jìn)位而得到[14]。其規(guī)律實(shí)則為鏡像顛倒,即將序號(hào)的十進(jìn)制轉(zhuǎn)化為二進(jìn)制數(shù),然后把二進(jìn)制最低位當(dāng)作最高位,最高位當(dāng)作最低位再轉(zhuǎn)化為十進(jìn)制。因此系統(tǒng)程序中,按時(shí)間抽取法采64個(gè)點(diǎn),按此規(guī)律列編寫一個(gè)包含64個(gè)元素的采樣存儲(chǔ)序列表的數(shù)組,從而保證數(shù)據(jù)為所需順序。
MSP430單片機(jī)編程使用CCS集成開發(fā)平臺(tái)。系統(tǒng)程序主要分為采樣、FFT算法、點(diǎn)陣屏顯示3大部分。單片機(jī)A/D采樣設(shè)置為單通道連續(xù)采樣模式,每次采樣64個(gè)點(diǎn)之后結(jié)束,進(jìn)入FFT運(yùn)算。根據(jù)前文對(duì)FFT算法分析,單片機(jī)在計(jì)算時(shí)采用基數(shù)2時(shí)間抽取算法[15-16]。其工作流程如圖5所示。
點(diǎn)陣屏掃描顯示時(shí),F(xiàn)FT計(jì)算結(jié)果存入LED[32]數(shù)組中。數(shù)組各元素表示不同頻率,元素值表示各頻率的相對(duì)高低。行掃描不斷循環(huán),每掃一行就判斷LED[i]元素與所掃行的大小,如果元素值大則點(diǎn)亮點(diǎn)陣中LED,反之不亮。完成一次掃描后,元素值減小,形成音頻柱降落效果。
本設(shè)計(jì)采用Proteus軟件和CCS軟件對(duì)點(diǎn)陣屏系統(tǒng)電路以及FFT算法進(jìn)行設(shè)計(jì)、調(diào)試、驗(yàn)證、仿真。首先在Proteus軟件中設(shè)計(jì)系統(tǒng)各功能電路,然后通過(guò)CCS軟件編寫測(cè)試代碼,修改生成單片機(jī).hex執(zhí)行文件。Proteus軟件裝載執(zhí)行文件,運(yùn)行觀察效果。為滿足視覺暫留效應(yīng),在Proteus軟件中提前設(shè)置好仿真速度,將幀數(shù)減少并增加時(shí)間步長(zhǎng)。信號(hào)采用音頻激勵(lì)源,格式為.WAV,如圖6所示。

圖5 基數(shù)2時(shí)間抽取算法流程圖
激勵(lì)源設(shè)置好振幅和通道模式。系統(tǒng)運(yùn)行,開始仿真。如圖7所示,點(diǎn)陣屏上音頻柱隨音樂(lè)不斷起伏。

圖6 音頻導(dǎo)入

圖7 系統(tǒng)仿真效果圖
在Proteus與CCS的聯(lián)合仿真下,直接驗(yàn)證了電路硬件與軟件算法方案的正確性。在仿真基礎(chǔ)上,制作的實(shí)物如圖8所示。

圖8 基于MSP430的音樂(lè)點(diǎn)陣頻譜實(shí)物
本文設(shè)計(jì)了基于Proteus仿真軟件與CCS集成開發(fā)平臺(tái)下的音樂(lè)點(diǎn)陣頻譜設(shè)計(jì)。通過(guò)實(shí)踐驗(yàn)證,可實(shí)現(xiàn)點(diǎn)陣屏的電路硬件設(shè)計(jì)、MSP430單片機(jī)的點(diǎn)陣屏驅(qū)動(dòng)、音樂(lè)信號(hào)采集、音樂(lè)頻譜顯示等功能。此外系統(tǒng)還具有較大的擴(kuò)展性:在此設(shè)計(jì)思路基礎(chǔ)上,可進(jìn)行更多點(diǎn)陣顯示屏的設(shè)計(jì)與應(yīng)用,同時(shí)也為Proteus與CCS的聯(lián)合仿真提供參考。