??? 摘 要:為了快速、準(zhǔn)確地進(jìn)行數(shù)據(jù)采集,并把采集到的數(shù)據(jù)顯示出來,設(shè)計(jì)了一種以TI公司的TMS320F2812內(nèi)置ADC為數(shù)據(jù)采集核心、以MAXIM公司的MAX7219作為L(zhǎng)ED顯示驅(qū)動(dòng)的方案。從硬件和軟件兩個(gè)方面的設(shè)計(jì)進(jìn)行闡述,重點(diǎn)介紹了軟件方面的設(shè)計(jì)。調(diào)試結(jié)果證明,該設(shè)計(jì)能夠達(dá)到數(shù)據(jù)采集的要求,并能穩(wěn)定地顯示采集到的數(shù)據(jù),可以廣泛應(yīng)用于儀器儀表設(shè)計(jì)中。
??? 關(guān)鍵詞:TMS320F2812;MAX7219;數(shù)據(jù)采集;LED顯示
?
??? 數(shù)據(jù)采集及處理系統(tǒng)在眾多領(lǐng)域均有廣泛的應(yīng)用,其主要功能是把外界模擬信號(hào)的電壓參量經(jīng)過A/D轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字量,并把轉(zhuǎn)換結(jié)果存儲(chǔ)以便分析處理。采集到的數(shù)據(jù)可以選用LED數(shù)碼管、液晶等器件來顯示。與同類顯示器件相比,LED數(shù)碼管具有電路連接簡(jiǎn)單、成本低、開發(fā)周期短、性能穩(wěn)定等優(yōu)點(diǎn)。
??? 本設(shè)計(jì)采用TI公司的DSP芯片TMS320F2812作為信號(hào)采集和處理的核心,通過片上自帶的12位ADC進(jìn)行數(shù)據(jù)采集;采用MAXIM公司生產(chǎn)的串行輸入/輸出共陰極顯示驅(qū)動(dòng)器芯片MAX7219驅(qū)動(dòng)8位LED數(shù)碼管,以顯示采集到的數(shù)據(jù)。
1 硬件設(shè)計(jì)
1.1 TMS320F2812內(nèi)置ADC介紹
??? ADC模塊的框圖如圖1所示,其前端為2個(gè)8選1多路切換器Analog MUX和2路同時(shí)采樣/保持器S/H,構(gòu)成16個(gè)模擬輸入通道ADCIN00~ADCIN15,通道的自由切換由硬件自動(dòng)控制。所選通道的值經(jīng)12位ADC模塊轉(zhuǎn)換后存儲(chǔ)在各自的ADCRESULT寄存器中。
?
??? ADC模塊的主要特點(diǎn)是:模擬輸入電壓范圍為0.0?V~3.0?V;具有快速的轉(zhuǎn)換時(shí)間,ADC在25 MHz時(shí)鐘下轉(zhuǎn)換時(shí)間為80 ns,最高采樣寬帶為12.5 MSPS;自動(dòng)排序功能提供多達(dá)16個(gè)自動(dòng)轉(zhuǎn)換,每個(gè)轉(zhuǎn)換可以編程選擇16個(gè)輸入通道中的一個(gè),排序器可以作為2個(gè)獨(dú)立8狀態(tài)排序器或者一個(gè)16狀態(tài)排序器;16個(gè)結(jié)果寄存器用于保存轉(zhuǎn)換值,轉(zhuǎn)換后的數(shù)字量表示為:
???
??? 其中,ADCLO為偏移量,一般取為0。
??? 有多個(gè)觸發(fā)源用于啟動(dòng)轉(zhuǎn)換序列:軟件立即啟動(dòng)(用SOC SEQn位);事件管理器EVA;事件管理器EVB;外部引腳(ADCSOC引腳)。中斷控制靈活,允許每個(gè)序列或每隔一個(gè)序列轉(zhuǎn)換結(jié)束產(chǎn)生中斷請(qǐng)求[1-3]。
1.2 MAX7219芯片介紹
??? MAX7219是一個(gè)專用的串行輸入/輸出、共陰極LED顯示驅(qū)動(dòng)器。它采用3線串行接口傳送數(shù)據(jù),接口簡(jiǎn)便;每片可驅(qū)動(dòng)8個(gè)LED數(shù)碼管,多片串接時(shí)可控制多個(gè)LED;內(nèi)部共有l(wèi)4個(gè)寄存器,其中6個(gè)為控制寄存器,8個(gè)為數(shù)據(jù)寄存器,數(shù)據(jù)寄存器存放預(yù)顯示的數(shù)值,控制寄存器決定MAX7219的工作模式;只需一個(gè)外部電阻即可調(diào)節(jié)LED的段電流,且允許程控方式方便地調(diào)節(jié)LED顯示的亮度;MAX7219可選擇LED顯示器的掃描個(gè)數(shù);有不譯碼和BCD碼譯碼2種顯示模式[4]。
??? MAX7219的數(shù)據(jù)接收裝載時(shí)序圖如圖2所示。由圖可知,當(dāng)LOAD信號(hào)為低時(shí),在每個(gè)CLK的上升沿,DIN端的數(shù)據(jù)移入MAX7219內(nèi)部移位寄存器中。LOAD必須在16個(gè)CLK同時(shí)或之后由低變高(上升沿),被移入的數(shù)據(jù)才會(huì)被鎖存進(jìn)入內(nèi)部控制寄存器或數(shù)據(jù)寄存器中。接收的第一個(gè)數(shù)據(jù)放置在內(nèi)部寄存器的D15位,最后一個(gè)數(shù)據(jù)放置在D0位。在16.5個(gè)CLK之后,在DOUT端可以觀測(cè)到DIN端輸入的數(shù)據(jù)。在CLK的下降沿有數(shù)據(jù)輸出[5,6]。
?
1.3 硬件電路設(shè)計(jì)
??? MAX7219是串行輸入方式,故其連接方式比較簡(jiǎn)單。硬件電路設(shè)計(jì)如圖3所示。TMS320F2812的SPI模塊中的SPICLK、SPISIMO分別用作MAX7219的時(shí)鐘信號(hào)CLK、串行數(shù)據(jù)輸入信號(hào)DIN;TMS320F2812的GPIOD0用作MAX7219的數(shù)據(jù)鎖存信號(hào)LOAD。MAX7219的V+引腳接+?5V電源信號(hào),2個(gè)GND引腳接模擬地。DIG 0~DIG 7用于驅(qū)動(dòng)8個(gè)數(shù)碼管的顯示,SEG A~G、SEG DP用于驅(qū)動(dòng)數(shù)碼管的7段顯示和小數(shù)點(diǎn)的顯示。
?
2 軟件設(shè)計(jì)
??? 程序主要分為初始化、數(shù)據(jù)采集和顯示數(shù)據(jù)3個(gè)部分。程序流程框圖如圖4所示。初始化系統(tǒng)主要完成高速時(shí)鐘和低速時(shí)鐘的設(shè)置,高速時(shí)鐘設(shè)置成2分頻,低速時(shí)鐘設(shè)置成4分頻。因?yàn)樵O(shè)計(jì)使用SPI模塊控制MAX7219,所以初始化SPI模塊要把工作方式設(shè)置為主方式,這樣就可以通過SPISIMO端向MAX7219移入數(shù)據(jù),并且為 MAX7219提供串行時(shí)鐘。與之相應(yīng),初始化GPIO就要把SPICLK、SPISIMO配置成外設(shè)信號(hào),把GPIOD0配置成通用I/O信號(hào)。初始化ADC和MAX7219見下文的部分程序和注釋。
?
??? 數(shù)據(jù)采集部分采用事件管理器EVA啟動(dòng)ADC轉(zhuǎn)換。配置事件管理器EVA,設(shè)置定時(shí)器1下溢中斷標(biāo)志啟動(dòng)ADC,周期設(shè)置為64。由于高速時(shí)鐘設(shè)置為2分頻,即75 MHz,經(jīng)計(jì)算得ADC的采樣頻率為75/64 MHz=1.172?MHz。使能事件管理器EVA中的EVASOC,啟動(dòng)ADC轉(zhuǎn)換。
??? 當(dāng)ADC轉(zhuǎn)換完畢后,中斷標(biāo)志位置位,進(jìn)入ADC中斷服務(wù)子程序。在ADC中斷服務(wù)子程序中,將轉(zhuǎn)換結(jié)果讀入數(shù)組Voltage中,再把數(shù)組中的數(shù)據(jù)轉(zhuǎn)換為模擬信號(hào)的電壓值。響應(yīng)中斷后,中斷返回到主函數(shù),調(diào)用WriteWord函數(shù),把要寫入數(shù)據(jù)的數(shù)據(jù)寄存器的地址和模擬信號(hào)的電壓值一并移入MAX7219中,從而驅(qū)動(dòng)LED數(shù)碼管把模擬信號(hào)的電壓值顯示出來。
??? 初始化ADC模塊:
void InitAdc(void)
{
??? AdcRegs.ADCTRL1.bit.RESET = 1;//復(fù)位整個(gè)ADC模塊
??? asm(' RPT #10 || NOP');// 必須等待約12個(gè)時(shí)鐘周期后,ADC模塊的復(fù)位才有效。
??? AdcRegs.ADCTRL3.all = 0x00C8; // 首先對(duì)帶隙參考源電路進(jìn)行上電。
??? Delayus(5000); ????? //ADCPWDN置位前等待5ms
??? AdcRegs.ADCTRL3.bit.ADCPWDN = 1;? //對(duì)ADC模塊的其余部分進(jìn)行上電。
??? Delayus(20);???? ?//ADC上電完成后的延時(shí)。
??? /***配置ADC寄存器***/
??? AdcRegs.ADCMAXCONV.all?=?0x0001;//設(shè)置1次轉(zhuǎn)換。
??? AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;? // 設(shè)置ADCINA0的轉(zhuǎn)換。
??? AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;? // 設(shè)置ADCINA1的轉(zhuǎn)換。
??? AdcRegs.ADCTRL1.all=0x2710;
??? AdcRegs.ADCTRL2.all=0x0900;
}
初始化MAX7219:
/* MAX7219初始化 */
void InitDisplay (void)
{
??? WriteWord (0x0b,0x07);?????? // 設(shè)置掃描界限
??? WriteWord (0x09,0xff);????? // 設(shè)置譯碼模式
??? WriteWord (0x0a,0x0a);????? // 設(shè)置亮度級(jí)別
??? WriteWord (0x0c,0x01);????? // 設(shè)置為正常工作模式
}
/* 向MAX7219寫入字(16位)*/
void WriteWord (uchar addr,uchar num)
{
??? uchar entire;
??? entire=(addr<<8)+num;
??? GpioDataRegs.GPDDAT.bit.GPIOD0=0; //將LOAD信號(hào)置為低電平,準(zhǔn)備移入數(shù)據(jù)。
??? delay(200);
??? SpiaRegs.SPIDAT=entire;
??? delay(200);
??? GpioDataRegs.GPDDAT.bit.GPIOD0=1; // /將LOAD信號(hào)置為高電平,鎖存進(jìn)相應(yīng)寄存器
}
3 調(diào)試結(jié)果
??? 設(shè)計(jì)中采集2路0~3?V的正弦波信號(hào),正弦波信號(hào)通過波形發(fā)生器產(chǎn)生,其頻率可以在10?Hz~100?Hz、100?Hz~1 kHz、1 kHz~10 kHz、10 kHz~100 kHz之間任意選取。
3.1 數(shù)據(jù)采集部分
??? 調(diào)整正弦波信號(hào)的頻率,使其保持在一個(gè)固定的值。經(jīng)過ADC轉(zhuǎn)換后,采集到的數(shù)據(jù)一路放在Voltage1中,另一路放在Voltage2中。從Voltage1中截取45個(gè)點(diǎn),CCS中觀察到的波形如圖5所示。
?
??? 示波器觀察到的要采集的正弦波信號(hào)的頻率為52.1 kHz,而采樣頻率經(jīng)計(jì)算為1.172 MHz,所以采集到正弦波信號(hào)在一個(gè)周期內(nèi)的點(diǎn)數(shù)為1.172 MHz/0.0521 MHz=22.495≈22.5個(gè)。由圖可知,波形圖中的45個(gè)點(diǎn)構(gòu)成兩個(gè)周期的正弦波波形,與計(jì)算結(jié)果完全吻合。
3.2 數(shù)碼顯示部分
??? 采集到的2路數(shù)字信號(hào)轉(zhuǎn)換為模擬量后,第一路信號(hào)由前4個(gè)LED數(shù)碼管顯示,第二路信號(hào)由后4個(gè)LED數(shù)碼管顯示,每一路可以讀到小數(shù)點(diǎn)后面第3位。8位LED數(shù)碼管的一個(gè)顯示狀態(tài)如圖6所示。
?
??? 通過觀察,LED數(shù)碼管的顯示亮度能夠調(diào)整,顯示數(shù)值的刷新速度也能調(diào)節(jié),以適應(yīng)人眼的觀察范圍。顯示亮度可以在MAX7219的初始化中控制,而刷新速度則通過延時(shí)來控制。
??? 本設(shè)計(jì)采用TMS320F2812的內(nèi)置ADC作為數(shù)據(jù)采集電路的核心部件,并且用TMS320F2812的SPI模塊和GPIOD0端口控制MAX7219驅(qū)動(dòng)LED顯示。電路連接簡(jiǎn)單,易于實(shí)現(xiàn)。調(diào)試結(jié)果證明,該設(shè)計(jì)能夠快速準(zhǔn)確地進(jìn)行數(shù)據(jù)采集,并能穩(wěn)定顯示采集到的數(shù)據(jù),可以廣泛應(yīng)用在儀器儀表的設(shè)計(jì)中。
參考文獻(xiàn)
[1]?徐科軍,張瀚,陳智淵. TMS320X281x DSP原理與應(yīng)用[M].第1版.北京:北京航空航天大學(xué)出版社,2006.
[2]?曹夢(mèng)婷,潘宏俠. 基于TMS320F2812的ADC數(shù)據(jù)采集的軟件實(shí)現(xiàn)[J].機(jī)械工程與自動(dòng)化, 2008,148(3):82-83.
[3]?TI Incorporation. TMS320F2810,TMS320F2811, TMS320F2812,TMS320C2810,TMS320C2811, TMS320C2812 Digital signal processors data manual. 2007.
[4]?邵笑冰,徐龍祥. MAX7219在DSP控制系統(tǒng)中的應(yīng)用[J]. 中國(guó)儀器儀表,2003(8):36-37.
[5]?蘇奎峰,呂強(qiáng),常天慶,等. TMS320X281x DSP原理及C程序開發(fā)[M].第1版.北京:北京航空航天大學(xué)出版社,2008.
[6]?MAXIM. Serially interfaced,8-digit LED display drivers MAX7219/7221. 2003.