Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 从USB-1024HLS数据采集板生成PWM/时钟信号_Matlab_Hardware - Fatal编程技术网

Matlab 从USB-1024HLS数据采集板生成PWM/时钟信号

Matlab 从USB-1024HLS数据采集板生成PWM/时钟信号,matlab,hardware,Matlab,Hardware,该电路板是否有API函数调用,允许我在电路板上运行其他代码时在500 kHz的输出上生成时钟信号?提前感谢您的建议。我在数据采集工具箱文档中找到了 dio = digitalio('nidaq','Dev1'); addline(dio,0:7,'in'); set(dio,'TimerFcn',@daqcallback) set(dio,'TimerPeriod',5.0) start(dio) pause(11) delete(dio) clear dio 根据,版本2.8或更高版本的需要

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

我在数据采集工具箱文档中找到了

dio = digitalio('nidaq','Dev1');
addline(dio,0:7,'in');
set(dio,'TimerFcn',@daqcallback)
set(dio,'TimerPeriod',5.0)
start(dio)
pause(11)
delete(dio)
clear dio
根据,版本2.8或更高版本的需要支持测量计算USB-1024HLS设备。假设您有2.8版或更高版本,以下内容将为您提供一个解决方案

第一步是获取设备的硬件ID。该功能应该有助于:

deviceInfo = daqhwinfo('mcc');
从结构deviceInfo中获取的硬件ID可用于使用以下函数创建数字I/O对象(DIO):

dio = digitalio('mcc',hardwareID);
接下来,您必须使用以下方式添加两条输出线(用于时钟信号和脉宽调制(PWM)信号):

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

set(dio,'TimerPeriod',0.000002);  % i.e. 500 kHz
set(dio,'TimerFcn',@update_outputs);
函数update_outputs在每个定时器周期调用一次,并应将输出引脚设置为适当的值。只需在每个计时器周期的0和1之间来回切换。也可能在0和1之间交替,但它不会更改每个计时器周期,根据所需的脉宽调制类型,在每个状态下保持一定时间。以下是您的更新\u输出功能的最终结果:

function update_outputs(obj,event)
  currentValues = getvalue(obj);
  clockValue = ~currentValues(1);
  pwmValue = pwm_compute();
  putvalue(obj,[clockValue pwmValue]);
end
注意,这使用和来设置/获取输出引脚的值。您必须编写函数pwm_compute,以便为每个时间段计算新的pwm值。由于pwm_compute可能需要知道已经输出了多少个值(即已经调用了多少次),因此可以使用:

这只是一种可能的解决办法。您可能会预计算PWM信号,并从矢量或数据文件中提取每个定时器周期的值,或者您可能会使用传递到update_输出来获取定时器事件的时间(我相信相对于DIO定时器启动)

最后,您必须启动DIO:

start(dio);
…并且,一旦使用完毕,将其删除并从内存中清除:

delete(dio);
clear dio;
一个潜在的绊脚石。。。
生成500 kHz信号可能很困难。这是一个如此高的频率,您可能会遇到问题,特别是“TimerFcn”,它被称为每个定时器周期一次。如果“TimerFcn”运行时间超过0.000002秒,则会导致输出的频率实际上较低。我有一种感觉,你可能必须使用较低的信号频率才能正常工作,但我可能错了

谢谢你的回答。不过,我可能需要一两天的时间才能有机会在硬件上进行测试。我会让你知道事情的进展。你想同时输出时钟信号和PWM信号吗?这应该是可行的,但在500千赫的频率下这样做似乎是个问题。我有一种感觉,可能最终太快了,MATLAB无法处理,但我可能错了。时钟信号有什么好运气吗?MATLAB能处理如此高的频率吗?据我所知,最新版本的数据采集工具箱是2.14,但我仍然设法以某种方式与我的DAQ通信。我只是还没有实现时钟信号(你建议的)。如果我能从您阅读的内容中听到您对数据采集工具箱版本的想法,那将是非常棒的。谢谢你的努力。如果你有最新的版本,你很好。这是“两点十四”而不是“两点一四”,如果这是混淆的话(即它比“两点八”好6)
start(dio);
delete(dio);
clear dio;