隨著數(shù)字信號(hào)處理技術(shù)及各種故障分析技術(shù)的快速發(fā)展,在一些由工控機(jī)構(gòu)成的較小系統(tǒng)中,對(duì)信號(hào)進(jìn)行實(shí)時(shí)采集與處理已越來越受到人們的重視。PC104系統(tǒng)模塊以其結(jié)構(gòu)緊湊,體積小,可擴(kuò)展性強(qiáng)等特點(diǎn),在信號(hào)采集和故障分析中得到了廣泛的應(yīng)用。Diamond-MM-AT 是一個(gè)高性能12bit模擬量I/O口輸入輸出PC/104模塊,它包括A/D,D/A轉(zhuǎn)換通道和定時(shí)/計(jì)時(shí)器,其標(biāo)準(zhǔn)模板結(jié)構(gòu)可與PC/104處理器進(jìn)行模塊組合。
?。模椋幔恚铮睿洌停停粒阅K的主要功能如下:
A/D轉(zhuǎn)換精度為12位,可支持的最大采樣頻率為100kHz;具有16條模擬量輸入通道和2條12位D/A轉(zhuǎn)換通道;有8?jìng)€(gè)數(shù)字輸入口和8?jìng)€(gè)數(shù)字輸出口;帶有32位可編程控制計(jì)數(shù)/定時(shí)器;可編程設(shè)置D/A轉(zhuǎn)換量程。
2 插口及引腳功能
圖1所示是Diamond-MM-AT模塊的外形簡(jiǎn)圖。其中J1、J2為擴(kuò)展總線端口,主要用于與PC/104處理器總線相連接。U7為A/D轉(zhuǎn)換器。J4是為A/D設(shè)置跳線器,用來設(shè)置模擬量是單極或雙極輸入以及輸入的量程。J5是D/A設(shè)置跳線器,用于設(shè)置模擬量是單極或雙極輸出以及輸出的參考電壓值。U15是D/A轉(zhuǎn)換器。J6是設(shè)置DMA(直接存儲(chǔ)器存?。?biāo)準(zhǔn)的中斷級(jí)和基地址設(shè)置跳線器,模塊默認(rèn)基地址為:0x300。J3為50針的I/O端口,它的具體排列如圖2所示,各端口定義如下:
?。郑椋睿罚罚郑椋睿埃埃?jiǎn)螛O模式模擬量A/D輸入端口7~0;同時(shí)可用作雙極模式模擬量A/D正極輸入端口7~0;
Vin15/7-~Vin8/0-:?jiǎn)螛O模式模擬量A/D輸入端口15~8;也可用作雙極模式模擬量A/D負(fù)極輸入端口7~0;
?。郑铮酰簦阿煟郑铮酰簦保悍謩e為D/A轉(zhuǎn)換輸出端口0和1;
?。郑颍澹?Out:+5/-5V精確參考電壓輸出端口;
?。郑颍澹?In0Vref In1:自定義D/A轉(zhuǎn)換參考電壓量程輸入端口;
?。模铮酰簦贰模铮酰簦埃簲?shù)字輸出端口0~7,兼容TTL/CMOS電平;
?。模椋睿贰模椋睿埃簲?shù)字輸入端口0~7,兼容TTL/CMOS電平;其中Din2/Gate0數(shù)字輸入端口2還可作為計(jì)數(shù)器0的控制門,并當(dāng)該端口為高電平時(shí)計(jì)數(shù);而Din0/Gate1/2數(shù)字輸入端口0則可作為計(jì)數(shù)器1和2的控制門,并可由控制寄存器11來進(jìn)行設(shè)定;
?。桑睿埃河?jì)數(shù)器0輸入端(下降沿觸發(fā));
?。希酰簦阿煟希酰簦玻悍謩e為計(jì)數(shù)器0和2的輸出端口;
?。保担帜M電源;
?。担郑号cPC/104擴(kuò)展總線電源相連,用來提供+5V電源;
?。粒纾睿洌耗M地;
?。模纾睿洌簲?shù)字地;
Diamond-MM-AT模塊通常占用16位地址空間。
3 硬件連接關(guān)系
?。模椋幔恚铮睿淠K與PC/104處理器及傳感器的硬件連接框圖如圖3所示。圖中當(dāng)傳感器測(cè)取待檢測(cè)信號(hào)并輸入調(diào)理板進(jìn)行放大濾波處理后,即可將其調(diào)制到合適的電壓信號(hào)范圍,并輸入到Dia-mond-MM-AT模塊相應(yīng)的I/O端口,然后由Dia-mond-MM-AT模塊將其轉(zhuǎn)換為所需要的數(shù)據(jù)量或模擬量,最后由PC/104處理器通過擴(kuò)展總線控制讀寫數(shù)據(jù)的處理、顯示和存儲(chǔ)。其電源由PC/104總線提供,在Diamond-MM-AT模塊端口J1中,B1為GND,B3為+5V,B5為-5V,B7為-12V,B9為+12V。
4 數(shù)據(jù)采集應(yīng)用程序
下面是以PC/104作處理器和Diamond-MM-AT模塊進(jìn)行組合,以對(duì)檢測(cè)的模擬量信號(hào)進(jìn)行A/D轉(zhuǎn)換的讀寫程序及對(duì)各控制寄存器的配置方法。筆者已在實(shí)踐中對(duì)該程序進(jìn)行了測(cè)試,并已成功運(yùn)用到某測(cè)試工程設(shè)計(jì)中。
?。#洌澹妫椋睿?Base 0x300
?。停幔椋?Void{
?。酰睿椋铮?{ unsigned int m; unsigned char n[2];}T;
?。椋睿?dat[3000];
int i, cd;
?。椋睿?freq=2000; //設(shè)定采樣頻率為2kHz;
outportb(Base+9, 0x83);?。试S中斷,由計(jì)數(shù)器觸發(fā);
?。铮酰簦穑铮颍簦猓ǎ拢幔螅澹保? 0x08);?。?jì)數(shù)器1產(chǎn)生1MHz方波
?。铮酰簦穑铮颍簦猓ǎ拢幔螅澹保? 0x05); //A/D輸入范圍為0~5V
T.m=(int)(500000/ freq); //0.5MHz/Freq求寫入記數(shù)器值;
?。铮酰簦穑铮颍簦?Base+15,0x54);?。O(shè)定計(jì)數(shù)器1讀/寫低字節(jié);
?。铮酰簦穑铮颍簦猓ǎ拢幔螅澹保?0x01); //向計(jì)數(shù)器1寫低字節(jié)(二分頻);
?。铮酰簦穑铮颍簦猓ǎ拢幔螅澹保?0xb4);?。O(shè)定計(jì)數(shù)器2先讀/寫低字節(jié),再讀/寫高字節(jié);
outportb(Base+14,T.n[0]); //向計(jì)數(shù)器2寫低字節(jié);
outportb(Base+14,T.n[1]);//向計(jì)數(shù)器2寫高字節(jié);
outportb(Base+2,0xcc); //設(shè)定測(cè)取通道為C通道(即第12通道);
?。妫铮?i=0;i<3000;i++) //循環(huán)采集3000個(gè)數(shù)據(jù);
{
?。铮酰簦穑铮颍簦猓ǎ拢幔螅澹?0xff); //清除FIFO;
?。铮酰簦穑铮颍簦?Base+8,0xff); //設(shè)定中斷寄存器8,等計(jì)數(shù)器觸發(fā);
while((inportb(Base+8)&0x10)==0x00); ?。却粒霓D(zhuǎn)換結(jié)束;
cd=inportb(Base+0))//讀取低八位數(shù)據(jù);
cd=cd/16; ?。瘮?shù)據(jù)右移四位,除去右四位的通道標(biāo)志;
?。洌幔鬧i]=inportb(Base+1); //讀取高八位數(shù)據(jù);
dat[i]=dat[i]*16; //高八位數(shù)據(jù)左移四位;
dat[i]=dat[i]+cd; ?。甙宋慌c低四位相加即得A/D轉(zhuǎn)換結(jié)果12位數(shù)據(jù);
}
……
5 結(jié)束語
?。模椋幔恚铮睿洌停停粒允菢?biāo)準(zhǔn)的PC/104連接模塊,具有體積小,結(jié)構(gòu)緊湊等優(yōu)點(diǎn),并具有A/D、D/A、I/O轉(zhuǎn)換等多種功能。由于PC/104可支持高級(jí)語言編程,因此,程序開發(fā)和設(shè)計(jì)非常方便,可在很大程度上縮短開發(fā)時(shí)間??梢灶A(yù)見:隨著電子技術(shù)的發(fā)展,這種模塊化器件必將有著廣闊的發(fā)展應(yīng)用前景。