Как получить эхо-сигнал от ультразвукового датчика с 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? Я просто хочу получить передний и задний фронт и начать считать, а затем преобразовать это значение в расстояние.

0 ответов

Другие вопросы по тегам