ADCs and DACs

advertisement
Digital Signal Processing
Vref
Analog signal (time
varying, continuous)
Incoming
samples
Analog-toDigital
Converter
(ADC)
0
Applications
0x030,
0x4A,
0x12,
0xAF, etc.
Time
Vref
Digitalto-Analog
Converter
(DAC)
new
waveform
0
Time
0x0B3,
0x23,
0xCF,
0x78, etc.
µProcessor
performs
computation
• Audio
– Speech recognition
– special effects (reverb, noise cancellation, etc)
• Video
– Filtering
– Special effects
– Compression
• Data logging
Outgoing samples
V 0.1
1
Vocabulary
V 0.1
2
Digital-to-Analog Conversion
• ADC (Analog-to-Digital Converter) – converts an analog
signal (voltage/current) to a digital value
• DAC (Digital-to-Analog Converter) – converts a digital
value to an analog value (voltage/current)
• Sample period – for ADC, time between each conversion
For a particular binary code, output a voltage between
0 and Vref
Vref
D[7:0]
Vout
DAC
– Typically, samples are taken at a fixed rate
• Vref (Reference Voltage) – analog signal varies between 0
and Vref, or between +/- Vref
• Resolution – number of bits used for conversion (8 bits, 10
bits, 12 bits, 16 bits, etc).
• Conversion Time – the time it takes for a analog-to-digital
conversion
V 0.1
Assume a DAC that uses an unsigned binary input code,
with 0 < Vout < Vref. Then
D= 0000 0000
D= 0000 0001
D = 0000 0010
...
D = 1111 1111
(one LSB)
Vout = Vref(255/256) (full scale)
3
DAC Output Plot
Vout
Vout = 0V
Vout = Vref(1/256 )
Vout = Vref(2/256)
V 0.1
4
Typical DAC Output
Output signal
increases in 1 LSB
increments.
4/256 Vref
3/256 Vref
2/256 Vref
1/256 Vref
0
1
2
3
From http://www.allaboutcircuits.com
Input code
V 0.1
5
V 0.1
6
1
DAC Architecture (cont)
DAC Architecture
Note ratios of
resistors
This is a binary code
Operational
Amplifier can be
used to sum
voltages.
From http://www.allaboutcircuits.com
V 0.1
7
From http://www.allaboutcircuits.com
V 0.1
8
Another View
DAC Architecture (cont)
A 3-bit DAC, called an R/2NR DAC. Resistors are
scaled by powers of 2 (this is hard to do in practice).
Resistance values are still R, 2R, 4R
From http://www.allaboutcircuits.com
From http://www.allaboutcircuits.com
V 0.1
9
R/2R DAC
V 0.1
10
Commercial DACs
• Either voltage or current DACs
– Current DACs require an external operational amplifier
to convert to voltage
• Precision up to 16-bits
• Key timing parameter is settling time - amount of
time it takes to produce a stable output voltage
once the input code has changed
• We will use an 8-bit voltage DAC with an I2C
interface from Maxim semiconductor
Via circuit analysis, can prove this is an
equivalent circuit.
Now only need resistances of R, 2R –
this is easy to do. This is the most
common DAC architecture.
V 0.1
From http://www.allaboutcircuits.com
11
V 0.1
12
2
DAC Application
A 1-bit ADC
Phosper
Vertical Deflection
Cathode
R
DAC
G 8
B 8
8
DAC
DAC
Vref
Red
Electron Beams
(Red, Green Blue)
Green
Vin
R
Vref/2
Blue
Grid
Vout=Vdd is Vin > Vref/2
-
Vout=0 if Vin < Vref/2
digital signal
comparator
13
V 0.1
A 2-bit ADC
Vin
+
-
3/4Vref
Vin
+
B
1/2Vref
Vin
+
C
-
1/4Vref
R
14
ADC Architectures
A
-
R
+
Horizontal Deflection
V 0.1
R
Vdd
R
High speed video
DACs produce RGB
signals for color CRT
R
analog signal
• The previous architectures are called Flash ADCs
A B C
D1 D0
------------0 0 0
0 0
0 0 1
0 1
0 1 1
1 0
1 1 1
1 1
–
–
–
–
–
D[1:0]
• Successive approximation ADCs
(other codes
don’t cares)
– Use only one comparator
– Take one clock cycle per bit
– High precision (16-bit converters are available)
Encoding logic
V 0.1
Fastest possible conversion time
Requires the most transistors of any architecture
N-bit converter requires 2N-1 comparators.
Commercially available flash converters up to 12 bits.
Conversion done in one clock cycle
15
Successive Approximation ADC
V 0.1
16
Commercial ADCs
First, set DAC to produce
Vref/2.
Output of Comparator is
Q[N-1] (MSB)
If MSB =1 , then Vin
between Vref and Vref/2, so
set DAC to produce ¾ Vref.
If MSB=0, then Vin
between Vref/2 and 0, so set
DAC to ½ Vref.
Output of comparator is now
Q[N-2].
• Key timing parameter is conversion time – how
long does it take to produce a digital output once a
conversion is started
• Up to 16-bit ADCs available
• Separated into fast/medium/low speed families
– Serial interfaces common on medium/low speed ADCs
• For high-precision ADCs, challenge is keeping
system noise from affecting conversion
– Assume a 16-bit DAC, and a 4.1V reference, then 1 LSB
= 4.1/216 = 62 µV.
Do this for each bit.
Output is Q[N].
From http://www.allaboutcircuits.com
Takes N cycles.
V 0.1
17
V 0.1
18
3
PIC16 A/D
Input Pins
• PIC16F873 has onboard A/D
–
–
–
–
–
Successive approximation
10 bit resolution
Reference voltage can be Vdd or separate voltage
Multiple input (more than one input channel)
Time per bit(Tad) for conversion is either 2Tosc, 8Tosc, or
32 Tosc, where Tad cannot be less than 1.6 us (Tosc =
1/Fosc)
• Total conversion time is 10* Tad +Taq (acquisition)
– Taq is approximately 20 us; acquisition time is the amount of
time input capacitor requires to charge up to input voltage.
– So a 20 Mhz Fosc, Tosc = .05 us, so 32Tosc = 1.6 us;
conversion time = 10*1.6 us + 20 us = 36 us.
V 0.1
Analog input channels (AN0,AN1, AN4)
Can be analog
input channels
or Vref+/Vref-
19
V 0.1
20
Acquisition Time
Channel
select
analog
mux.
Acquisition time is the time required for the analog input voltage
to be sampled by the input capacitor.
A/D Block
Diagram
Vref+/Vref- select
V 0.1
21
Voltage References
Example Commercial voltage reference: 2.048v, 2.5v , 3v, 3.3v,
4.096v, 5v (Maxim 6029)
Vdd
Vref
This process is also called sample and hold.
V 0.1
Key parameter for a voltage is
stability over temperature operating
range. Need this to be less than ½
of a LSB value.
– ADCON1 used to configure port A for analog/digital
inputs, voltage reference
– ADCON0 used for clock selection, analog input selection,
start/finish conversion status.
• ADRESH, ADRESL -10-bit results returns in two
registers
– 10-bit result can be configured to be left or right justified.
ADRESH : ADRESL
ADRESH : ADRESL
DD DDDDDDDD
00000098 76543210
DDDDDDDD DD
98765432 10000000
Right justified
V 0.1
22
• ADCON0, ADCON1 – configuration registers
We will use Vdd as our voltage reference for convenience, but will
be throwing away at least two bits of precision due to Vdd
fluctations.
4.096v
When the conversion begins, the sampling switch is OPENED and
the input capacitor holds the input voltage while the conversion is
done.
PIC A/D Registers
Stability of voltage reference is critical for high precision
conversions.
5V
The sampling switch is CLOSED during this time.
23
Left justified
V 0.1
24
4
MAXIM 517 DAC
Max517 I2C Transaction
R/2R DAC
I2C
interface
Not present on
Max517, Vref
instead.
First byte: Device address
Personalizes device
address
V 0.1
Third Byte:
output byte to
DAC
Second Byte: DAC
command byte
25
V 0.1
26
Command Format
Device Address Format
Only command byte we will use for Max517 will be
00000000 = 0x00 as this does a write to DAC0.
For Max517, bits [7:3] = 01011
If AD1:AD0 tied to gnd then address is: 01011000 = 0x58
V 0.1
27
V 0.1
28
Testing the ADC and DAC
Timing
Analog
input
Vdd
Analog out, To
multimeter or scope
16F873
RA0/AN0
Max517 DAC has a 6 us settling time.
Requires 3 bytes over I2C bus to write a new value.
10K Pot.
Maxim 517
OUT1
OUT0
AD1
RC3/SCK/SCL
SCL
RC4/SDI/SDA
SDA
AD0
Vdd
If you have trouble
distinguishing which
8-pin DIP in your
parts kit is the
MAX517, look for the
Maxim symbol on the
package.
At 400Khz, one bit time = 2.5 us.
Each byte is 8 bits + 1 ACK.
This diagram assumes that 10K pullups are already on the
SCL/SDA lines from the previous lab.
So 27 bits * 2.5 us = 67.5 us not counting software overhead. So
we are limited by I2C bus speed, not by the DAC settling time.
V 0.1
29
Read the voltage from the potentiometer via the PIC A/D, write
this digital value to the DAC. The DAC output voltage should
match the potentiometer voltage.
V 0.1
30
5
Potentiometer
Vdd
dactest.c
A variable resistor. Tie outer two legs
to Vdd/GND. Voltage on middle leg
will vary between Vdd/GND as
potentiometer is adjusted, changing the
position of the wiper on the resistor.
/* A/D Setup */
/* all bits input */
TRISA = 0xFF;
A/D Configuration
/* A0 analog input, others digital,right
justification of result */
ADCON1 = 0x8E;
/* sampling freq = Fsoc/32, channel 0 */
ADCON0 = 0x80;
/* turn on ADC*/
bitset(ADCON0,0);
printf("ADC is configured!!!");
pcrlf();
V 0.1
31
V 0.1
dactest.c (cont.)
dactest.c (cont.)
int adc_value;
for(;;) {
bitset(ADCON0, 2); /* start conversion */
/* wait for end of conversion */
while (bittst(ADCON0,2));
#define DAC 0x58
/* read result */
Read from A/D, print
adc_value = 0;
adc_value = adc_value | (ADRESH << 8);
adc_value = adc_value | (ADRESL);
printf("%x",adc_value);
pcrlf();
i2c_WriteTo(DAC);
V 0.1
Invert
Clipped
33
34
• Vocabulary
• DAC R/2N architecture
• ADC Flash, Successive approximation
architectures
• PIC A/D
Vnew = Vold >> 1
– How to configure
– Acquisition, Conversion time
– How to start do conversion, read result
Vnew = Vref-Vold
V 0.1
V 0.1
What do you have to know?
Vnew = Vold << 1
‘if’ tests to Vmax
check if Vold
in range
DAC output byte
i2c_Stop();
}
Modify dactest.c to provide four functions:
Divide by 2
DAC command byte
i2c_PutByte(val);
Modifications to dactst.c
Multiply by 2
device address byte
i2c_PutByte(0x00);
Only write upper 8
bits to DAC
}
/* I2C DAC 01011000 */
void update_dac(unsigned char val) {
dac_value = ((adc_value >> 2)) & 0x00ff;
/* now write to DAC */
update_dac(dac_value);
32
• Max517 DAC usage
Vmin
35
V 0.1
36
6
Download