1、綜述
ETA108是英創公司推出的一款低成本高性能的AD采集模塊,相比英創公司的其他數據采集擴展模塊,ETA108的一個主要特點是支持硬件周期脈沖觸發AD采集,因此ETA108非常適合應用于要求高精度采樣間隔的波形數據采集。ETA108波形數據采集模塊可廣泛應用于多通道波形記錄儀、電力諧波分析、故障錄波、振動信號分析、瞬態信號采集、通用數據采集等多種應用領域?,FESM335x Linux已支持ETA108數據采集模塊。
ETA108性能:
? 8通道單端輸入或4通道差分輸入
? 輸入量程0~4.096V
? 每通道具有獨立的高阻抗增益放大器(PGA),可實現各種傳感器之間的直接接口連接,并支持用戶配置通道增益Gain=1/2/4/8)
? AD轉換精度12bit
? AD最高采樣速度100ksps
? 可選擇多種平均操作模式,使輸出AD精度達到14bit。其中有快速平均和精確平均兩種模式可以選擇??焖倨骄J剑簩?,8或16次采樣結果做平均,可增加AD分辨率到14bit,快速平均模式適用于輸入到PGA的信號比較穩定的情況。精確平均模式:對4,8或16次采樣結果做平均,可得到比快速平均模式更精確的采樣結果。此模式在輸入信號不太穩定的情況下適用。
使用4次平均模式總采樣速率不得高于20ksps,使用8次平均模式總采樣速率不得高于10ksps,使用16次平均模式采樣速率不得高于5ksps。當用戶采用默認設置進行采樣時,我們的驅動會根據用戶設置的采樣速度進行設置,使用能夠達到的最高平均模式以提高采樣精度。用戶也可自行設置。
關于ETA108更詳細的參數以及設置方法請參考《ETA108數據采集模塊應用手冊》(Linux)。
2、應用程序接口
1、驅動程序
在使用ETA108之前,需要在系統中先加載ETA108的驅動程序。我們提供eta108.ko驅動模塊,用戶使用insmod /(目錄)/eta108.ko 命令就可以加載驅動。
為了實現ETA108的高速數據采集,在其驅動程序中,充分利用了ESM335x的高性能DMA技術,從而保證了ETA108與ESM335x主板之間僅靠簡單的4線制SPI接口就實現了硬件連接,同時,DMA技術的引入,也將數據采集對系統性能的影響降到最低??紤]到實際應用,ESM335x ETA108驅動程序支持單次采樣模式和連續采樣模式,兩種模式下驅動每采集到512個點的數據(1kB數據大小)或者采樣結束就會通知用戶程序,建議應用程序中select函數和read函數一起使用盡快讀出數據,以避免驅動維護大量的數據緩存。
連續采樣處理流程
驅動程序中進行設置的eta108_config結構體。
eta108_config結構體是ETA108的配置數據結構體,包含了采樣率,采樣長度,采樣通道設置,通道寄存器配置等參數。其定義如下:
struct eta108_config
{
unsigned int rate;
unsigned int count;
unsigned int channel;
void *config;
unsigned int config_len;
};
在我們提供的驅動程序中,eta108_config結構體即可用為函數的輸入參考,其結構體成員含義說明如下:
ADS_CONFIG結構體定義
成員 | 定義 / 輸入參數 |
rate | 設置總的采樣率,每通道采樣率= rate/通道數 |
count | 設置每個AD通道的采樣次數>0:單次采樣=0:連續采樣 |
channel | 設置需要采樣的通道,對應位置1 |
config | 指向AD通道配置的buffer,此參數用于設置ETA108的寄存器,config =NULL時,系統將使用默認配置 |
config_len | config指向buffer的長度 |
ETA108單通道采樣時采樣速度可以達到100ksps,如果多通道采樣,由于內部通道轉換需要時間,最高只能達到50ksps,rate設置需要滿足此限制。channel的低8bit(bit0~bit7)依次對應AD通道0~通道7,如果要采集某個通道的數據,需要將其對應的位置為1。比如要采集通道0、通道1和通道7的數據,則應設置channel=0x83;差分模式下只需設置差分通道中的一個通道的對應位為1,比如通道0、通道1在差分模式下工作,只需將0通道位置1,設置channel=0x1。
2、ETA108驅動輸入輸出數據格式:
用戶可以對ETA108的進行設置以改變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 |
寄存器寫
允許的設置及其意義詳見《ETA108數據采集模塊應用手冊》(Linux)。
讀取采樣數據的格式如下(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轉換結果
其中第0、1位總是0,第2、3位為平均模式下增加的2位分辨率,如沒有采用平均模式則此兩位為0,第3-15位為12bit的AD數據。多通道采樣模式下,應用程序從驅動中讀得的AD數據是按通道依次存放的,低通道在前,比如應用程序同時連續采集CH1,CH2,CH5三個通道,read()函數讀得的AD數據存放為CH1、CH2、CH5、CH1、CH2、CH5、CH1………,每個通道16bit。
ETA108的量程為0~4.096V,則可得D13~D2這12bit的數據對應的轉換關系如下表,用戶可據此換算數值:
理想情況下的AD轉換結果
描述 | 模擬量輸入 | 數字量輸出 | |
滿量程范圍 | 4.096V-REF | 二進制 | 十六進制 |
最小分辨率(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、接口函數
1)加載設備驅動:
#:insmod /(目錄)/eta108.ko
會自動創建設備文件 /dev/eta108
2)打開設備文件-open:
int fd = open ( "/dev/eta108", O_RDWR, S_IRUSR | S_IWUSR );
3)設置采樣參數-write:
struct eta108_config transfer;
memset ( &transfer, 0, sizeof(transfer) );
transfer.rate = 100000; //采樣速率
transfer.channel = 0x1; //采樣通道
transfer.count = 10000; //每通道采樣次數
//自定義設置,此處為0通道設置GPA放大2倍,設置為NULL時采用默認設置
unsigned short cmd[1] = {0x8004};
transfer.config_len = 2; //2字節
transfer.config = cmd;
if(write ( fd, &transfer, sizeof(transfer) )<0)
{
printf ( "WRONG!!!!!!!!!!!!!!!!\n" );
exit ( 1 );
}
4)啟動采樣:
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)讀取采樣數據-read:
驅動內部每采集512個點(1kB)的數據或者采樣結束就會通過select函數通知應用程序,建議應用程序中盡快讀出數據,進行存儲或者計算,read函數返回實際讀取的字節數。
int count_in_byte = 0;
int read_count=0;
char read_buf[transfer.count*2*1]; // 1個通道,每個數據2個字節
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)關閉設備文件:
close ( fd );
用戶如需使用ETA108數據采集模塊,請和我們聯系。
-
Linux
+關注
關注
87文章
11345瀏覽量
210417 -
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35622
發布評論請先 登錄
相關推薦
如何動態獲取波形數據中最新一段時間內的波形數據?
ESM335x支持ETA108數據采集
英創串口WiFi方案使用說明
英創WIFI模塊ETA6103和ETA303系列使用說明
英創信息技術主板EM9160實現波形數據采集
![<b class='flag-5'>英</b><b class='flag-5'>創</b>信息技術主板EM9160實現<b class='flag-5'>波形數據采集</b>](https://file.elecfans.com/web1/M00/B3/83/pIYBAF4dNkaAaehpAAB83LL4bRw118.png)
英創信息技術低成本多通道波形采集顯示方案的軟件實現方法
英創信息技術Windows下STM32單片機eclipse編譯環境搭建簡介
![<b class='flag-5'>英</b><b class='flag-5'>創</b>信息技術Windows下STM32單片機eclipse編譯環境搭建簡介](https://file.elecfans.com/web1/M00/B3/E7/pIYBAF47gxiAAmZGAAF_YcYi2yw201.png)
英創信息技術Linux主板多通道視頻采集方案簡介
![<b class='flag-5'>英</b><b class='flag-5'>創</b>信息技術Linux主板多通道視頻<b class='flag-5'>采集</b>方案簡介](https://file.elecfans.com/web1/M00/B4/03/pIYBAF5DajqASvhqAAP3GjVGhzk596.png)
評論