Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопросы по схеме энкодера
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Папа Карло
Всем привет.

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

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

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

Хотелось бы замечания по алгоритму или советы?
Ниже выкладываю схему энкодера.
Стоит ли ставить триггер ?
Подойдёт ли фильтр такой ?
evgeny_ch
Простенький алгоритм.
Optical Encoding.
Потом, возможно, вам захочется узнать скорость ДПТ. biggrin.gif
Single Chip Velocity Measurement System for Incremental Optical Encoders.
Для полноценного управления нужно ещё и значение тока мерять.
? biggrin.gif
Adviser
Цитата(evgeny_ch @ Nov 28 2008, 23:53) *
Потом, возможно, вам захочется узнать скорость ДПТ. biggrin.gif

+1

Обычное место энкодера - это вал двигателя. На валу редуктора - это как-то экзотично.

Тема кстати не так давно обсуждалась:
Тема
Папа Карло
evgeny_ch
Мне простенький алгоритм, который считает импульсы с энкодера не нужен.
Увеличивать константу или уменьшать я в состоянии сделать.

Мне нужен регулятор скорости из моего оборудования.
А это энкодер показанный на схеме с 1 каналом, который выдаёт импульсы.
Завести на прерывание я не могу сигнал с энкодера, поэтому обрабатываю программно состояния.

Во второй вашей ссылки я ничего не понял...
Датчик тока есть, но он очень разные значения выдаёт и даже усреднённое значение из 4 выборок
очень сильно плавает.

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

Темы я прочитал все по энкодерам и ПИДам, но сделать свой у меня хорошо не выходит.

Хотелось бы совет по алгоритму регулятора скорости?!
И стоит ли ставить триггер Шмидта, если я буду программно вносить задержки для устранения дребезга?
Сможет ли мне помочь от устранения дребезга фильтр с заданными параметрами ?
Tanya
Цитата(Папа Карло @ Nov 29 2008, 19:27) *
evgeny_ch

Датчик тока есть, но он очень разные значения выдаёт и даже усреднённое значение из 4 выборок
очень сильно плавает.


Хотелось бы совет по алгоритму регулятора скорости?!

В двигателе у Вас щетки... коммутируют... обмотки разные... Надо немного фильтровать, но это, понятное дело, внесет задержку... Ток пропорционален моменту - производной от скорости...Если проинтегрировать..., я уже это недавно писала тут где-то... Заводите на второй вход интегратора сигнал от системы управления (ПИД или что Вам больше нравится) - получится управление по скорости. Выход интегратора включает-выключает....
evgeny_ch
Цитата(Папа Карло @ Nov 29 2008, 20:27) *
evgeny_ch
...

По случаю выходного можно посмотреть похожую ветку. В понедельник продолжим, м. б. завтра.
Извините. smile.gif
Папа Карло
Сделал схему и написал обработчик вот такой:
Код
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.
Если увеличить мощность, то скорость начинает стабилизироваться и уже не бегает так сильно.
Как бы мне получить стабильные значения или тут уже сам двигатель с редуктором подёргивается ?

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


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


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

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

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

Хорошо ли ставить энкодер после редуктора - не знаю. Всегда видел их на валу двигателя. Видимо надо более подробно посмотреть на это дело с точки зрения механики - как в этом случае изменится инерционная составляющая системы и хорошо ли это с т. зрения алгоритма управления.
Папа Карло
Вопрос не в том, как изготовить, а как получить результат...
Энкодер я уже сделал давно, сейчас в схему ввёл фильтр НЧ и триггер Шмидта.
И написал обработчик, но на низких скоростях очень нестабильная скорость.

На самой маленькой скорости программа выдаёт показания от 0 до 20.
И соответственно, при стабилизации скорости будут рывки, т.к. программа будет пытаться стабилизировать вращения. а оно хаотично бегает...
Папа Карло
Может я что то спросил не то ?
Или просто никто не делал похожее ?
Tanya
Цитата(Папа Карло @ Dec 3 2008, 16:40) *
Может я что то спросил не то ?
Или просто никто не делал похожее ?

Похоже, что так...
Похоже, Вы не думали, что нестабильность трения при малых скоростях проявляется в нестабильности скорости вращения...
Adviser
Цитата(Tanya @ Dec 3 2008, 17:00) *
Похоже, Вы не думали, что нестабильность трения при малых скоростях проявляется в нестабильности скорости вращения...


Еще свою лепту в нестабильность внесут люфты редуктора, наверняка имеющие место. Собственно, одна из причин - почему энкодер предпочтительнее на валу двигателя.

Ну а регулятор - ИМХО кроме добросовестно исполненного ПИД-регулятора тут сложно что-то еще предложить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.