Driver for array of ultrasonic sensors

Hi there!

I am trying to build an array of ultrasonic sensors for haptic feedback in mid air. The haptic feedback is achieved by suppling the ultrasonisc sensors with a rectangular voltage of 40kHz and a superimpossed lower frequency of about 100-400Hz. My question now is how to best drive the single sensors.

I already read this thread that talks about ultrasonic driving ciurcuits.

Most links suggest to use a H-Bridge to drive a sensor. With an array of let's say 4x4 sensors however, several H-Bridges would be necessary. I wonder if it's possible to just use one transistor (e.g. 2N2222) for each sensor to amplify Arduino's PWM output to about 20V. A decoupling capacitor would then filter the DC and supply an alternating rectangular voltage to each sensor. Would that work?

Some of the rangers use Maxim RS232 drivers.

You worte that in the other tread too :slight_smile:
Do you have any example on how to do so?

Why not look at some of the schematics online?

Okay this might work.
However, my initial question was if this could also be achieved with one transistor and a 20Vdc power supply?

To get an AC block wave out of your cap you have to actively charge AND discharge. So alternating connect it to +5V and GND. You'd need at least two transistors for that, but as you have to deal with 20V you'll need a third transistor providing a low side driver for the high side transistor.

The 2N2222 is a small signal transistor, whether it could work depends on the current the ultrasound transducer needs.

That current also determines whether your capacitor solution can work at all. Big caps may have too high impedance to get sufficient current in and out. You're limited to non-polarised caps for this, too, as you're constantly reversing polarity. Ceramics are probably your best bet and they max out at 10 uF.

Piezo elements are high impedance at DC, so you probably can get away without the DC blocking capacitor if you use a single ended driver and don't exceed the working voltage of the device.

The advantage of using a differential driver scheme like an H-Bridge or the max232 scheme mentioned above is that it effectively doubles the voltage swing across the transducer, hence improving the effective range, at any given working voltage. It's also likely to be more power efficient if that's a concern.

For my understanding, does it make any difference if a rectangular voltage between +10V and -10V is applied to the transducer or a rectangular voltage between +20V and 0V?

It may very well make a difference.

One may be out of the specs of your element (check the maximum allowed voltage in the data sheet of yours).

A transducer is an electromechanical device converting electric power into sound waves, so there may be limits/non-linearity to the movement either way, so a +/-10V swing may have a very different effect than a +20/0V swing.

I am using a MAS404S transducer and it only specifies a maximum voltage of 20Vpp. How does it make a difference? My understand is that a piezo can simplified be viewed as a capacitor. If 20V is applied, the capacitance charges and if 0V is applied, the capacitance discharges. From the papers I read so far for this type of sensor, the Arduino's PWM output signal is amplified to achieve a ~20V/0V swing.
However, if a +/- 10V swing is requried I could simply add a DC decoupling capacitor to the input leg of the transducer to filter the DC content, right?

You would need at least two pins for that, so you can switch the leads of the capacitor between +10 / 0 and 0 / +10.

The problem is that your effective peak-peak voltage is much less than 2x the supply voltage, unless you can fully charge/discharge the capacitor in between the stages, but then you get a pulsed signal, nothing near a constant drive:

  1. fully charge the cap one way.
  2. discharge cap through transducer - positive cycle (sound pulse is produced).
  3. charge the cap the opposite way.
  4. discharge cap through transducer - negative cycle (sound pulse is produced).

That's exactly how I'm producing a 6.6V peak/peak AC for my TDS probe and that works great (effective frequencies range from roughly 1-1,000 kHz). It will probably not work well for the transducer, as during stages 1 and 3 it is not driven at all and of course the voltage drops as the cap discharges. You can limit that by using a larger cap, but the charge/discharge stage would take longer as well (and as you need an unpolarised cap, 10 uF is pretty much the largest you can get).

I am using a MAS404S transducer and it only specifies a maximum voltage of 20Vpp.

Can you post a spec/datasheet link for that transducer please?
If 20Vpp is an absolute maximum, then that is not what you drive it at.
What they are telling you is that anymore than 20Vpp and you can destroy the device, you should be working at 75 or 80% of absolute max, to ensure reliable operation.
Tom... :slight_smile:

You can find the datasheet here:


The driver schematic I am now proposing would be the following:

Would that work?

I have also seen schematics with one transistor:

That datasheet is for a transducer of type MA40S4R. Are you sure that's the correct one? It's a different type.

It's indeed 20V peak-peak, so a sensible drive voltage for stable, long term operation would be 12-15V.

Your driver schematic will not work. That transistor part looks wrong - if I'm not mistaken they will switch each other on.

And if that doesn't happen, you have the problem that you will never be able to switch off the PNP as you can't bring the base up to +20V. There'll always be a current into your pin, even if it's set to HIGH, and that's likely to kill the pin as well. To switch that PNP transistor you have to put an NPN transistor in the base, and switch that with the Arduino:

The 0.1µF capacitor doesn't seem to have any function.

The second schematic looks much more sensible to me. The transistor simply amplifies the wave as produced by the 555 timer. It's basically a normal low side switch (the switched load is the resistor), and should work just as well if operated by a 0-5V signal from an Arduino.

Thanks for the explanation.

I corrected the link to the data sheet in the post before.

Althought I understand your argumentation, I wonder why then a H-bridge can be used. It also has a pnp transistor in the same position:

H-Bridge Driver

I thought the 0.1uF capacitor could be used to filter the DC content:

Thanks for the explanation.

I corrected the link to the data sheet in the post before.

Link still doesn't work.
Tom.. :slight_smile:

  1. the high side switch works without extra driver if your INPUT signal reaches the high voltage. So if you run your H-bridge at +5V, then it works fine, as the high level of the Arduino is sufficient to switch it off. The second NPN transistor is to allow you to switch off the high side while supplying a lower voltage.

  2. there is no DC component to filter in your case, as the transducer doesn't pass much if any DC in the first place.

Link still doesn't work.

Sorry, don't know why... Here is the link to the product page with all specs: MA40S4S

And I finally dimensioned the driver schematic right. I believe it will work like that:

Pity they call it a sensor, because it is the TX half of a Tx/Rx system.

You need to swap over Q1 and Q2 in places and put Q2 collector to gnd and Q2 emitter to Q1 emitter.
Like this, its called push-pull.
Tom... :slight_smile:

Q1 is inserted the wrong way around.

Where did you find that resistance? 340Ω doesn't sound right for a 2.15nF capacitive device. That should be very high (GΩ kind of values).

The R2/R3/R4 network will switch on both Q1 and Q2 when Q3 is off, causing a short circuit.