Idle noise from a TL082 opamp

Hi everybody,

So what I’ve been trying to do is reading audio input from an electret mic, and I’ve cooked up the circuit below. The code is just reading voltage from A0 and send it back to my computer. Omitted from the circuit are 2 100nF “decoupling capacitor” bridging 5+ → GND and +Vcc → -Vcc which I don’t know whether crucial or not (doesn’t seem to affect the results).

The problem is, without any sound and minimal gain with R3 at 10k Ohms, analogRead returns values ranging very quickly (only seems to be limited by the baud rate) between ±15 units around 511. For some reasons, with loud sounds the input still only varies just a bit more (mic input seems to be around 5-6 times the noise value). And pulling out C1 (grounding IN+ I think) doesn’t affect the noise at all (still varies between 500 & 530 very quickly). Because of this changing R3 doesn’t get rid of the noise.

Is it because my circuit is crap and I’ll have to scrap the entire thing? If not, are there any replacements/improvements I can add to my circuit? I’d also guess it might be from my opamp orientation (non-inverting) making oscillations from the feedback, but is there any workaround? Because I have no idea how the inverting type works. I’ve come across this

is it a good circuit and I should follow it? I’d prefer what I can understand though.

I pulled half my circuit from http://www.instructables.com/id/Arduino-Audio-Input/ and I’ve seen mixed feelings about it.

You must have at least 0.1 uF bypass capacitors across each battery and another one placed directly across the op amp power pins. Better, use a parallel combination of 10 uF (observe polarity) and 0.1 uF across each battery.

There is no reason to power the mic from the noisy Arduino power supply. That may be where some of the noise is coming from, so use the positive battery supply terminal instead.

Finally, consider using just one battery, with a voltage divider to set "virtual ground" as described in this post.

use lm386 - the simplest

@jremington How would I go about powering the 5v mic with 9v? Can I use a voltage divider? And also, if parallel capacitors add up why shouldn't I use a 10.1 uF across each battery instead?

Thank you, I'll check that out.

@ted Yeah I'll look into that. I might copy Hackaday's cold dead hands after all. I don't have one handy though

Most electret microphones are not "5V" and can safely be powered from 9V. Post a link to the data sheet for yours.

up why shouldn't I use a 10.1 uF across each battery instead

The two types of capacitors have very different frequency-dependent properties. 10 uF is used to reduce low frequency noise, while 100 nF is used to reduce much higher frequency noise.

Note that the 0.1uF capacitor must be of the ceramic type for it to work. This is because the ceramic type handles higher frequencies than any other type.

All capacitors have internal inductance and given a high enough frequency stop behaving like a capacitor and start acting like an inductor and hence stop removing noise.

Thanks everyone, I’ve implemented the caps and the single supply and it’s certainly helped reducing the noise value, although there is still prevalent noise that seems to partially be from the analog pin itself.

In the pictures below:

‘noise1’ is the plotter with A0 just connects to a voltage divider formed between 5+ and GND, nothing else.

‘noise2 & 4’ are with A0 connected like the circuit above, with all the new addons, without any sounds, with and without C1 respectively. ‘noise4’ baudrate is 5 times ‘noise2’.

‘noise3’ has the same setup as ‘noise2’, but with ‘Demons’ from Imagine Dragons blasting from my phone about 20cm away from mic, at max volume with speaker pointed directly at the mic. Point the speaker backwards and the plotter looks like ‘noise2 & 4’.

Is there a way to reduce this problem? I haven’t seen one searching google yet, and I doubt there is. I can work with it anyways, so I’m not too concerned.

Try this; 1. Disconnect power to microphone - the results ? 2. R1 connect to 9V battery - the results ? 3. discount C1 - the results ?

lovesjsan: Hi everybody,

So what I've been trying to do is reading audio input from an electret mic, and I've cooked up the circuit below. The code is just reading voltage from A0 and send it back to my computer. Omitted from the circuit are 2 100nF "decoupling capacitor" bridging 5+ -> GND and +Vcc -> -Vcc which I don't know whether crucial or not (doesn't seem to affect the results).

One of the first mistakes in low-noise design is using large resistor values. 100k/10k feedback network is too high, use something more like 220/2k2. All resistors are noise sources and the higher the resistance the more voltage noise you get.

The TL082 is not a low-noise opamp(*), not a good coince for microphone amplication. If you want the best you could go to something awesome like the OPA1612, but a standard NE5532 will be cheap and much better than the TL082.

And without band-limiting before sampling with the ADC you are going to see all the high frequency noise aliased down into the audio band, so some sort of analog low pass filtering before the ADC will reduce noise substantially (even just a simple RC should make a big difference).

All of this pre-supposes you've already eliminated sources of EMI injecting noise directly into the circuit, which you clearly originally had.

The problem is, without any sound and minimal gain with R3 at 10k Ohms, analogRead returns values ranging very quickly (only seems to be limited by the baud rate) between +-15 units around 511. For some reasons, with loud sounds the input still only varies just a bit more (mic input seems to be around 5-6 times the noise value). And pulling out C1 (grounding IN+ I think) doesn't affect the noise at all (still varies between 500 & 530 very quickly). Because of this changing R3 doesn't get rid of the noise.

(*) Not low voltage noise with a low impedance source, to be precise - its low current noise and good with a high impedance source, and its by no means the worst, but there are many devices an order of magnitude better for a 2k source impedance electret.

use lm386 - the simplest

The LM386 is a power amp and does not have good noise performance.

OP

Given you’re using a 5v reference. 1 lsb = about 5mV

The noise you see is about 5 or 6 lsb p-p ie < 2 lsb rms or 10mV. What was the sampling rate?

The gain of the opamp varies between 11 and very large depending on the pot setting - where was it set?

The impedance of an electret is probably 1 to a few k ohms.

The universe gives you -174dBm / Hz at 300K ambient temperature.

The circuit you show has some crude but unpredictable HF rolloff - any idea what the -3dB rolloff point is? - it could well be worth making this explicit. I’d add a 180 ohm between the top of R6 and C3 to give a 20kHz-ish rolloff. Given the 10k max samples/second of AT328 based arduinos it could be worth making this much lower - so try 820 ohms.

And add 100pF across R4.

Apart from anything else, many opamps don’t like directly driving large capacitive loads - this makes it’s life a little easier.

Those in the know will see I’m trying to get at a noise figure. For this I need to know the actual gain of the opamp… ie the pot setting.

Can you help, OP?

Of course the microphone will itself have a noise output. Do you have specs for this?

Or try re-measuring with the mic replaced by a 1k resistor.

Allan