Zliva 0 14 июля, 2009 Опубликовано 14 июля, 2009 · Жалоба Всем привет! Нужна помощь. Есть виброплощадка с двумя дебалансными валами, с одной стороны которой через эластические муфты приделаны двигатели, а с другой – энкодеры. Площадка крепится через пружины к станине. Двигатели прикручены к станине жестко. Валы площадки не синхронизированы. К площадке крепится датчик ускорения. Нужно измерять положения дебалансных валов и их скорость, ускорение, а также ускорение, скорость, положение площадки. Ловить сдвиг фаз между положениями валов. Что уже есть: изготовлена площадка, на ней стоят энкодеры. Уже запускал, работает. Для чего это - не спрашивайте. Просто заставляют получить те параметры которые нужно и все. Для себя я сформировал такую задачу, которую изложил выше. Контролер и комп НЕ УПРАВЛЯЮ ДВИГАТЕЛЯМИ, а они запускаются отдельно через рубильник. Двигатель вращается с частотой 1500 об/мин, следовательно это равно 25об/сек. Энкодер имеет разрешение 1024им/об, это равно 1024*25=25600Гц. Это небольшая частота для контроллера, но для компа критична. Поэтому предлагаю такую запудренную схему.Откуда взялось 50 и200 отсч/сек не могу понять. Объясните пожалуйста. Здесь обсуждалось http://electronix.ru/forum/index.php?showtopic=64872 Какие будут идеи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zliva 0 14 июля, 2009 Опубликовано 14 июля, 2009 · Жалоба Подумал на счет обычной AVR-ки. Может стоит использовать два микроконтроллера и FLASH память. Первый микроконтроллер непосредственно считывает данные с частотой 500кГц (по переполнению счетчика) и записывает их в энергозависимую память, а второй - передает их на комп (может даже и через RS232 или USB), но тогда нельзя потерять всех пакетов. Также нужно строить график на компе, зависимости положений, скорости и ускорения, Но поскольку я знаю частоту срабатывания (500кГц), то это можна легко сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба Такое впечатление, что Вы пропустили все данные Вам советы мимо ушей... 1) Определитесь сначала с какой точностью Вам нужно измерять: - угловое положение; - угловую скорость; - угловое ускорение; - линейное ускорение; Только не в "попугаях", и не процентах неизвестно от чего, а в абсолютных физических величинах. 2) Далее, как будет решаться с проблема с фиксацией начального положения валов? Есть ли датчик нулевого угла? 3) Какова требуемая частота дискретизации - периодичность измерения интересующих значений? 4) Что Вы понимаете под режимом реального времени. То есть какая максимальная задержка от момента измерения до момента получения данных в компьютере считается допустимой. Когда сможете внятно ответить на эти вопросы, тогда можно предлагать и обсуждать решения. А пока - разговор ни о чем... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zliva 0 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба 1) Определитесь сначала с какой точностью Вам нужно измерять: - угловое положение; - угловую скорость; - угловое ускорение; - линейное ускорение; Только не в "попугаях", и не процентах неизвестно от чего, а в абсолютных физических величинах. Точность измерения: - угловое положение +/-0,4градуса; - угловую скорость(+/-1.0град/сек); - угловое ускорение (после интерполяции графика скорости. Зависит от метода); - линейное ускорение(+/-0,1g); 2) Далее, как будет решаться с проблема с фиксацией начального положения валов? Есть ли датчик нулевого угла? Начальное положение определяться перед пуском. Поскольку дебалансный вал имеет эксцентриситет, то соответственно он направлен в низ. Это и есть его начальное положение. 3) Какова требуемая частота дискретизации - периодичность измерения интересующих значений? Нужно постоянно опрашивать датчики, чтобы знать его положение, ускорение в каждый момент времени. 4) Что Вы понимаете под режимом реального времени. То есть какая максимальная задержка от момента измерения до момента получения данных в компьютере считается допустимой. Мне не нужен РРВ. Данные могут буферизироваться. Пусть они приходят с задержкой мах 1 сек. Главное не потерять всю последовательность. Набросал блок-схему. Надеюсь поможет понять принцип получения данных(я понимаю его для себя так). Посоветуйте память плз. Надеюсь ответил. board.PDF Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба "Нужно постоянно опрашивать датчики, чтобы знать его положение, ускорение в каждый момент времени." Это не ответ... Можно лишь сказать, что поскольку рабочая частота датчиков будет порядка 25кГц, то опрашивать их с большей частотой - просто нет смысла. Да и с такой тоже. При на частоте дискретизации 25кГц, будете при номинальной скорости вращения получать значения углов через 0,4 градуса. А ведь Вам еще нужно обрабатывать два канала акселерометра и передавать данные, успеете все сделать за 40мкc? Посчитайте. Мне не нужен РРВ. Данные могут буферизироваться. Пусть они приходят с задержкой мах 1 сек. Главное не потерять всю последовательность. Набросал блок-схему... Непонятно, зачем нужно заниматься буферизацией внутри устройства? Если считываете данные с постоянной частотой, то в том же темпе отправляйте их в передающий канал. В этом случае, буферизация и общение с компьютером по принципу "запрос-ответ", будет только тормозить передачу и приведет к повышению необходимой скорости обмена. IMHO, Ваше устройство должно передавать данные самостоятельно без всяких запросов, практически непрерывным потоком, а буферизация данных будет производиться со стороны компьютера... --- P.S. Оцените, какая пропускная способность канала потребуется, чтобы передавать такой поток информации. По самым скромным подсчетом получается порядка Мегабит/сек. Может стоит снизить частоту дискретизации хотя бы до 1кГц? Получать значения углов с шагом (не менее) 10 градусов, а остальные значения углов и ускорений - экстаполировать, если это потребуется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zliva 0 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба Я только услышал критику. С ней частично согласен. Я в этом вопросе (метрология) не силен. Просто предложил свой вариант. А как бы Вы решили эту задачу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба Так я (и не только) Вам уже говорили. Не гонитесь за большой частотой дискретизации. Это, IMHO, ничего не даст, кроме огромного объема малосодержательной информации и многочисленным трудностям. Я бы для начала остановился на частоте опроса 1кГц. За 1 мс ничего особо в этой системе не изменится - ни угловое положение (не больше 10гр), ни угловая скорость, ни оба вида ускорений. За это время можете свободно собрать все данные с датчиков и передать в ПК. Достаточно передавать только угловые положения и данные акселерометров, а остальное - посчитать в компьютере. Буферизацией заниматься не нужно, передаете через встроенный UART раз в 1мс пакет данных, получится не больше 10 байт. Я думаю, что скорости 115200 будет вполне достаточно. На одном МК без лишних наворотов все можно решить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zliva 0 15 июля, 2009 Опубликовано 15 июля, 2009 (изменено) · Жалоба Но тогда я пропущу много данных, которые несут в себе информацию о положении. Получаемся большая ошибка. Эта методика мне непонятна. Я даже не буду знать в каком положении вал. Как измерять данные, которые приходят с частотой больше, чем частота дискретизации? Тяжело. Может есть смысл поставить какой-то шустрый микроконтроллер, который передавал бы данные в формате (время, положение энкодера 1, положение энкодера 2, ускорение Х-координаты, Y-координаты). Тогда можна и опрашивать с частотой 1кГц. Изменено 15 июля, 2009 пользователем Zliva Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба Но тогда я пропущу много данных, которые несут в себе информацию о положении. Получаемся большая ошибка. Эта методика мне непонятна. Я даже не буду знать в каком положении вал. Как измерять данные, которые приходят с частотой больше, чем частота дискретизации? Вы же имеете дело с механической системой. Она обладает определенной инерцией. Ничто не может там поменяться "мгновенно" или очень быстро на таких коротких временных интервалах. Если очень нужно, то можете экстраполировать значения угла в недостающих точках по известной в начальный момент угловой скорости и углового ускорения, а угловую скорость - по известному значению углового ускорения. Сильно не ошибетесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=DS= 0 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба Вы же имеете дело с механической системой. Она обладает определенной инерцией. Ничто не может там поменяться "мгновенно" или очень быстро на таких коротких временных интервалах. Если очень нужно, то можете экстраполировать значения угла в недостающих точках по известной в начальный момент угловой скорости и углового ускорения, а угловую скорость - по известному значению углового ускорения. Сильно не ошибетесь. Абсолютно верно. Если это обычный двигатель, то 4-8 импульсов на оборот вполне достаточно, чтобы с хорошей точностью вычислть положение вала в любой момент времени. Более того, и с акселерометра не нужно гнать сплошной поток данных. Вполне достаточно значений экстремумов и маркеры времени. Этого вполне достаточно, чтобы восстановить кривую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zliva 0 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба Как узнать, сколько пропущено угловых значений от инкрементного энкодера? Мне же нужно знать текущее значение угла поворота. Датчик не квадратурного типа, а- инкрементного. Сигнал энкодера А:010101010101010101 Сигнал энкодера В:101010101010101010 Выборка_________:100001000100010001 С рисунка видно, что если я буду считывать с частотой 1 кГц, то мне не будет достаточно информации для определения текущего положения в момент выборки. Верно ли я понял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба Похоже, Вы совсем ничего не поняли... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=DS= 0 15 июля, 2009 Опубликовано 15 июля, 2009 (изменено) · Жалоба Как узнать, сколько пропущено угловых значений от инкрементного энкодера? Мне же нужно знать текущее значение угла поворота. Датчик не квадратурного типа, а- инкрементного. Сигнал энкодера А:010101010101010101 Сигнал энкодера В:101010101010101010 Выборка_________:100001000100010001 С рисунка видно, что если я буду считывать с частотой 1 кГц, то мне не будет достаточно информации для определения текущего положения в момент выборки. Верно ли я понял? Не бывает таких. Должно быть так: Сигнал энкодера А:0110011001100110 Сигнал энкодера В:1100110011001100 Сигналы идут со сдвигом фаз 90град. Иначе канал В как инверсия А, бессмысленен. Как правило, есть еще и третий канал (индексный) - 1 имп/оборот Работать с энкодером лучше по прерываниям. Оба канала заводятся на ножки контроллера, и любое изменение состояния ножек вызывает прерывание. Внутри прерывания контроллер считает текущее положение и запоминает его. Изменено 15 июля, 2009 пользователем =DS= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zliva 0 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба На счет сигналов энкодера согласен. Не обратил внимания :laughing: . Когда-то я реализовал такую систему на АТМега8. Но она себя не зарекомендовала (а может я не разобрался до конца). У меня был тот же энкодер (только он был один) и не было акселерометра. Сигнал А подключался входу INT, а второй просто к какому-то пину PinD.3(хотя он не использовался). Я передавал количество импульсов, когда Timer_1_Overflow = 65535(когда счетчик был полным), а потом его сбрасывал обратно. Данные передавал через СОМ-порт. Они приходили с задержкой. Прикрепляю файл программе написанной в Algorithm Builder. Я не опредилял здесь ни положения, ни ускорения, только сорость. SPEED_ATMega8.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Заводите два 16-ти битных счетчика - каждый для своего энкодера. Сбрасываете их значения в нули при начальной установке валов. Значение счетчиков корректируете по прерываниям от импульсов энкодера (увеличиваете или уменьшаете, в зависимости от направления вращения). Пропускать нельзя ни одного импульса от энкодера, ни при каком раскладе. Переполнение счетчиков специально обрабатывать не нужно. Текущие значения счетчиков - есть угловое положение ваших валов в данный момент времени. Аналоговые выходы акселерометра подключаете к двум отдельным входам АЦП вашего МК. Рекомендую, также, поставить RC-цепочки с постоянной времени порядка 1мс. По таймеру, один раз каждые 1мс, запускаете процесс съема данных - копируете текущие значения счетчиков углового положения и снимаете показания с обоих каналов АЦП. Формируете пакет для передачи компьютеру. Передаете данные компьютеру через UART. Ждете следующего сигнала от таймера. И так далее. Вот и все решение вашей задачи. Не считая, конечно, разработки схемы устройства и программы для ПК. Кстати, это решение Вам уже сформулировали в предыдущей теме, причем, в первых же ответах. Почему Вы его сразу не восприняли - мне не понятно. Видимо, Вам просто пока не хватает подготовки для решения этой задачи. Трудитесь и все получится. Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться