Перейти к содержанию
    

энкодеры и акселерометры

Всем привет!

Нужна помощь.

Есть виброплощадка с двумя дебалансными валами, с одной стороны которой через эластические муфты приделаны двигатели, а с другой – энкодеры. Площадка крепится через пружины к станине. Двигатели прикручены к станине жестко. Валы площадки не синхронизированы. К площадке крепится датчик ускорения.

Нужно измерять положения дебалансных валов и их скорость, ускорение, а также ускорение, скорость, положение площадки. Ловить сдвиг фаз между положениями валов.

Что уже есть: изготовлена площадка, на ней стоят энкодеры. Уже запускал, работает. Для чего это - не спрашивайте. Просто заставляют получить те параметры которые нужно и все. Для себя я сформировал такую задачу, которую изложил выше. Контролер и комп НЕ УПРАВЛЯЮ ДВИГАТЕЛЯМИ, а они запускаются отдельно через рубильник.

Двигатель вращается с частотой 1500 об/мин, следовательно это равно 25об/сек. Энкодер имеет разрешение 1024им/об, это равно 1024*25=25600Гц. Это небольшая частота для контроллера, но для компа критична. Поэтому предлагаю такую запудренную схему.Откуда взялось 50 и200 отсч/сек не могу понять. Объясните пожалуйста.

Здесь обсуждалось http://electronix.ru/forum/index.php?showtopic=64872

Какие будут идеи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подумал на счет обычной AVR-ки. Может стоит использовать два микроконтроллера и FLASH память. Первый микроконтроллер непосредственно считывает данные с частотой 500кГц (по переполнению счетчика) и записывает их в энергозависимую память, а второй - передает их на комп (может даже и через RS232 или USB), но тогда нельзя потерять всех пакетов. Также нужно строить график на компе, зависимости положений, скорости и ускорения, Но поскольку я знаю частоту срабатывания (500кГц), то это можна легко сделать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark

Такое впечатление, что Вы пропустили все данные Вам советы мимо ушей...

 

1) Определитесь сначала с какой точностью Вам нужно измерять:

- угловое положение;

- угловую скорость;

- угловое ускорение;

- линейное ускорение;

Только не в "попугаях", и не процентах неизвестно от чего, а в абсолютных физических величинах.

 

2) Далее, как будет решаться с проблема с фиксацией начального положения валов? Есть ли датчик нулевого угла?

 

3) Какова требуемая частота дискретизации - периодичность измерения интересующих значений?

 

4) Что Вы понимаете под режимом реального времени. То есть какая максимальная задержка от момента измерения до момента получения данных в компьютере считается допустимой.

 

Когда сможете внятно ответить на эти вопросы, тогда можно предлагать и обсуждать решения. А пока - разговор ни о чем...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Определитесь сначала с какой точностью Вам нужно измерять:

- угловое положение;

- угловую скорость;

- угловое ускорение;

- линейное ускорение;

Только не в "попугаях", и не процентах неизвестно от чего, а в абсолютных физических величинах.

Точность измерения:

- угловое положение +/-0,4градуса;

- угловую скорость(+/-1.0град/сек);

- угловое ускорение (после интерполяции графика скорости. Зависит от метода);

- линейное ускорение(+/-0,1g);

2) Далее, как будет решаться с проблема с фиксацией начального положения валов? Есть ли датчик нулевого угла?

Начальное положение определяться перед пуском. Поскольку дебалансный вал имеет эксцентриситет, то соответственно он направлен в низ. Это и есть его начальное положение.

3) Какова требуемая частота дискретизации - периодичность измерения интересующих значений?

Нужно постоянно опрашивать датчики, чтобы знать его положение, ускорение в каждый момент времени.

4) Что Вы понимаете под режимом реального времени. То есть какая максимальная задержка от момента измерения до момента получения данных в компьютере считается допустимой.

Мне не нужен РРВ. Данные могут буферизироваться. Пусть они приходят с задержкой мах 1 сек. Главное не потерять всю последовательность.

 

Набросал блок-схему. Надеюсь поможет понять принцип получения данных(я понимаю его для себя так). Посоветуйте память плз.

 

Надеюсь ответил.

board.PDF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
"Нужно постоянно опрашивать датчики, чтобы знать его положение, ускорение в каждый момент времени."

Это не ответ... Можно лишь сказать, что поскольку рабочая частота датчиков будет порядка 25кГц, то опрашивать их с большей частотой - просто нет смысла. Да и с такой тоже. При на частоте дискретизации 25кГц, будете при номинальной скорости вращения получать значения углов через 0,4 градуса. А ведь Вам еще нужно обрабатывать два канала акселерометра и передавать данные, успеете все сделать за 40мкc? Посчитайте.

Мне не нужен РРВ. Данные могут буферизироваться. Пусть они приходят с задержкой мах 1 сек. Главное не потерять всю последовательность.

Набросал блок-схему...

Непонятно, зачем нужно заниматься буферизацией внутри устройства? Если считываете данные с постоянной частотой, то в том же темпе отправляйте их в передающий канал. В этом случае, буферизация и общение с компьютером по принципу "запрос-ответ", будет только тормозить передачу и приведет к повышению необходимой скорости обмена. IMHO, Ваше устройство должно передавать данные самостоятельно без всяких запросов, практически непрерывным потоком, а буферизация данных будет производиться со стороны компьютера...

---

P.S. Оцените, какая пропускная способность канала потребуется, чтобы передавать такой поток информации. По самым скромным подсчетом получается порядка Мегабит/сек. Может стоит снизить частоту дискретизации хотя бы до 1кГц? Получать значения углов с шагом (не менее) 10 градусов, а остальные значения углов и ускорений - экстаполировать, если это потребуется...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я только услышал критику. С ней частично согласен. Я в этом вопросе (метрология) не силен. Просто предложил свой вариант.

 

А как бы Вы решили эту задачу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark

Так я (и не только) Вам уже говорили. Не гонитесь за большой частотой дискретизации. Это, IMHO, ничего не даст, кроме огромного объема малосодержательной информации и многочисленным трудностям. Я бы для начала остановился на частоте опроса 1кГц. За 1 мс ничего особо в этой системе не изменится - ни угловое положение (не больше 10гр), ни угловая скорость, ни оба вида ускорений. За это время можете свободно собрать все данные с датчиков и передать в ПК. Достаточно передавать только угловые положения и данные акселерометров, а остальное - посчитать в компьютере. Буферизацией заниматься не нужно, передаете через встроенный UART раз в 1мс пакет данных, получится не больше 10 байт. Я думаю, что скорости 115200 будет вполне достаточно. На одном МК без лишних наворотов все можно решить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но тогда я пропущу много данных, которые несут в себе информацию о положении. Получаемся большая ошибка. Эта методика мне непонятна. Я даже не буду знать в каком положении вал. Как измерять данные, которые приходят с частотой больше, чем частота дискретизации? Тяжело.

Может есть смысл поставить какой-то шустрый микроконтроллер, который передавал бы данные в формате (время, положение энкодера 1, положение энкодера 2, ускорение Х-координаты, Y-координаты). Тогда можна и опрашивать с частотой 1кГц.

Изменено пользователем Zliva

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
Но тогда я пропущу много данных, которые несут в себе информацию о положении. Получаемся большая ошибка. Эта методика мне непонятна. Я даже не буду знать в каком положении вал. Как измерять данные, которые приходят с частотой больше, чем частота дискретизации?

Вы же имеете дело с механической системой. Она обладает определенной инерцией. Ничто не может там поменяться "мгновенно" или очень быстро на таких коротких временных интервалах. Если очень нужно, то можете экстраполировать значения угла в недостающих точках по известной в начальный момент угловой скорости и углового ускорения, а угловую скорость - по известному значению углового ускорения. Сильно не ошибетесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы же имеете дело с механической системой. Она обладает определенной инерцией. Ничто не может там поменяться "мгновенно" или очень быстро на таких коротких временных интервалах. Если очень нужно, то можете экстраполировать значения угла в недостающих точках по известной в начальный момент угловой скорости и углового ускорения, а угловую скорость - по известному значению углового ускорения. Сильно не ошибетесь.

Абсолютно верно. Если это обычный двигатель, то 4-8 импульсов на оборот вполне достаточно, чтобы с хорошей точностью вычислть положение вала в любой момент времени. Более того, и с акселерометра не нужно гнать сплошной поток данных. Вполне достаточно значений экстремумов и маркеры времени. Этого вполне достаточно, чтобы восстановить кривую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как узнать, сколько пропущено угловых значений от инкрементного энкодера? Мне же нужно знать текущее значение угла поворота. Датчик не квадратурного типа, а- инкрементного.

Сигнал энкодера А:010101010101010101

Сигнал энкодера В:101010101010101010

Выборка_________:100001000100010001

С рисунка видно, что если я буду считывать с частотой 1 кГц, то мне не будет достаточно информации для определения текущего положения в момент выборки. Верно ли я понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как узнать, сколько пропущено угловых значений от инкрементного энкодера? Мне же нужно знать текущее значение угла поворота. Датчик не квадратурного типа, а- инкрементного.

Сигнал энкодера А:010101010101010101

Сигнал энкодера В:101010101010101010

Выборка_________:100001000100010001

С рисунка видно, что если я буду считывать с частотой 1 кГц, то мне не будет достаточно информации для определения текущего положения в момент выборки. Верно ли я понял?

Не бывает таких. Должно быть так:

Сигнал энкодера А:0110011001100110

Сигнал энкодера В:1100110011001100

Сигналы идут со сдвигом фаз 90град. Иначе канал В как инверсия А, бессмысленен.

Как правило, есть еще и третий канал (индексный) - 1 имп/оборот

Работать с энкодером лучше по прерываниям. Оба канала заводятся на ножки контроллера, и любое изменение состояния ножек вызывает прерывание. Внутри прерывания контроллер считает текущее положение и запоминает его.

Изменено пользователем =DS=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На счет сигналов энкодера согласен. Не обратил внимания :laughing: .

Когда-то я реализовал такую систему на АТМега8. Но она себя не зарекомендовала (а может я не разобрался до конца). У меня был тот же энкодер (только он был один) и не было акселерометра. Сигнал А подключался входу INT, а второй просто к какому-то пину PinD.3(хотя он не использовался). Я передавал количество импульсов, когда Timer_1_Overflow = 65535(когда счетчик был полным), а потом его сбрасывал обратно. Данные передавал через СОМ-порт. Они приходили с задержкой. Прикрепляю файл программе написанной в Algorithm Builder. Я не опредилял здесь ни положения, ни ускорения, только сорость.

SPEED_ATMega8.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark

Заводите два 16-ти битных счетчика - каждый для своего энкодера. Сбрасываете их значения в нули при начальной установке валов. Значение счетчиков корректируете по прерываниям от импульсов энкодера (увеличиваете или уменьшаете, в зависимости от направления вращения). Пропускать нельзя ни одного импульса от энкодера, ни при каком раскладе. Переполнение счетчиков специально обрабатывать не нужно. Текущие значения счетчиков - есть угловое положение ваших валов в данный момент времени. Аналоговые выходы акселерометра подключаете к двум отдельным входам АЦП вашего МК. Рекомендую, также, поставить RC-цепочки с постоянной времени порядка 1мс.

По таймеру, один раз каждые 1мс, запускаете процесс съема данных - копируете текущие значения счетчиков углового положения и снимаете показания с обоих каналов АЦП. Формируете пакет для передачи компьютеру.

Передаете данные компьютеру через UART. Ждете следующего сигнала от таймера. И так далее.

Вот и все решение вашей задачи. Не считая, конечно, разработки схемы устройства и программы для ПК.

Кстати, это решение Вам уже сформулировали в предыдущей теме, причем, в первых же ответах. Почему Вы его сразу не восприняли - мне не понятно. Видимо, Вам просто пока не хватает подготовки для решения этой задачи. Трудитесь и все получится.

Удачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...