Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 27.02.2015, 11:09  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: STM32F100 + Two Timer + Encoder

Я ж говорил - все просто как мычание
Реклама:
Boba_spb вне форума  
Непрочитано 27.02.2015, 14:28  
vdvvvs
Частый гость
 
Регистрация: 13.03.2009
Сообщений: 27
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
vdvvvs на пути к лучшему
По умолчанию Re: STM32F100 + Two Timer + Encoder

Вставлю свои 5коп. Работа с энкодером с TIM1 по прерыванию таймера TIM7 10 раз в сек. Определяем скорость вращения, направление и угол поворота вала.

void TIM7_IRQHandler(void)
{
if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)
{

TIM_ClearITPendingBit(TIM7, TIM_IT_Update);
_current_pos=TIM1-›CNT;
if(_current_pos!=_last_pos)
{
if (_current_pos›_last_pos)
{
if (TIM_GetFlagStatus(TIM1,TIM_FLAG_Update))
{
TIM_ClearFlag(TIM1,TIM_FLAG_Update);

_delta_fi=((0xFFFF-_current_pos)+_last_pos);
_speed=(_delta_fi*300)/4000;
_tacho=0;
} else
{
_delta_fi=(_current_pos-_last_pos);
_speed=(_delta_fi*300)/4000;
_tacho=1;
}
} else {

if (TIM_GetFlagStatus(TIM1,TIM_FLAG_Update))
{
TIM_ClearFlag(TIM1,TIM_FLAG_Update);
_delta_fi=((0xFFFF-_last_pos)+_current_pos);
_speed=(_delta_fi*300)/4000;
_tacho=1;
} else
{
_delta_fi=(_last_pos-_current_pos);
_speed=(_delta_fi*300)/4000;
_tacho=0;
}
}
_last_pos=_current_pos;
if (_tacho)
{
_fi=_fi+_delta_fi; if (_fi›=4000) _fi=0;
} else {
_fi=_fi-_delta_fi; if (_fi›4000) _fi=3999;
}
} else _speed=0;
}
}
vdvvvs вне форума  
Непрочитано 27.02.2015, 15:51  
gks5
Прописка
 
Регистрация: 31.10.2006
Сообщений: 149
Сказал спасибо: 15
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
gks5 на пути к лучшему
По умолчанию Re: STM32F100 + Two Timer + Encoder

Сообщение от AlmazRa Посмотреть сообщение
НО она не нулевая и это как-то пугает.
К сожалению мой код не очень хорошо показал себя еще и на больших оборотах.
Пока переделал по STM32F4. Поворотный энкодер.
gks5 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proteus Timer 0 Over.. and Compare Max966 Proteus 0 13.08.2012 01:42
Stellaris timer kadrilo Микроконтроллеры, АЦП, память и т.д 0 26.10.2011 16:14
Прерывания по таймеру ADSP 21065l sergurets Цифровые сигнальные процессоры 7 23.03.2011 00:49
[Решено] помогите определить ENCODER lightworld Информация по радиокомпонентам 0 11.01.2010 18:44
Timer 0 в AVR 8515 martyr Микроконтроллеры, АЦП, память и т.д 0 12.10.2005 16:27


Часовой пояс GMT +4, время: 06:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot