<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 基于ESM335x主板的多通道波形數(shù)據(jù)采集方案

     2016-7-20             

    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)信號分析、瞬態(tài)信號采集、通用數(shù)據(jù)采集等多種應(yīng)用領(lǐng)域。現(xiàn)ESM335x Linux已支持ETA108數(shù)據(jù)采集模塊。


    ESM335x系列工控主板多通道數(shù)據(jù)采集方案.gif


      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。其中有快速平均和精確平均兩種模式可以選擇。快速平均模式:對4,8或16次采樣結(jié)果做平均,可增加AD分辨率到14bit,快速平均模式適用于輸入到PGA的信號比較穩(wěn)定的情況。精確平均模式:對4,8或16次采樣結(jié)果做平均,可得到比快速平均模式更精確的采樣結(jié)果。此模式在輸入信號不太穩(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è)置方法請參考《ETA108數(shù)據(jù)采集模塊應(yīng)用手冊》(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主板之間僅靠簡單的4線制SPI接口就實(shí)現(xiàn)了硬件連接,同時(shí),DMA技術(shù)的引入,也將數(shù)據(jù)采集對系統(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ù)緩存。


    1.jpg

    連續(xù)采樣處理流程


      驅(qū)動(dòng)程序中進(jìn)行設(shè)置的eta108_config結(jié)構(gòu)體。


      eta108_config結(jié)構(gòu)體是ETA108的配置數(shù)據(jù)結(jié)構(gòu)體,包含了采樣率,采樣長度,采樣通道設(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)體成員含義說明如下:


      ADS_CONFIG結(jié)構(gòu)體定義

    成員定義 / 輸入?yún)?shù)
    rate

     設(shè)置總的采樣率,每通道采樣率= rate/通道數(shù)

    count 設(shè)置每個(gè)AD通道的采樣次數(shù)  >0:單次采樣  =0:連續(xù)采樣
    channel 設(shè)置需要采樣的通道,對應(yīng)位置1
    config 指向AD通道配置的buffer,此參數(shù)用于設(shè)置ETA108的寄存器,config =NULL時(shí),系統(tǒng)將使用默認(rèn)配置
    config_len config指向buffer的長度


      ETA108單通道采樣時(shí)采樣速度可以達(dá)到100ksps,如果多通道采樣,由于內(nèi)部通道轉(zhuǎn)換需要時(shí)間,最高只能達(dá)到50ksps,rate設(shè)置需要滿足此限制。channel的低8bit(bit0~bit7)依次對應(yīng)AD通道0~通道7,如果要采集某個(gè)通道的數(shù)據(jù),需要將其對應(yīng)的位置為1。比如要采集通道0、通道1和通道7的數(shù)據(jù),則應(yīng)設(shè)置channel=0x83;差分模式下只需設(shè)置差分通道中的一個(gè)通道的對應(yīng)位為1,比如通道0、通道1在差分模式下工作,只需將0通道位置1,設(shè)置channel=0x1。


      2、ETA108驅(qū)動(dòng)輸入輸出數(shù)據(jù)格式:

      用戶可以對ETA108的進(jìn)行設(shè)置以改變ETA108工作模式,eta108_config中config指向的buffer格式為:


    bit

    1514131211109876543210
    data10A3A2A1A000D7D6D5D4D3D2D1D0

    寄存器寫


      允許的設(shè)置及其意義詳見《ETA108數(shù)據(jù)采集模塊應(yīng)用手冊》(Linux)


      讀取采樣數(shù)據(jù)的格式如下(unsigned short):


    bit

    1514131211109876543210
    dataD13D12D11D10D9D8D7D6D5D4D3D2D1D000

    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ù)對應(yīng)的轉(zhuǎn)換關(guān)系如下表,用戶可據(jù)此換算數(shù)值:


      理想情況下的AD轉(zhuǎn)換結(jié)果

    描述模擬量輸入數(shù)字量輸出
    滿量程范圍4.096V&shy;REF二進(jìn)制十六進(jìn)制
    最小分辨率(LSB)V&shy;REF/4096
    滿量程V&shy;REF-1LSB1111 1111 1111FFFF
    1/2量程V&shy;REF/21000 0000 00008000
    1/2量程 - 1 LSBV&shy;REF/2-1LSB0111 1111 11117FFF
    0V0000 0000 00000000


      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ì)通過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<transfer.count*2*1; i++ )

        {

            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ù)采集模塊,請和我們聯(lián)系。

    大伊香蕉在线精品视频人碰人| 国产精品揄拍100视频| 亚洲中文字幕久久精品无码2021| 538国产精品一区二区在线| 99精品无人区乱码在线观看| 亚洲精品无码久久一线| 国产伦精品一区二区三区免费下载| 亚洲精品91在线| 国产AV国片精品| 国产精品极品美女自在线观看免费| 最新欧美精品一区二区三区| 欧洲成人午夜精品无码区久久| 精品国产乱码久久久久久浪潮| 精品免费国产一区二区三区| 91久久精品无码一区二区毛片| 青草青草久热精品视频在线网站| 亚洲精品专区在线观看| 欧洲精品一卡2卡三卡4卡乱码| 精品国产乱码久久久久软件| 久久久精品2019中文字幕之3| 久久久精品久久久久特色影视| 国产伦精品一区二区三区精品| 最新国产精品剧情在线SS| 在线观看精品视频看看播放| 久久国产精品免费观看| 国产自啪精品视频网站丝袜| 亚洲午夜福利精品无码| 四虎成人精品在永久在线观看| 国产精品麻豆欧美日韩WW | 高清国产精品人妻一区二区| 人妻无码精品久久亚瑟影视| 国产精品扒开腿做爽爽的视频 | 亚洲欧洲国产精品久久| 亚洲国产精品VA在线看黑人| 亚洲伊人久久精品影院| 久久国产热这里只有精品| 午夜精品久久久久久久无码| 国产精品国产三级国产AV′| 日本久久中文字幕精品| 精品久久久久久无码人妻中文字幕| 久久频这里精品99香蕉久|