Necesito medir la velocidad de un motor giratorio instalado en un disco codificador con 20 ranuras. El sensor basado en LM393 se mantiene en el lugar correcto, de modo que el disco del codificador gira entre la parte de detección.
Creo que necesitaría tres temporizadores proporcionados por la placa STM32: uno para proporcionar PWM (TIM4), segundo (TIM1) para medir el tiempo de (1000 mseg ~ 1 seg) y tercer temporizador (TIM2) para medir el número de pulsos recibido del disco codificador en 1 seg.
El período de contador de TIM1 (registro de recarga automática) se fija a 1000 y la frecuencia a 1000Hz. La frecuencia de TIM2 es la misma que la frecuencia PWM-10kHz. La salida del sensor está conectada a PC15 y PWM a PD12.
El siguiente código utiliza la biblioteca HAL. Tengo dudas sobre cómo usar estos dos temporizadores / contadores dentro del bucle while, qué funciones de la biblioteca HAL usar aquí y cómo usar. Además, el código para el control de PWM y el cálculo de la velocidad se deben colocar en el mismo bucle.
int main(void)
{
volatile GPIO_PinState level; // stores input state from PC15, sensor output is connected to PC15
uint16_t dutycycle=70;
int speed=0; //speed variable
int constant=(2*3*1)/20; //roughly circumference/20 slots
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init(); //for measuring 1 second
MX_TIM4_Init(); //for PWM
MX_TIM2_Init(); //for counting output pulses from PC15 pin
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1); //Start PWM signal
level=HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_15); //HAL function is called to read pin status
while (1)
{
counter1=__HAL_TIM_GetCounter(&tim2);
speed=(counter1)*(constant); //speed variable, counter 1 related to TIM2
htim4.Instance->CCR1=dutycycle; //setting the duty cycle of PWM signal
HAL_Delay(1000);dutycycle+=10; //1 sec delay and then increases dutycyle by 10%
if(dutycycle==90)dutycycle=50; //resets to 50% duty cycle
}
La placa de desarrollo es STM32F407 , CubeMX es el generador de código fuente e IDE es Eclipse . El sistema operativo es Linux (Ubuntu 15.04) . Por favor sugerir.