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