2021-06-07 03:20 AM
Greetings Everybody,
I have a hall effect sensor and i want to detect pulse generated by the sensor using STM32F207ZG.
My approach is to generate pulse using hall effect switch and feed that pulse to Timer 5 Channel 1 which runs in Input Capture Direct Mode to detect the frequency generated by the hall effect sensor. Can my approach work ? I have never used pwm in stm32 and this is my first time.
Please guide me if my approach is wrong.
Thanks.
2021-06-07 03:58 AM
Read the TIM chapter in RM, in particular the PWM input mode subchapter.
JW
2021-06-14 04:55 AM
Ok. Now i am using pwm generator and feeding it to PA0 pin of STM32F207ZG nucleo board. I want to measure 1 HZ to 80KHz frequency...
The timer clock settings are as below
Below is my timer5 setting..
Below is my interrupt code to measure the difference between two rising edge...
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
if (Is_First_Captured==0)
{
IC_Value1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
Is_First_Captured =1;
}
else if (Is_First_Captured)
{
IC_Value2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
if (IC_Value2 > IC_Value1)
{
Difference = IC_Value2-IC_Value1;
}
else if (IC_Value2 < IC_Value1)
{
Difference = ((0xffffffff-IC_Value1)+IC_Value2) +1;
}
else
{
Error_Handler();
}
Frequency = HAL_RCC_GetPCLK1Freq();
Frequency = Frequency / Difference;
Is_First_Captured = 0;
}
}
}
The problem is that it is showing almost half the frequency and the accuracy is also low. Suppose for 100Hz input pulse it shows me 48 Hz. Any idea where i am going wrong and how to improve the measuring accuracy ?
NOTE : I am using nucleo board and i am using internal crystal. Do i need to use external crystal for better accuracy and timing performance ?
2021-06-14 04:58 AM
What is "internal crystal"? HSI? If yes, it's not very precise, see datasheet.
If you use a non-1 APB divider, the timer's clock is twice as much as APB clock, see RCC chapter of RM.
JW
2021-07-01 08:48 PM
I will try it and let you know.