PCI-1720U 是一款 PCI总线的4路12位隔离数字量到模拟量的输出卡
官方给出的板卡驱动是在win7下面安装的,这不符合我们Ubuntu电脑的需求
然后我上网搜了下Ubuntu/Linux环境下装这个板卡驱动可以用comedi
comedi是 Linux 下用于数据采集卡的驱动程序和工具链的源代码。它支持数百种不同的数据采集设备,PCI-1720U 正在其支持的设备列表中
官网:https://comedi.org/index.html
支持设备列表:

所以就给我们的Ubuntu装 comedi驱动和comedi库就行了
我很惊喜的发现这个Ubuntu系统已经内置了comedi驱动了,不过就算没有也不要紧,可以从官网git clone然后安装
root@ddaq-System-Product-Name:/home/ddaq/da# modinfo comedi
filename: /lib/modules/5.15.0-1084-realtime/kernel/drivers/comedi/comedi.ko
license: GPL
description: Comedi core module
author: https://www.comedi.org
srcversion: 03206620A6FFD857542A37B
depends:
retpoline: Y
intree: Y
name: comedi
vermagic: 5.15.0-1084-realtime SMP preempt_rt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 0A:DC:8D:48:3A:26:BC:9F:17:DA:2B:60:0B:2C:32:B4:51:04:40:5C
sig_hashalgo: sha512
signature: 1B:8D:20:8E:DB:E0:10:EA:C1:52:79:AC:2E:AD:F4:B3:C7:09:31:C3:
62:56:28:14:09:8A:F2:D6:FC:22:A1:EC:A0:0C:06:F6:9E:C2:65:9D:
1D:81:EC:CD:D7:52:87:6F:C7:A8:BC:59:FF:0F:5F:8C:BB:91:60:37:
6C:BD:C8:14:EA:A3:B6:29:19:DF:AD:60:4C:5A:03:11:D1:27:27:B9:
CB:73:06:37:62:A3:59:80:4E:4D:19:68:1A:E0:39:BB:08:16:59:A6:
FB:70:3F:54:8E:66:B9:B8:A2:7C:B6:F8:3D:09:FF:76:81:F0:29:76:
75:37:2F:D1:A3:2F:46:EC:56:AA:BF:9F:AA:36:60:2E:40:AC:61:82:
42:9D:23:63:6D:C7:49:5F:8C:04:DE:C2:8A:BA:14:64:83:7B:10:90:
2E:EE:55:37:A6:77:2A:28:7A:01:54:78:F0:F3:16:3C:FF:52:71:FD:
6F:66:8D:7A:77:C2:B9:B0:A5:29:A6:8D:AE:F7:05:77:C5:85:CD:9F:
7E:05:1B:67:B7:72:DC:32:14:1B:AF:DD:3A:FB:BD:34:F9:05:08:B8:
2A:4A:04:F9:4A:83:B7:07:6A:8E:2A:6E:52:16:1C:38:FD:C7:30:FB:
2B:7C:B6:08:99:BB:78:1A:57:69:82:05:E6:68:3E:AB:F4:F1:55:5B:
B9:58:BE:FB:14:94:43:5A:DB:04:7B:A7:65:F8:C2:8D:DB:8F:B8:59:
1F:C7:A6:72:86:3D:5A:64:CB:B7:7A:4B:7C:26:F5:36:A5:79:C1:F6:
22:AE:6C:EF:4B:06:BC:22:FF:32:B7:C6:A9:5E:88:CE:30:C7:EB:9C:
44:A0:8E:A1:79:4B:0C:1C:12:1A:19:6F:22:05:2C:13:00:26:48:D1:
0B:B8:F9:94:21:0C:7C:24:61:CF:30:FB:97:12:5D:9C:C4:9C:DE:88:
C4:0A:60:24:B8:EF:42:2F:0A:D4:25:B7:17:8D:BB:8E:97:F5:42:52:
17:40:F3:E2:4B:DF:66:30:35:C1:1D:59:9F:8E:96:F5:97:1B:C3:D2:
84:3B:45:ED:D3:5E:93:34:9C:A8:B3:6B:FF:93:24:2C:3B:01:C0:20:
80:B7:E6:96:35:09:B4:8A:66:3C:83:96:A4:D8:A3:6B:CF:6A:0B:16:
69:A0:39:BE:2C:D2:28:93:FD:55:1D:C0:2A:BC:CF:4B:80:3B:81:CC:
A7:91:8A:A7:A1:B5:DD:2A:45:E4:8B:54:75:05:47:11:96:70:4D:49:
E1:10:CE:F6:92:F9:81:40:9B:9A:69:F6:E5:BE:7C:ED:DF:BC:82:51:
DC:AB:26:90:9F:B5:C6:89:FD:D6:21:9B
parm: comedi_num_legacy_minors:number of comedi minor devices to reserve for non- auto-configured devices (default 0) (ushort)
parm: comedi_default_buf_size_kb:default asynchronous buffer size in KiB (default 2048) (uint)
parm: comedi_default_buf_maxsize_kb:default maximum size of asynchronous buffer i n KiB (default 20480) (uint)
然后库comedilib也可以从官网git clone
不过我这里Ubuntu系统支持,直接用包管理器更方便
sudo apt install comedilib-dev
这时板卡插入电脑主板插槽,可以用这个指令来看装好没有
sudo comedi_board_info /dev/comedi0
命令显示
sudo comedi_board_info /dev/comedi0
overall info:
version code: 0x00074c
driver name: adv_pci1720
board name: adv_pci1720
number of subdevices: 2
subdevice 0:
type: 2 (analog output)
flags: 0x00020000
number of channels: 4
max data value: 4095
ranges:
all chans: [0 V,5 V] [0 V,10 V] [-5 V,5 V] [-10 V,10 V]
command:
not supported
subdevice 1:
type: 3 (digital input)
flags: 0x00010000
number of channels: 4
max data value: 1
ranges:
all chans: [0 V,5 V]
command:
not supported
看设备是否存在
ls /dev/comedi*
// pci1720_verify.c - 基础功能验证
#include <stdio.h>
#include <comedilib.h>
#include <unistd.h>
int main() {
comedi_t *dev;
int ret;
// 打开设备
dev = comedi_open("/dev/comedi0");
if (!dev) {
printf("错误:无法打开设备 /dev/comedi0\n");
return 1;
}
printf("✓ PCI-1720U设备打开成功\n");
// 验证模拟输出通道
unsigned int subdevice = 0; // 模拟输出子设备
unsigned int channel, range = 0; // 使用默认范围[0V,5V]
unsigned int aref = AREF_GROUND;
lsampl_t data;
printf("测试4个模拟输出通道...\n");
// 测试每个通道
for (channel = 0; channel < 4; channel++) {
// 设置到中间电压(2.5V)
data = 2048; // 4095对应5V,2048对应2.5V
ret = comedi_data_write(dev, subdevice, channel, range, aref, data);
if (ret < 0) {
printf("✗ 通道 %d 写入失败\n", channel);
} else {
printf("✓ 通道 %d 设置为 2.5V (数据值: %d)\n", channel, data);
}
usleep(500000); // 等待0.5秒
}
printf("等待3秒...\n");
sleep(3);
// 清零所有通道
printf("清零所有通道...\n");
for (channel = 0; channel < 4; channel++) {
comedi_data_write(dev, subdevice, channel, range, aref, 0);
printf("✓ 通道 %d 已清零\n", channel);
}
comedi_close(dev);
printf("✓ 测试完成!\n");
return 0;
}
编译和运行
gcc -o pci1720_verify pci1720_verify.c -lcomedi
sudo ./pci1720_verify
首先知道引脚

可以和转接板对应

然后示波器引出的那个线,接地的接到引脚里的AGND
探头就指向Vout1-4,示波器需要自己调一下频率和幅度
这四个Vout的输出是完全由程序决定的,程序怎么输出就是怎样
运行一个正弦波程序,看效果

运行一个方波程序,看效果

本文章使用limfx的vscode插件快速发布