该板是否有API函数调用,该函数可以让我在板上运行其他代码的同时在500 kHz的输出上生成时钟信号?在此先感谢您的建议。
回答:
根据
支持的硬件文档 ,需要2.8版或更高版本的
数据采集工具箱来支持Measurement Computing USB-1024HLS设备。假设您使用的是2.8版或更高版本,则以下内容将很接近您的解决方案...
第一步将是获取设备的硬件ID。函数
DAQHWINFO应该可以帮助您:
deviceInfo = daqhwinfo('mcc'); 然后,可以使用
DIGITALIO函数从结构
deviceInfo获取的硬件ID用于创建数字I / O对象(DIO):
dio = digitalio('mcc',hardwareID); 接下来,您必须使用
ADDLINE添加两条输出线(用于时钟信号和脉宽调制(PWM)信号):
addline(dio,0:1,'out'); 然后,您必须设置一些DIO属性。
set(dio,'TimerPeriod',0.000002); % ie 500 kHz set(dio,'TimerFcn',@update_outputs); 每个定时器周期都会调用一次
update_outputs函数,并且应将输出引脚设置为适当的值。
时钟信号只是在每个定时器周期内在0和1之间来回切换。
PWM信号也可能在0和1之间交替变化,但不会在每个定时器周期内改变,根据所需的脉宽调制类型,它会在每种状态下保持一定的时间。这是您的
update_outputs函数可能最终看起来像的样子:
function update_outputs(obj,event) currentValues = getvalue(obj); clockValue = ~currentValues(1); pwmValue = pwm_compute(); putvalue(obj,[clockValue pwmValue]); end 请注意,这使用
PUTVALUE和
GETVALUE设置/获取输出引脚的值。您将必须编写函数
pwm_compute ,以便它在每个时间段计算一个新的PWM值。由于
pwm_compute可能必须知道已经输出了多少个值(即已经调用了多少次),因此可以使用
持久变量来跟踪:
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信号并从矢量或数据文件中提取每个计时器周期的值,也可以使用传递到
update_outputs的
事件数据结构来获取计时器事件的时间(相对于DIO计时器启动,我相信)。
最后,您必须启动DIO:
start(dio); ...,并在完成使用后将其删除并从内存中清除它:
delete(dio); clear dio;
一个潜在的绊脚石...
生成500 kHz信号可能很困难。这种频率很高,您
可能会遇到问题,特别是在每个计时器周期调用一次“ TimerFcn”时。如果“ TimerFcn”的运行时间超过0.000002秒,则
可能无法处理某些计时器事件 ,从而导致输出实际上是较低频率的。我觉得您可能必须使用较低的信号频率才能正常工作,但是我可能是错的。 =)
更多&回答...