02.07.2013, 12:39
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Частотомер на stm32
Подскажите, пожалуйста, как настроить таймер 3 для измерения частоты входного сигнала в stm32f103.
беру пример из стандартной библиотеки. переделываю для входного сигнала на РС7, но перрывания не срабатывает
Код:
|
void TIM3_IRQHandler(void)
{
uint16_t IC3ReadValue1 = 0, IC3ReadValue2 = 0;
uint16_t CaptureNumber = 0;
uint32_t Capture = 0;
uint32_t TIM3Freq = 0;
if(TIM_GetITStatus(TIM3, TIM_IT_CC1) == SET)
{
/* Clear TIM3 Capture compare interrupt pending bit */
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
if(CaptureNumber == 0)
{
/* Get the Input Capture value */
IC3ReadValue1 = TIM_GetCapture2(TIM3);
CaptureNumber = 1;
}
else if(CaptureNumber == 1)
{
/* Get the Input Capture value */
IC3ReadValue2 = TIM_GetCapture2(TIM3);
/* Capture computation */
if (IC3ReadValue2 › IC3ReadValue1)
{
Capture = (IC3ReadValue2 - IC3ReadValue1);
}
else
{
Capture = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2);
}
/* Frequency computation */
TIM3Freq = (uint32_t) SystemCoreClock / Capture;
CaptureNumber = 0;
}
}
}
/**
* @brief Configures the different system clocks.
* @param None
* @retval None
*/
void RCC_Configuration(void)
{
/* TIM3 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* GPIOA and GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
}
/**
* @brief Configure the GPIOD Pins.
* @param None
* @retval None
*/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* TIM3 channel 2 pin (PA.07) configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinRemapConfig(TIM3_FullRemap, ENABLE );
}
/**
* @brief Configure the nested vectored interrupt controller.
* @param None
* @retval None
*/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the TIM3 global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
uint32_t temp=0;
float temp1;
TIM_ICInitTypeDef TIM_ICInitStructure;
int main (void)
{
RCC_Configuration();
/* NVIC configuration */
NVIC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
/* TIM3 configuration: Input Capture mode ---------------------
The external signal is connected to TIM3 CH2 pin (PA.07)
The Rising edge is used as active edge,
The TIM3 CCR2 is used to compute the frequency value
------------------------------------------------------------ */
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_ICInit(TIM3, &TIM_ICInitStructure);
/* TIM enable counter */
TIM_Cmd(TIM3, ENABLE);
/* Enable the CC2 Interrupt Request */
TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
while (1);
} |
|
|
|
|
02.07.2013, 12:52
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Частотомер на stm32
Частотомер делается минимум на двух таймерах
3й 1с интервал
1й slave счетчик, 4й дополнительный
Настраиваются приблизительно так.
Запускаете 3й таймер, и через 1с считываете состояние 1го.
Значения предделителей поставьте свои.
//TIM3 INIT------------------------------
TIM3-›ARR = 32767;
TIM3-›PSC = 674;
TIM3-›CR2 |= TIM_CR2_MMS_0;
TIM3-›DIER |= TIM_DIER_UIE;
TIM3-›CR1 |= TIM_CR1_CEN | TIM_CR1_DIR | TIM_CR1_OPM;
//---------------------------------------
//TIMER 1 INIT---------------------------
//TIM1-›PSC =0x1f;
TIM1-›PSC = 0;
TIM1-›SMCR |= TIM_SMCR_ETF_1;
TIM1-›SMCR |= TIM_SMCR_ECE | TIM_SMCR_TS_1;
TIM1-›SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_2;
TIM1-›CR2 |= TIM_CR2_MMS_1;
TIM1-›CR1 |= TIM_CR1_CEN;// | TIM_CR1_UDIS;
//TIMER 4 INIT---------------------------
TIM4-›SMCR |= TIM_SMCR_SMS_1 | TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0;
TIM4-›CR1 |= TIM_CR1_CEN;
NVIC-›ISER[0] |= NVIC_ISER_SETENA_29 ;
}
-------------------------------------------------------
void TIM3_IRQHandler(void)
{
uint32_t tmp;
TIM3-›SR &= ~TIM_SR_UIF;
tmp = (uint32_t)TIM1-›CNT | (uint32_t)TIM4-›CNT ‹‹ 16;
TIM4-›CNT=0;
TIM1-›CNT=0;
TIM3-›CR1 |= TIM_CR1_CEN;
}
Последний раз редактировалось Impartial; 02.07.2013 в 13:17.
|
|
|
|
02.07.2013, 14:42
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Частотомер на stm32
Спасибо за помощь, но можно пример, как настроить именно ногу РС6 (таймер 3) как счетчик импульсов?
|
|
|
|
02.07.2013, 15:10
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Частотомер на stm32
Чип какой?
Хотя, как счетчик никак. Это не счетный вход.
Счетные входа ETR.
|
|
|
|
02.07.2013, 15:14
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Частотомер на stm32
чип stm32f103, как же быть тогда, если нужно сделать частотомер на pc7?
вот сдесь етсь пример настройки для режима захвата для этой ноги (канал 1 таймера 3 после полного ремапа). http://chipspace.ru/stm32-general-pu...input-capture/ но у меня не возникает прерывания и сдесь
|
|
|
|
02.07.2013, 15:19
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Частотомер на stm32
Сообщение от Batisto4ka
|
вот сдесь етсь пример настройки для режима захвата для этой ноги
|
РЕЖИМА ЗАХВАТА!!! Это не счет!!!
|
|
|
|
02.07.2013, 15:24
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Частотомер на stm32
но правильно ли я понимаю, что можно с помощью режима захвата измерить период, а соответтвенно и посчитать частоту импульсов?
|
|
|
|
02.07.2013, 15:27
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Частотомер на stm32
Период можно. Тогда правильно формулируйте задачу.
Измерять период имеет смысл на низких частотах. Какая входная частота?
|
|
|
|
02.07.2013, 15:30
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Частотомер на stm32
до десятков килогерц
|
|
|
|
02.07.2013, 15:42
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Частотомер на stm32
А точность? На 72мгц тактовой точность, при измерении частоты, измеряя период 100 кгц будет около 130 гц.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:42.
|
|