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

Здравствуйте.

 

У меня есть следующая задача, нужно с помощью двух энкодеров (напряжение питания 5в, выходное напряжение 5в), которые подключены к асинхронным двигателям с частотой вращения 1500 об/мин =25 об/сек, измерить положение и скорость вращения. Количество импульсов, которых выдает энкодер за один оборот равняться 1024 импульсов, следовательно 25*1024=25600 Гц. Также есть датчик ускорения ADXL-210. Он тоже подключен к плате в/в и определяет ускорение конструкции (с ним еще не разбирался - дело ближайшего будущего).

Также я приобрел плату В/В mDAQ http://www.holit.ua/ru/products/comp/ind/e...2842.html?mft=1 Получаться, что максимальная частота, с которой работает устройство в/в - 100кГц и я неуверен, что устройство справится с этой частотой.

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

Хочу сделать собственное устройство в/в которое работало бы через USB. Также важно не потерять всю последовательность получаемых данных. Посоветуйте пожалуйста как это можно реализовать. Я немного программировал AVR, но чувствую что нужно микроконтроллер пошустрее – ARM(может AT90USB162).

Думаю делать так:

сначала инициализирую таймер с частотой срабатывания 500кГц. По прерыванию от таймера опрашиваю порт В (пусть этот порт будет рабочим) и передаю на комп через USB.

Возникает вопрос: Справится ли USB с такой частотой?

Может кто-то уже занимался подобным или у кого-то будут другие идеи.

В файле некоторые наброски в LabVIEW(Впервые его использую. Не судите строго) и документация на устройство.

 

Жду вашей критики.

DAQ.rar

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


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

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

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


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

Критики? Да сколько угодно :)

 

Предлагаю воспользоваться кнопочкой "поиск".

Например, заслуживает тщательного изучения следующая тема:

http://electronix.ru/forum/index.php?showtopic=55392

 

Мне кажется, что

- контроллер должен быть один. С отладкой взаимодействия нескольких контроллеров пока лучше не сталкиваться :)

- АВРки тут вполне достаточно. Особенно если не заморачиваться с USB (опять таки, для начинающих могут быть проблемы), а воспользоваться RS232.

- основная проблема - правильно передать данные из контроллера в этот Ваш LabView.

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


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

Вы наверное плохо поняли задачу. Нужно с частотой 500 кГц (неуверен конечно) опрашивать порт и передавать через RS232 в программу, которую я напишу на Delphi (LabVIEW – это не для меня). Люди работают с одним энкодером, а мне нужно с двумя плюс датчик ускорения ADXL-210. Частоты большие. Передавать данные не буферизируя их чревато потерей всей цепочки данных.

Но все равно спасибо за внимание!

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


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

Какая-то неправильная задача :)

 

Зачем вашей программе знать, что 499 тысяч раз в секунду НИЧЕГО НЕ МЕНЯЛОСЬ?

 

Кроме того, такой объем данных уже достаточно сложно передавать - UART уже не успеет, а эмулятор COM-порта на USB при работе с отдельными байтами работает даже медленнее (во всяком случае, в моей реализации :)

 

 

Предлагаю два варианта:

- с компьютера приходит запрос, контроллер отвечает "двигатель 1 повернулся на 125 импульсов вправо, двигатель 2 повернулся на 13 импульсов влево, акселерометр показывает 43 попугая"

- контроллер самостоятельно отправляет посылки "двигатель 1 повернулся влево", "двигатель 2 повернулся вправо" и т.д. на каждое изменение

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


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

Вы наверное плохо поняли задачу. Нужно с частотой 500 кГц (неуверен конечно) опрашивать порт и передавать через RS232 в программу, которую я напишу на Delphi (LabVIEW – это не для меня). Люди работают с одним энкодером, а мне нужно с двумя плюс датчик ускорения ADXL-210. Частоты большие. Передавать данные не буферизируя их чревато потерей всей цепочки данных.

Но все равно спасибо за внимание!

Вы сами сначала свою задачу поймите и опишите здесь в целом, что Вы хотите получить, а не каким напряжением Вы запитываете енкодер.

На компьютере Ваша программа, в лучшем случае, будет получать данные с интервалом 5мс, это операционкой определяется.

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


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

Прошу прощение за скупость выложенной информации.

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

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

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

Вот собственно все.

На компьютере Ваша программа, в лучшем случае, будет получать данные с интервалом 5мс, это операционкой определяется.

Да я это понимаю. Уже прошел через это, потому и спрашиваю, подойдет ли: … использовать два микроконтроллера AVR и FLASH память энергозависима. Первый микроконтроллер непосредственно считывает данные и записывает их в FLASH память, а второй - передает их на комп(может даже и через RS232). Тогда не гарантируется реальное время (я вот подумал, без этого режима можно обойтись), но зато я не потеряю всех пакетов.

post-22318-1246990130_thumb.png

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


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

Да я это понимаю. Уже прошел через это, потому и спрашиваю, подойдет ли: … использовать два микроконтроллера AVR и FLASH память энергозависима. Первый микроконтроллер непосредственно считывает данные и записывает их в FLASH память, а второй - передает их на комп(может даже и через RS232). Тогда не гарантируется реальное время (я вот подумал, без этого режима можно обойтись), но зато я не потеряю всех пакетов.

Собственно ваша задача состоит из двух частей: измерить и накопить и передать.

Насчет AVR не знаю, не работал с ними. Где-то на форуме было обсуждение измерения частоты сразу по трем каналам на одном ПИКе, поищите.

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

Отсюда считайте размер пакетов и соответственно буферов.

FLASH память, имхо, ни к чему, выбирайте самый дешевый SRAM.

RS232 намного проще, особенно для Дельфи.

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


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

Посоветуйте дешевый SRAM, желательно с SPI приличного размера, не хочется заморачиваться с параллелью. Кстати вопрос. Через SPI можно организовать одновременное считывание и запись?

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


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

У меня есть следующая задача, нужно с помощью двух энкодеров (напряжение питания 5в, выходное напряжение 5в), которые подключены к асинхронным двигателям с частотой вращения 1500 об/мин =25 об/сек, измерить положение и скорость вращения. Количество импульсов, которых выдает энкодер за один оборот равняться 1024 импульсов, следовательно 25*1024=25600 Гц. Также есть датчик ускорения ADXL-210. Он тоже подключен к плате в/в и определяет ускорение конструкции (с ним еще не разбирался - дело ближайшего будущего).

Вы не указали точность с какой хотите измерять положение.

Если предположить:

- что с дробными долями Вы заморачиваться не собираетесь;

- неравномерность ускорения за один оборот тоже не учитывается;

то получаем по теореме Котельникова минимальную частоту отсчетов 50 отсч/сек.

С хорошим запасом это 200 отсч/сек на энкодер.

Таймер Вам не нужен, Вам нужен 16-ти битный счётчик.

Будете его считывать каждые 5мс и класть в буфер.

Т.е. суммарный поток данный вместе с акселерометрами будет 2 * 4 * 200 = 1600 байт/сек или ~ 20кбит/сек.

Даже буфер не нужен, только 8 байт памяти.

Для такой задачи по минимуму достаточно одного контроллера с двумя 16 битными счётчиками, двумя каналами АЦП и UARTом.

А как Вы собираетесь синхронизировать положение энкодеров?

Они имеют какой-либо синхро выход?

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

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


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

Небольшое уточнение.

Вчера одним глазом посмотрел даташит на ATXL210.

Для них нужны не два канала АЦП, а ещё пара таймеров с input capture - на выходе у него ШИМ.

 

Требования к этому датчику Вы не озвучивали. Наверное, также надо опрашивать с частотой 100..200 Гц

 

 

Примечание номер раз. Память, с которой могут работать одновременно два контроллера, штука редкая. О существовании такой флеш-памяти я вообще ни разу не слышал (правда, и не интересовался специально). О том, что запись во флеш мгновенно не осуществляется, молчу :)

Примечание номер два. Программа на дельфи в реальном времени? Ой, не верю :)

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


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

Вы не указали точность с какой хотите измерять положение.

Думаю 2-5% вполне приемлемо.

Еще раз повторюсь. Пусть будет счетчик, а не таймер. Какая разница. Пусть переполнение счетчика вызывает прерывание. Можно легко определить с какой частотой они происходят Fmk. Одновременно считываем значение с всего порта, и передаем через UART последовательно все данные (припустим нет памяти и второго микроконтроллера). Мы получаем на компе значение такого типа (255;10;256;12 и т.д.). Выделяем из этих данных те биты, которые нам нужны( :rolleyes: все), и инкрементируем счетчик приема(назвем его Count). Когда я определяю время в каждый момент времени t=Tmk* Count = Count /Fmk. Следуя из этого мне НЕ НУЖНО реальное время, достаточно не потерять всю цепочку данных.

С хорошим запасом это 200 отсч/сек на энкодер.

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

Вчера одним глазом посмотрел даташит на ATXL210.

Для них нужны не два канала АЦП, а ещё пара таймеров с input capture - на выходе у него ШИМ.

Насчет ATXL210, выходной сигнал у них ШИМ для Х и У соответственно. Этот сигнал пропорциональный ускорению и напряжению на аналоговых выходах. Честно говоря я не люблю АЦП, потому буду использовать ШИМ.

Прикрепляю схему. Набросал немного. Пока без памяти и второго микроконтроллера.

post-22318-1247069600_thumb.png

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


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

Думаю 2-5% вполне приемлемо.

Еще раз повторюсь. Пусть будет счетчик, а не таймер. Какая разница. Пусть переполнение счетчика вызывает прерывание. Можно легко определить с какой частотой они происходят Fmk.

Разница большая.

Прерывание от счетчиков импульсов энкодеров вам не нужно.

Структура программы контроллера должна быть примерно такой:

1. Нужен таймер для частоты отсчетов, который выдает прерывание в момент отсчета.

2. По прерыванию от этого таймера сначала читаются счётчики энкодеров и результаты кладутся в память,

затем считывается ШИМ с акселерометров.

Я смотрел даташит вполглаза и не заметил что они с ШИМ.

Возможная проблема с ШИМ - это ошибка по фазе, соответственно и привязке по времени.

Посчитайте, проходит для требуемой точности или нет.

3. После того как все данные одного отсчета получены, они через UART отправляются на компьютер, где пишутся в файл. Скорость RS232 нужно выбрать с запасом.

4. Программа на компьютере, после получения всех данных, находит и корректирует моменты переполнения счетчиков, затем преобразует отсчеты в угол.

Одновременно считываем значение с всего порта, и передаем через UART последовательно все данные (припустим нет памяти и второго микроконтроллера). Мы получаем на компе значение такого типа (255;10;256;12 и т.д.). Выделяем из этих данных те биты, которые нам нужны( :rolleyes: все), и инкрементируем счетчик приема(назвем его Count). Когда я определяю время в каждый момент времени t=Tmk* Count = Count /Fmk. Следуя из этого мне НЕ НУЖНО реальное время, достаточно не потерять всю цепочку данных.

Потеря данных зависит только от качества RS232 линии и правильности конфигурирования компорта.

На всякий случай можно вставлять метки для проверки целостности данных и номера отсчётов.

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

Изучайте теорему Котельникова.

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

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


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

Разница большая.

Прерывание от счетчиков импульсов энкодеров……

Я так и думаю делать, может плохо объяснил. Значение частоты дискретизации будет задаваться через UART.

Изучайте теорему Котельникова.

Из теоремы Котельникова следует, что частота дискретизации должна перевешать максимальное значение частоты 25600Гц минимум в 2 раза, что равно 51200 Гц. Если с запасом в 4 раза, 102400 Гц. Правильно ли я понял?

Вопрос: Как определить погрешность измерения?

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


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

Из теоремы Котельникова следует, что частота дискретизации должна перевешать максимальное значение частоты 25600Гц минимум в 2 раза, что равно 51200 Гц. Если с запасом в 4 раза, 102400 Гц. Правильно ли я понял?

Не совсем. :rolleyes:

У Вас максимальная частота полезного сигнала 25об/сек или 25Гц.

Если интересуют гармоники этой частоты, то надо брать более высокую, конечно, но не 25,6кГц.

25,6кГц это внутренняя частота датчика угла, Вам она не нужна.

Вопрос: Как определить погрешность измерения?

Если Вы о ШИМ акселерометра, то надо для выбранной частоты ШИМ взять максимальное случайное отклонение момента получения результата / 2.

Систематическую погрешность (постоянную задержку) можно устранить при обработке.

Т.к. ШИМ не синхронизирован с отсчетами, то это будет примерно пол периода ШИМ.

Пересчитайте в угол для 25Гц - это и будет ошибка.

Кроме того, для меняющегося входного сигнала, надо учесть к какому момент времени относится значение ШИМ.

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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