駱 揚(yáng) 朱艷菊
(桂林電子科技大學(xué),廣西 桂林 541004)
基于AVR的雙通道數(shù)字電壓測(cè)量計(jì)
駱 揚(yáng) 朱艷菊
(桂林電子科技大學(xué),廣西 桂林 541004)
為了檢測(cè)脈沖驅(qū)動(dòng)的數(shù)字電路,采用AVR單片機(jī)與峰值電壓采樣保持芯片LF398設(shè)計(jì)的雙通道數(shù)字電壓計(jì),針對(duì)普通萬(wàn)用表不能有效測(cè)量的脈沖方波電壓進(jìn)行測(cè)量。通過(guò)使用高度集成的微處理器和專用芯片以避免外圍電路設(shè)計(jì)的復(fù)雜度。有效的降低了維修檢測(cè)常見數(shù)字電路的儀器成本。一個(gè)通道進(jìn)行直流電壓的測(cè)量,而另一路專門針對(duì)脈沖方波驅(qū)動(dòng)的峰值電壓的測(cè)量。因此使用AVR單片機(jī)制作的雙通道數(shù)字電壓測(cè)量計(jì),完全滿足對(duì)數(shù)字電路的檢測(cè)功能且精度高。
脈沖測(cè)量;峰值電壓;A/D模數(shù)轉(zhuǎn)換;采樣保持
隨著數(shù)字電路的發(fā)展越來(lái)越多的設(shè)備上使用數(shù)字邏輯電路,而數(shù)字電路多以脈沖方波的電流進(jìn)行驅(qū)動(dòng)和控制。對(duì)于電壓或電流的測(cè)量使用最多的儀器是萬(wàn)用表,但是常見的萬(wàn)用表往往只能測(cè)量直流或交流的電壓,萬(wàn)用表的交流檔測(cè)量出來(lái)的數(shù)值是其有效數(shù)值,普通萬(wàn)用表的交流檔僅是針對(duì)正弦波形的交流電設(shè)計(jì)的。對(duì)于數(shù)字電路尤其是以脈沖方波驅(qū)動(dòng)和控制電路或器具而言,使用普通的萬(wàn)用表進(jìn)行測(cè)量顯然不準(zhǔn)確,這時(shí)就需要使用價(jià)格昂貴的示波器或是真有效值萬(wàn)用表。無(wú)疑給沒(méi)有試驗(yàn)條件的情況下帶來(lái)不小的麻煩。
使用常見的微控制器和一些專用的集成電路通過(guò)簡(jiǎn)單的編程就可以實(shí)現(xiàn)對(duì)數(shù)字電路中常見的峰值電壓或電流檢測(cè),不但簡(jiǎn)單易用而且成本極低。為了降低開發(fā)的難度和電路設(shè)計(jì)的復(fù)雜度,本系統(tǒng)使用 Atmega32這款基于增強(qiáng)型的 AVR RISC結(jié)構(gòu)的低功耗8 位CMOS微控制器。其具有32K字節(jié)的系統(tǒng)內(nèi)可編程 Flash(具有同時(shí)讀寫的能力),1024 字節(jié)EEPROM,2K 字節(jié) SRAM,32 個(gè)通用 I/O 口線,32 個(gè)通用工作寄存器,用于邊界掃描的JTAG 接口,支持片內(nèi)調(diào)試與編程,三個(gè)具有比較模式的靈活的定時(shí)器/ 計(jì)數(shù)器(T/C),片內(nèi)/外中斷,可編程串行USART,有起始條件檢測(cè)器的通用串行接口,8路10位具有可選差分輸入級(jí)可編程增益的ADC,具有片內(nèi)振蕩器的可編程看門狗定時(shí)器,一個(gè)SPI 串行端口,以及六個(gè)可以通過(guò)軟件進(jìn)行選擇的省電模式??梢詽M足針對(duì)數(shù)字電路檢測(cè)的絕大多數(shù)要求。
因此使用ATMega32單片機(jī)即可以滿足設(shè)計(jì)的需要又可以降低開發(fā)成本。該單片機(jī)具有 8路模數(shù)轉(zhuǎn)換通道,選擇其中一路作為測(cè)量直流電的通道,將負(fù)載和采樣電阻串聯(lián)后接入電路,根據(jù)負(fù)載阻值的不同來(lái)設(shè)定不同的檔位,達(dá)到不同范圍的測(cè)量。而另一路則需要先利用ATMega32單片機(jī)的ICP捕獲功能,捕獲脈沖方波的上升沿并且根據(jù)這個(gè)上升沿信號(hào)再產(chǎn)生一個(gè)跟隨信號(hào)作為峰值采用保持芯片LF398的控制信號(hào),當(dāng)LF398的控制信號(hào)為高電平時(shí)LF398為采樣狀態(tài),而控制信號(hào)為低電平時(shí) LF398為保持狀態(tài),因此單片機(jī)產(chǎn)生的這個(gè)跟隨信號(hào)正好與要測(cè)量的脈沖方波信號(hào)為同頻同相的信號(hào)。當(dāng)要測(cè)量的脈沖方波信號(hào)為低電平時(shí),產(chǎn)生的跟隨信號(hào)也是低電平信號(hào)將之前 LF398采樣到得峰值電平進(jìn)行保持。這時(shí)再利用單片機(jī)的 A/D模數(shù)轉(zhuǎn)換將該峰值進(jìn)行模數(shù)轉(zhuǎn)換進(jìn)行測(cè)量得到了脈沖方波的峰值電壓值。兩個(gè)通道測(cè)量的數(shù)值均顯示在 LCD顯示屏上結(jié)果一目了然。系統(tǒng)的總體結(jié)構(gòu)圖如下圖1。
由于AVR單片機(jī)內(nèi)部集成A/D模數(shù)轉(zhuǎn)換功能,因此可以大大的降低硬件電路的設(shè)計(jì)復(fù)雜度,其外圍電路及器件可以盡量的減少。但是在 PCB布線的時(shí)候應(yīng)盡量緊湊以避免電磁的干擾。
圖1 系統(tǒng)的總體結(jié)構(gòu)圖
因系統(tǒng)中要使用到峰值采樣保持芯片LF398,其供電需要±15伏,因此購(gòu)買一個(gè)18伏的電源作為適配器,需要接7815和7915獲得LF398所需的±15伏。在7815后再接7805可獲得+5伏的電壓給單片機(jī)和液晶屏供電。再通過(guò)電阻分壓的方式與 TL431做一個(gè)外部的參考電壓。該參考電壓作為ATMega32單片機(jī)的模數(shù)轉(zhuǎn)換的參考電壓接在單片機(jī)的 AREF引腳上。
采用National Semiconductor所生產(chǎn)的LF398芯片作為峰值電壓的采樣保持芯片。并根據(jù)圖 2保持時(shí)間與保持電容的曲線選取所需的保持電容,為能達(dá)到理想的保持時(shí)間應(yīng)使用高品質(zhì)的聚苯乙烯電容。
圖2 保持時(shí)間與保持電容的選取曲線
LF398的連接示意圖如圖3所示。引腳3用于連接被測(cè)量的脈沖方波的觸點(diǎn),引腳8則接單片機(jī)產(chǎn)生的用于控制LF398何時(shí)采樣和保持的跟隨信號(hào)控制引腳。引腳 5輸出的則是被保持住的峰值電壓值,將這個(gè)模擬量再接回單片機(jī)的另一個(gè)模數(shù)轉(zhuǎn)換通道進(jìn)行模數(shù)轉(zhuǎn)換。
圖3 LF398的連接示意圖
由于需要顯示漢字部分,系統(tǒng)選用內(nèi)核驅(qū)動(dòng)芯片為KS0108的12864液晶顯示屏,根據(jù)要寫的字制作字模即可。液晶顯示屏使用并口方式連接在Atmega32 單片機(jī)的PC端口的 8個(gè)引腳上。液晶屏上的 9~16引腳分別對(duì)應(yīng)接單片機(jī)的PC0~PC7引腳。另外液晶屏上還需5個(gè)端口。分別是E、RW、DI、CS1、CS2端口分別接在PD端口上的五個(gè)引腳即可。液晶屏的供電也來(lái)自7805轉(zhuǎn)換后得到的5伏電壓。液晶屏和峰值保持電路的接口連接電路圖如4所示。
圖4 液晶屏和峰值保持電路的接口連接電路圖
軟件部分主要由 ICP功能模塊、液晶屏顯示模塊、A/D模數(shù)轉(zhuǎn)換模塊三大部分組成。開發(fā)環(huán)境為AVR Studio應(yīng)用GCC編程。ICP功能使用服務(wù)中斷的方式,當(dāng)有上升沿脈沖接入時(shí)則發(fā)生服務(wù)中斷并進(jìn)入中斷程序,在服務(wù)中斷程序中設(shè)置延時(shí),設(shè)定何時(shí)開始和終止跟隨信號(hào)的產(chǎn)生和關(guān)閉。以確保采樣保持住的是峰值電壓。液晶屏顯示模塊主要負(fù)責(zé)液晶屏的初始化和顯示功能。A/D模塊使用交替法對(duì)兩個(gè)通道進(jìn)行循環(huán)轉(zhuǎn)換,并將數(shù)值顯示在液晶屏上。
首先要對(duì) ICP端口進(jìn)行設(shè)置和初始化,其目的就是使能ICP捕獲中斷,同時(shí)使能T/C0的溢出中斷,跟隨控制信號(hào)的產(chǎn)生是在捕捉中斷處理程序中完成。其端口的初始化程序?yàn)椋?/p>
void init_icp(void)
{
MCUCR = 0x00;
GICR = 0x00;
TIMSK=0X21; //使能 ICP捕捉中斷;使能T/C0溢出中斷
TCCR0=0X02; //8分頻,溢出中斷T0
TCCR1A=0X00;
TCCR1B=0XC2;
TCNT0=0;
ICR1=0;
TCNT1=0;
SEI();
}
使用ATMega32單片機(jī)的PB0引腳作為跟隨控制信號(hào)產(chǎn)生的引腳,跟隨控制信號(hào)應(yīng)在源信號(hào)的上升沿之后一定時(shí)間后再產(chǎn)生,這樣避免采集到的峰值電壓偏低,因此要在整個(gè)程序中設(shè)置兩個(gè)全局變量,整數(shù) f用于設(shè)定被測(cè)量信號(hào)的上升沿之后到產(chǎn)生跟隨控制信號(hào)的之間的間隔時(shí)間,整數(shù) b用于設(shè)定峰值期間采樣的時(shí)間,當(dāng)選擇合適容值的保持電容時(shí)可以將這兩個(gè)時(shí)間設(shè)定值設(shè)置的很小以便測(cè)量高頻率的脈沖信號(hào)。為了使 A/D轉(zhuǎn)換器滿足一定的轉(zhuǎn)換精度[10],應(yīng)盡量進(jìn)行多次采樣保持測(cè)量以保持測(cè)量精度。跟隨控制信號(hào)的中斷服務(wù)程序?yàn)椋?/p>
void Icp_timer1(void)
{
ICR1=0;
TCNT1=0;
TCCR1B=0XC2;
delay_nus(f);
TCNT0=1;
i++;
PORTB=i;
delay_nus(b);
PORTB=0;
}
本系統(tǒng)采用8MHz晶振,參考電壓為外部AVCC即為5.0伏。設(shè)置ADC初始化程序?yàn)椋?/p>
void ADCINI(void)
{
ADCSRA = 0x00;
ADMUX =(adc_mux&0x1f)|(1< ADCSRA=(1< SEI(); } 轉(zhuǎn)換的程序?yàn)椋?/p> while(!(ADCSRA&(1<<(ADIF)))); //等待轉(zhuǎn)換結(jié)束 Ddata=ADCL; Ddata+=ADCH*256; Ddata=(unsigned int)(((float)Ddata)*5000/1023); 在平面直角坐標(biāo)系中,圓C1:(x+1)2+(y-6)2=25,圓C2:(x-17)2+(y-30)2=r2. 通過(guò)這樣的轉(zhuǎn)換后得到的 Ddata就是量化后的電壓數(shù)值單位是毫伏。通過(guò)對(duì)這個(gè)整數(shù)求商或是余數(shù)得到其各個(gè)位上的數(shù)值,若想使用引腳 AREF上的電壓為參考電壓時(shí),可使ADMUX=(adc_mux&0x1f),根據(jù)參考電壓的穩(wěn)定性系統(tǒng)會(huì)有1~2mV的偏差。這樣就所得到的被測(cè)脈沖電壓的峰值電壓了。 硬件方面系統(tǒng)選用的是內(nèi)核驅(qū)動(dòng)芯片為KS0108的12864液晶顯示屏,KS0108驅(qū)動(dòng)芯片是專用于圖形點(diǎn)陣顯示的液晶顯示控制器,每一個(gè)KS0108芯片內(nèi)置8x64字節(jié)顯示RAM,可直接控制顯示64x64點(diǎn)的LCD顯示,用戶只需要向KS0108的顯示RAM中送數(shù)據(jù),KS0108就會(huì)自動(dòng)掃描將顯示RAM的數(shù)據(jù)自動(dòng)在 LCD液晶顯示器上顯示出來(lái)。顯示操作的指令僅有 5條,使用起來(lái)極其方便。在使用液晶屏之前先要對(duì)其進(jìn)行初始化操作,初始化程序?yàn)椋?/p> void init_lcd(void) //初始化函數(shù) { set_start_line_L(0); //顯示起始行為 set_start_line_R(0); //顯示起始行為 write_LCD(LEFT,CMD,DISPLAY_ON); write_LCD(RIGHT,CMD,DISPLAY_ON); } 要將數(shù)據(jù)顯示在液晶屏上的話,就是對(duì)液晶屏進(jìn)行寫的操作。寫液晶屏的操作程序?yàn)椋?/p> void write_LCD(unsigned char lr,unsigned char cd,unsigned char data) //寫入指令或數(shù)據(jù) { CLI(); LCD_BUSY(lr); if(cd==CMD) SET_LCD_CMD; else SET_LCD_DATA; SET_LCD_WRITE; SET_LCD_E; LCD_DIR_PORT = 0xff; LCD_OP_PORT = data; asm("nop"); asm("nop"); asm("nop"); asm("nop"); CLEAR_LCD_E; LCD_OP_PORT = 0xff; SEI(); } 在主函數(shù)中將 A/D模數(shù)轉(zhuǎn)換后的數(shù)值寫入到液晶屏上就實(shí)現(xiàn)了數(shù)值的顯示功能,由于是實(shí)時(shí)顯示結(jié)果的。所以把顯示數(shù)值的函數(shù)放入到While(1)的死循環(huán)中再加上一定的延時(shí)程序就完成了實(shí)時(shí)顯示和刷新數(shù)值的功能。當(dāng)沒(méi)有被測(cè)的脈沖方波電壓時(shí),由于單片機(jī)的 ICP引腳沒(méi)有捕獲到上升沿,就不會(huì)觸發(fā)采樣保持芯片 LF398進(jìn)行采樣保持,因此測(cè)量出的數(shù)據(jù)就是0伏。 基于ATMega32單片機(jī)和電壓采樣保持芯片LF398制作的雙通道數(shù)字電壓測(cè)量計(jì),主要是利用了 AVR單片機(jī)強(qiáng)大的集成多通道的 A/D模數(shù)轉(zhuǎn)換功能。在使用高精度外部參考電壓的情況下,A/D模數(shù)轉(zhuǎn)換的精度非常的高,誤差僅在幾毫伏之間。且AVR單片機(jī)的抗干擾能力強(qiáng),基于哈佛結(jié)構(gòu)的AVR單片機(jī)具有更高的數(shù)據(jù)吞吐能力,能完成相當(dāng)復(fù)雜的設(shè)計(jì)功能,具有普通的單片機(jī)所無(wú)法比擬的優(yōu)勢(shì)。通過(guò)細(xì)致的制版可以將這個(gè)測(cè)量計(jì)制作的很小便于攜帶和使用,且測(cè)量精度高。對(duì)于實(shí)驗(yàn)室的學(xué)生非常適合。 [1]劉海成.AVR 單片機(jī)原理及測(cè)控工程應(yīng)用:基于ATmega48/ATmega16[M].北京航空航天大學(xué)出版社,2008.3. [2]李泓,等.AVR 單片機(jī)入門與實(shí)踐[M].北京:電子工業(yè)出版社,2001. [3]金鐘夫,等.AVR ATmega128單片機(jī)C程序設(shè)計(jì)與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2008. [4]周興華.AVR單片機(jī)C語(yǔ)言高級(jí)程序設(shè)計(jì)[M].北京:中國(guó)電力出版社,2008. [5]張軍,宋濤.AVR單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)例精粹[M].北京:電子工業(yè)出版社,2009. TM932 B 1008-1151(2011)04-0054-03 2011-01-24 駱揚(yáng)(1984-),男,河北石家莊人,桂林電子科技大學(xué)在讀碩士,從事LED光電特性自動(dòng)檢測(cè)系統(tǒng)和光電特性參數(shù)自動(dòng)測(cè)量的研究。3.液晶屏顯示模塊
(四)結(jié)語(yǔ)