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

 
 
> Реверсивный счетчик на таймере
Erv&Sed
сообщение Dec 10 2007, 16:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 11-09-05
Пользователь №: 8 451



Добры день, нужна ваша помощ. Задача состоит в том - что бы создать реверсивный счетчик на одном из таймеров AVR (ATMega8(16) или другие). 0-й таймер - не подходит, т.к. он считает только в одну сторону (по даташиту). Остальные таймеры, в частности 1-й - имеет вход направления, но это направление меняется только внутренным контроллером таймера и только в в режиме Phase-correct и Frequency - Phase Correct PWM.

У кого какие соображения нужна максимальная частота которую он может выдать (~ 3.3 МГц на максимуме), при реверсе частота нужно небольшая.

Эту задачу нужно решить для стыковки AVR-ки с энкодером (16-бит - на оборот), в качестве сигнала направления используется выход синронного D-триггера, на D-вход которого подается один из квадратурных выходов, а на вход синронизации - другой.

У кого какие идеи, или может кто-то нашел другой способ стыковки енкодера с AVR-кой.

В поиск - не посылать, AVRFreak - не посылать, к АппНоутам - не посылать, я там везде уже был.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Erv&Sed
сообщение Dec 10 2007, 21:22
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 11-09-05
Пользователь №: 8 451



У ATMega8 1-ый и 2-ой таймеры - реверсивны, просто мы не можем програмно указать направление счета, если таймер работает в режиме "Phase correct PWM" - то счетчик увеличивается до значения TOP, потом уменьшается до значения BOTTOM (0), после опять увеличивается до значения TOP и т.д.

Мне на ум приходит единственное решение моей проблемы - в момент реверса (двигателя -> энкодера) - сделать что-то на подобие:

In Tmp,TCNT1A
Inc Tmp
Out OCR1A,Tmp

А в обработчике OC1A

In Tmp,TCNT1A
Dec Tmp
Out TCNT1A

В первом случае добавляем чтобы точно не пропустить момент "Compare Match" (т.е. одинаковые значения TCNT1A и OCR1A), а в обработчике - чтобы исключить погрешность.

Саму тему я создал для того чтобы узнать ваще видене решения проблемы (при такой частоте импульсов).

Реализация нужна програмная, просто мне сказали что мол есть такие контроллеры в которых есть так называемый квадратурный счетчик, на что я ответил что и AVR`ка тоже будет считать просто надо добавить небольшую аппаратную часть, но не сам счетчик!!!

Принцип работы D-тригера такова: по фронту (спаду) одного из сигналов устанавливаем значение второго, т.е. если двигатель вращается в одну сторону - первый сигнал опережает второй и к переднему фронту первого - на втором будет "0", а при вращении в другую - "1".

Прикрепил модель в Proteus`е.

Сообщение отредактировал Erv&Sed - Dec 10 2007, 21:27
Прикрепленные файлы
Прикрепленный файл  Encoder.rar ( 14.43 килобайт ) Кол-во скачиваний: 42
 
Go to the top of the page
 
+Quote Post



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

 


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


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