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

Идея в следующем - там были разнесённыу по фазе 2 сигнала sin и cos - и в зависимости который из них первый по фазе соответственно получаем направление движения(вращения) - я не стал мудрить и повесил оба сигнала на прерывания 8515 - их там как раз 2 вывода и в начальный пуск настраивал сработку прерывания по нарастающему фронту . Как только приходил один из импульсов в обработчике прерывания менял на сработку этого вывода на уже спадающий фронт - дабы дождаться либо окончания импульса или наоборот если пошёл реверс то отмену прибавки в счётчике и уже ожидания окончания импульса для того что-бы его вычесть из текущего числа импульсов

Наверно несколько сумбурно но всё вроде просто и работает - единственно что не устранил - это всегда была погрешность +-1 - тутелька в тютельку не получилось - да и не надо это было - девайс нужен был для проверки датчиков перемещения на станке не снимая их (иногда пол станка для этого нужно было разобрать что-бы снять "линейку" - кто знает меня поймёт)

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


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

А кодом неподелитесь, может легче будет? А то все равно что то недопойму во эту часть:

Как только приходил один из импульсов в обработчике прерывания менял на сработку этого вывода на уже спадающий фронт - дабы дождаться либо окончания импульса или наоборот если пошёл реверс то отмену прибавки в счётчике и уже ожидания окончания импульса для того что-бы его вычесть из текущего числа импульсов

 

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


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

код надо искать - давно было и разово делась - про реверс - датчик может двигаться в противоположные стороны поэтому импульсы прибавляются в счётчике или отнимаются - когда импульс отсчёта прошёл то всё просто а если во время действия импульса отсчёта произошёл реверс движения то тут только по фронтам можно отследить с точностью до +-1 ....Если по-простому - настраиваем изначально на сработку прерывания по нарастающему фронту... как только произошло прерывание то запоминаем что импульс начался и в теле прерывания меняем срабатывание прерывания на спадающий - т.е. ждём завершения импульса ...всё .

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


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

Разяснения то были понятны, вот только программно это реализовать не мог до недавнего времени.

СПАСИБО!!!!!!

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


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

Возникла очередная проблемка, да бы не создавать новую тему и не захламлять форум, задам вопрос тут: Данные с датчика требуется отправлять на комп - с этой задачей с горем на пополам справился. Так же требуется кое какие данные отправлять на внешнее устройство, обмен данными ведется через интерфейс 232 по USART, но вот эту задачу почему то не удается реализовать.При использовании процедуры getchar() программа виснет. помогите плиз.

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


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

Сделал вот таким образом, виснуть перестало, но и непринимает нечего:

if (rx_counter1 !=0){

a=getchar1();

putchar1(a);

}

else putchar1('a') ;

 

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

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


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

Продоржаю тему подключения энкодера ЛИР к контроллеру.

Немного истории: предидущее подключение энкодера было "прямым", датчик напрямую подключался к контроллеру и сигналы считались от прерывания (счетчик был реверсивным), однако счет был неверным так как в датчике наблюдался дребизг.

параметры:

мах. частота вращения вала на который закреплен датчик: 5000 об/мин

датчик: 2500 имп. на оборот

частота работы мк: 16МГц

 

Что хочется сделать теперь:

1. Избавиться от дребизга и осуществить реверс

2. Использовать Для счета таймер/счетчик

3. Исбользовать в качестве контроллера Xmega c частотой работы в 32МГц, так как помимо счета надо выполнять еще и другие операции.

 

==================================

начнем с пункта №1.

Для избежания дребизга планируется использовать оптопары, то есть каждый сигнал канала будет проходить через свою оптопару. Кто что об этом думает? Как лучше избавиться от дребезга? Аппаратно или программно?

 

Реверс планирую осушествить добаврением к схеме двух корпусов логики триггера и элемента "И".

e8aa8bd985f3.jpg

Жду коментариев, предложений?

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


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

5000 об/мин

Это 83,33.... об/сек - зачем Xmega с 32 000 000 операций за секунду , на что может не хватить 16 000 000 оп/сек?

А от датчика придёт только ~ 42 импульса за секунду.

 

Для избежания дребЕзга планируется использовать оптопары
и чем это должно помочь?

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


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

это как это вы водсчитали что 42 импульса в секунду?

В секунду с датчика придет: 83.33*2500=300имп в сек

 

оптопара: зглаживание пульсаций

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


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

В секунду с датчика придет: 83.33*2500=300имп в сек

 

Да, правильно, посмотрел в этот момент на об.мин, правильно 300 . И что это меняет из 16 000000?

 

оптопара: зглаживание пульсаций

За счёт чего , ёмкости самой оптопары, ну очень острые пички он уберёт , остальное пропустит

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


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

Да, чисто для счета 16 МГц хватит, но мне надо будет еще проделать несколько операцай помимо счета, для которых может и нехватить такой скорости. А если и хватит то впритык.

 

И как же посоветуете избавиться от дребезга?

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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