KSN 0 1 августа, 2012 Опубликовано 1 августа, 2012 · Жалоба В STM32F103 имеется 16-и битный счетчик, к которому можно подключить квадратурный энкодер. Мне необходимо реализовать 32 битный счетчик. Частота сигнала в среднем 60кГц(максимум 120кГц). Может кто реализовывал подобную задачу, поделитесь мыслями: как реализовать 32 битный счетчик? Программно или может состыковать пару таймеров между собой(возможно через внешние выводы). Вариант взять вместо STM32F103 кристалл STM32F205 рассматривается, но ценник у первого ~3$, у второго 8$ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bandy 0 1 августа, 2012 Опубликовано 1 августа, 2012 · Жалоба Подобную проблему решили так. Настраиваем таймер с энкодером на прерывания по переполнению, в обработчике прерываний, в зависимости от направления счета таймера, увеличиваем или уменьшаем старшую часть счета. К сожаленью по другому ни как. Если не нужно определять направление счета то можно соеденить два счетчика каскадно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeymen 0 3 августа, 2012 Опубликовано 3 августа, 2012 · Жалоба Вполне возможно сделать каскадно таймеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KSN 0 3 августа, 2012 Опубликовано 3 августа, 2012 · Жалоба Вполне возможно сделать каскадно таймеры. Как? Должнен быть прямой и обратный счет каскадированного 32-х битного таймера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeymen 0 4 августа, 2012 Опубликовано 4 августа, 2012 · Жалоба Как? Должнен быть прямой и обратный счет каскадированного 32-х битного таймера. Да, точно, с реверсом не получится... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 28 сентября, 2012 Опубликовано 28 сентября, 2012 · Жалоба Всем привет! А не подскажете как правильно настроить таймер на Энкодер? У меня энкодер подключен к TIM4 CH1/CH2, всё как бы настроил и кручу энкодер, но счётчик только уменьшается, при вращении в любую сторону. Что может быть не так? TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); TIM_DeInit(TIM4); TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_Period = 0xFFF; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 28 сентября, 2012 Опубликовано 28 сентября, 2012 · Жалоба Задействовать TIM_SelectHallSensor. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gunner 0 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Всем привет! А не подскажете как правильно настроить таймер на Энкодер? У меня энкодер подключен к TIM4 CH1/CH2, всё как бы настроил и кручу энкодер, но счётчик только уменьшается, при вращении в любую сторону. Что может быть не так? 1) Enable the GPIO Clock for TIMx pins (CH1, CH2): RCC_AHB1PeriphClockCmd() 2) Enable the Peripheral Clock for TIMx: RCC_APB1PeriphClockCmd() or RCC_APB2PeriphClockCmd() 3) Configure CH1 and CH2 pins as alternate function: GPIO_PinAFConfig(), GPIO_Init() 4) TIMx Configuration: TIM_TimeBaseInit(), TIM_EncoderInterfaceConfig() 5) Configure and enable TIMx interrupt 6) Enable TIMx counter: TIM_Cmd() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nx6310 0 30 октября, 2012 Опубликовано 30 октября, 2012 · Жалоба Я в прерывании смотрю на второй канал энкодера и инкерментирую или декрементирую значение энкодера в зависимости от его состония. void TIM2_IRQHandler(void) {static int t1,t2,a; if(TIM2->SR&TIM_SR_CC3IF) { if(GPIOB->IDR&GPIO_Pin_11)conor--; else conor++; t2=TIM2->CNT; if(t2>t1)speed=t2-t1; else speed=t2-t1+65535; t1=t2; speed=140625/speed; speed=(speed*(100-90)+a*90)/100;a=speed; TIM2->SR&=~TIM_SR_CC3IF; if((conor>=3150336)|(conor<=-3150336)|(conor==0)){OSTANOV;} } } Использую таймер в режиме захвата. В принципе можно использовать прерывания по выводам EXTI и там вести счёт. Тогда не нужен будет таймер и его можно будет отключить, тем самым немного уменьшив потребление прибора, если конечно не требуется замер скорости вращения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serj78 0 11 ноября, 2012 Опубликовано 11 ноября, 2012 · Жалоба Я в прерывании смотрю на второй канал энкодера и инкерментирую или декрементирую значение энкодера в зависимости от его состония. Использую таймер в режиме захвата. Такой подход имеет минус- при появлении джиттера ( когда стукаешь по энкодеру, и одна ножка энкодера туда- сюда скачет, а вторая на месте стоит) будет бесконечное кручение показывать.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nx6310 0 23 ноября, 2012 Опубликовано 23 ноября, 2012 · Жалоба При каких условиях это происходит? Из-за вибраций? Если настроить таймер в режиме энкодера разве такого не будет происходить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KSN 0 1 марта, 2013 Опубликовано 1 марта, 2013 · Жалоба Кто-нибудь реализовывал делитель частоты энкодера на STM32F(любой кристалл с аппаратной обработкой энкодера) с выводом поделенной частоты наружу? Частота входного сигнала до 1МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться