<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)系。

    国产成人精品无码专区| 国内精品九九久久久精品| 精品无码综合一区| 亚洲国产精品久久久久婷婷老年| 亚洲欧美国产精品专区久久| 国产精品电影在线| 久久精品国产亚洲av麻豆蜜芽| 黑猫福利精品第一视频| 午夜精品美女自拍福到在线| 精品国产成人在线| 国产精品三级av及在线观看| 好吊妞视频这里有精品| 99久久国语露脸精品国产| 免费精品国产自产拍在| 奇米精品视频一区二区三区| 四虎精品成人免费视频| 久99久热只有精品国产女同| 国产精品内射后入合集| 国产精品国产三级国产普通话a | 国精品产露脸自拍| 国产精品中文字幕在线| 精品熟女少妇AV免费观看 | 精品国产热久久久福利| 国产精品天天在线午夜更新| 精品无人区麻豆乱码1区2区新区 | 在线精品亚洲一区二区三区 | 久久精品国产一区二区| 亚洲国产精品一区二区三区在线观看| 久久777国产线看观看精品卜| 99久久精品影院老鸭窝| 久久精品国产亚洲7777| 国产vA免费精品高清在线观看| 成人99国产精品| 精品久久久久久中文字幕大豆网| 久久亚洲精品成人综合| 国产精品 一区 在线| 这里只有精品视频| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产精品久久久久乳精品爆 | 韩国精品一区二区三区无码视频| 无码国产精品一区二区免费3p|