Этот пример показывает, как определить уровень вращения моторного контроллера Автоматизации Анахайма путем подсчета количества возрастающих ребер в сигнале. Контроллер возвращает импульсы эффекта Холла (прямоугольные волны), которые служат обратной связью частоты для моторных скоростей вращения.
Создайте Сеанс DAQ и добавьте встречный входной канал с типом измерения EdgeCount
. В данном примере используйте шасси NI c9178 CompactDAQ и модуль NI 9402 с ID cDAQ1Mod5.
s = daq.createSession('ni'); addCounterInputChannel(s,'cDAQ1Mod5', 'ctr0', 'EdgeCount'); s
s = Data acquisition session using National Instruments hardware: Will run for 1 second (1000 scans) at 1000 scans/second. Number of channels: 1 index Type Device Channel MeasurementType Range Name ----- ---- --------- ------- --------------- ----- ---- 1 ci cDAQ1Mod5 ctr0 EdgeCount n/a
Чтобы соединить входной сигнал с правильным терминалом, исследуйте свойство Terminal
канала. Терминал определяется оборудованием.
s.Channels(1).Terminal
ans = 1×4 char array PFI0
Чтобы определить, является ли счетчик операционным, вводит одно сканирование, делают паузу, в то время как двигатель вращается, затем считайте счетчик снова.
s.inputSingleScan()
ans = 6
pause(0.1); s.inputSingleScan()
ans = 18
pause(0.1); s.inputSingleScan()
ans = 29
Считайте количество импульсов путем сброса в противоречии с нулем, сделайте паузу в течение одной секунды, и считайте счетчик. Эффекты Холла ориентированы на каждые 120 градусов и генерируют три импульса прямоугольной волны для каждого вращения.
s.resetCounters(); pause(1); s.inputSingleScan() / 3
ans = 33.3333
Аппаратные часы очень точны. Используйте аппаратные часы, чтобы получить несколько встречных измерений. Устройства счетчика NI требуют внешнего таймера. Путем добавления канала аналогового входа для модуля на том же шасси сеанс совместно использует внутренние часы с обоими модулями.
s = daq.createSession('ni'); addAnalogInputChannel(s,'cDAQ1Mod1', 0, 'Voltage'); addCounterInputChannel(s,'cDAQ1Mod5', 0, 'EdgeCount'); s.DurationInSeconds = 0.25; [data, time] = s.startForeground(); plot(time, data);