Неправильно считает импульсы с энкодера
-
- advanced
- Сообщения: 170
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 33 раза
- Контактная информация:
Неправильно считает импульсы с энкодера
Добрый день.
Начал осваивать RealTime. Первая задача - обработка данных с энкодера (число оборотов, частота, угол поворота).
Сделал простейший счётчик импульсов с одного выхода энкодера. Ожидал получить 1000 импульсов с оборота, а получаю каждый раз разное количество, причём в очень большом диапазоне: от 200 до 2000.
В утилите MAX всё показывает корректно - обороты и импульсы. Один оборот вала энкодера соответствует 1000 импульсов по каждому каналу и значение счётчика оборотов меняется на 1.
Подскажите, пожалуйста, как правильно реализовать счётчик импульсов в RealTime?
Оборудование:
- контроллер cRIO-9056;
- NI-9411 (6-ти канальный дифференциальный модуль цифрового ввода);
- Энкодер ЛИР-158А (инкрементный оптоэлектронный преобразователь угловых перемещений);
Начал осваивать RealTime. Первая задача - обработка данных с энкодера (число оборотов, частота, угол поворота).
Сделал простейший счётчик импульсов с одного выхода энкодера. Ожидал получить 1000 импульсов с оборота, а получаю каждый раз разное количество, причём в очень большом диапазоне: от 200 до 2000.
В утилите MAX всё показывает корректно - обороты и импульсы. Один оборот вала энкодера соответствует 1000 импульсов по каждому каналу и значение счётчика оборотов меняется на 1.
Подскажите, пожалуйста, как правильно реализовать счётчик импульсов в RealTime?
Оборудование:
- контроллер cRIO-9056;
- NI-9411 (6-ти канальный дифференциальный модуль цифрового ввода);
- Энкодер ЛИР-158А (инкрементный оптоэлектронный преобразователь угловых перемещений);
-
- professor
- Сообщения: 3408
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Первый вопрос: а почему не использовать тот же метод, что в MAXе?
Судя по описанию там вы счётчик используете, а тут прямое чтение.
Дальше, длительность импульса? Если он короче 1 мс, то могут быть банальные пропуски.
Ну и читать на таких скоростях по одной точке - довольно экстремальное занятие, проверьте ошибку цикла, подозреваю, что у вас реальный период вовсе не 1мс.
Читайте выборками по 0,1-1с ( в зависимости от необходимой скорости обновления индикаторов), и анализируйте уже полученный массив
Судя по описанию там вы счётчик используете, а тут прямое чтение.
Дальше, длительность импульса? Если он короче 1 мс, то могут быть банальные пропуски.
Ну и читать на таких скоростях по одной точке - довольно экстремальное занятие, проверьте ошибку цикла, подозреваю, что у вас реальный период вовсе не 1мс.
Читайте выборками по 0,1-1с ( в зависимости от необходимой скорости обновления индикаторов), и анализируйте уже полученный массив
-
- advanced
- Сообщения: 170
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 33 раза
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Вот это совсем не понял. В MAXе вроде ничего не настраивали - вставили модули, загрузили ПО и все модули сами определились. На закладке Test Panels тоже особо выбирать нечего - порт и канал только доступны. О каком методе Вы говорите?Первый вопрос: а почему не использовать тот же метод, что в MAXе?
Судя по описанию там вы счётчик используете, а тут прямое чтение.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Неправильно считает импульсы с энкодера
rsv, читать непосредственно - не надо, это неправильно. Частота импульсов может достигать 100-300 кГц. И обычным опросом, тем более разовым чтением, вы гарантировано будете пропускать импульсы.
Для работы с энкодером применяют ТОЛЬКО счетчики (Counters).
Для работы с энкодером применяют ТОЛЬКО счетчики (Counters).
-
- advanced
- Сообщения: 170
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 33 раза
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Для работы с энкодером применяют ТОЛЬКО счетчики (Counters).
Счётчики - это настройка DAQmx Create Virtual Channel?
Сделал как на скрине - при выполнении вышла ошибка (тоже на скрине). И так на всех 6-ти каналах (менял через вход Task In).
Где-то ещё надо настраивать?
-
- professor
- Сообщения: 3408
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Попробуйте count edgesrsv писал(а):А как вы количество импульсов получили?Вот это совсем не понял. В MAXе вроде ничего не настраивали - вставили модули, загрузили ПО и все модули сами определились. На закладке Test Panels тоже особо выбирать нечего - порт и канал только доступны. О каком методе Вы говорите?
Сделал как на скрине - при выполнении вышла ошибка (тоже на скрине)
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Так вам же ошибка прямо указывает, что неправильно задан тип входа. Вместо line укажите ctr
правильно энкодер подключите
И
Последний раз редактировалось taras_33 10 дек 2019, 15:44, всего редактировалось 1 раз.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- advanced
- Сообщения: 170
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 33 раза
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Количество импульсов получил на закладке Counter I/O. А ещё есть закладка Digital I/O. Это и есть методы?А как вы количество импульсов получили?
Попробовал. Ошибка та же. Похоже ей не нравится канал, заданный во входном параметре "task in".Попробуйте count edges
-
- advanced
- Сообщения: 170
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 33 раза
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Вместо line укажите ctr
Что такое ctr и где мне его взять? У меня все 6 выходов с модуля 9411 обозначены как line0..5.
-
- advanced
- Сообщения: 170
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 33 раза
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Дошло...
Константа задаётся настройками VI, для которого создавалась. Если меняются настройки, надо удалить константу и создать заново. Не первый раз уже на эти грабли наступаю...
И вход не task in", а counter...
Константа задаётся настройками VI, для которого создавалась. Если меняются настройки, надо удалить константу и создать заново. Не первый раз уже на эти грабли наступаю...
И вход не task in", а counter...
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Не Task in, а Phisical channel изменится на Counter
- Вложения
-
- Encoder3.png (5.8 КБ) 4531 просмотр
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- advanced
- Сообщения: 170
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 33 раза
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Что-то я уже совсем запутался. Какой вариант выбрать для счётчика импульсов - CI Count Edges или CI Angular POsition?
И какой вариант выбрать для счётчика оборотов?
И какой вариант выбрать для счётчика оборотов?
-
- professor
- Сообщения: 3408
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Если нужен счётчик, то это counter.
Все остальные варианты выдают не количество импульсов, а пересчитанные значения. Углов, скоростей и пр. Но для этого нужно, чтобы железка умела их считать. А ваша не умеет. что написано в ошибке.
Все остальные варианты выдают не количество импульсов, а пересчитанные значения. Углов, скоростей и пр. Но для этого нужно, чтобы железка умела их считать. А ваша не умеет. что написано в ошибке.
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Неправильно считает импульсы с энкодера
Как раз таки если задача сконфигурирована как Angular Encoder, то на выходе read vi количество импульсов. Причём значение может быть отрицательным, в зависимости от направления вращения. Поэтому можно получить не только угол, а и количество оборотов, которое учитывает направление. К примеру сделали 10 оборотов в одну сторону, а потом 2.5 в другую, то на выходе read vi будет количество импульсов соответствующее 7.5 оборота.Все остальные варианты выдают не количество импульсов, а пересчитанные значения
Например вот так. Сами счётчики, а их четыре, находятся в самом контроллере. Ваш NI 9411 только предоставляет к ним доступ.
Последний раз редактировалось taras_33 12 дек 2019, 02:23, всего редактировалось 2 раза.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 7 Ответы
- 265 Просмотры
-
Последнее сообщение ujin1