1、綜述
ETA108是英創(chuàng)公司推出的一款低成本高性能的AD采集模塊,相比英創(chuàng)公司的其他數(shù)據(jù)采集擴(kuò)展模塊,ETA108的一個(gè)主要特點(diǎn)是支持硬件周期脈沖觸發(fā)AD采集,因此ETA108非常適合應(yīng)用于要求高精度采樣間隔的波形數(shù)據(jù)采集。ETA108波形數(shù)據(jù)采集模塊可廣泛應(yīng)用于多通道波形記錄儀、電力諧波分析、故障錄波、振動(dòng)信號(hào)分析、瞬態(tài)信號(hào)采集、通用數(shù)據(jù)采集等多種應(yīng)用領(lǐng)域。現(xiàn)ESM335x Linux已支持ETA108數(shù)據(jù)采集模塊。
ETA108性能:
? 8通道單端輸入或4通道差分輸入
? 輸入量程0~4.096V
? 每通道具有獨(dú)立的高阻抗增益放大器(PGA),可實(shí)現(xiàn)各種傳感器之間的直接接口連接,并支持用戶配置通道增益Gain=1/2/4/8)
? AD轉(zhuǎn)換精度12bit
? AD最高采樣速度100ksps
? 可選擇多種平均操作模式,使輸出AD精度達(dá)到14bit。其中有快速平均和精確平均兩種模式可以選擇。快速平均模式:對(duì)4,8或16次采樣結(jié)果做平均,可增加AD分辨率到14bit,快速平均模式適用于輸入到PGA的信號(hào)比較穩(wěn)定的情況。精確平均模式:對(duì)4,8或16次采樣結(jié)果做平均,可得到比快速平均模式更精確的采樣結(jié)果。此模式在輸入信號(hào)不太穩(wěn)定的情況下適用。
使用4次平均模式總采樣速率不得高于20ksps,使用8次平均模式總采樣速率不得高于10ksps,使用16次平均模式采樣速率不得高于5ksps。當(dāng)用戶采用默認(rèn)設(shè)置進(jìn)行采樣時(shí),我們的驅(qū)動(dòng)會(huì)根據(jù)用戶設(shè)置的采樣速度進(jìn)行設(shè)置,使用能夠達(dá)到的最高平均模式以提高采樣精度。用戶也可自行設(shè)置。
關(guān)于ETA108更詳細(xì)的參數(shù)以及設(shè)置方法請(qǐng)參考《ETA108數(shù)據(jù)采集模塊應(yīng)用手冊(cè)》(Linux)。
2、應(yīng)用程序接口
1、驅(qū)動(dòng)程序
在使用ETA108之前,需要在系統(tǒng)中先加載ETA108的驅(qū)動(dòng)程序。我們提供eta108.ko驅(qū)動(dòng)模塊,用戶使用insmod /(目錄)/eta108.ko 命令就可以加載驅(qū)動(dòng)。
為了實(shí)現(xiàn)ETA108的高速數(shù)據(jù)采集,在其驅(qū)動(dòng)程序中,充分利用了ESM335x的高性能DMA技術(shù),從而保證了ETA108與ESM335x主板之間僅靠簡(jiǎn)單的4線制SPI接口就實(shí)現(xiàn)了硬件連接,同時(shí),DMA技術(shù)的引入,也將數(shù)據(jù)采集對(duì)系統(tǒng)性能的影響降到最低。考慮到實(shí)際應(yīng)用,ESM335x ETA108驅(qū)動(dòng)程序支持單次采樣模式和連續(xù)采樣模式,兩種模式下驅(qū)動(dòng)每采集到512個(gè)點(diǎn)的數(shù)據(jù)(1kB數(shù)據(jù)大小)或者采樣結(jié)束就會(huì)通知用戶程序,建議應(yīng)用程序中select函數(shù)和read函數(shù)一起使用盡快讀出數(shù)據(jù),以避免驅(qū)動(dòng)維護(hù)大量的數(shù)據(jù)緩存。
連續(xù)采樣處理流程
驅(qū)動(dòng)程序中進(jìn)行設(shè)置的eta108_config結(jié)構(gòu)體。
eta108_config結(jié)構(gòu)體是ETA108的配置數(shù)據(jù)結(jié)構(gòu)體,包含了采樣率,采樣長(zhǎng)度,采樣通道設(shè)置,通道寄存器配置等參數(shù)。其定義如下:
struct eta108_config
{
unsigned int rate;
unsigned int count;
unsigned int channel;
void *config;
unsigned int config_len;
};
在我們提供的驅(qū)動(dòng)程序中,eta108_config結(jié)構(gòu)體即可用為函數(shù)的輸入?yún)⒖迹浣Y(jié)構(gòu)體成員含義說(shuō)明如下:
ADS_CONFIG結(jié)構(gòu)體定義
成員 | 定義 / 輸入?yún)?shù) |
rate | 設(shè)置總的采樣率,每通道采樣率= rate/通道數(shù) |
count | 設(shè)置每個(gè)AD通道的采樣次數(shù)>0:?jiǎn)未尾蓸?0:連續(xù)采樣 |
channel | 設(shè)置需要采樣的通道,對(duì)應(yīng)位置1 |
config | 指向AD通道配置的buffer,此參數(shù)用于設(shè)置ETA108的寄存器,config =NULL時(shí),系統(tǒng)將使用默認(rèn)配置 |
config_len | config指向buffer的長(zhǎng)度 |
ETA108單通道采樣時(shí)采樣速度可以達(dá)到100ksps,如果多通道采樣,由于內(nèi)部通道轉(zhuǎn)換需要時(shí)間,最高只能達(dá)到50ksps,rate設(shè)置需要滿足此限制。channel的低8bit(bit0~bit7)依次對(duì)應(yīng)AD通道0~通道7,如果要采集某個(gè)通道的數(shù)據(jù),需要將其對(duì)應(yīng)的位置為1。比如要采集通道0、通道1和通道7的數(shù)據(jù),則應(yīng)設(shè)置channel=0x83;差分模式下只需設(shè)置差分通道中的一個(gè)通道的對(duì)應(yīng)位為1,比如通道0、通道1在差分模式下工作,只需將0通道位置1,設(shè)置channel=0x1。
2、ETA108驅(qū)動(dòng)輸入輸出數(shù)據(jù)格式:
用戶可以對(duì)ETA108的進(jìn)行設(shè)置以改變ETA108工作模式,eta108_config中config指向的buffer格式為:
bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
data | 1 | 0 | A3 | A2 | A1 | A0 | 0 | 0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
寄存器寫
允許的設(shè)置及其意義詳見《ETA108數(shù)據(jù)采集模塊應(yīng)用手冊(cè)》(Linux)。
讀取采樣數(shù)據(jù)的格式如下(unsigned short):
bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
data | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 0 | 0 |
ETA108轉(zhuǎn)換結(jié)果
其中第0、1位總是0,第2、3位為平均模式下增加的2位分辨率,如沒有采用平均模式則此兩位為0,第3-15位為12bit的AD數(shù)據(jù)。多通道采樣模式下,應(yīng)用程序從驅(qū)動(dòng)中讀得的AD數(shù)據(jù)是按通道依次存放的,低通道在前,比如應(yīng)用程序同時(shí)連續(xù)采集CH1,CH2,CH5三個(gè)通道,read()函數(shù)讀得的AD數(shù)據(jù)存放為CH1、CH2、CH5、CH1、CH2、CH5、CH1………,每個(gè)通道16bit。
ETA108的量程為0~4.096V,則可得D13~D2這12bit的數(shù)據(jù)對(duì)應(yīng)的轉(zhuǎn)換關(guān)系如下表,用戶可據(jù)此換算數(shù)值:
理想情況下的AD轉(zhuǎn)換結(jié)果
描述 | 模擬量輸入 | 數(shù)字量輸出 | |
滿量程范圍 | 4.096V-REF | 二進(jìn)制 | 十六進(jìn)制 |
最小分辨率(LSB) | V-REF/4096 | ||
滿量程 | V-REF-1LSB | 1111 1111 1111 | FFFF |
1/2量程 | V-REF/2 | 1000 0000 0000 | 8000 |
1/2量程 - 1 LSB | V-REF/2-1LSB | 0111 1111 1111 | 7FFF |
零 | 0V | 0000 0000 0000 | 0000 |
3、接口函數(shù)
1)加載設(shè)備驅(qū)動(dòng):
#:insmod /(目錄)/eta108.ko
會(huì)自動(dòng)創(chuàng)建設(shè)備文件 /dev/eta108
2)打開設(shè)備文件-open:
int fd = open ( "/dev/eta108", O_RDWR, S_IRUSR | S_IWUSR );
3)設(shè)置采樣參數(shù)-write:
struct eta108_config transfer;
memset ( &transfer, 0, sizeof(transfer) );
transfer.rate = 100000; //采樣速率
transfer.channel = 0x1; //采樣通道
transfer.count = 10000; //每通道采樣次數(shù)
//自定義設(shè)置,此處為0通道設(shè)置GPA放大2倍,設(shè)置為NULL時(shí)采用默認(rèn)設(shè)置
unsigned short cmd[1] = {0x8004};
transfer.config_len = 2; //2字節(jié)
transfer.config = cmd;
if(write ( fd, &transfer, sizeof(transfer) )<0)
{
printf ( "WRONG!!!!!!!!!!!!!!!!\n" );
exit ( 1 );
}
4)啟動(dòng)采樣:
if(ioctl ( fd, ETA108_START, &transfer )<0)
{
printf ( "START WRONG!!!!!!!!!!!!!!!!\n" );
exit ( 1 );
}
5)停止采樣:
if(ioctl ( fd, ETA108_STOP, &transfer )<0)
{
printf ( "STOP WRONG!!!!!!!!!!!!!!!!\n" );
exit ( 1 );
}
6)讀取采樣數(shù)據(jù)-read:
驅(qū)動(dòng)內(nèi)部每采集512個(gè)點(diǎn)(1kB)的數(shù)據(jù)或者采樣結(jié)束就會(huì)通過(guò)select函數(shù)通知應(yīng)用程序,建議應(yīng)用程序中盡快讀出數(shù)據(jù),進(jìn)行存儲(chǔ)或者計(jì)算,read函數(shù)返回實(shí)際讀取的字節(jié)數(shù)。
int count_in_byte = 0;
int read_count=0;
char read_buf[transfer.count*2*1]; // 1個(gè)通道,每個(gè)數(shù)據(jù)2個(gè)字節(jié)
char *real_read = read_buf;
for ( i=0; count_in_byte
{
FD_ZERO(&fdRead);
FD_SET(fd,&fdRead);
aTime.tv_sec = 2;
aTime.tv_usec = 0;
ret = select ( fd+1, &fdRead, NULL, NULL, &aTime );
if ( ret<0 )
printf( "select, something wrong!\n " );
if ( ret>0 )
{
if ( FD_ISSET(fd, &fdRead) )
{
read_count = read(fd, real_read, 1024);
if ( read_count<0 )
{
printf ( "READ WRONG!!!!!!!!!!!!!!!!\n" );
exit ( 1 );
}
real_read += read_count;
count_in_byte += read_count;
}
}
}
7)關(guān)閉設(shè)備文件:
close ( fd );
用戶如需使用ETA108數(shù)據(jù)采集模塊,請(qǐng)和我們聯(lián)系。
-
Linux
+關(guān)注
關(guān)注
87文章
11320瀏覽量
209841 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35436
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論