恒凯USB数据采集卡在国产麒麟操作系统下的应用(一)环境设置、采集卡驱动安装及C语言采集应用

  • 一、基础环境设置
  • 二、编译数据采集卡的驱动库
  • 三、编写C语言测试应用程序读取采集卡数据
    • A: 编写一段C测试代码如下:
    • B: 编写Makefile文件,如下:
    • C: 在终端编译测试程序,在终端输入make 命令即可编译出可执行程序usb_daq_test
    • D: 运行测试程序

一、基础环境设置

A: 更新系统 ,打开mate终端,输入:
sudo apt-get update
sudo apt-get install build-essential

B: 安装g++编译器,系统默认一般已经有gcc编译器,只需要单独安装一下g++编译器就可以了,终端输入:
sudo apt install g++
安装完成,使用g++ -v命令查询到版本信息即安装成功。

C: 安装USB相关系统插件,终端输入:
sudo apt install libusb-1.0-0-dev

D: 设置环境变量,使用VIM打开/etc/ld.so.conf,并在其中插入一行
include /usr/local/lib
然后,运行 sudo ldconfig /etc/ld.so.conf命令使其生效。
该行的作用是设置/usr/local/lib目录为应用程序运行时需要加载so库文件时的查找路径,一会我们要将数据采集卡的驱动库文件放置在这个目录里面。

二、编译数据采集卡的驱动库

这里我们以恒凯数据采集卡HK_USB DAQ V1.2这款采集卡产品为例,

附采集卡功能简介:16路单端/8路差分模拟量采集、12位、单通道最大采样100kps
8路单向数字量输入、8路单向数字量输出
1路pwm测量及计数器与2路pwm输出功能
产品购买链接:恒凯多功能数据采集卡USBDAQV12-Labview树莓派教程 工控学习板

首先复制驱动库文件driver_usb_daq V1.2到任意一个目录下,可以看到目录下包含了所有的源文件:

然后在终端输入命令:
make clean
make
编译出驱动库文件libusbdaq_v12.so,将该驱动库文件复制到系统目录,在前目录使用命令:
sudo cp ./libusbdaq_v12.so /usr/local/lib

至此,我们就编译好了数据采集卡的驱动,并安装到了系统当中,以备我们后面应用程序调用板卡的驱动函数读取数据。

三、编写C语言测试应用程序读取采集卡数据

A: 编写一段C测试代码如下:

#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#include <math.h>typedef  char BYTE;

//**以下是驱动库文件的.h同文件的内容,我们可以直接包含h文件,这里为了方便,直接把h文件的内容复制到程序的前面,相关函数的说明可以在数据采集卡的PDF使用手册中找到函数的具体解释///

int OpenUsb(void);
int CloseUsb(void);int  ADSingleV12(int dev,int ad_mod, int chan, int gain, float* adResult);int  ADContinuV12(int dev,int ad_mod, int chan, int gain, int Num_Sample, int Rate_Sample, float  *databuf);int  MADContinuV12(int dev,int ad_mod, int chan_first, int chan_last, int gain, int Num_Sample, int Rate_Sample, float  *mad_data);int  ADContinuConfigV12(int dev,int ad_mod, int chan, int gain, int Rate_Sample);int  MADContinuConfigV12(int dev,int ad_mod, int chan_first, int chan_last, int gain, int Rate_Sample);int  GetAdBuffSizeV12(void);  //-1 --- erro  int  ReadAdBuffV12(int dev,float* databuf, int num);int  ADContinuStopV12(int dev);int  DASingleOutV12(int dev,int chan,int value);int  DADataSendV12(int dev,int chan,int Num,int *databuf);int  DAScanOutV12(int dev,int chan,int Freq,int scan_Num);int  PWMOutSetV12(int dev,int chan,int Freq,float DutyCycle);int  PWMInSetV12(int dev,int mod);int  PWMInReadV12(int dev,float* Freq, int* DutyCycle);int  CountSetV12(int dev,int mod);int  CountReadV12(int dev,int* count);int  DoSetV12(int dev,unsigned char chan,unsigned char state);int  DiReadV12(int dev,unsigned char *value);unsigned int  GetCardIdV12(int dev);int  opened=0;
int i;
int main()
{  if(-1==OpenUsb())   //首先调用打开设备函数打开设备{printf("####usb  device open fail ####\n");return -1;}else{printf("####usb  device open ok  ####\n");}

//这里我们设置采集卡的数字输出口0、2、4、6输出高电平5V,使用电压表测量
//OUT0、2、4、6对GND的输出电压

for(i=0;i<8;i=i+2){DoSetV12(0,i,1);printf("### write Dout-%d set 1  ####\n",i);  }

//这里我们设置采集卡的数字输出口1、3、5、6输出低电平0V

for(i=1;i<8;i=i+2)  {DoSetV12(0,i,0);printf("### write Dout-%d set 0  ####\n",i);    }unsigned char DI=0;DiReadV12(0,&DI);//printf("####Din = %x\n",DI);DASingleOutV12(0,1,(int)(5.8*4095/10));

//直接设置DA1通道的输出电压为固定5.8V

 printf("####DusbEMO  device DA1 output 5.8V  ####\n");DASingleOutV12(0,2,(int)(2.8*4095/10));

//直接设置DA2通道的输出电压为固定2.8V

printf("####DusbEMO  device DA1 output 2.8V  ####\n");

//设置PWM1输出10Hz频率,占空比30.5%的周期方波,可以使用示波器观看

PWMOutSetV12(0,0,10,30.5);printf("####DusbEMO  device PWM0 output FREq=10hz,duty=30.5%  ####\n");

//设置PWM2输出10H0z频率,占空比40.5%的周期方波,可以使用示波器观看

PWMOutSetV12(0,1,100,40.5);//printf("####DusbEMO  device PWM0 output FREq=100hz,duty=40.5%  ####\n");float adResult1;

//循环采集模拟输入通道AD1–16,以单端模式,选择±10V量程,采集并打印到终端输出

 for(i=0;i<16;i++)//{//ADSingleV12(int dev,int ad_mod, int chan, int gain, float* adResult);if(ADSingleV12(0,1,i,1,&adResult1)==0){printf("AD_single read ad %d =%f\n",i,adResult1);}else{printf("read ad %d fail!\n",i);}}float data[1024];//ADContinuV12(int dev,int ad_mod, int chan, int gain, int Num_Sample, int Rate_Sample, float  *databuf);

//调用单通道连续采集函数,采集AD1通道,以10K采样率连续采集1024个数据并打印,实际测试使用可以使用信号发生器输出一个100Hz的正弦波给通道1,这样采集的数据每100个数据为一个周期.

if(ADContinuV12(0,1,0,1,1024,10000,data)==0){for(i=0;i<50;i++){printf("AD_continu ad[%d]=%f\n",i,data[i]);}}else{printf("AD_continu read ad fail!\n");}CloseUsb();return 0;
}

B: 编写Makefile文件,如下:

INCLUDEDIR  := usr/local/include/libusb-1.0/
LIDRARYDIR  := /usr/local/lib/
CC    := gcc
TARGET   := usb_daq_test
SOURCE   := usb_daq_test.c
$(TARGET): $(SOURCE)$(CC) -o $@ $(SOURCE) -L $(LIDRARYDIR) -lusbdaq_v12  -lusb-1.0 -lm -lpthread .PHONY: clean
clean:-rm $(TARGET)

特别需要注意的地方,就是在编译选项当中需要加入 -lusbdaq_v12选项用于链接采集卡的动态库,加入 -lusb-1.0用于链接系统USB插件库,加入-lm -lpthread支持线程等操作, /usr/local/lib/是USB驱动库的存放路径。

C: 在终端编译测试程序,在终端输入make 命令即可编译出可执行程序usb_daq_test

D: 运行测试程序

将USB数据采集卡通过数据线连接到电脑USB口,在终端运行测试程序,输入命令:
sudo ./usb_daq_test
运行结果如下:

jq@jqPC:~/daq-v1.2-dev/test/$ sudo ./usb_daq_test
####VID = 1d6b;PID = 3 ####
####VID = bda;PID = b009 ####
####VID = 408;PID = 5362 ####
####VID = 17ef;PID = 6019 ####
####VID = 7812;PID = 55b1 ####
####VID = 1d6b;PID = 2 ####
####usb  device open ok  ####
### write Dout-0 set 1  ####
### write Dout-2 set 1  ####
### write Dout-4 set 1  ####
### write Dout-6 set 1  ####
### write Dout-1 set 0  ####
### write Dout-3 set 0  ####
### write Dout-5 set 0  ####
### write Dout-7 set 0  ####
####Din = 0
####DusbEMO  device DA1 output 5.8V  ####
####DusbEMO  device DA1 output 2.8V  ####
####DusbEMO  device PWM0 output FREq=10hz,duty=30.5%#
####DusbEMO  device PWM0 output FREq=100hz,duty=40.5%#
AD_single read ad 0 =5.443223
AD_single read ad 1 =4.383394
AD_single read ad 2 =4.442002
AD_single read ad 3 =3.743589
AD_single read ad 4 =4.554335
AD_single read ad 5 =3.753358
AD_single read ad 6 =3.128205
AD_single read ad 7 =2.473748
AD_single read ad 8 =0.866911
AD_single read ad 9 =0.148962
AD_single read ad 10 =-0.354091
AD_single read ad 11 =-0.798534
AD_single read ad 12 =-0.925519
AD_single read ad 13 =-1.267399
AD_single read ad 14 =-1.404151
AD_single read ad 15 =-1.462759
AD_continu ad[0]=5.443223
AD_continu ad[1]=5.448108
AD_continu ad[2]=5.448108
AD_continu ad[3]=5.448108
AD_continu ad[4]=5.443223
AD_continu ad[5]=5.443223
AD_continu ad[6]=5.443223
AD_continu ad[7]=5.438339
AD_continu ad[8]=5.448108
AD_continu ad[9]=5.448108
AD_continu ad[10]=5.448108
AD_continu ad[11]=5.443223
AD_continu ad[12]=5.443223
AD_continu ad[13]=5.443223
AD_continu ad[14]=5.443223
AD_continu ad[15]=5.443223
AD_continu ad[16]=5.448108


恒凯USB数据采集卡在国产麒麟操作系统下的应用(一)环境设置、采集卡驱动安装及C语言采集应用相关推荐

  1. 中标麒麟linux操作系统下的英伟达(NV/nvidia)显卡驱动安装

    中标麒麟linux是我国目前市场份额最大的国产linux操作系统,从细节可以看出改来自于Fedora Linux 系统,所以几乎可以看做Fedora Linux的汉化版,那么很简单,能在Fedora ...

  2. 在国产麒麟操作系统上如何安装ONLYOFFICE桌面编辑器V7.3

    在国产麒麟操作系统上如何安装 ONLYOFFICE 桌面编辑器 V7.3 在国产麒麟操作系统上如何安装 ONLYOFFICE Docs 7.3 之前的推文介绍过,如何把国产麒麟操作系统作为服务器端,安 ...

  3. R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下、RStudio开发环境安装)

    R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下.RStudio开发环境安装) RStudio是R语言的集成开发环境(IDE),它是一个独立的开源项目,它将许多功能强大的编程 ...

  4. 基于RTMP实现Linux|麒麟操作系统下屏幕|系统声音采集推送

    背景 Windows操作系统自问世以来,以其简单易用的图形化界面操作受到大众追捧,为计算机的普及.科技的发展做出了不可磨灭的功绩,也慢慢的成为人们最依赖的操作系统.在中国,90%以上的办公环境都是Wi ...

  5. java环境卡顿_解决Emacs在windows使用的问题,比如环境设置、卡顿……

    发现Emacs下编辑代码时非常卡顿,环境设置也不方便,百度了一通,集合一些设置如下,发现这个神器真的是很爽,秒杀一众IDE 一.建一个bat文件设置启动变量 windows下,环境设置可以自己写一个b ...

  6. tongweb java_home_中标麒麟操作系统下部署 Web项目(Tongweb + DM)

    我的系统:中标麒麟桌面操作系统 V7.0 内核:Linux 处理器:龙芯 配置 JDK 安装东方通之前需要先安装 JDK.检查系统是否自带了JDK:打开终端输入 java -version 发现系统确 ...

  7. [轻量级RTSP服务]Linux|麒麟操作系统下实现屏幕|系统声音采集

    背景 随着国产操作系统的推进,传统行业对Linux平台的呼声和需求越来越大,之前几年,我们发布了Linux平台运营商级的RTSP转RTMP推送模块.RTMP推送模块和RTSP.RTMP播放模块,前段时 ...

  8. Linux操作系统下三种配置环境变量的方法(linux下几种profile执行顺序)

    http://www.linuxeden.com/html/sysadmin/20080424/56879.html 现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量, ...

  9. 铂链第1课 如何在WINDOWS操作系统下搭建BOTTOS开发环境

    1. 文章摘要 铂链(Bottos)是国内首个基于区块链技术的数据共享.AI模型共享生态一站式应用平台,是实现将数据和模型通过点对点网络进行登记发行.转让交易的去中心化网络共享协议. [本文目标] 辉 ...

  10. [zz]Linux操作系统下三种配置环境变量的方法

    个人的总结: 设置了/etc/profile 和 ~/.bashrc 之后,使用了source 命令,是可以echo添加的变量,但是用getenv读不出来,然后使用env命令也显示不出来,是因为没有e ...

最新文章

  1. python的sort_python sort、sorted
  2. 命令行的基本使用方法(权限)
  3. Java Web -【分页功能】详解
  4. 1 张图秒懂 Nova 16 种操作 - 每天5分钟玩转 OpenStack(44)
  5. 在域环境下搭建samba服务器
  6. .NET三种异步模式(APM、EAP、TAP)
  7. 吴恩达深度学习 —— 4.6 前向传播和反向传播
  8. weblogic详解
  9. win11不显示缩略图怎么办 windows11不显示缩略图的解决方法
  10. PC-hosts 的使用 [可使电脑无法正常上网]
  11. java数组程序_java数组
  12. pppoe网络无法使用 zmap
  13. atmega128 单片机 密码锁 PROTEUS 仿真
  14. gwas snp 和_【交流】关于SNP与GWAS(Genome Wide Association study)的一些想法
  15. 博客平台遭虚假勒索攻击、新黑客组织称对以色列的攻击负责|11月16日全球网络安全热点
  16. SANGFOR SCSA——linux系统基础
  17. 2022年全国最新高级消防设施操作员模拟题库及答案
  18. 光束法空三的计算问题,误差方程的多余观测数,未知数个数、多余观测值的计算
  19. 等了20年的物联网,这次真的会成功吗?
  20. sql注入绕过姿势--骚姿势大全

热门文章

  1. python删除文本框内容_js清除文本框内容
  2. 把视频文件放在服务器上,生成链接供外部访问
  3. vue 生成qrCode二维码保存图片至本地
  4. 伍斯特学院计算机专业排名,美国大学计算机专业排名!
  5. 前端JS时间验证,结束时间不早于开始时间
  6. 大师云集!CCAI 2017 中国人工智能大会 8 折强势优惠中
  7. graphpad做单因素方差分析_GraphPad中国官网 - Prism 8 统计指南 - 单因素方差分析
  8. 在Unity中模拟汽车的移动
  9. 2021上半年教资综合素质——主观题
  10. 人工智能的不可解释性