реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Обработка 3х фотоимпульсных датчиков, частота 300 Гц максимум, Нужны либо внешние таймеры, либо 3 в МК, 16 бит
haker_fox
сообщение Aug 2 2007, 06:53
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 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.
Прошу прощения за немного сумбурный стиль изложения.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
superbizzon
сообщение Aug 2 2007, 07:13
Сообщение #2


Участник
*

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



ябы использовал INTы.... настало прерывание - +1 в соответствующую переменную... и таймер настроилбы на секунду.
Канешна не очень то, что программа постоянно должна будет летать по прерываниям... ну принципе если инкриментируемые переменные будут в аккумуляторах, т.е при заходе в эти прерывания не надо будет обращаться к озу, то програмка совсем не много времени там будет проводить - вообщем ничего страшного...
Кста - по теме... обязательно нужны будут какиенить тригеры шмита или на худой конец кондёры на этих входах, помница была подобная задачка - подключил напрямую, так за один челчок насчитывало до 1000 переключений....
Go to the top of the page
 
+Quote Post
skn
сообщение Aug 2 2007, 07:23
Сообщение #3


Участник
*

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



Можно использовать 8-ми битный таймер. Настроить прерывание по переполнению. В прерывании инкрементировать старший байт двухбайтного счетчика. Младший будет в TCNT0(2).
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 2 2007, 08:15
Сообщение #4


Познающий...
******

Группа: Свой
Сообщений: 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 МК?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
skn
сообщение Aug 2 2007, 08:29
Сообщение #5


Участник
*

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



Как то я про три датчика упустил. Таймеры, если и есть, то наверняка будут проблемы с покупкой. Можно использовать ПЛИС, но дешевле, наверное, контроллер пожирнее поставить.
Go to the top of the page
 
+Quote Post
Igor26
сообщение Aug 2 2007, 08:32
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(haker_fox @ Aug 2 2007, 12:15) *
существуют ли в природе 12 или более битные тамймеры, которыми можно управлять по удобной шине и у которых есть режим сравнения. Т.е. записал в него число X, он ожидает на тактовом входе клоки и когда их будет ровно X, выдаст сигнал, заведенный на INT МК?

Я делал нечто подобное на ПЛИС. Записывал число Х по SPI-интерфейсу.
Go to the top of the page
 
+Quote Post
aesok
сообщение Aug 2 2007, 08:44
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 2 2007, 08:50
Сообщение #8


Познающий...
******

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



Цитата(skn @ Aug 2 2007, 16:29) *
Как то я про три датчика упустил. Таймеры, если и есть, то наверняка будут проблемы с покупкой. Можно использовать ПЛИС, но дешевле, наверное, контроллер пожирнее поставить.

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
superbizzon
сообщение Aug 2 2007, 09:05
Сообщение #9


Участник
*

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



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


Хватит и ещё запас останется... на самом деле задачкато так се и огород с несколькими МК городить точно не сотоит... и всвязи с этимже непонятно - а зачем ОС там?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 2 2007, 09:10
Сообщение #10


Познающий...
******

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



Цитата(superbizzon @ Aug 2 2007, 17:05) *
Хватит и ещё запас останется... на самом деле задачкато так се и огород с несколькими МК городить точно не сотоит... и всвязи с этимже непонятно - а зачем ОС там?

Многозадачность так или иначе понадобиться: задач несколько (управление двигателями, опрос датчиков, связь с ПК, связь с пультом ручн. управления). scmRTOS надежно себя показала в управлении другого робота! Огромнейшее спасибо уважаемому dxp за сей продукт!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
superbizzon
сообщение Aug 2 2007, 09:22
Сообщение #11


Участник
*

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



Цитата(haker_fox @ Aug 2 2007, 13:10) *
Многозадачность так или иначе понадобиться: задач несколько (управление двигателями, опрос датчиков, связь с ПК, связь с пультом ручн. управления). scmRTOS надежно себя показала в управлении другого робота! Огромнейшее спасибо уважаемому dxp за сей продукт!

Хм... у меня вот обычно в девайсах тоже многозадачность, но както никогда не возникало даже позывов использовать какуюнить ОС, всегда и так было понятно как делать.... хотя канешно в любом случае интересно посмотреть что за зверь - не подскажете где взять/почитать? smile.gif
Go to the top of the page
 
+Quote Post
_artem_
сообщение Aug 2 2007, 09:50
Сообщение #12


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Согласен с superbizzon, используйте 3 ИНТх . В обработчике прерываний плюньте на ОС (конечно же те регистры которые будут использоваться при обработке запихнете в стек), напишите на асм чтобы только суммировал. Если нужно прерывание по определенному числу , там же в прерывании и сравнивайте . Затем по scmrtos ipc запустите обработку по концу (в этом случае придется принять правила написания прерываний, но только на момент сравнения).

Программа для всех прерываний почти что будет одинаковая

(написано для случая использования ОС)


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
Igor26
сообщение Aug 2 2007, 11:04
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



А все три датчика одновременно работают?
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Aug 2 2007, 12:24
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



А планируется ли дребезг?
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 2 2007, 14:21
Сообщение #15


Ambidexter
*****

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



Цитата(haker_fox @ Aug 2 2007, 08:10) *
Многозадачность так или иначе понадобиться: задач несколько (управление двигателями, опрос датчиков, связь с ПК, связь с пультом ручн. управления). scmRTOS надежно себя показала в управлении другого робота! Огромнейшее спасибо уважаемому dxp за сей продукт!

А что если под задачи управления двигателями и, соответственно, опрос датчиков выделить отдельный мелконогий МК, скажем, какую-нибудь тайни 8-ми ногую. Тогда операционка полностью разгрузится от деталей управления, только глобальные команды, типа "ноге 2 продвинуться на 10 см".

(Валяется у меня дома один робот с УЗ обзором, руки так и чешутся его запустить...жалко времени не хватает.)


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 14:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01506 секунд с 7
ELECTRONIX ©2004-2016