В этом примере показано, как определить уровень вращения моторного контроллера Автоматизации Анахайма путем подсчета количества возрастающих ребер в сигнале. Контроллер возвращает импульсы эффекта Холла (прямоугольные волны), которые служат обратной связью частоты для моторных скоростей вращения.
Используйте daq
создать DataAcquisition и addinput
чтобы добавить встречный вход образовывают канал с EdgeCount
тип измерения. В данном примере используйте шасси NI c9178 CompactDAQ и модуль NI 9402 с ID 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);