|
|
  |
Микроконтроллер для сервопривода подскажите, Два аппаратных енкодера нужно. |
|
|
|
Mar 17 2009, 06:17
|
Местный
  
Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031

|
Цитата Чтобы понять - нужен даташит на энкодер и максимальная скорость вращения в ТЗ. Может получиться так, что в момент остановки датчик попадёт на границу дискреты и при наличии определённых механических возмущений немного подребезжит. Поэтому более корректно закладываться не на максимальную скорость вращения, а на максимальную выходную частоту датчика!
|
|
|
|
|
Mar 17 2009, 07:10
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Огурцов @ Mar 17 2009, 02:15)  На меге > 86кгц*2 получить не реально, Извините, но это аццкий отжых. Иначе, отчего у меня Энкодер(правда, 1) + STEP разгоняются до 100кГц пока без напрягов для основной задачи? Приведенным выше макаком, ессно. На 18.432 МГц Цитата(Rst7 @ Mar 17 2009, 01:44)  Я именно про квадратуру. Итого 20 тактов на 10тибитный счетчик со всеми входами/выходами. Отнять надо пару регистров для счетчика и регистр для сохранения SREG. Потом, конечно, надо немного поколдовать над конвертированием. Огласите весь список, пжалста!  Не пойму, как мы без ловли фронтов отловим событие, по которому изменится регистр положения
|
|
|
|
|
Mar 17 2009, 07:14
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
ЗЫ: вот кстати - история про то, что надо фронты обрабатывать: Цитата(_Sam_ @ Mar 17 2009, 10:17)  и при наличии определённых механических возмущений немного подребезжит. Цитата(PhX @ Mar 17 2009, 11:10)  Обрабатываем его по INT0 Дык зря. Надо скан, уже ведь говорили где-то в темах по AVR
|
|
|
|
|
Mar 17 2009, 07:17
|

Местный
  
Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249

|
Цитата(_Pasha @ Mar 17 2009, 11:14)  Дык зря. Надо скан, уже ведь говорили где-то в темах по AVR Мне кажется дело вкуса. У меня по INT0 замечательно работает. Про фронты +1. Этими граблями сам получил.
--------------------
Если все, то не я...
|
|
|
|
|
Mar 17 2009, 08:01
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата(_Pasha @ Mar 17 2009, 09:10)  Огласите весь список, пжалста!  Не пойму, как мы без ловли фронтов отловим событие, по которому изменится регистр положения Ну фронты ловить надо, спору нет. По ним обновляются младшие 2 бита положения - они же банальные сигналы квадратуры. Только вот обрабатывать достаточно только перенос, а не каждый фронт. Ну должно быть типа такого Код #define SREG_SAVE R13 #define ENC_POS R14 #define STATE R15
#define PIN_ENCODERS PINC #define BIT_A 1 #define BIT_B 4
ENC_HANDLE: SBRC STATE,BIT_A RJMP ENC_HANDLE_EXIT BST STATE,BIT_B IN STATE,PIN_ENCODERS SBRC STATE,BIT_A RETI BRTS ENC_HANDLE_DEC IN SREG_SAVE,SREG SBRC STATE,BIT_B INC ENC_POS OUT SREG,SREG_SAVE RETI ENC_HANDLE_DEC: IN SREG_SAVE,SREG SBRS STATE,BIT_B DEC ENC_POS OUT SREG,SREG_SAVE RETI ENC_HANDLE_EXIT: IN STATE,PIN_ENCODERS RETI Пардон, прошлый раз считал в уме, немного ошибся. Общее время 4(вход в прерывание)+2(RJMP с вектора)+16(худший случай)=22 такта. Соответственно, ENC_POS - старшие 8 бит положения, STATE.A и STATE.B - младшие 2 бита положения в коде Грея. Оба регистра атомарно эксгумируются при помощи MOVW (поэтому и лежат рядом). Двухэнкодерный случай рассмотрите сами
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Mar 17 2009, 09:22
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Дык это на всю схему распространяется, помехо(не)устойчивость может натворить и при идеальном энкодере. Да не в том дело. Если энкодер вменяем и не может залить сигнал флудом, то прилет такой помехи, которая клином поставит проц, надо рассматривать как аварийный режим. Работать такая помеха явно не даст - уже неизвестно, сколько левых импульсов насчитано/пропущено. Конечно, при такой аварии надо предусмотреть такую последовательность действий, которая безопасно остановит процесс. Просто опрос по pin-change сам балансирует нагрузку на проц. И не отнимает мипсы при отсутствии перемещения. Как промежуточный вариант можно сделать так - простробировать на D-триггерах сигналы энкодера, a в качестве строба подать сигнал от таймера с максимально возможной для обработки частотой. Обработчик оставить на pin-change. Можно, например, взять 74HC74, если сигналов всего два.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Mar 17 2009, 12:50
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Rst7 @ Mar 17 2009, 11:01)  Сэр, у Вас КОСЯГ: Код ............ ENC_HANDLE: ..................................... BST STATE,BIT_B ; а потом уже SREG сохраняется Природа отобрала 1 такт  Плакать не будем.
|
|
|
|
|
Mar 17 2009, 13:29
|

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

|
Народ, в который раз меня вдохновила подобная беседа!!! И вот я тоже прихожу к выводу, что поллить энкодеры несколько лучше в плане устойчивого считывания информации. Особенно, если энкодеры не промышленные, а самопал - типа из мышки...( Как это не печально, но бюджет не позволяет купить что-нить готовое. Даже импульсов 200 на оборот... Ничего дешевле 1500 р не находил, а нужно три энкодера. В универе денег нет((( Но что еще печальнее, энкодер из мышки не дает по двум каналам двига на pi/2 между фазами. Далее, не удается получить скважность сигнала на каждом канале равную 2... Если на одном получается, то на другом уже перекос... Понятно, что это уже не совсем квадратурный энкодер..., а что-то другое. И аппаратный декодер загибается на этом деле. Тут, похоже нужно программно... верно ли я мыслю?
--------------------
Выбор.
|
|
|
|
|
Mar 17 2009, 13:45
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Сэр, у Вас КОСЯГ: Согласен. Цитата Природа отобрала 1 такт Не согласен. Код ENC_HANDLE: SBRC STATE,BIT_A RJMP ENC_HANDLE_EXIT IN SREG_SAVE,SREG BST STATE,BIT_B IN STATE,PIN_ENCODERS SBRC STATE,BIT_A RJMP ENC_RESORE BRTS ENC_HANDLE_DEC SBRC STATE,BIT_B INC ENC_POS ENC_RESTORE: OUT SREG,SREG_SAVE RETI ENC_HANDLE_DEC: SBRS STATE,BIT_B DEC ENC_POS OUT SREG,SREG_SAVE RETI ENC_HANDLE_EXIT: IN STATE,PIN_ENCODERS RETI Худший случай не изменился. Немного ухудшилась одна ветка. Цитата Плакать не будем. Согласен.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|