This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Short distance measurements in AIR (Level from the Top)

Other Parts Discussed in Thread: TDC1000, TDC7200, TDC7200EVM

Customer Problem:

  1. Use TDC1000 to measure drill depths for a “professional” quality drill with the following specifications:
    1. Min distance 17cm (from transducer)
    2. Max distance 70cm (from transducer)
    3. Measurement accuracy ~5mm
    4. Work even in “hammer drill mode”
    5. Setup needs to be unaffected by “dust” (sealed transducer)
    6. Need single transducer solution as cost is an issue. 

Since air is so absorptive with respect to ultrasound higher excitation voltages are required. How high, depends on several factors:

  1. Distance. The farther, the higher voltage required as power drops off exponentially with distance. For this range 30V should work fine.
  2. Target angle: The further I'm off angle the smaller amplitude echo I'll receive.
  3. Surface reflectivity: A nice smooth surface will give a better echo than a rough varied one (think flat lumber vs. tree bark). 

In a nutshell 1-3 above all relate the SNR of my ultrasound signal path. Changing any of the above will the size of my echo and reduce my measurable distance.

For ease I used the TDC1000_GASEVM as it:

  1. Is powered from USB
  2. has up to 30V excitation build in. (which can be bypassed to test lower voltages)
  3.  Can interface to 2 transducers should I really need a short range lower than the ringdown time of a single transducer.

I mounted it on a blank PCB board which I then attached to a hammer drill with velcro straps.

Testing in the lab yielded some promising results:

  1. I was concerned the “hammer vibrations” would interfere with the transducer so created a test to simulate that by drilling with a fixed depth in “hammer drill” mode.
  2. The vibrations were not observable

See below:

With Drill running and no depth change (no hammer mode)

In air a STD of 3.02us yields  [343 m/s*3.02e-6)/2] approximately .5mm


With drill running in Hammer mode(and no depth change)

So drilling with no depth change and no filtering other than averaging yields:

In air a STD of 18.774us yields  [343 m/s*18.774e-6)/2] approximately 3.2mm


What EVM/drill combo looked like:

Side view:

 Front View:

 During testing (note: metal plate used to make zero depth change)


If the drill is not orthogonal to the surface by more than 10 degrees (approx.) no echo is detected (due to the tight beam transducer used).

  • Transducer used: Bestartech's 200kHz "sealed" air transducer. A really important feature of this transducer is its tight beam angle which allows it to work so well for this application. The tighter the beam angle the less energy dissipated over a larger area to the longer a distance that can be measured with lower excitation frequencies. 

The vendor link: (

Arrow’s link: (

  • register files for the above setup are here:


  • Also the clock source is CPU_CLK (1.2Mhz) on the board (see TDC1000_GASEVM User's Guide).

Another thing to keep in mind is this setup setup can be used to do level sensing in a container "From the Top" of the container. The issue with that application is that any liquid condensing on the transducer face will severely limit range and will require experimentation.

Also it is ESSENTIAL to read my app note on Sensing Level as it goes over understanding and characterizing transducer ring-down for your system and how to adjust the TDC1000 to compensate for it.

  • Here's a few more pics showing TDC1000 GUI tabs and scope shots at the minimum and max range:

    Setup tab: Note CPU_CLK source set to 1.6Mhz

    TDC1000 Tab 

    TDC7200 tab with the "mask bits" set to ignore the ringdown Stop pulse (see scope shots below)

    Scope shots showing: Start (Ch1/Yellow), Stop (Ch2/Green), Compin (Ch3/Purple)

    Transducer ringdown based Stop pulse circled in red:

    Range at 16cm:

    Scope shots showing: Start (Ch1/Yellow), Stop (Ch2/Green), Compin (Ch3/Purple)

    Transducer ringdown based Stop pulse circled in red:

    Range at 70cm:

    Tank tab with air Speed of Sound showing 16cm

    Tank tab with air Speed of Sound showing 70cm

  • Hello,

    I am currently trying to detect the concentration of a very light gas with a very high speed of sound and am looking to be able adapt flow rate. For this I believe I need to reduce the distance between my transducers to increase signal size for accuracy. I am just wondering if you have any advice for reducing the transducer ringdown signal in the receiving path so that I can bring the transducers closer together?

    thanks in advance,

    Russell Engebretson

  • Russell,
    Let's discuss your question on a separate thread instead of here.
  • Hi Matthew sir,
    I have used the register file that you have stated above, for "from the top" application of level sensor. But I need to increase the accuracy is It possible, I have also tried TDC100_TDC7200EVM that work good for fluid level detection and it also yields far more accuracy than this gas_EVM kit, Is it possible to get accuracy in the rage of 0.5mm using the Gas_EVM . If no then please help me understand.

    Please help me with this

    Thank You
  • Hi!

    I tried the pictured GUI setup with the same frequency (200kHz) transducer, and my oscilloscope is showing no signal and my graph has no data. Any ideas as to what could be going wrong?

    More importantly, what would I have to change about your method/settings above to be able to apply this technique at distances of a few centimeters?



  • My mistake. What I meant to say instead of "no data" was that the graph data is not changing based on distance. It is even not changing when I completely unplug the transducer, which makes the graphing result seem like utter bogus, since it doesn't depend on the transducer at all.
  • Hi Nancy,

    I went through this process a while back and there are a bunch of settings you have to play with. If you are using the register values listed here, there is a minimum distance from emitter to receiver of 17cm (as listed at the top). This is because there is a blank period which the receiver is "not listening". If you spread your emitter/receiver further from each other you should pick up a signal. If this is the case, then you need to play with the registers in the Timeout section of the TDC1000 tab - enabling the force_short_tof register should allow you to pick up signals closer to each other. 

    It has been a while since I played with the EVM, but if you have questions I should be able to help you out.

    Also, are you doing this in air? or another gas, I was dealing with helium which introduced many other obstacles. 



  • Hi Russell!

    Thanks for your response. My plan is to get this exact example working first and then take your advice about changing the timeout section to suit shorter distances. I am just using air for now; helium is a bridge I can cross when I get there.

    So I've copied the register values from here and am testing the transducer at distances greater than the 17cm minimum. I get a graphical response that lingers around the same value but still no change with respect to change in distance whether it is 17cm or 40 cm away from a target (I have been moving my transducer away from solids like a notebook or tabletop). What could be the reason for this do you think, if I've practically copied this initial article?

    Thanks for your help!
  • Dear Matthew! Hello again!

    As you maybe remember, I have the almost same application - I should measure liquid level through the air from top.

    I purchased TDC1000-TDC7200EVM (GASEVM is not available here), modified it for measuring (changed the filter components to fit 400kHz tranducer), and connected it to custom boost board, exactly copied from GASEVM. The only difference is use of 24V power instead of boost 30V converter.

    I see the output waveform on tranducer on my scope showing the booster working good, but again - I see no echo nor STOP pulces.

    I set up registers exactly as shown in this thread, except TX_FREQ_DIV I set to 4, as my tranducer is 400kHz, not 200.

    Please, help me! Thank you!
  • Hi Nancy,

    Sorry for the extremely delayed response, I do not know if you still need assistance with this project? 

    If you are still stuck there are a few things to try. First, do you have an oscilloscope to hook up to the board? Can you see your received waveform?

    One issue which may be causing the constant trigger, independent of transducer distance, could be that the trigger is being set due to the ring down of your transducer? you could try increasing the threshold value from -35mV to something higher and see if that helps. 



  • Just a heads up, there are filters built into the TDC1000-TDC7200EVM which limit the frequencies which should be used with this board. I do not remember what the cutoff was, but it was well below 400 kHz.

    I had initially purchased the TDC7200EVM for use with a 200kHz transducer and decided to switch to the GASEVM due to this issue. If you are handy with surface mounted soldering and are confident you could try and alter some resistance values (possibly a capacitor too, I can't really remember) which would change the cutoff frequencies.

    I am in no way an expert in this though, and I am not an electrical wizard so I would perhaps consult with one of the experts here before going forward with this. I wouldn't want you to damage your board in any way.


  • Hello Russell!

    Could you please also help me?

    I have oscilloscope attached, and now I see the trails of echo signal, but it is very weak!

  • Sorry, I see the answer just after I post my one.
    Of course, as I initially purchased TDC7200EVM, I replaced all the filtering components to support 400kHz bandwith, accordint to recomendations of Matthew.

    I can post all my schematics, of course as well as screenshots of my oscilloscope.
  • Hi again Russell,

    I could in fact still use your help! I managed to hook up the scope and change the blanking period settings such that I can see a result in air and even see the result change when I introduce Helium! The only problem now is that while in-air results make sense, Helium is not giving me great results.

    When I move the transducers too far apart, the signal visibly dies down on the scope and ceases to create a stop signal. (When I lower the voltage threshold to try and compensate for this, the stop signal picks up lots of noise instead, making the results jump around.) On the other hand, when I move the transducers too close together, the signal created gets mixed up with all the ringdown and blanking period.

    Any advice as to how to work with helium?

    Thanks again!
  • Hi Nancy,

    I worked with this board and helium for quite a while and I managed to get it to mostly work for my application. A couple tips I can give you is that the transducer will not couple with helium as well as it does with air, so your signals are going to be a lot smaller, which is why you notice they do not work at a distance as well.

    Also, helium is the lightest material and therefore the speed of sound in helium is a lot larger than any other gas you would use. For this reason, with the timing of the board, there are limits on how close you can have your transmitter/receiver before you lose your signal in the ringdown of the transducer; I believe in my case I kept my transducers around 10 cm apart. All I can say is you are going to need to play around with the timing registers, the threshold voltage, number of stop pulses and such.

    I also had this board communicating with a raspberry pi, so a lot of the jumping of the signals due to fluctuating signal strength I removed through software and manipulation of the data. Do you need to use helium? and what is your application in helium? I made a device to determine the purity of helium flowing through a pipe. It worked really well actually, but there are more issues which arise if you are changing the concentration of helium.



  • Hi Russell,

    By the sounds of it, we are doing almost the same exact thing. My idea was to apply this to helium purity as well! But that involves getting a TOF that can be dependably accurate in Helium, which is I suppose where I am running into the problems with the timing settings and whatnot. I ended up getting the best measurements around 10cm as well.

    Ideally I will be able to change concentrations of Helium/air and the impurity will be reflected in the TOF. I am envisioning a plot with a curve that goes from ~340 m/s to ~1000 m/s as the substance is changed from 100%Air/0%He to 0%Air/100%He.

    So, as far as next steps to take, should I just keep fiddling around with the timing/threshold/etc. to find a middle ground that works well at detecting He and Air?

    I'm glad this ended up working out well for you -- that is reassuring! And how lucky I found someone with such a similar setup and problems!
  • Hi Nancy,

    Yes, I did the same thing as you are trying to do. I managed to get my setup to work well, but there were some issues which needed to be overcome and I didn't end up finishing a final product (not that it couldn't be done). Some issues which you are going to notice as you play around with this is that the amplitude of your signal will also change as you drop in helium purity, and not linearly. So your signal amplitude increases and decreases several times throughout the whole process from 100%->0% helium purity - In fact, at some mixtures with air, the signal nearly disappears. We never officially discerned what was the cause of this, but I theorized that it could be due to the harmonic modes inside the pipe which would change as purity changed, causing increases and decreases in the signals. There could also be other explanations, but I didn't worry too much about this, I just worked around the issue.

    You are going to need to play with the distance between transducers, threshold voltage, timing registers, and number of stop signals, until you can get your board to accurately detect the signal in the full range of 100%-0%. Another issue which arises is that your stop signal jumps between periods in your received signal, due to the large fluctuations in amplitude of the signal. I simply offset this through software, which worked very well in tests I did, but it put limitations on my device. 

    This is a very interesting project, and I will most likely finish it eventually, I just don't have the time currently. If you have any questions or problems feel free to privately message me on here and we can discuss further.