 # Analog output coding

Hi. I have a question regarding programming the analog output pin on an arduino uno R3. I have a speaker that has a maximum power rating of 0.2W. This is about ~2.5V max. This voltage needs to be an AC signal and I would like to power the speaker through one of the analog pins on the R3.

I would like to send an AC signal through pin 4.

To get the 2.5V, I would need to have the correct resistor(s) between the output pin and speaker. Or is there a way to have the AC signal vary the voltage to a max value of 2.5V?

Inside my function, this is what I currently have: analogWrite(A4, Value);

I am unsure what to put for "Value." I read that "value: the duty cycle: between 0 (always off) and 255 (always on)." What is the meaning of these values?

Thank you!

Well... There are a few complications...

What's the impedance of the speaker? How did you get 2.5V, and is that an RMS value?

The Aduino is rated for 40mA maximum, So a regular 8 Ohm speaker will pull too much current. You may need an audi amplifier or an additional audio amplifier chip.

The Arduino doesn't put-out AC. It puts-out a 0 or +5V value, which can be a square or rectangular wave. With a series capacitor you can remove the bias and get (approximate) square waves that go from -2.5 to +2.5V, which is actually 2.5V RMS.

I am unsure what to put for "Value." I read that "value: the duty cycle: between 0 (always off) and 255 (always on)." What is the meaning of these values?

It's PWM = pulse width modulation. It's the duty cycle of the rectangular wave (around 400kHz if I remember correctly). With a value of 127, you'll have an (approximate) square wave that's 5V half the time, and zero half the time (i.e. 50% duty cycle and an average of 2.5V). With a value of 1, it will be low (zero) for 254/255 "counts", then high for one count, then low for 254 counts again. If you modulate the PWM value at an audio frequency, you'll be modulating the average voltage and you'll hear the tone from a speaker (or piezo, etc.)

DVDdoug: Well... There are a few complications...

What's the impedance of the speaker? How did you get 2.5V, and is that an RMS value?

The Aduino is rated for 40mA maximum, So a regular 8 Ohm speaker will pull too much current. You may need an audi amplifier or an additional audio amplifier chip.

The Arduino doesn't put-out AC. It puts-out a 0 or +5V value, which can be a square or rectangular wave. With a series capacitor you can remove the bias and get (approximate) square waves that go from -2.5 to +2.5V, which is actually 2.5V RMS.

I am unsure what to put for "Value." I read that "value: the duty cycle: between 0 (always off) and 255 (always on)." What is the meaning of these values?

It's PWM = pulse width modulation. It's the duty cycle of the rectangular wave (around 400kHz if I remember correctly). With a value of 127, you'll have an (approximate) square wave that's 5V half the time, and zero half the time (i.e. 50% duty cycle and an average of 2.5V). With a value of 1, it will be low (zero) for 254/255 "counts", then high for one count, then low for 254 counts again. If you modulate the PWM value at an audio frequency, you'll be modulating the average voltage and you'll hear the tone from a speaker (or piezo, etc.)

The speaker is 32 ohm. I used the equation P=IV=(V^2)/R to get V 0.2=(V^2)/32=>V~2.5V 2.5V is the maximum voltage the speaker can safely handle.

I was told that the signal sent to the speaker needs to be an AC signal in order for it to work. I tried with just a plain DC signal and nothing seemed to happen. I imagine a square wave should be able to work for this speaker.

See attached schematic for 2 ways to drive the speaker. The first one provides about 0.5V peak to the speaker, the second one provides about 1.8V peak.

``````analogWrite(A4, Value);
``````

A4 is not a PWM pin.