En realidad necesito medir la velocidad del motor. He seguido un procedimiento, es decir,
- use el modo Codificador para obtener pulsos del sensor.
- cuente el número de estos pulsos en 1 seg ~ 1000 ms usando SysTick_Handler (ISR). Significa usar la función SysTick_Handler como una base de tiempo para contar los pulsos en 1000 ms.
Ahora, estoy un poco confundido acerca de cómo incorporar el paso no. 2 en los códigos. Porque me han enseñado que el controlador Systick (ISR) se llama cada 1 milisegundo. Y si es así, mientras pasa por las líneas de códigos dentro del Controlador, no se pasará la duración de 1 milisegundo por segundo. ¿No se volverá a llamar al Systick_Handler incluso antes de contar completamente por 1 milisegundo? Además, ¿cómo me aseguro de que Systick_Handler cuente por solo un segundo y luego comience nuevamente a contar después de que se haya superado la duración de 1 segundo?
This is the Handler function.
void SysTick_Handler(void)
{
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
Encoder_Start(); //encoder mode start
counter=Encoder_Read(void); //reading counter(defined globally and shared by handler and main)
Encoder_Stop(); //encoder mode stop
}
y
this is the main
main.c
.
.
.
uint32_t Encoder_Read(void) //reads counts from sensor
{
return TIM3->CNT;
}
void Encoder_Start(void)
{
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
}
void Encoder_Stop(void)
{
HAL_TIM_Encoder_Stop(&htim3, TIM_CHANNEL_ALL);
}
main()
{
.
.
while()
{
speed=counter*constant; //speed, counter is used here
printf("\n%d",speed); //print speed using semihosting on eclipse
PWM code;
PWM code;
PWM code;
}
.
.
}
Mi pregunta original era esto
La placa de desarrollo es STM32F407, el sistema operativo es Linux (Ubuntu), el código se genera utilizando STM32CubeMX.
¿Alguna idea sobre esto?
O cualquier otra alternativa, necesito tener una base de tiempo de 1 segundo para medir el número de conteos desde el sensor (basado en LM393) y usar esta base de tiempo una y otra vez para medir la velocidad y mostrarla cada segundo .
Por favor sugerir.