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

 
 
> stm32 аппаратная обработк энкодера
Reystlin
сообщение Apr 22 2016, 04:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 6-09-15
Пользователь №: 88 307



Доброго времени суток ув. форумчане
кто как обрабатывает данные снятые с таймера, который включен в режиме обработки энкодера?
у меня затык с тем, как определить направление вращения, что-бы прибавлять/вычитать значение к переменной
таймер инициализирую вот так:
CODE
//Encoder TIM3 Init
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

TIM_Time_user.TIM_Prescaler = 0;
TIM_Time_user.TIM_CounterMode = TIM_CounterMode_Up;
TIM_Time_user.TIM_Period = 256;
TIM_Time_user.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseInit(TIM3, &TIM_Time_user);
TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
TIM_Cmd(TIM3, ENABLE);
TIM3->CNT=0;
//Encoder TIM2 Init
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

TIM_Time_user.TIM_Prescaler = 0;
TIM_Time_user.TIM_CounterMode = TIM_CounterMode_Up;
TIM_Time_user.TIM_Period = 256;
TIM_Time_user.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseInit(TIM2, &TIM_Time_user);
TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI2, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
TIM_Cmd(TIM2, ENABLE);
//TIM2->CCMR1 = TIM_CCMR1_CC2S_0 | TIM_CCMR1_CC1S_0;
TIM2->CCER |= TIM_CCER_CC1P;
TIM3->CCER |= TIM_CCER_CC1P;
TIM2->CNT=0;


Сообщение отредактировал Reystlin - Apr 22 2016, 05:01
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Reystlin
сообщение Apr 22 2016, 10:23
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 6-09-15
Пользователь №: 88 307



to Сергей Борщ
сделал вот так:
int16_t leftEnc = (int16_t)TIM3->CNT/2;
при кручении в обратную сторону в переменную leftEnc записывается значение 126 вместо -1
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 22 2016, 10:45
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Reystlin @ Apr 22 2016, 13:23) *
to Сергей Борщ
сделал вот так:
int16_t leftEnc = (int16_t)TIM3->CNT/2;
при кручении в обратную сторону в переменную leftEnc записывается значение 126 вместо -1

А сколько там изначально было? Может у Вас CNT у таймера было 127 sm.gif

Второй вопрос, а что в ARR? Ибо:
Цитата
Encoder interface mode acts simply as an external clock with direction selection. This
means that the counter just counts continuously between 0 and the auto-reload value in the
TIMx_ARR register (0 to ARR or ARR down to 0 depending on the direction). So you must
configure TIMx_ARR before starting. in the same way, the capture, compare, prescaler...


Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 12:50
Рейтинг@Mail.ru


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