Как получить эхо-сигнал от ультразвукового датчика с STM32F407?
Я попытался измерить импульс от эхо-сигнала от ультразвукового датчика с STM32F407. Я прочитал в Интернете, что я могу сделать это с захватом таймера. Как использовать режим захвата с таймером?
Я сделал следующий код. В этом коде я генерирую сигнал ШИМ, где импульс сигнала составляет 10 мкс для активации триггера в ультразвуковом датчике.
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART3_UART_Init();
MX_TIM1_Init();
MX_TIM9_Init();
/* USER CODE BEGIN 2 */
char bufer[100];
int cuenta1, cuenta2, distancia1, distancia2;
long contador = 0;
long input_cap = 0;
HAL_TIM_Base_Start_IT(&htim1);
HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim9, TIM_CHANNEL_1);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// Generar el pwm para el trigger...
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 50);
HAL_Delay(50);
// Para empezar a contar con los registros
contador = __HAL_TIM_GET_COUNTER(&htim1);
input_cap = __HAL_TIM_GET_COMPARE(&htim1, TIM_CHANNEL_1);
cuenta1 = TIM1->CNT; // Para contar
HAL_Delay(1);
cuenta2 = TIM1->CCR1; // Para capturar la señal
cuenta1 = contador;
cuenta2 = input_cap;
if (cuenta1>cuenta2) {
distancia1 = cuenta1-cuenta2;
//distancia2 = distancia1*15/106;
sprintf(bufer,"Resultado de medicion: %d \n\r", distancia1);
HAL_Delay(500);
HAL_UART_Transmit(&huart3, (uint8_t*)bufer, (uint16_t)strlen(bufer),
}
}
Я использую правильные CNT и CCR1? Я просто хочу получить передний и задний фронт и начать считать, а затем преобразовать это значение в расстояние.