|
|
  |
Микроконтроллер для сервопривода подскажите, Два аппаратных енкодера нужно. |
|
|
|
Mar 16 2009, 19:54
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(Oldring @ Mar 16 2009, 21:36)  Да и у микрочипа есть однокристалки с аппаратными интерфейсами квадратурных энкодеров.
Тем не менее, это все не означает, что эту задачу нельзя решить на уже разработанном железе с AVR программно. Просто программное решение такой задачи - не очень стандартная вещь. И код будет несколько извращенным и неподдерживаемым. Нормальный код будет. Только придется написать документацию, где расписать что и сколько тактов исполняется, почему что-то сделано так а не иначе. Что будет проще - заново все сделать, или просто переписать прогу для AVR, вопрос сложный. С одной стороны, тем кто только начал разбираться, я бы не стал советовать начинать с DSP. Но с другой стороны, если начинать с чем-то разбираться, то DSP не самый плохой. Но у avr есть avr студио, где, насколько я помню, можно было неплохо прогнать программу, посчитав все такты.
|
|
|
|
|
Mar 16 2009, 20:02
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Methane @ Mar 16 2009, 22:54)  Но у avr есть avr студио, где, насколько я помню, можно было неплохо прогнать программу, посчитав все такты. Вот эти "просчеты всех тактов" и есть главное извращение. Два квадратурных энкодера. 86 килогерц - это полный период, то есть частота опроса должна быть минимум в 4 раза больше? А то и в 8, если учесть точность перекрытия четвертей? Плюс обработка UART. Плюс рассчет контура обратной связи. Неизвестно еще нужно ли менять параметры регулятора и писать в EEPROM. Опять же, на фоне 400 кГц или 800 кГц опроса энкодеров. 800 кГц опрос - можно и не успеть, если не очень сильно извращаться.
--------------------
Пишите в личку.
|
|
|
|
|
Mar 16 2009, 20:09
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(Oldring @ Mar 16 2009, 22:02)  Вот эти "просчеты всех тактов" и есть главное извращение. Два квадратурных энкодера. 86 килогерц - это полный период, то есть частота опроса должна быть минимум в 4 раза больше? А то и в 8, если учесть точность перекрытия четвертей? Нужно смотреть на сколько тактов нужно на вхождение в прерывание итд. 68, это 235 тактов. Если поделить на два, то 117. Сложно. Но можно ужаться. Вопрос только зачем. Цитата Плюс обработка UART. Это уже можно терять байты. Да и какая скорость? Цитата Плюс рассчет контура обратной связи. Это совсем низкий приоритет. Цитата Неизвестно еще нужно ли менять параметры регулятора и писать в EEPROM. ЕЕПРОМ, это вообще очень низкий приоритет. Цитата Опять же, на фоне 400 кГц или 800 кГц опроса энкодеров. 800 кГц опрос - можно и не успеть, если не очень сильно извращаться. Я не понял немного. с какой частотой приходят прерывания от енкодеров?
|
|
|
|
|
Mar 16 2009, 20:20
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Methane @ Mar 16 2009, 23:09)  Я не понял немного. с какой частотой приходят прерывания от енкодеров? Этого я тоже до конца не понял. Чтобы понять - нужен даташит на энкодер и максимальная скорость вращения в ТЗ. Надеюсь, что 86 кГц - это частота четвертей. Реально должно быть выше, так как нужно учитывать точность перекрытия квадратур. Никаких прерываний по фронтам энкодеров быть не должно. Прерывать нужно по таймеру, организовав поллинг энкодеров. Если будет на поллинг по таймеру потрачено 50% времени - уже замечательно. Обмен по UART нужно обрабатывать по прерываниям, но в начале прерывания UART нужно запрещать его прерывания и разрешать глобальные прерывания, в конце - наоборот. Тем самым организовав приоритеты прерываний. Со всем остальным прийдется немного извратиться. Возможно, организовав еще один уровень софтверных прерываний, запускаемых после каждого N-го прерывания поллинга энкодеров. С меньшим приоритетом, чем поллинг и обмен с UART.
--------------------
Пишите в личку.
|
|
|
|
|
Mar 16 2009, 20:39
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(khach @ Mar 16 2009, 19:16)  при совпадении прерываний от двух енкодеров пока обрабатывалось первое, во втором уже изменялось состояние входов. Постарайтесь выложить исходник, максимально приближенный к проблеме. Если есть "секретные" места - сымитируйте побочные эффекты, которые в них могут происходить - типа атомарных блоков, максимально правдоподобно по длительности выполнения. Все ж лучше проверить, чем тупо начинать сначала. И поделитесь сейчас цоколевкой, куда подключаются энкодеры, а то может я зря клаву терзаю... Цитата(Rst7 @ Mar 16 2009, 19:49)  Например, вариант Павла можно еще сократить, отняв у IAR'а немного регистров. Плюспицот! Вот въедливое выражение подарили...  Пащитаем: ввели SaveSREG и предыдущее состояние порта Port_Prev итого -6 clocks если бы второй энкодер на том же порту сидел, то накладные расходы по его декодированию практически скомпенсировались бы. И еще не забываем, что в некоторых камнях еще есть GP регистры в пространстве SFR. Можно предыдущие состояния порта хранить там Цитата(Oldring @ Mar 17 2009, 00:02)  Вот эти "просчеты всех тактов" и есть главное извращение.
частота опроса должна быть минимум в 4 раза больше?
Плюс обработка UART.
Неизвестно еще нужно ли менять параметры регулятора и писать в EEPROM. Типа спор выходит: - главный изврат - это создать боле-мене вещь и угробить ее криво написанной софтой. - Частоту khach дал для 4х - UART обрабатывается (должен, имхо) в неблокирующем прерывании с кольцевым буфером - В EEPROM шить на лету - это значит иметь активную копию содержимого, применяемого в работе. Кто отдаст столько памяти под это безобразие? Я бы на попытки записать в процессе движения просто ругался бы. Возможно, нецензурно типа BUSY - и все.
|
|
|
|
|
Mar 16 2009, 21:52
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(Rst7 @ Mar 16 2009, 23:44)  Я именно про квадратуру. Итого 20 тактов на 10тибитный счетчик со всеми входами/выходами. 10 бит это 1024 такта. Цитата Отнять надо пару регистров для счетчика и регистр для сохранения SREG. Боюсь, я не понял вашу мысль. Сколько бит, столько и должно быть регистров. Как минимум. Цитата Атомарное считывание положения осуществляется командой MOVW. Потом, конечно, надо немного поколдовать над конвертированием. Но это уже O(1). На внешнюю шину лепить, оно, конечно быстро будет. Но а она в ней есть? И лап на это хватит? ИМХО, чем лепить CPLD, лучше тот DSP от Ti поставить. Там все уже есть, с примерами, итд.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|