matlab - 从 USB-1024HLS DAQ 板生成 PWM/时钟信号

标签 matlab hardware

该板是否有 API 函数调用,允许我在板上运行其他代码时在输出上生成 500 kHz 的时钟信号?预先感谢您的建议。

最佳答案

根据Supported Hardware documentationData Acquisition Toolbox 的 2.8 或更高版本需要支持测量计算 USB-1024HLS 设备。假设您有 2.8 或更高版本,以下内容应该接近适合您的解决方案...

第一步是获取设备的硬件 ID。函数DAQHWINFO应该对此有所帮助:

deviceInfo = daqhwinfo('mcc');

从结构 deviceInfo 获取的硬件 ID 可用于使用 DIGITALIO 创建数字 I/O 对象 (DIO)。功能:

dio = digitalio('mcc',hardwareID);

接下来,您必须使用 ADDLINE 添加两条输出线(用于时钟信号和脉宽调制 (PWM) 信号) :

addline(dio,0:1,'out');

然后,您必须设置一些 DIO 属性。

set(dio,'TimerPeriod',0.000002);  % i.e. 500 kHz
set(dio,'TimerFcn',@update_outputs);

函数update_outputs在每个定时器周期被调用一次,并且应该将输出引脚设置为适当的值。 clock signal只是每个定时器周期在 0 和 1 之间来回切换。 PWM signal也可能在 0 和 1 之间交替,但它不会在每个计时器周期内改变,而是根据您想要的脉宽调制类型在每种状态下保留一定的时间。您的 update_outputs 函数最终可能如下所示:

function update_outputs(obj,event)
  currentValues = getvalue(obj);
  clockValue = ~currentValues(1);
  pwmValue = pwm_compute();
  putvalue(obj,[clockValue pwmValue]);
end

请注意,这使用 PUTVALUEGETVALUE设置/获取输出引脚的值。您必须编写函数pwm_compute,以便它为每个时间段计算新的 PWM 值。由于pwm_compute可能必须知道已经输出了多少个值(即已经被调用了多少次),因此您可以使用 persistent variable 来跟踪它。 :

function newValue = pwm_compute
  persistent nValues;
  if isempty(nValues)
    nValues = 0;
  else
    nValues = nValues+1;
  end
  ...
  % Compute the new value for the (nValues+1) time period
  ...
end

这只是一种可能的解决方案。您可以预先计算 PWM 信号并从向量或数据文件中提取每个定时器周期的值,或者您可以使用 event data structure传递给 update_outputs 以获取计时器事件的时间(我相信相对于 DIO 计时器启动)。

最后,您必须启动 DIO:

start(dio);

...并且,一旦您使用完它,请将其删除并从内存中清除:

delete(dio);
clear dio;

一个潜在的绊脚石...

生成 500 kHz 信号可能很困难。它的频率如此之高,您可能会遇到问题,特别是使用“TimerFcn”时,它每个计时器周期都会调用一次。如果“TimerFcn”运行时间超过 0.000002 秒,some timer events may not be processed ,导致输出实际上频率较低。我有一种感觉,你可能必须使用较低的信号频率才能正常工作,但我可能是错的。 =)

关于matlab - 从 USB-1024HLS DAQ 板生成 PWM/时钟信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/924808/

相关文章:

matlab - Octave/MATLAB 绘制数字信号

windows - 如何在 Windows 中设置 MCR_CACHE_ROOT

linux - 如何启动 MATLAB 控制台并向其输入命令?

matlab:获取变量创建时间

language-agnostic - 围绕数字 : a hypothetical two's complement question 的硬件表示

matlab - 将图像中像素的 8-connectivity 更改为 4-connectivity

encryption - 使用 GPU 进行加密硬件加速

keyboard - 按键的平均延迟有多大

windows - 具有最小延迟的串行通信

visual-studio - Windows Server (2003/2008) 作为开发机器?