|
Обработка 3х фотоимпульсных датчиков, частота 300 Гц максимум, Нужны либо внешние таймеры, либо 3 в МК, 16 бит |
|
|
|
Aug 2 2007, 06:53
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Здравствуйте! Имеется три фотоимпулсьных датчика (оптопара, которая перекрывается вращаемой крыльчаткой), частота импульсов с каждого в пределе достигает 300 Гц. Их нужно опрашивать в реальном времени, в момент начала вращения двигателя, следя за кол-вом импульсов и т.о. измерять пройденное расстояние. По моим прикидкам, раз за 1 сек. датчик дает примерно 300 импульсов, а часть робота движется от одной крайней точки к другой около 10 сек, соответсвено за это время мы насчиатаем 3000 импульсов, и для хранения этого числа нужно не менее 12 бит (округилим до 16). ATmega16(32), которую планируем использовать для управления, имеет один такой таймер, да и тот занят под PWM. В принципе можно и задействоать 8 битный таймер, дополнив его программным счетчиком, но дачтика 3. Что можете посоветовать в этой ситуации? Пока мои идеи: 1. найти соотв. МК (например ATmega1281), у которого 4 16-битных таймера, но это дорого... 2. использовать внешние мсх таймеров, с которых можно считывать значение по шине I2C или подобной. Есть ли такие в природе? 3. Парсить все три датчика программно, но это займет много времени МК, учитывая, что на нем еще крутиться ОС scmRTOS. Прошу прощения за немного сумбурный стиль изложения.
--------------------
Выбор.
|
|
|
|
|
Aug 2 2007, 07:13
|
Участник

Группа: Новичок
Сообщений: 32
Регистрация: 28-04-05
Пользователь №: 4 592

|
ябы использовал INTы.... настало прерывание - +1 в соответствующую переменную... и таймер настроилбы на секунду. Канешна не очень то, что программа постоянно должна будет летать по прерываниям... ну принципе если инкриментируемые переменные будут в аккумуляторах, т.е при заходе в эти прерывания не надо будет обращаться к озу, то програмка совсем не много времени там будет проводить - вообщем ничего страшного... Кста - по теме... обязательно нужны будут какиенить тригеры шмита или на худой конец кондёры на этих входах, помница была подобная задачка - подключил напрямую, так за один челчок насчитывало до 1000 переключений....
|
|
|
|
|
Aug 2 2007, 07:23
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-03-06
Пользователь №: 15 416

|
Можно использовать 8-ми битный таймер. Настроить прерывание по переполнению. В прерывании инкрементировать старший байт двухбайтного счетчика. Младший будет в TCNT0(2).
|
|
|
|
|
Aug 2 2007, 08:15
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(skn @ Aug 2 2007, 15:23)  Можно использовать 8-ми битный таймер. Настроить прерывание по переполнению. В прерывании инкрементировать старший байт двухбайтного счетчика. Младший будет в TCNT0(2). Об это я уже написал в первом посте. Но датчика три! Цитата(superbizzon @ Aug 2 2007, 15:13)  ябы использовал INTы.... настало прерывание - +1 в соответствующую переменную... и таймер настроилбы на секунду. Канешна не очень то, что программа постоянно должна будет летать по прерываниям... ну принципе если инкриментируемые переменные будут в аккумуляторах, т.е при заходе в эти прерывания не надо будет обращаться к озу, то програмка совсем не много времени там будет проводить - вообщем ничего страшного... Кста - по теме... обязательно нужны будут какиенить тригеры шмита или на худой конец кондёры на этих входах, помница была подобная задачка - подключил напрямую, так за один челчок насчитывало до 1000 переключений.... Маловероятно что этот способ подойдет, у меня ведь еще ОС используется, и обработчик прерывания уже легким не сделать( Видимо все таки логичнее поставить более солидную мегу, у которой на борту есть необходимое количество таймеров. А то разводить на плате кучу кристаллов это как-то несовременно))) Хотя, ради интереса, может кто-нить знает, существуют ли в природе 12 или более битные тамймеры, которыми можно управлять по удобной шине и у которых есть режим сравнения. Т.е. записал в него число X, он ожидает на тактовом входе клоки и когда их будет ровно X, выдаст сигнал, заведенный на INT МК?
--------------------
Выбор.
|
|
|
|
|
Aug 2 2007, 08:29
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-03-06
Пользователь №: 15 416

|
Как то я про три датчика упустил. Таймеры, если и есть, то наверняка будут проблемы с покупкой. Можно использовать ПЛИС, но дешевле, наверное, контроллер пожирнее поставить.
|
|
|
|
|
Aug 2 2007, 08:44
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата ябы использовал INTы.... настало прерывание - +1 в соответствующую переменную... и таймер настроилбы на секунду. Цитата(haker_fox @ Aug 2 2007, 12:15)  Маловероятно что этот способ подойдет, у меня ведь еще ОС используется, и обработчик прерывания уже легким не сделать( Обработчик прерывания должен инкрементировать одну 16-битную переменную, с учетом того что он написан на С, возмем например 100 тактов на выполнение обработчика. Прерывания приходят 300 раз в секунду. Три обработчика. 100 * 300 * 3 = 90 000 - тактов в секунду на выполнение этой задачи. Если контроллер работает на частоте 10 МГц то этой задачей он будет занят примерно 1% времени. А много это или мало я не знаю. Анатолий.
Сообщение отредактировал aesok - Aug 2 2007, 08:47
|
|
|
|
|
Aug 2 2007, 08:50
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(skn @ Aug 2 2007, 16:29)  Как то я про три датчика упустил. Таймеры, если и есть, то наверняка будут проблемы с покупкой. Можно использовать ПЛИС, но дешевле, наверное, контроллер пожирнее поставить. Видимо действительно придется ставить жирный МК.. С плис не умею работать( Осваивать некогда... времени в обрез... На крайний случай думаю поставить дешевые at90s2313 на управление каждым движком. В роботе, который модернизирую, 3 "сложных звена", состоящих из: двигателя, двух концевиков, фотоимпульсника и электромагнитного тормоза. Так вот, бросить на каждый такой набор по одному МК... и свзать их с главным МК по I2C. Главному МК еще останеться управлять двигателем поворота робота (там только два крайних положения), схватами + разруливать работу трех первых МК, держать свзять с ПК и пультом ручного управления. Хотя не очень-то мне этот вариант и нравиться, уж чего чего , а МК не нужно плодить в системе (ИМХО).Смотрю в сторону ATmega1281 или ATmega2561, но хватит ли производительности одного кристалла? К сожалению, не знаю как расчитать... Осваивать более мощный МК опять же время не позволяет...
--------------------
Выбор.
|
|
|
|
|
Aug 2 2007, 09:05
|
Участник

Группа: Новичок
Сообщений: 32
Регистрация: 28-04-05
Пользователь №: 4 592

|
Цитата(haker_fox @ Aug 2 2007, 12:50)  Смотрю в сторону ATmega1281 или ATmega2561, но хватит ли производительности одного кристалла? К сожалению, не знаю как расчитать... Осваивать более мощный МК опять же время не позволяет... Хватит и ещё запас останется... на самом деле задачкато так се и огород с несколькими МК городить точно не сотоит... и всвязи с этимже непонятно - а зачем ОС там?
|
|
|
|
|
Aug 2 2007, 09:22
|
Участник

Группа: Новичок
Сообщений: 32
Регистрация: 28-04-05
Пользователь №: 4 592

|
Цитата(haker_fox @ Aug 2 2007, 13:10)  Многозадачность так или иначе понадобиться: задач несколько (управление двигателями, опрос датчиков, связь с ПК, связь с пультом ручн. управления). scmRTOS надежно себя показала в управлении другого робота! Огромнейшее спасибо уважаемому dxp за сей продукт! Хм... у меня вот обычно в девайсах тоже многозадачность, но както никогда не возникало даже позывов использовать какуюнить ОС, всегда и так было понятно как делать.... хотя канешно в любом случае интересно посмотреть что за зверь - не подскажете где взять/почитать?
|
|
|
|
|
Aug 2 2007, 14:21
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(haker_fox @ Aug 2 2007, 08:10)  Многозадачность так или иначе понадобиться: задач несколько (управление двигателями, опрос датчиков, связь с ПК, связь с пультом ручн. управления). scmRTOS надежно себя показала в управлении другого робота! Огромнейшее спасибо уважаемому dxp за сей продукт! А что если под задачи управления двигателями и, соответственно, опрос датчиков выделить отдельный мелконогий МК, скажем, какую-нибудь тайни 8-ми ногую. Тогда операционка полностью разгрузится от деталей управления, только глобальные команды, типа "ноге 2 продвинуться на 10 см". (Валяется у меня дома один робот с УЗ обзором, руки так и чешутся его запустить...жалко времени не хватает.)
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|