关键词:PCIe/PXIe-5411、DO
1.简介
图 1 PCIe/PXIe-5411
PCIe/PXIe-5411 是一个32 通道高速数字I/O (HSDIO)模块。32 个数字通道可以使用软件对数据方向进行编程。信号电平支持4 个选项:1.8V、2.5V、3.3V和5V。数据序列可通过软件自由组合。该设备利用高吞吐量PCI Express 总线和多核优化驱动程序和应用软件来提供高性能功能。
2.问题描述
如何使用PCIe/PXIe-5411输出10us脉宽,间隔100us的双脉冲信号?
3.问题答复
配置PCIe/PXIe-5411更新率为5MS/s,则1个点为200ns,使用有限点模式,编辑10us的高电平,100us的低电平,10us高电平的数据,也就是50个高,500个低,50个高,一共600个字节数据,写入PCIe/PXIe-5411输出,即可实现高精度脉冲输出。
4.参考代码
配置PCIe/PXIe-5411更新率为5MS/s,则1个点为200ns,使用有限点模式,编辑10us的高电平,100us的低电平,10us高电平的数据,也就是50个高,500个低,50个高,一共600个字节数据,写入PCIe/PXIe-5411输出,即可实现高精度脉冲输出。
获取高低电平点数
1. /*
2. * 一个点的时间 = 1/采样率
3. */
4. highcount = (double)numericUpDown1.Value / 0.2; //高脉宽的点数=脉宽时间/一个点的时间
5. idlecount = (double)numericUpDown2.Value / 0.2;//脉宽间隔的点数=脉宽间隔的时间/一个点的时间
6.
7. datacount = (int)(highcount + idlecount + highcount);//所有数据点数
写入数据
1. /// <summary>
2. /// writeData
3. /// </summary>
4. private void writeData()
5. {
6. writeValue = new byte[datacount + 1];
7.
8. singlePeriodwriteValue = new byte[datacount + 1];
9.
10. //分别写入高低脉宽
11. for (int i = 0; i < highcount; i++)
12. {
13. singlePeriodwriteValue[i] = 1;
14. }
15.
16. for (int i = 0; i < idlecount; i++)
17. {
18. singlePeriodwriteValue[(int)highcount + i] = 0;
19. }
20.
21. for (int i = 0; i < highcount; i++)
22. {
23. singlePeriodwriteValue[(int)highcount + (int)idlecount + i] = 1;
24. }
25.
26. //生成复制到 writeData 数组的单周期数字信号
27. int periodcount = 0;
28. //输出一个周期
29. periodcount = writeValue.Length / singlePeriodwriteValue.Length;
30. for (int i = 0; i < periodcount; i++)
31. {
32. //数据拷贝
33. Buffer.BlockCopy(singlePeriodwriteValue, 0, writeValue, i * singlePeriodwriteValue.Length * sizeof(byte), singlePeriodwriteValue.Length * sizeof(byte));
34. }
35.
36. //writeData
37. doTask.WriteData(writeValue, (uint)datacount, -1);
38. }
Copyright © 2016-2024 JYTEK All Rights Reserved.