Help needed with haptic driver design

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
Hello

I am trying to design a circuit to drive an audio exciter (a small 8 ohm driver) at very low frequencies. Rather than use the audio exciter to produce audible sound waves, I am using it in contact with the skin to give a sense of touch. So the frequencies are very low typically 0.5 to 2 Hz. I originally thought that I would use a small audio amplifier but have realised that these are only able to push and pull the driver by coupling the output through a capacitor and at the frequencies I am interested in, this doesn't seem like a good solution since I would need a huge capacitor. So I was hoping to drive the exciter directly from a high power op amp. I am using battery power and so was thinking of creating a dual supply with two Lion batteries. One side of the audio driver would be connected to ground (between the batteries) and the other side would be driven positive and negative depending on the voltage at the input) provided by an arduino. When negative I am naively assuming that the op amp will just sink current from the ground via the driver. There is no sink current in the spec - so I was hoping that the sink and source current ceiling would be the same.

The max current through the driver is about 400mA and I have found a nice cheap op amp (L272) that can go up to 750mA - so I was assuming this might work. Here is my schematic. The input from the arduino is ac coupled and biased so that the op amp sees a true AC input.

I am just wondering if this circuit is likely to work ? Or is there a better way to do this?

Thank you for any advice !

Stephen
 

Attachments

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
Just wanted to add that I am using an Adafruit feather board to create the signal, which comes out as a 900Hz 3.3v PWM signal. I was going to choose the coupling capacitor at the input to the op-amp to be big enough to smooth this out (as well as AC couple) so that the 900Hz doesn't get through to the audio driver.

Also I think that I have set up the op amp to give gain of 2 - so that I can get up to a 5v peak to peak signal which is about the max range I think I can get from this op amp when powered +-4v.

Apologies in advance for any stupidity - I am fairly new to all this !
 

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
Not sure what your doing with this, but a quick gGoogle search shows there are chips made to do this - http://www.ti.com/product/DRV2605 Or this - https://www.adafruit.com/product/2305 Those are just 2 of the many ones out there.
Thank you Shortbus for the reply. Those drivers you mention are designed for low current vibration motors and linear resonance actuators which typically only require a few tens of mA (maybe 100 at most) - and even more importantly for me, they are single supply so they only drive current in one direction. I am trying to build a different type of haptic actuator with a stroke of 3/4 mm and approx 1N of force. To get the full range of motion I need to be able to pull the coil backwards as well as push it forwards. Hence my thought that I might need to build something from scratch. - At same time I'm sure this has been done many times before and I am very happy to buy something off the shelf if it exists !
 

Audioguru again

Joined Oct 21, 2019
1,602
A modern [/b]bridged[/b]audio amplifier IC has two outputs that effectively doubles the voltage and doubles the current to a load for almost 4 times the output power of your circuit. The bridged amplifier can be powered form a single positive supply and does not need an output capacitor.
Look at a PAM8403 stereo class-D bridged audio amplifier IC. It is rated at 3.2W per channel into 4 ohms with 10% distortion when its supply is 5V or 2.5W at low distortion. Its maximum allowed supply is 6v so you can power it from one Lithium cell or a few in parallel.
Its output switches on and off at a high frequency with class-D for low heating.
 

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
Thanks for the pointer Audioguru. I have acquired a PAM8402 (couldn't find a 8403at short notice) based board from Adafruit and have given this a first go. It looks promising though I'm having trouble getting it to work at very low frequencies. It works well at a few hertz - but when I get down to single or sub herz and just one oscillation - it seems to just click once. I wonder if control circuitry is taking over or there is a coupling capacitor on the input and perhaps it is too low a value to allow sub hertz frequencies in - so I'm going to try to add an extra capacitor across the input (when I get home).
Presentation1.jpg
 
Last edited:

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
I've just been reading the datasheet for the 8302 and 8304 Class-D amps. Unfortunately the response drops off steeply below 50Hz (understandable given that they are Audio Amp). By 20Hz its down 3db and that's as far as the graph goes. I would guess that by 1Hz it is down more than 8db - so I'm not sure that this will work. Perhaps I should just try to build a simple push pull amplifier with 2 transistors ? Never done this before but since I am not really worried about distortion I think it should be doable even for me. I presume that this can work at very low frequencies provided that the input coupling capacitor is big enough ?
 

Audioguru again

Joined Oct 21, 2019
1,602
Like any amplifier powered from a single positive supply (without an additional negative supply) made with an IC or made with transistors, the low frequency response -3db cutoff frequency is determined by the value of the input RC. The frequency response graph for the PAM8403 shows a 1uF input capacitor and a -3dB cutoff frequency of less than 10Hz. Then the input resistor value is about 18k for the gain to be +24dB and the feedback resistor is at its maximum allowed value of 142k.

Lower frequency response is done by using a higher value for the input resistor or using a higher value for the input capacitor.
The 1uF input capacitor and 18k input resistor produces a -3dB cutoff at 8.9Hz. For less gain then the feedback and input resistor values can be 120k for a gain of 1, then the -3dB cutoff frequency with a 1uF input capacitor is 1.33Hz. If the resistors are 120k and the input capacitor value is 10uF then the -3db cutoff frequency is 0.13H but the input capacitor will take 6 seconds to charge and will make a POP motion in your device.

If you use a PAM8403 with a positive +2.5V and negative -2.5V supply, then you do not need an input capacitor and the amplifier will have no low frequency cutoff and will amplify slow DC changes.
 

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
Thank you Audioguru - that is really helpful advice. Brilliant to have 2 options. I could live with -3db at 1.3 Hz but I think creating a dual supply is going to be the best answer for me. Will try that first thing. I really appreciate it. Regards Stephen
 

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
One other thought. Is it possible to also get the same result with a single supply by biasing the signal input at 2.5V? Rather than try to do this with a resistor divider at the output (which would require AC coupling) - I could bias the whole Arduino with a diode in forward bias? This would shift the ground reference of the Arduino up by 0.7V and so the 3.3V peak to peak PWM signal would been seen by the 8403 to be oscillating around 2.5V and hence not require AC coupling... If that makes sense ?

IMG_0033.PNG
 

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
Actually I've also realised that I can simply "bias" the signal in the PWM code - by using 50% cycle as the zero and subtracting or adding to this. Thanks for all the help...
 

AnalogKid

Joined Aug 1, 2013
8,493
In post #11 you indicate that the driving waveform is a square wave. To me this means that you do not need a linear amplifier of any kind, but meerly two saturaged switch transistors to yank the cone one way or the other. AND, you might not need the second transistor.

If you idea is that the speaker pushes a pulse of air against the skin with a leading edge that is rapid enough to be perceived as a light tap by a solid object, AND you are not trying go produce the feel of constant contact such that the person can detect the release, then that the speed of the release (the speed at which the speak cone moves away from the skin) doesn't matter. One transistor creates the tap, and the speaker cone's natural spring retracts the cone for the next pulse. You will get a bigger tap sensation if you retract the cone to its other motion extreme with a second transistor, but that will drastically decrease the battery life.

Think LED driver. I would start with one 2N7000 MOSFET as the speaker driver with a diode across the speaker to protect the FET from the inductive spike at turn-off, and see how that feels. Arduino > FET > speaker.

ak
 

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
In post #11 you indicate that the driving waveform is a square wave. To me this means that you do not need a linear amplifier of any kind, but meerly two saturaged switch transistors to yank the cone one way or the other. AND, you might not need the second transistor.

If you idea is that the speaker pushes a pulse of air against the skin with a leading edge that is rapid enough to be perceived as a light tap by a solid object, AND you are not trying go produce the feel of constant contact such that the person can detect the release, then that the speed of the release (the speed at which the speak cone moves away from the skin) doesn't matter. One transistor creates the tap, and the speaker cone's natural spring retracts the cone for the next pulse. You will get a bigger tap sensation if you retract the cone to its other motion extreme with a second transistor, but that will drastically decrease the battery life.

Think LED driver. I would start with one 2N7000 MOSFET as the speaker driver with a diode across the speaker to protect the FET from the inductive spike at turn-off, and see how that feels. Arduino > FET > speaker.

ak
Thanks ak

You're right my sketch looks like a square wave - but its actually a high frequency (~30kHz) PWM signal. The actual signal is a 1 Hz sine pulse from Pi to 3Pi radians.

I may try your suggestions as one experiment - but I was ideally hoping to have complete control of the driver, so that I could experiment with different shapes of wave pulse, to see how they feel different. For example a sine versus a parabola. And with overlaid vibration and without.

I read a recent academic paper on creating the sense of stroking by overlapping single parabolic pulses in audio exciters like the one I am using. One complication is that the distance of travel of the cone is quite limited (4mm peak to peak) - hence my desire to use push and pull so that I could get the maximum extent possible.

I took Audioguru's advice and shorted out the coupling capacitors on my PAM8302a board, and have biased my Arduino PWM signal so that it appears as 5V peak to peak waveform centred around 2.5V. This is working quite well and I am able to get nice slow pulses from the driver. I can also hold it back or push it out for long periods at will (though it soon gets hot!).
 

Thread Starter

sjdevlin

Joined Nov 23, 2019
12
What were you expecting at that Hz level?
I was sending it a pure sine wave - so I was hoping for a smooth action. But instead I just was getting one snap motion from the driver - possibly a result of the coupling capacitor just charging up and then discharging.?
 

shortbus

Joined Sep 30, 2009
7,774
I was sending it a pure sine wave - so I was hoping for a smooth action. But instead I just was getting one snap motion from the driver - possibly a result of the coupling capacitor just charging up and then discharging.?
You are making some statements in this that to my simple mind don't add up. How can 30KHz be 2hz at the same time? Or are you meaning your giving a 30KHz wave for 2Hz as a burst? 30KHZ will be moving so fast it will seem to be only moving as a snap action.
 

AnalogKid

Joined Aug 1, 2013
8,493
I was ideally hoping to have complete control of the driver, so that I could experiment with different shapes of wave pulse, to see how they feel different. For example a sine versus a parabola. And with overlaid vibration and without.
For the very low frequencies you are talking about, I think a D/A output would be much more flexible/adaptable/useful/better than a PWM signal that needs a low pass filter (with all of its attendant complications and distortions) to turn it into a driving waveform. It worked well for me in the 70's.

ak
 

Audioguru again

Joined Oct 21, 2019
1,602
Since the sinewave at 2Hz had a snap-action then it was feeding the amplifier at a level that was too high so the amplifier output was clipping and was producing a 2Hz squarewave.
The PAM8402 is the older IC with less output power than the PAM8404. the PAM8402 is spec'd to produce at least 1W or 1.1W into 8 ohms at low distortion with a 5V supply. 1W into 8 ohms is a voltage of 8Vp-p so each wire of the 8 ohms gets only 4Vp-p

If the coupling capacitor has a high enough capacitance then it does not charge and discharge. If its value is too low for the frequency then the capacitor charges and discharges which reduces its output level.
 
Top