Why is TPM input capture returning large distance values (~12 meters) with 24 MHz TPM clock on i.MX9

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Why is TPM input capture returning large distance values (~12 meters) with 24 MHz TPM clock on i.MX9

639 Views
Manjunathb
Contributor II

 

Hello NXP Community,

I’m using the i.MX93 (Cortex-M33) and trying to interface an ultrasonic distance sensor (like HC-SR04) using TPM input capture. I'm measuring the pulse width between the rising and falling edge on the ECHO pin using TPM3 (input capture on channel 2).

The TPM clock is configured at 24 MHz, and the distance is calculated using the formula:

 

float timeUs = (ticks / tpmClk) * 1e6;
float distanceCm = timeUs / 58.0f;

 

Here is my full code for reference:- 

#include "fsl_debug_console.h"
#include "board.h"
#include "app.h"
#include "fsl_tpm.h"
#include "fsl_rgpio.h"
#include "fsl_lpuart.h"

/*******************************************************************************
 * Definitions
 ******************************************************************************/

/*******************************************************************************
 * Prototypes
 ******************************************************************************/

/*******************************************************************************
 * Variables
 ******************************************************************************/
volatile bool tpmIsrFlag = false;
volatile uint32_t risingTime = 0;
volatile uint32_t fallingTime = 0;
volatile bool gotRisingEdge = false;

/*******************************************************************************
 * Code
 ******************************************************************************/
void Init_LPUART(void)
{
    lpuart_config_t config;

    /* Get default UART config (8N1, no parity, no flow control) */
    LPUART_GetDefaultConfig(&config);

    /* Modify parameters as needed */
    config.baudRate_Bps = 115200U;
    config.enableTx = true;
    config.enableRx = true;

    /* Initialize the UART with the specified parameters */
    LPUART_Init(BOARD_LPUART, &config, BOARD_LPUART_CLK_FREQ);
}

float CalculateDistance(void)
{
    uint32_t ticks;
    if (fallingTime >= risingTime)
        ticks = fallingTime - risingTime;
    else
        ticks = (TPM_MAX_COUNTER_VALUE(DEMO_TPM_BASEADDR) - risingTime) + fallingTime; /* Overflow handled */

    float tpmClk = CLOCK_GetIpFreq(LPTPM_CLOCK_ROOT); /* You may adjust to TPM clock */
    float timeUs = (ticks * 1.0f / tpmClk) * 1e6;
    PRINTF("TPM Clock : %.2f\r\n",tpmClk);

    float distanceCm = timeUs / 58.0f;

    return distanceCm;
}

void SetUp(void)
{
    rgpio_pin_config_t out_config ={
        kRGPIO_DigitalOutput,
        0,
    };
   
    /* Trigger pin */
    RGPIO_PinInit(BOARD_RGPIO,TRIG_PIN,&out_config);
    RGPIO_PinWrite(BOARD_RGPIO,TRIG_PIN,0);
}

void SendTrigPulse(void)
{
    RGPIO_PinWrite(BOARD_RGPIO, TRIG_PIN, 1);
    SDK_DelayAtLeastUs(10, SystemCoreClock);
    RGPIO_PinWrite(BOARD_RGPIO, TRIG_PIN, 0);
}

void TPM_INPUT_CAPTURE_HANDLER(void)
{
    uint32_t status = TPM_GetStatusFlags(DEMO_TPM_BASEADDR);

    if (status & TPM_CHANNEL_FLAG)
    {
        uint32_t capturedValue = TPM_GetChannelValue(DEMO_TPM_BASEADDR, BOARD_TPM_INPUT_CAPTURE_CHANNEL);

        if (!gotRisingEdge)
        {
            risingTime = capturedValue;
            gotRisingEdge = true;

            // Switch to falling edge detection
            TPM_SetupInputCapture(DEMO_TPM_BASEADDR,BOARD_TPM_INPUT_CAPTURE_CHANNEL,kTPM_FallingEdge);
        }
        else
        {
            fallingTime = capturedValue;
            tpmIsrFlag = true;
            gotRisingEdge = false;

            // Switch back to rising edge detection for next measurement
            TPM_SetupInputCapture(DEMO_TPM_BASEADDR,BOARD_TPM_INPUT_CAPTURE_CHANNEL,kTPM_RisingEdge);
        }

        // Clear interrupt flag for this channel
        TPM_ClearStatusFlags(DEMO_TPM_BASEADDR, TPM_CHANNEL_FLAG);
    }

    SDK_ISR_EXIT_BARRIER;
    // tpmIsrFlag = true;

    // /* Clear interrupt flag.*/
    // TPM_ClearStatusFlags(DEMO_TPM_BASEADDR, TPM_CHANNEL_FLAG);
    // SDK_ISR_EXIT_BARRIER;
}

/*!
 * @brief Main function
 */
int main(void)
{
    tpm_config_t tpmInfo;

    /* Board pin, clock, debug console init */
    BOARD_InitHardware();

    SetUp(); /* Set up the GPIO */

    // Init_LPUART(); /* Initialise one more UART */

    /* Print a note to terminal */
    PRINTF("\r\nTPM input capture example\r\n");
    PRINTF("\r\nOnce the input signal is received the input capture value is printed\r\n");

    TPM_GetDefaultConfig(&tpmInfo);

    /* Initialize TPM module */
    TPM_Init(DEMO_TPM_BASEADDR, &tpmInfo);

    /* Setup input capture on a TPM channel */
    TPM_SetupInputCapture(DEMO_TPM_BASEADDR, BOARD_TPM_INPUT_CAPTURE_CHANNEL, kTPM_RisingEdge);

    /* Set the timer to be in free-running mode */
    TPM_SetTimerPeriod(DEMO_TPM_BASEADDR, TPM_MAX_COUNTER_VALUE(DEMO_TPM_BASEADDR));

    /* Enable channel interrupt when the second edge is detected */
    TPM_EnableInterrupts(DEMO_TPM_BASEADDR, TPM_CHANNEL_INTERRUPT_ENABLE);

    /* Enable at the NVIC */
    EnableIRQ(TPM_INTERRUPT_NUMBER);

    TPM_StartTimer(DEMO_TPM_BASEADDR, kTPM_SystemClock);

    while (1)
    {
        tpmIsrFlag = false;

        SendTrigPulse();

        while (!tpmIsrFlag)
        {
            __NOP(); // Wait for capture
        }

        float distance = CalculateDistance();
        PRINTF("RisingTime : %u\r\n",risingTime);
        PRINTF("FallingTime : %u\r\n",fallingTime);
        PRINTF("Distance: %.2f cm\r\n", distance);

        SDK_DelayAtLeastUs(60000,SystemCoreClock);
    }
}
 

However, I'm consistently getting distance values around 1228 cm to 1260 cm, which is abnormally large, even when there's a wall very close to the sensor (e.g., <50 cm). Here are some example readings:

TPM Clock : 24000000.00
RisingTime : 1172965159
FallingTime : 1174675524
Distance: 1228.71 cm

TPM Clock : 24000000.00
RisingTime : 1283028325
FallingTime : 1284738837
Distance: 1228.82 cm

TPM Clock : 24000000.00
RisingTime : 1448107508
FallingTime : 1449851665
Distance: 1252.99 cm

TPM Clock : 24000000.00
RisingTime : 269392922
FallingTime : 269436317
Distance: 31.17 cm

TPM Clock : 24000000.00
RisingTime : 278665048
FallingTime : 278708444
Distance: 31.18 cm

TPM Clock : 24000000.00
RisingTime : 287937289
FallingTime : 287977974
Distance: 29.23 cm

TPM Clock : 24000000.00
RisingTime : 297205949
FallingTime : 297248662
Distance: 30.68 cm

TPM Clock : 24000000.00
RisingTime : 306477012
FallingTime : 306519726
Distance: 30.69 cm

I'm unsure why these values are consistently too large. 

 

i.MX93EVK 

 

Labels (1)
0 Kudos
Reply
2 Replies

611 Views
Bio_TICFSL
NXP TechSupport
NXP TechSupport

Hello,

Large distance values (~12 meters) from an HC-SR04 ultrasonic sensor using TPM input capture often stem from incorrect pulse width measerement of signal. The sensor measures distance by timing the duration of the echo pulse, and if the measurement includes the trigger pulse or is otherwise inaccurate, it can lead to inflated distance readings. 

 
Here's a breakdown of the potential causes and solutions:
1. Incorrect Pulse Width Measurement:
  • Trigger Pulse Included:
    The input capture might be capturing the time from the rising edge of the trigger pulse to the falling edge of the echo pulse, instead of just the echo pulse itself. 
     

 

  • Solution:
    Ensure the input capture is configured to measure the duration of the echo pulse only. This typically involves setting up the timer to trigger on the rising edge of the echo signal and capture the falling edge. 
     

 

2. Signal Interference:
  • Early Echo Detection:
    The sensor's receiver might detect the signal from the transmitter before it bounces off an object, leading to an artificially long pulse width. 
     

 

  • Oblique Reflections:
    Reflections from angled surfaces can cause the echo signal to be weak or delayed, leading to inaccurate distance readings. 
     
  • Solution:
    • Shielding: Use a small tube or shroud over the transmitter and receiver to minimize early detection and improve signal directionality. 
       
  • Multiple Readings: Take multiple readings and filter out excessively large values or calculate an average. 
     
  • NewPing Library: Consider using the NewPing library, which is designed to handle these issues. 
4. Software Implementation:
  • Timer Configuration:
    Incorrect timer prescaler or clock settings can affect the accuracy of the pulse width measurement. 
     
    Delay between Pings:
    The sensor has a minimum time between pings, and exceeding this can lead to inaccurate readings. 
     

 

  • Solution:
    • Check Timer Settings: Verify the timer's prescaler and clock configuration to ensure accurate time measurement. 
       
  • Appropriate Delays: Ensure sufficient delay between pings to allow the sensor to reset and stabilize. 
     
     
    Regards
     
0 Kudos
Reply

598 Views
Manjunathb
Contributor II
Thank you for your response!
0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2134089%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EWhy%20is%20TPM%20input%20capture%20returning%20large%20distance%20values%20(~12%20meters)%20with%2024%20MHz%20TPM%20clock%20on%20i.MX9%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2134089%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CBR%20%2F%3E%3CP%3EHello%20NXP%20Community%2C%3C%2FP%3E%3CP%3EI%E2%80%99m%20using%20the%20%3CSTRONG%3Ei.MX93%20(Cortex-M33)%3C%2FSTRONG%3E%20and%20trying%20to%20interface%20an%20%3CSTRONG%3Eultrasonic%20distance%20sensor%20(like%20HC-SR04)%3C%2FSTRONG%3E%20using%20%3CSTRONG%3ETPM%20input%20capture%3C%2FSTRONG%3E.%20I'm%20measuring%20the%20pulse%20width%20between%20the%20rising%20and%20falling%20edge%20on%20the%20ECHO%20pin%20using%20TPM3%20(input%20capture%20on%20channel%202).%3C%2FP%3E%3CP%3EThe%20TPM%20clock%20is%20configured%20at%20%3CSTRONG%3E24%20MHz%3C%2FSTRONG%3E%2C%20and%20the%20distance%20is%20calculated%20using%20the%20formula%3A%3C%2FP%3E%3CBR%20%2F%3E%3CDIV%20class%3D%22%22%3E%3CDIV%20class%3D%22%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22%22%3Efloat%3C%2FSPAN%3E%20timeUs%20%3D%20(ticks%20%2F%20tpmClk)%20*%20%3CSPAN%20class%3D%22%22%3E1e6%3C%2FSPAN%3E%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%20class%3D%22%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22%22%3Efloat%3C%2FSPAN%3E%20distanceCm%20%3D%20timeUs%20%2F%20%3CSPAN%20class%3D%22%22%3E58.0f%3C%2FSPAN%3E%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3EHere%20is%20my%20full%20code%20for%20reference%3A-%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_debug_console.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22board.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22app.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_tpm.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_rgpio.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_lpuart.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B*%20Definitions%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B*%20Prototypes%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B*%20Variables%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Evolatile%3C%2FSPAN%3E%20%3CSPAN%3Ebool%3C%2FSPAN%3E%3CSPAN%3E%20tpmIsrFlag%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Efalse%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Evolatile%3C%2FSPAN%3E%20%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3E%20risingTime%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Evolatile%3C%2FSPAN%3E%20%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3E%20fallingTime%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Evolatile%3C%2FSPAN%3E%20%3CSPAN%3Ebool%3C%2FSPAN%3E%3CSPAN%3E%20gotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Efalse%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B*%20Code%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E%20Init_LPUART(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20lpuart_config_t%20config%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Get%20default%20UART%20config%20(8N1%2C%20no%20parity%2C%20no%20flow%20control)%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20LPUART_GetDefaultConfig(%26amp%3Bconfig)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Modify%20parameters%20as%20needed%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20config.baudRate_Bps%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E115200U%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20config.enableTx%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20config.enableRx%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Initialize%20the%20UART%20with%20the%20specified%20parameters%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20LPUART_Init(%3C%2FSPAN%3E%3CSPAN%3EBOARD_LPUART%3C%2FSPAN%3E%3CSPAN%3E%2C%20%26amp%3Bconfig%2C%20%3C%2FSPAN%3E%3CSPAN%3EBOARD_LPUART_CLK_FREQ%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Efloat%3C%2FSPAN%3E%3CSPAN%3E%20CalculateDistance(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3E%20ticks%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Eif%3C%2FSPAN%3E%3CSPAN%3E%20(fallingTime%20%26gt%3B%3D%20risingTime)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20ticks%20%3D%20fallingTime%20-%20risingTime%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Eelse%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20ticks%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3ETPM_MAX_COUNTER_VALUE%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E)%20-%20risingTime)%20%2B%20fallingTime%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F*%20Overflow%20handled%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Efloat%3C%2FSPAN%3E%3CSPAN%3E%20tpmClk%20%3D%20CLOCK_GetIpFreq(%3C%2FSPAN%3E%3CSPAN%3ELPTPM_CLOCK_ROOT%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F*%20You%20may%20adjust%20to%20TPM%20clock%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Efloat%3C%2FSPAN%3E%3CSPAN%3E%20timeUs%20%3D%20(ticks%20*%20%3C%2FSPAN%3E%3CSPAN%3E1.0f%3C%2FSPAN%3E%3CSPAN%3E%20%2F%20tpmClk)%20*%20%3C%2FSPAN%3E%3CSPAN%3E1e6%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22TPM%20Clock%20%3A%20%25.2f%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2CtpmClk)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Efloat%3C%2FSPAN%3E%3CSPAN%3E%20distanceCm%20%3D%20timeUs%20%2F%20%3C%2FSPAN%3E%3CSPAN%3E58.0f%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Ereturn%3C%2FSPAN%3E%3CSPAN%3E%20distanceCm%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E%20SetUp(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20rgpio_pin_config_t%20out_config%20%3D%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3EkRGPIO_DigitalOutput%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7D%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Trigger%20pin%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20RGPIO_PinInit(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%26amp%3Bout_config)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E%20SendTrigPulse(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20SDK_DelayAtLeastUs(%3C%2FSPAN%3E%3CSPAN%3E10%3C%2FSPAN%3E%3CSPAN%3E%2C%20SystemCoreClock)%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3ETPM_INPUT_CAPTURE_HANDLER%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3E%20status%20%3D%20TPM_GetStatusFlags(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Eif%3C%2FSPAN%3E%3CSPAN%3E%20(status%20%26amp%3B%20%3C%2FSPAN%3E%3CSPAN%3ETPM_CHANNEL_FLAG%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3E%20capturedValue%20%3D%20TPM_GetChannelValue(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EBOARD_TPM_INPUT_CAPTURE_CHANNEL%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Eif%3C%2FSPAN%3E%3CSPAN%3E%20(!gotRisingEdge)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20risingTime%20%3D%20capturedValue%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20gotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20Switch%20to%20falling%20edge%20detection%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20TPM_SetupInputCapture(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3EBOARD_TPM_INPUT_CAPTURE_CHANNEL%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3EkTPM_FallingEdge%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Eelse%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20fallingTime%20%3D%20capturedValue%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20tpmIsrFlag%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20gotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Efalse%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20Switch%20back%20to%20rising%20edge%20detection%20for%20next%20measurement%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20TPM_SetupInputCapture(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3EBOARD_TPM_INPUT_CAPTURE_CHANNEL%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3EkTPM_RisingEdge%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20Clear%20interrupt%20flag%20for%20this%20channel%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20TPM_ClearStatusFlags(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETPM_CHANNEL_FLAG%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3ESDK_ISR_EXIT_BARRIER%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20tpmIsrFlag%20%3D%20true%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20%2F*%20Clear%20interrupt%20flag.*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20TPM_ClearStatusFlags(DEMO_TPM_BASEADDR%2C%20TPM_CHANNEL_FLAG)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20SDK_ISR_EXIT_BARRIER%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*!%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B*%20%3C%2FSPAN%3E%3CSPAN%3E%40brief%3C%2FSPAN%3E%3CSPAN%3E%20Main%20function%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eint%3C%2FSPAN%3E%3CSPAN%3E%20main(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20tpm_config_t%20tpmInfo%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Board%20pin%2C%20clock%2C%20debug%20console%20init%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20BOARD_InitHardware()%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20SetUp()%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F*%20Set%20up%20the%20GPIO%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20Init_LPUART()%3B%20%2F*%20Initialise%20one%20more%20UART%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Print%20a%20note%20to%20terminal%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%5Cr%5CnTPM%20input%20capture%20example%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%5Cr%5CnOnce%20the%20input%20signal%20is%20received%20the%20input%20capture%20value%20is%20printed%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20TPM_GetDefaultConfig(%26amp%3BtpmInfo)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Initialize%20TPM%20module%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20TPM_Init(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%26amp%3BtpmInfo)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Setup%20input%20capture%20on%20a%20TPM%20channel%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20TPM_SetupInputCapture(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EBOARD_TPM_INPUT_CAPTURE_CHANNEL%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EkTPM_RisingEdge%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Set%20the%20timer%20to%20be%20in%20free-running%20mode%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20TPM_SetTimerPeriod(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETPM_MAX_COUNTER_VALUE%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Enable%20channel%20interrupt%20when%20the%20second%20edge%20is%20detected%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20TPM_EnableInterrupts(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETPM_CHANNEL_INTERRUPT_ENABLE%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%2F*%20Enable%20at%20the%20NVIC%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20EnableIRQ(%3C%2FSPAN%3E%3CSPAN%3ETPM_INTERRUPT_NUMBER%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20TPM_StartTimer(%3C%2FSPAN%3E%3CSPAN%3EDEMO_TPM_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EkTPM_SystemClock%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Ewhile%3C%2FSPAN%3E%3CSPAN%3E%20(%3C%2FSPAN%3E%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20tpmIsrFlag%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Efalse%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20SendTrigPulse()%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Ewhile%3C%2FSPAN%3E%3CSPAN%3E%20(!tpmIsrFlag)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3E__NOP%3C%2FSPAN%3E%3CSPAN%3E()%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F%2F%20Wait%20for%20capture%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3Efloat%3C%2FSPAN%3E%3CSPAN%3E%20distance%20%3D%20CalculateDistance()%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22RisingTime%20%3A%20%25u%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2CrisingTime)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22FallingTime%20%3A%20%25u%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2CfallingTime)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22Distance%3A%20%25.2f%20cm%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2C%20distance)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20SDK_DelayAtLeastUs(%3C%2FSPAN%3E%3CSPAN%3E60000%3C%2FSPAN%3E%3CSPAN%3E%2CSystemCoreClock)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3C%2FDIV%3E%3CP%3EHowever%2C%20I'm%20consistently%20getting%20%3CSTRONG%3Edistance%20values%20around%201228%20cm%20to%201260%20cm%3C%2FSTRONG%3E%2C%20which%20is%20abnormally%20large%2C%20even%20when%20there's%20a%20wall%20very%20close%20to%20the%20sensor%20(e.g.%2C%20%26lt%3B50%20cm).%20Here%20are%20some%20example%20readings%3A%3C%2FP%3E%3CPRE%3E%3CSPAN%3E%3CSPAN%20class%3D%22%22%3ETPM%20Clock%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E24000000.00%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3ERisingTime%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1172965159%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3EFallingTime%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1174675524%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3EDistance%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1228.71%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22%22%3Ecm%3C%2FSPAN%3E%0A%0A%3CSPAN%20class%3D%22%22%3ETPM%20Clock%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E24000000.00%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3ERisingTime%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1283028325%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3EFallingTime%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1284738837%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3EDistance%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1228.82%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22%22%3Ecm%3C%2FSPAN%3E%0A%0A%3CSPAN%20class%3D%22%22%3ETPM%20Clock%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E24000000.00%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3ERisingTime%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1448107508%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3EFallingTime%20%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1449851665%3C%2FSPAN%3E%0A%3CSPAN%20class%3D%22%22%3EDistance%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E1252.99%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22%22%3Ecm%3CBR%20%2F%3E%3CBR%20%2F%3ETPM%20Clock%20%3A%2024000000.00%3CBR%20%2F%3ERisingTime%20%3A%20269392922%3CBR%20%2F%3EFallingTime%20%3A%20269436317%3CBR%20%2F%3EDistance%3A%2031.17%20cm%3CBR%20%2F%3E%3CBR%20%2F%3ETPM%20Clock%20%3A%2024000000.00%3CBR%20%2F%3ERisingTime%20%3A%20278665048%3CBR%20%2F%3EFallingTime%20%3A%20278708444%3CBR%20%2F%3EDistance%3A%2031.18%20cm%3CBR%20%2F%3E%3CBR%20%2F%3ETPM%20Clock%20%3A%2024000000.00%3CBR%20%2F%3ERisingTime%20%3A%20287937289%3CBR%20%2F%3EFallingTime%20%3A%20287977974%3CBR%20%2F%3EDistance%3A%2029.23%20cm%3CBR%20%2F%3E%3CBR%20%2F%3ETPM%20Clock%20%3A%2024000000.00%3CBR%20%2F%3ERisingTime%20%3A%20297205949%3CBR%20%2F%3EFallingTime%20%3A%20297248662%3CBR%20%2F%3EDistance%3A%2030.68%20cm%3CBR%20%2F%3E%3CBR%20%2F%3ETPM%20Clock%20%3A%2024000000.00%3CBR%20%2F%3ERisingTime%20%3A%20306477012%3CBR%20%2F%3EFallingTime%20%3A%20306519726%3CBR%20%2F%3EDistance%3A%2030.69%20cm%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FPRE%3E%3CP%3EI'm%20unsure%20why%20these%20values%20are%20consistently%20too%20large.%26nbsp%3B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fc-pwmxy87654%2Fi.MX93EVK%2Fpd-p%2Fi.MX93EVK%22%20class%3D%22lia-product-mention%22%20data-product%3D%222927-1%22%20target%3D%22_blank%22%3Ei.MX93EVK%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2134089%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3EClock%7CTimers%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2135439%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Why%20is%20TPM%20input%20capture%20returning%20large%20distance%20values%20(~12%20meters)%20with%2024%20MHz%20TPM%20clock%20on%20i%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2135439%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EThank%20you%20for%20your%20response!%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2135068%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Why%20is%20TPM%20input%20capture%20returning%20large%20distance%20values%20(~12%20meters)%20with%2024%20MHz%20TPM%20clock%20on%20i%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2135068%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%0A%3CP%3E%3CSPAN%20data-huuid%3D%226827211125907733361%22%3ELarge%20distance%20values%20(~12%20meters)%20from%20an%20HC-SR04%20ultrasonic%20sensor%20using%20TPM%20input%20capture%20often%20stem%20from%20incorrect%20pulse%20width%20measerement%20of%20signal.%26nbsp%3B%3C%2FSPAN%3E%3CSPAN%20data-huuid%3D%226827211125907732922%22%3EThe%20sensor%20measures%20distance%20by%20timing%20the%20duration%20of%20the%20echo%20pulse%2C%20and%20if%20the%20measurement%20includes%20the%20trigger%20pulse%20or%20is%20otherwise%20inaccurate%2C%20it%20can%20lead%20to%20inflated%20distance%20readings.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%2214167103-9a76-497c-9949-613992ae660f%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CDIV%20class%3D%22WaaZC%22%3E%0A%3CDIV%20class%3D%22RJPOee%20EIJn2%22%20style%3D%22animation%3A%20none%20!important%3B%22%3E%0A%3CDIV%20class%3D%22rPeykc%22%20data-hveid%3D%22CAMQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQIAxAB%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CDIV%20class%3D%22WaaZC%22%3E%0A%3CDIV%20class%3D%22RJPOee%20EIJn2%22%20style%3D%22animation%3A%20none%20!important%3B%22%3E%0A%3CDIV%20class%3D%22rPeykc%22%20data-hveid%3D%22CAsQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQICxAB%22%3E%3CSPAN%20data-huuid%3D%224407698907152216328%22%3EHere's%20a%20breakdown%20of%20the%20potential%20causes%20and%20solutions%3A%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CDIV%20class%3D%22WaaZC%22%3E%0A%3CDIV%20class%3D%22RJPOee%20EIJn2%22%20style%3D%22animation%3A%20none%20!important%3B%22%3E%0A%3CDIV%20class%3D%22rPeykc%20pyPiTc%22%20data-hveid%3D%22CA0QAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQIDRAB%22%3E%3CSPAN%20data-huuid%3D%224407698907152216834%22%3E1.%20Incorrect%20Pulse%20Width%20Measurement%3A%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CDIV%20class%3D%22WaaZC%22%3E%0A%3CDIV%20class%3D%22RJPOee%20EIJn2%22%20style%3D%22animation%3A%20none%20!important%3B%22%3E%0A%3CUL%20data-hveid%3D%22CA4QAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIDhAB%22%3E%0A%3CLI%20class%3D%22K3KsMc%22%3E%0A%3CDIV%20class%3D%22zMgcWd%20dSKvsb%22%20data-il%3D%22%22%3E%0A%3CDIV%20data-crb-p%3D%22%22%3E%0A%3CDIV%20class%3D%22xFTqob%22%3E%0A%3CDIV%20class%3D%22Gur8Ad%22%3E%3CSPAN%20data-huuid%3D%224407698907152219641%22%3E%3CSTRONG%3ETrigger%20Pulse%20Included%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22vM0jzc%22%3E%3CSPAN%20data-huuid%3D%224407698907152217846%22%3EThe%20input%20capture%20might%20be%20capturing%20the%20time%20from%20the%20rising%20edge%20of%20the%20trigger%20pulse%20to%20the%20falling%20edge%20of%20the%20echo%20pulse%2C%20instead%20of%20just%20the%20echo%20pulse%20itself.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%22c750332a-c70c-4af3-ae79-6a9d8ee2b109%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%22c750332a-c70c-4af3-ae79-6a9d8ee2b109%22%20data-uuids%3D%224407698907152219641%2C4407698907152217846%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CBUQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIFRAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CBR%20%2F%3E%0A%3CUL%3E%0A%3CLI%20class%3D%22K3KsMc%22%3E%0A%3CDIV%20data-crb-p%3D%22%22%3E%0A%3CDIV%20class%3D%22xFTqob%22%3E%0A%3CDIV%20class%3D%22Gur8Ad%22%3E%3CSPAN%20data-huuid%3D%224407698907152218352%22%3E%3CSTRONG%3ESolution%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22vM0jzc%22%3E%3CSPAN%20data-huuid%3D%224407698907152216557%22%3EEnsure%20the%20input%20capture%20is%20configured%20to%20measure%20the%20duration%20of%20the%20echo%20pulse%20only.%20%3C%2FSPAN%3E%3CSPAN%20data-huuid%3D%224407698907152218858%22%3EThis%20typically%20involves%20setting%20up%20the%20timer%20to%20trigger%20on%20the%20rising%20edge%20of%20the%20echo%20signal%20and%20capture%20the%20falling%20edge.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%229720d9ae-f375-48db-bf85-8d5f195cd0c7%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%229720d9ae-f375-48db-bf85-8d5f195cd0c7%22%20data-uuids%3D%224407698907152218352%2C4407698907152216557%2C4407698907152218858%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CBgQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIGBAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CBR%20%2F%3E%0A%3CDIV%20class%3D%22WaaZC%22%3E%0A%3CDIV%20class%3D%22RJPOee%20EIJn2%22%20style%3D%22animation%3A%20none%20!important%3B%22%3E%0A%3CDIV%20class%3D%22rPeykc%20pyPiTc%22%20data-hveid%3D%22CCIQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQIIhAB%22%3E%3CSPAN%20data-huuid%3D%2214447178069959649932%22%3E2.%20Signal%20Interference%3A%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CDIV%20class%3D%22WaaZC%22%3E%0A%3CDIV%20class%3D%22RJPOee%20EIJn2%22%20style%3D%22animation%3A%20none%20!important%3B%22%3E%0A%3CUL%20data-hveid%3D%22CCUQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIJRAB%22%3E%0A%3CLI%20class%3D%22K3KsMc%22%3E%0A%3CDIV%20class%3D%22zMgcWd%20dSKvsb%22%20data-il%3D%22%22%3E%0A%3CDIV%20data-crb-p%3D%22%22%3E%0A%3CDIV%20class%3D%22xFTqob%22%3E%0A%3CDIV%20class%3D%22Gur8Ad%22%3E%3CSPAN%20data-huuid%3D%2214447178069959651191%22%3E%3CSTRONG%3EEarly%20Echo%20Detection%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22vM0jzc%22%3E%3CSPAN%20data-huuid%3D%2214447178069959648880%22%3EThe%20sensor's%20receiver%20might%20detect%20the%20signal%20from%20the%20transmitter%20before%20it%20bounces%20off%20an%20object%2C%20leading%20to%20an%20artificially%20long%20pulse%20width.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%224b5cd649-437c-4d51-abd1-255285e2fcc7%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%224b5cd649-437c-4d51-abd1-255285e2fcc7%22%20data-uuids%3D%2214447178069959651191%2C14447178069959648880%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CCYQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIJhAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CBR%20%2F%3E%0A%3CUL%3E%0A%3CLI%20class%3D%22K3KsMc%22%3E%0A%3CDIV%20data-crb-p%3D%22%22%3E%0A%3CDIV%20class%3D%22xFTqob%22%3E%0A%3CDIV%20class%3D%22Gur8Ad%22%3E%3CSPAN%20data-huuid%3D%2214447178069959648354%22%3E%3CSTRONG%3EOblique%20Reflections%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22vM0jzc%22%3E%3CSPAN%20data-huuid%3D%2214447178069959650139%22%3EReflections%20from%20angled%20surfaces%20can%20cause%20the%20echo%20signal%20to%20be%20weak%20or%20delayed%2C%20leading%20to%20inaccurate%20distance%20readings.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%22876ca299-a015-4a8d-86be-9b0629f71d8c%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%22876ca299-a015-4a8d-86be-9b0629f71d8c%22%20data-uuids%3D%2214447178069959648354%2C14447178069959650139%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CDYQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQINhAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3CLI%20class%3D%22K3KsMc%22%3E%0A%3CDIV%20data-crb-p%3D%22%22%3E%0A%3CDIV%20class%3D%22xFTqob%22%3E%0A%3CDIV%20class%3D%22Gur8Ad%22%3E%3CSPAN%20data-huuid%3D%2214447178069959649613%22%3E%3CSTRONG%3ESolution%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22vM0jzc%22%3E%0A%3CUL%20data-hveid%3D%22CDgQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIOBAB%22%3E%0A%3CLI%3E%3CSPAN%20data-huuid%3D%2214447178069959650872%22%3E%3CSTRONG%3EShielding%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3CSPAN%20data-huuid%3D%2214447178069959648561%22%3EUse%20a%20small%20tube%20or%20shroud%20over%20the%20transmitter%20and%20receiver%20to%20minimize%20early%20detection%20and%20improve%20signal%20directionality.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%22d379042d-5cc2-42af-add7-5f4bca937a37%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%22d379042d-5cc2-42af-add7-5f4bca937a37%22%20data-uuids%3D%2214447178069959650872%2C14447178069959648561%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CDEQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIMRAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3CLI%3E%3CSPAN%20data-huuid%3D%2214447178069959648035%22%3E%3CSTRONG%3EMultiple%20Readings%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3CSPAN%20data-huuid%3D%2214447178069959649820%22%3ETake%20multiple%20readings%20and%20filter%20out%20excessively%20large%20values%20or%20calculate%20an%20average.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%228e5c37a2-a40d-4390-b520-c0937ffdd589%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%228e5c37a2-a40d-4390-b520-c0937ffdd589%22%20data-uuids%3D%2214447178069959648035%2C14447178069959649820%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CDAQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIMBAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3CLI%3E%3CSPAN%20data-huuid%3D%2214447178069959649294%22%3E%3CSTRONG%3ENewPing%20Library%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3CSPAN%20data-huuid%3D%2214447178069959651079%22%3EConsider%20using%20the%20NewPing%20library%2C%20which%20is%20designed%20to%20handle%20these%20issues.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%22adeb0665-d189-4561-b42c-e3a49b40c43b%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CDIV%20class%3D%22WaaZC%22%3E%0A%3CDIV%20class%3D%22RJPOee%20EIJn2%22%3E%0A%3CDIV%20class%3D%22rPeykc%20pyPiTc%22%20data-hveid%3D%22CGIQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQIYhAB%22%3E%3CSPAN%20data-huuid%3D%2214447178069959650553%22%3E4.%20Software%20Implementation%3A%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CDIV%20class%3D%22WaaZC%22%3E%0A%3CDIV%20class%3D%22RJPOee%20EIJn2%22%3E%0A%3CUL%20data-hveid%3D%22CHcQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIdxAB%22%3E%0A%3CLI%20class%3D%22K3KsMc%22%3E%0A%3CDIV%20class%3D%22zMgcWd%20dSKvsb%22%20data-il%3D%22%22%3E%0A%3CDIV%20data-crb-p%3D%22%22%3E%0A%3CDIV%20class%3D%22xFTqob%22%3E%0A%3CDIV%20class%3D%22Gur8Ad%22%3E%3CSPAN%20data-huuid%3D%2214447178069959647716%22%3E%3CSTRONG%3ETimer%20Configuration%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22vM0jzc%22%3E%3CSPAN%20data-huuid%3D%2214447178069959649501%22%3EIncorrect%20timer%20prescaler%20or%20clock%20settings%20can%20affect%20the%20accuracy%20of%20the%20pulse%20width%20measurement.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%22e9d98df0-6be4-4a54-9c29-980784b0cef1%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%22e9d98df0-6be4-4a54-9c29-980784b0cef1%22%20data-uuids%3D%2214447178069959647716%2C14447178069959649501%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CHQQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIdBAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CDIV%20data-crb-p%3D%22%22%3E%0A%3CDIV%20class%3D%22xFTqob%22%3E%0A%3CDIV%20class%3D%22Gur8Ad%22%3E%3CSPAN%20data-huuid%3D%2214447178069959648975%22%3E%3CSTRONG%3EDelay%20between%20Pings%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22vM0jzc%22%3E%3CSPAN%20data-huuid%3D%2214447178069959650760%22%3EThe%20sensor%20has%20a%20minimum%20time%20between%20pings%2C%20and%20exceeding%20this%20can%20lead%20to%20inaccurate%20readings.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%2262089f31-59f9-406c-a06d-63b48d3901db%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%2262089f31-59f9-406c-a06d-63b48d3901db%22%20data-uuids%3D%2214447178069959648975%2C14447178069959650760%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CG0QAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIbRAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CBR%20%2F%3E%0A%3CUL%3E%0A%3CLI%20class%3D%22K3KsMc%22%3E%0A%3CDIV%20data-crb-p%3D%22%22%3E%0A%3CDIV%20class%3D%22xFTqob%22%3E%0A%3CDIV%20class%3D%22Gur8Ad%22%3E%3CSPAN%20data-huuid%3D%2214447178069959650234%22%3E%3CSTRONG%3ESolution%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22vM0jzc%22%3E%0A%3CUL%20data-hveid%3D%22CHMQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIcxAB%22%3E%0A%3CLI%3E%3CSPAN%20data-huuid%3D%2214447178069959647397%22%3E%3CSTRONG%3ECheck%20Timer%20Settings%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3CSPAN%20data-huuid%3D%2214447178069959649182%22%3EVerify%20the%20timer's%20prescaler%20and%20clock%20configuration%20to%20ensure%20accurate%20time%20measurement.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%221a112955-e1c8-491f-accd-45a4e04285be%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%221a112955-e1c8-491f-accd-45a4e04285be%22%20data-uuids%3D%2214447178069959647397%2C14447178069959649182%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CG4QAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIbhAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3CLI%3E%3CSPAN%20data-huuid%3D%2214447178069959648656%22%3E%3CSTRONG%3EAppropriate%20Delays%3A%3C%2FSTRONG%3E%20%3C%2FSPAN%3E%3CSPAN%20data-huuid%3D%2214447178069959650441%22%3EEnsure%20sufficient%20delay%20between%20pings%20to%20allow%20the%20sensor%20to%20reset%20and%20stabilize.%3CSPAN%20class%3D%22pjBG2e%22%20data-cid%3D%22ea62ea67-ee19-4245-ac11-f035c46fc95c%22%3E%3CSPAN%20class%3D%22UV3uM%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%0A%3CDIV%20class%3D%22NPrrbc%22%20data-cid%3D%22ea62ea67-ee19-4245-ac11-f035c46fc95c%22%20data-uuids%3D%2214447178069959648656%2C14447178069959650441%22%3E%0A%3CDIV%20class%3D%22BMebGe%20btku5b%20fCrZyc%20LwdV0e%20FR7ZSc%20qVhvac%20OJeuxf%22%20tabindex%3D%220%22%20role%3D%22button%22%20aria-label%3D%22Ver%20v%C3%ADnculos%20relacionados%22%20data-hveid%3D%22CHAQAQ%22%20data-ved%3D%222ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIcBAB%22%3E%0A%3CDIV%20class%3D%22niO4u%22%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0ARegards%0A%3CDIV%20class%3D%22kHtcsd%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FLI%3E%0A%3C%2FUL%3E%3C%2FLINGO-BODY%3E