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

 
 
> Вопросы по схеме энкодера
Папа Карло
сообщение Nov 28 2008, 20:29
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Всем привет.

Есть двигатель коллекторный с редуктором.
После редуктора хочу поставить энкодер.
У энкодера 80 тиков за оборот.
Двигатель крутится не быстрее 60 об\мин.

МК LPC2134 будет программно обрабатывать энкодер.

Алгоритм такой:
таймер настроен на прерывание с частотой 2кГц
каждое прерывание смотрим состояние на выходе энкодера
если есть изменение состояние, то записываем "тик" в переменную
Через 50 прерываний таймера вычисляем скорость движения
по формуле sp = 0x80 - ( p - 5 )
где sp - скорость, 0x80 константа максимального кол-ва "тиков", 5 - константа минимальных "тиков"
p - сколько натикало за 50 прерываний.

Хотелось бы замечания по алгоритму или советы?
Ниже выкладываю схему энкодера.
Стоит ли ставить триггер ?
Подойдёт ли фильтр такой ?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Папа Карло
сообщение Dec 2 2008, 17:27
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Сделал схему и написал обработчик вот такой:
Код
struct motorstatus
    {
    unsigned int oc;//счётчик тиков обратной связи
    char ocs;//состояние датчика
    char speedcur;//текущая скорость мотора
    char speed;//
    char flag;//
    char dir;//
    volatile unsigned long *reg;//
    };

__irq void T0_Isr( void )
{

if( motstat[ 1 ].oc < 255 ) motstat[ 1 ].oc ++;//считает тики
//motstat[ 1 ].oc ++;
    //ÎÑ2
    if( ( IOPIN0 & 0x100000 ) && !motstat[ 1 ].ocs )//при изменении состояния запишем скорость
        {
        if( motstat[ 1 ].oc > 5 ) motstat[ 1 ].speedcur = 255 - ( motstat[ 1 ].oc );
//        motstat[ 1 ].speedcur = ( motstat[ 1 ].oc >> 1 );
        motstat[ 1 ].oc = 0;
//        motstat[ 1 ].oc ++;
        motstat[ 1 ].ocs = 1;
        }
    else
        if( !( IOPIN0 & 0x100000 ) && motstat[ 1 ].ocs )
            {
//            motstat[ 1 ].speedcur = ( motstat[ 1 ].oc );
//            motstat[ 1 ].oc = 0;
//            motstat[ 1 ].oc ++;
            motstat[ 1 ].ocs = 0;
            }
}


Прерывание вызывается с частотой 6кГц.
Но при медленном вращении двигателя, например при минимальном вращении, скорость выдаёт от 0 до 20.
Если увеличить мощность, то скорость начинает стабилизироваться и уже не бегает так сильно.
Как бы мне получить стабильные значения или тут уже сам двигатель с редуктором подёргивается ?

В прерывании я написал возможность считать скорость по обеим фронтам, но результат оказался нестабильным значения бегали прилично даже при подачи нормальной мощности.
Из за чего это могло быть вызвано ?


Вот картинка диска энкодера, который я разместил на валу редуктора.
Он работает на отражение.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Adviser
сообщение Dec 2 2008, 17:50
Сообщение #3


Частый гость
**

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



Цитата(Папа Карло @ Dec 2 2008, 20:27) *
Вот картинка диска энкодера, который я разместил на валу редуктора.
Он работает на отражение.


Тут вот есть вариант прикручивания самопального энкодера к валу двигателя.

Самодельный энкодер

Там (судя по картинкам) диск просто приклеивают к валу. Хороший клей сейчас можно подобрать.

Хорошо ли ставить энкодер после редуктора - не знаю. Всегда видел их на валу двигателя. Видимо надо более подробно посмотреть на это дело с точки зрения механики - как в этом случае изменится инерционная составляющая системы и хорошо ли это с т. зрения алгоритма управления.

Сообщение отредактировал Adviser - Dec 2 2008, 17:53
Go to the top of the page
 
+Quote Post



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

 


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


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