Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Измерение скорости вращения вала энкодером

Отправлено InDepth 05 сентября 2008 г. 01:01


Есть оптический энкодер
от bourns серии EN
http://www.bourns.ru/components_encoders.php

128 импульсов на оборот

для считывания и передачи на ПК использую контроллер ATinny 2313 (кварц 7,37 мгц)
опрашивается в бесконечном цикле ноги энкодера и соответсвенно обсчитывается


позицию вала считает точно - проверял никуда не уплывает.

а вот скорость неточно - постоянно скачет от 1 до 3 - 4% !
Скорость вращения вала 10 - 40 об мин

Причем измерять скорость пытался двумя способами

1 сначала по разнице в позиции вала за 0.5 секунды например
второй вариант считал количество тиков таймера между тиками энкодера.

но в обоих случаях значения скачут.


Код


первый вариант измеряю разность положения вала за определенный период врмени

таймер T0

частота 7199 гц
Сompare A = FF
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
// Place your code here
timercounter++;
if (timercounter >15-0 )
{
Speed1.result=abs(Encoder1.result-PredEcn1);
Speed2.result=abs(Encoder2.result-PredEcn2);
PredEcn1 = Encoder1.result;
PredEcn2 = Encoder2.result;
timercounter =0;
};
}



второй вариант (измеряю число тиков таймера между тиками энкодера)

таймер T0

частота 921500 гц
Сompare A = FF


interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
// Place your code here

timercounter1++;
timercounter2++;

if (abs(PredEcn1-Encoder1.result) >= CounterDeep)
{
if (timercounter1 < 5000000){Speed1.result = (timercounter1);} else {Speed1.result = 51000;};

PredEcn1=Encoder1.result;
timercounter1=0;
};

if (abs(PredEcn2-Encoder2.result) >= CounterDeep)
{
if (timercounter2 < 500000){Speed2.result =(timercounter2);} else {Speed2.result = 51000;};

PredEcn2=Encoder2.result;
timercounter2=0;
};

}





Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 567:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru