<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>
  • Linux IIO接口的低成本8通道AD

     2022-5-12     作者:黃志超         

      ESM7200主板是英創公司推出的帶有8路單端3.3V/12-bit AD的低成本主板。主板上提供了8路AD,能夠支持多個通道單次采樣,或者單個通道連續采集。經過測試在保證數據準確性和系統讀取的情況下,連續采樣速率最高約為58kSPS。由于這8路AD都是CPU自帶的資源,性能上和專門的AD芯片還是有一定差距,所以主要面向的是需要單次采集或者單通道連續采集的應用場景。


      如果應用只是定時讀取一次AD的采樣值,那么使用ESM7200主板上提供的8路AD是可以滿足要求的。如果需要高速采集,ESM7200主板可以提供一路最高58kSPS采樣率的通道,還需要到達更高的要求的話,就可以參考英創公司推出的專門的高速AD擴展方案,比如:《ESM7000異構CPU實時應用之三 8路并行數采應用程序》


      Linux系統中,AD功能都是基于IIO(Industrial I/O)子系統提供的,這是一個專門用于傳感器,ADC或DAC的子系統,具體的介紹可以參考資料Linux Industrial I/O Subsystem。在ESM7200主板中,8路AD對應的設備如下表:


    管腳AD通道對應設備名稱索引號
    E2AIN_CH1/sys/bus/iio/devices/iio:device0/ in_voltage0_raw0
    E3AIN_CH2/sys/bus/iio/devices/iio:device0/ in_voltage1_raw1
    E4AIN_CH3/sys/bus/iio/devices/iio:device0/ in_voltage2_raw2
    E5AIN_CH4/sys/bus/iio/devices/iio:device0/ in_voltage3_raw3
    E6AIN_CH5/sys/bus/iio/devices/iio:device0/ in_voltage4_raw4
    E7AIN_CH6/sys/bus/iio/devices/iio:device0/ in_voltage5_raw5
    E8AIN_CH7/sys/bus/iio/devices/iio:device0/ in_voltage8_raw8
    E9AIN_CH8/sys/bus/iio/devices/iio:device0/ in_voltage9_raw9


      可以看到每一路AD都對應一個IIO設備節點,當要讀取AD的值的時候,就需要使用這些設備節點。我們首先介紹單次采樣的讀取方法。


      本次測試使用的是ESM7200主板加上ESMARC系列通用評估底板,在評估底板上8路AD信號被引到了CN25(ISA)的端子上,因為ESMARC系列部分主板型號是支持ISA總線的,而ESM7200沒有ISA總線,取而代之的是8路AD,具體的定義可參考下表:


    信號名稱及簡要描述CN25信號名稱及簡要描述
    PIN#PIN#

    12
    AIN_CH134AIN_CH5
    AIN_CH256AIN_CH6
    AIN_CH378AIN_CH7
    AIN_CH4910AIN_CH8

    1112

    1314

    1516

    1718

    1920GND,模擬地


      客戶如果考慮自己設計底板,可以參考表1查詢每一路AD在主板上對應的管腳。如果是使用ESMARC評估底板進行測試和評估,可以參考表2連接外部模擬信號進行測試。


      為了方便客戶操作IIO子系統提供的各種功能,我們移植了ADI公司提供的libiio,這個庫文件抽象了和硬件相關的底層細節,并提供了簡單而完整的編程接口,可用于高級項目的編程。下面我們就基于libiio實現單次讀取操作。


      首先是獲取IIO設備,這部分代碼在ESMARC系統主板上是固定的,用戶可以直接使用。


    struct iio_device *dev;  
    	  
    /* 獲取IIO設備 */  
    ctx = iio_create_context_from_uri("local:");  
    	  
    dev = iio_context_get_device(ctx, 0);  
    if (!dev) {  
        fprintf(stderr, "Device not found\n");  
        iio_context_destroy(ctx);  
        return EXIT_FAILURE;  
    }

     

      然后是指定對應的通道,這里填入AD通道對應的index號(參考表1),根據實際使用的通道填寫就行了。


    /* 獲取對應的IIO通道,可以根據實際情況修改成需要的通道 */  
    ch = iio_device_get_channel(dev, 9);  
    if (!iio_channel_is_scan_element(ch) ||  
        iio_channel_is_output(ch)) {  
        printf("Can not get channel %d\n", ch);  
        return -1;  
    }

     

    獲取到對應的通道后,就可以直接讀取通道的原始值了,注意讀取來的數據是字符串。


    const char *attr = "raw";  
    char *val[10];  
      
    /* 讀取channel的原始值 */  
    ret = iio_channel_attr_read(ch, attr, &val, 10);  
    if (ret <= 0) {  
        printf("ERROR: while reading '%s': %d\n",  
        attr, ret);  
    }  
      
    /* 數據處理,這里將數據直接打印出來 
     * 用戶可以根據實際的情況進行處理,比如寫入到記錄文件中 
     * */  
    printf("raw value: %s\n", val);

     

      通過libiio很簡單就能夠將對應通道的值讀取出來,單次讀取的方式還可以采用標準的文件讀取方式(Linux系統中所有設備都是文件),在之前的文章中我們已經介紹過了《英創公司Linux主板低成本AD方案介紹》,用戶可以根據自己的習慣選擇。


      感興趣的客戶可以聯系英創的工程師索要例程的代碼。在后續的文章中,我們將介紹低成本方案中如何實現單路的連續采樣。

    久久青草国产精品一区| 亚洲国产综合精品| 亚洲AV无码国产精品色午友在线 | 国产精品亚洲а∨无码播放| 久久国产精品一国产精品| 国产成人精品福利网站在线| 国产精品资源一区二区| 国产精品 视频一区 二区三区| 国内精品伊人久久久久777| 亚洲精品av无码喷奶水糖心| 精品美女在线观看| 精品四虎免费观看国产高清午夜| 久久精品国产亚洲AV久| xxx国产精品xxx| 久久这里只有精品18| 国产精品午夜无码AV天美传媒| 精品多毛少妇人妻AV免费久久| 久久久久99精品成人片试看| 国产精品成人自拍| 无码人妻精品一区二区三区夜夜嗨 | 国内精品久久久久久久久蜜桃| 亚洲国产精品午夜电影 | 拍国产乱人伦偷精品视频| 国产精品自在拍一区二区不卡| 久久精品免费观看国产| 久久激情亚洲精品无码?V| 精品视频一区二区三三区四区| 成人免费无码精品国产电影 | 久久精品国产9久久综合| 精品久人妻去按摩店被黑人按中出 | 日韩中文字幕精品免费一区| 九九热这里都是精品| 老牛精品亚洲成av人片| 国产精品视频第一区二区三区| 国产精品成人一区二区| 日本精品久久久久影院日本| 精品国产亚洲一区二区三区在线观看 | 日韩精品一区二区三区毛片| 精品福利视频导航| 久久精品国产亚洲沈樵| 国产精品无码A∨精品影院 |