Этот пример показывает, как определить скорость вращения контроллера 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);