Этот пример показывает, как определить скорость вращения контроллера Anaheim Automation Motor путем подсчета количества восходящих ребер в сигнале. Контроллер возвращает импульсы эффекта Холла (квадратные волны), которые служат частотной обратной связью для скоростей вращения двигателя.
Использование daq создание DataAcquisition и addinput чтобы добавить входной канал счетчика с EdgeCount тип измерения. В данном примере используйте корпус CompactDAQ NI c9178 и модуль NI 9402 с идентификационными cDAQ1Mod5.
dq = daq("ni"); ch = addinput(dq,"cDAQ1Mod5", "ctr0", "EdgeCount"); ch
ch =
Index Type Device Channel Measurement Type Range Name
_____ ____ ___________ _______ ________________ _____ ________________
1 "ci" "cDAQ1Mod5" "ctr0" "EdgeCount" "n/a" "cDAQ1Mod5_ctr0"
Чтобы подключить входной сигнал к правильному выводу, исследуйте Terminal свойство канала. Терминал определяется оборудованием.
ch.Terminal
ans =
'PFI0'
Чтобы определить, работает ли счетчик, введите один скан, приостановите во время вращения двигателя, а затем снова считайте счетчик.
read(dq)
ans =
timetable
Time cDAQ1Mod5_ctr0
_____ ______________
0 sec 3
pause(0.1); read(dq)
ans =
timetable
Time cDAQ1Mod5_ctr0
_____ ______________
0 sec 14
pause(0.1); read(dq)
ans =
timetable
Time cDAQ1Mod5_ctr0
_____ ______________
0 sec 27
Подсчитайте количество импульсов путем сброса счетчика на нуль, приостановите на одну секунду и считайте счетчик. Эффекты холла ориентированы каждые 120 степени и генерируют три импульса квадратной волны для каждого вращения.
resetcounters(dq); pause(1); read(dq, "OutputFormat", "Matrix")/3
ans = 33.6667
Аппаратные часы очень точны. Используйте аппаратные часы, чтобы получить несколько измерений счетчика. Для устройств счетчика NI требуется внешний синхроимпульс. Путем добавления аналогового входного канала для модуля на том же корпусе, DataAcquisition использует внутренние часы с обоими модулями.
dq = daq("ni"); addinput(dq,"cDAQ1Mod1", "ai0", "Voltage"); addinput(dq,"cDAQ1Mod5", "ctr0", "EdgeCount"); data = read(dq, seconds(0.25)); plot(data.Time, data.Variables);
