Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
该板是否有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秒,则可能无法处理某些计时器事件 ,从而导致输出实际上是较低频率的。我觉得您可能必须使用较低的信号频率才能正常工作,但是我可能是错的。 =) 更多&回答... |
![]() |
![]() |