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