Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 USB-1024HLS DAQ板产生PWM /时钟信号

该板是否有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 请注意,这使用PUTVALUEGETVALUE设置/获取输出引脚的值。您将必须编写函数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秒,则可能无法处理某些计时器事件 ,从而导致输出实际上是较低频率的。我觉得您可能必须使用较低的信号频率才能正常工作,但是我可能是错的。 =)



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:28


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.