基于A(yíng)D7888的度激光器監測系統的設計
在高穩定度激光器的研制中,實(shí)時(shí)監測激光器的工作狀態(tài)是需要重點(diǎn)關(guān)注的問(wèn)題。本系統實(shí)現了高穩定度激光器溫度控制系統、激光管工作電流、工作電壓、激光器光功率的實(shí)時(shí)精確監測,以及激光器工作狀態(tài)數據的存儲和數據串行上傳的功能。其中電流設定值和實(shí)際工作電流的觀(guān)測可以更好地確定激光器的工作狀態(tài)。系統結構圖如圖1所示。
圖1 系統結構框圖
本系統的實(shí)時(shí)監測是利用AD模數轉化器實(shí)現的。對于A(yíng)D芯片的選擇,需要綜合設計諸項因素,系統技術(shù)指標、成本、功耗、安裝等,最主要的依據還是速度、精度以及需要的通路。由于系統采樣的數據是緩慢變化的信號,所以速度的要求不高,主要是精度的要求和多通路的要求,所以選擇了美國模擬器件AD公司推出的一款8路單端模擬輸入的12位模數轉換器AD7888,VREF(+)為+5V時(shí),其精度能達到1/212×5V=0.00122V,完全滿(mǎn)足系統設計的需要。LCD使用OCM4×16,4行16字符的液晶顯示模塊,使用兩個(gè)按鍵控制不同監測數據之間的切換。數據存儲器使用的是AT28C256,容量為256MB,在EEPROM中將存儲器分為8個(gè)區域,按照實(shí)時(shí)時(shí)鐘的節拍存儲上傳給PC的采樣數據。在PC端可以遠程直接監控激光器的工作狀態(tài)。與PC間的數據通信采用的是串行方式,從MCU的TX和RX端CMOS電平到PC的標準RS232電平的轉換器件選用Maxim公司的MAX232。由于MCU的外圍器件比較多,以及考慮了以后的擴展,這里使用了CPLD芯片進(jìn)行了器件片選的地址譯碼和液晶屏的控制信號的生成。
AD7888的特點(diǎn)
AD7888是美國模擬器件AD公司推出的一款高速低功耗12位模數轉換器,可以在+2.7~+5.25V單電源模式下工作,見(jiàn)圖2。其最大轉換速率可達到125k SPS。AD7888的輸入采樣/保持電路在500ns內獲取一個(gè)信號,采用單端采樣模式,包含8個(gè)單端模擬輸入,從AIN1到AIN8,模擬輸入電壓從0~VREF。AD7888內部具有用做A/D轉換的換的2.5V基準電壓源,REFIN/REFOUT管腳允許用戶(hù)訪(fǎng)問(wèn)這個(gè)基準。另外,該管腳也可以使用外部基準電壓,范圍從1.2V到VDD。CMOS的制造工藝確保了低功率消耗,正常工作時(shí)為2mW,掉電狀態(tài)下為3μW。該器件采用16腳SOIC和TSSOP外形封裝??梢赃x擇多種電源管理模式(包括數據轉換后自動(dòng)處于掉電模式),與多種串行接口兼容,如SPI/QSPI/MICOWIRE/DSP。AD7888引腳功能及符號說(shuō)明見(jiàn)圖3、表1、表2。
圖2 AD7888模數轉換器
圖3 控制器位功能描述
表1 AD7888模數轉換器管腳
表2 引腳符號及說(shuō)明
在A(yíng)D7888中,控制寄存器是8位的只寫(xiě)寄存器。數據在時(shí)鐘周期信號的上升沿從AD7888的DIN引腳載入,在此同時(shí)獲取外部模擬量轉換的結果。每次數據的傳輸需要準備16個(gè)連續時(shí)鐘信號。數據只能在片選信號下降沿之后的前8個(gè)時(shí)鐘脈沖的上升沿裝入控制寄存器。
串行接口:
在圖4中顯示了詳細的串行接口時(shí)序圖,串行時(shí)鐘提供了轉換時(shí)序,且控制AD7888轉換信息的輸入輸出。
CS初始化數據傳送和轉換處理。在其下降沿之后的1.5個(gè)時(shí)鐘周期開(kāi)始采樣輸入信號,這段時(shí)間表示為tACQ(獲取時(shí)間)。這是從DIN輸出到控制寄存器的MSB位為DONTC一個(gè)原因。在自動(dòng)關(guān)斷模式下獲取時(shí)間必須要慮及5μs的喚醒時(shí)間。整個(gè)轉換過(guò)程還需要14.5個(gè)時(shí)鐘周期來(lái)完成。上升沿之后,總線(xiàn)返回高阻狀態(tài)。如果繼續保持低電平,則準備新一輪的轉換。
進(jìn)行采樣的輸入通道的選擇是提前寫(xiě)入控制寄存器的,因此在轉換時(shí),用戶(hù)必須提前寫(xiě)入以備通道的轉換。也就是說(shuō),在進(jìn)行當前轉換時(shí),用戶(hù)就必須提前寫(xiě)入通道的地址以備下次轉換使用。設計中初始化時(shí),先做一次寫(xiě)控制寄存器的操作,將需要轉換的通道信息寫(xiě)入控制寄存器中。
寫(xiě)信息到控制寄存器應該在數據傳送的前8個(gè)SCLK上升沿進(jìn)行??刂萍拇嫫鹘?jīng)常在數據傳送發(fā)生時(shí)進(jìn)行寫(xiě)操作。從器件中讀數據時(shí)用戶(hù)必須經(jīng)常仔細地在PIN線(xiàn)上設置正確的信息。
接口與驅動(dòng)
串行外圍設備接口SPI(serial peripheral interface)總線(xiàn)技術(shù)是Motorola公司推出的一種同步串行接口。SPI總線(xiàn)是一種三線(xiàn)同步總線(xiàn),因其硬件功能很強,所以其實(shí)現軟件就相當簡(jiǎn)單。AD7888與多種串行接口兼容,可以根據使用的控制芯片在設計中靈活的使用,從經(jīng)濟的角度出發(fā)選擇普通的MCU芯片AT89S52,使用程序可方便地實(shí)現對SPI總線(xiàn)的控制。
圖4 串行接口時(shí)序圖
AD7888與MCU之間的接口關(guān)系如圖5所示。為了能夠獲得穩定的數據,AD7888與MCU之間加入光隔離器。光隔離器件采用的是隔離電壓高、速度快、共模抑制性強的6N137。由于6N137的速度快,編程中不需要進(jìn)行延時(shí)就能滿(mǎn)足光隔離器的電平建立時(shí)間。試驗表明通過(guò)光隔離器,獲得的穩定數據能夠增加3~4位(二進(jìn)制位)。AD7888的CS接地,使AD888始終工作在SPI接口模式。對每個(gè)接口模塊的控制是通過(guò)74LSl25的三態(tài)允許端來(lái)實(shí)現的。對其中一個(gè)SPI接口操作時(shí),使其74LSl25處于選通狀態(tài),而其他SPI接口的74LSl25處于高阻狀態(tài)。這樣可實(shí)現微處理器單獨對一個(gè)接口進(jìn)行操作,而不影響其他接口。CPU通過(guò)對三態(tài)緩沖器74LSl25控制,可實(shí)現多個(gè)接口共用相同的數據線(xiàn)。AD7888所采樣的七路電壓信號經(jīng)過(guò)分壓以后電壓都在2.5V以?xún)?,所以這里可以直接使用芯片內置的+2.5V參考電壓,在程序中必須將控制器的REF位置清為“0”。
圖5 AD7888與MCU連接圖
子程序入口參數Adcaddres通過(guò)設置控制寄存器來(lái)修改采樣通道和工作模式
unsigned int get_ad(unsigned char Adcaddres)
//寫(xiě)入控制字和讀出轉換數據
{
unsigned char i,j;
unsigned char Strdatah,Strdatal,Tempdata;
unsigned int Strdata;
Tempdata=0×0;
Strdatah=0×0;
Strdatal=0×0;
Strdata=0;
Ad_cs(0);
//使能AD7888片選有效
Ad_sclk=1;
for(i=0;i8;i++)
//前8個(gè)時(shí)鐘周期進(jìn)行控制寄存器的寫(xiě)入
{
//和讀出上次轉換的高4位數據
Ad_din=(bit)( Adcaddres (0×80>>i));
//先移出最高位
Ad_sclk=0;
for(j=0;j2;j++);
Ad_sclk=1;
for(j=0;j2;j++);
Strdatah=Ad_dout;
Strdatah=Strdatah(7-i);
Tempdata=Tempdata | Strdatah;
}
Strdatah=Tempdata;
Tempdata=0×0;
for(i=0;i8;i++)
//從AD7888中讀取低8位采樣碼
{
Ad_sclk=0;
for(j=0;j2;j++);
Ad_sclk=1;
Strdatal=Ad_dout;
Strdatal=Strdatal(7-i);
Tempdata=Tempdata | Strdatal;
for(j=0;j2;j++);
}
Strdatal=Tempdata;
Strdata=(Strdatah*256 +Strdatal)0x0fff;
//去除高四位的無(wú)效數據”0”,防止誤碼出現
Ad_cs(1);
//使能AD7888片選無(wú)效,降低功耗
return(Strdata);
}
程序中把寫(xiě)控制寄存器通知采樣某通道和讀出上次轉換的高位有效數據同時(shí)進(jìn)行,提高了轉換的速度,使應用程序編程更加高效。
當電源不穩定或者電路出現干擾的時(shí)候,AD7888輸出的采出碼將出現波動(dòng),使得采樣效果變差,這時(shí)可以在讀數據時(shí)采用防脈沖干擾移動(dòng)平均值法數字濾波,即加入后置濾波器,使效果得以改善。下面是相關(guān)的程序。
子程序入口參數Adcaddres通過(guò)設置控制寄存器來(lái)修改采樣通道進(jìn)行數字濾波
#define LEN 18
//采樣數組的長(cháng)度
#define SHIFT 4
//LEN = 2^SHIFT+2
unsigned int szlb(unsigned char Adcaddres) {
unsigned char pdat;
//移動(dòng)指針
unsigned char pmax,pmin;
//記錄數據表中最大值和最小值的位置,在一般的數據采集系
unsigned char i;
//統中,數據的長(cháng)度>=8,
unsigned int datas[LEN];
//因此用指針記錄而不是直接記錄最大值和最小值
unsigned int average=0;
//清零,用來(lái)計算平均值
pmax=0;
pmin=0;
for ( pdat=0;pdatLEN;pdat++)
//采樣所得數據存入數據表中
{
datas[pdat] = get_ad(Adcaddres);
DelayMs(0×06);
}
for(i=0;iLEN;i++)
average+=datas[i];
//求所有數據總和
/******去除被認為是脈沖的數據*******/
for ( i=LEN;i>0;i--)
{
if(datas[i-1]>datas[pmax])
//記錄數組中最大值的下標
pmax=i-1;
if(datas[i-1]datas[pmin])
//記錄數組中最小值的下標
pmin=i-1;
}
average=average-datas[pmax]-datas[pmin];
//減去脈沖
return (average>>SHIFT);
//求算術(shù)平均值
}
設計中需要注意的問(wèn)題
單片機連接多個(gè)外圍芯片時(shí)需要注意幾個(gè)問(wèn)題,首先要保證這幾個(gè)外設的使能有效信號絕對區分開(kāi)來(lái),通過(guò)CPLD譯碼產(chǎn)生片選來(lái)激活不同的外設,否則多個(gè)外設的數據就會(huì )同時(shí)出現在數據總線(xiàn)上,造成數據沖突,接受錯誤,其次要從地址上區分開(kāi)對外部設備寄存器的讀寫(xiě)操作,同一時(shí)刻不能對多個(gè)外設進(jìn)行讀或寫(xiě)操作。
由于A(yíng)D7888是高分辨率的ADC,因而電源的耦合電路尤為重要。因此在印制電路板設計時(shí),應對所有的模擬電源輸入加一級去耦電路,即用10μF鉭電容和0.1μF陶瓷電容并聯(lián)到地。這些去耦電路的元件應盡可能靠近芯片的電源引腳,這樣才能獲得更好的去耦效果,并消除引線(xiàn)過(guò)長(cháng)帶來(lái)的干擾。
本系統介紹的技術(shù)已在高穩定度激光器多路監測中得到了應用,它不但提高了系統抗干擾性和數據的測量精度,而且由于結構簡(jiǎn)單也給維護帶來(lái)了便利。
評論