В этом примере показано, как определить скорость вращения контроллера двигателя Anaheim Automation путем подсчета количества растущих фронтов в сигнале. Контроллер возвращает импульсы эффекта Холла (квадратные волны), которые служат в качестве обратной связи по частоте для скоростей вращения двигателя.
Использовать 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);
