Slide 1 - EECS - Electrical Engineering and Computer Science

advertisement
EECS 373
Design of Microprocessor-Based Systems
Prabal Dutta
University of Michigan
Lecture 11: Sampling, ADCs, and DACs
Oct 12, 2010
Slides adapted from Jonathan Hui
http://www.cs.berkeley.edu/~jwhui
1
Announcements
• Homework, Labs, and Minute Quizzes
• Office Hours
– Tuesday, Oct 12, 2:30 PM – 3:30 PM, in EECS 2334
– Thursday, Oct 14, 1:30 PM – 3:00 PM, in CSE 4773
– Last ones before the midterm
• Midterm
– Thursday, Oct 21, 2010
– 10:40 AM – 11:30 AM (50 minutes)
– In-class
• Labs
2
Outline
• Minute quiz
• Announcements
• Sampling
• ADC
• DAC
3
We live in an analog world
• Everything in the physical world is an analog signal
– Sound, light, temperature, pressure
• Need to convert into electrical signals
– Transducers: converts one type of energy to another
• Electro-mechanical, Photonic, Electrical, …
– Examples
• Microphone/speaker
• Thermocouples
• Accelerometers
4
Transducers convert one
form of energy into another
• Transducers
– Allow us to convert physical phenomena to a voltage
potential in a well-defined way.
5
Convert light to voltage with a CdS photocell
Vsignal = (+5V) RR/(R + RR)
• Choose R=RR at median
of intended range
• Cadmium Sulfide (CdS)
• Cheap, low current
• tRC = Cl*(R+RR)
–
–
–
–
Typically R~50-200kW
C~20pF
So, tRC~20-80uS
fRC ~ 10-50kHz
Source: Forrest Brewer
6
Many other common sensors (some digital)
• Force
–
–
–
• Acceleration
strain gauges - foil,
conductive ink
conductive rubber
rheostatic fluids
• Piezorestive (needs bridge)
–
–
–
Sonar
–
–
–
microswitches
shaft encoders
gyros
Source: Forrest Brewer
Motor current
• Stall/velocity
Temperature
• Voltage/Current Source
• Field
–
–
Antenna
Magnetic
• Hall effect
• Flux Gate
• Usually Piezoelectric
• Position
Battery-level
• voltage
• Charge source
• Both current and charge
versions
–
–
–
Microphones
MEMS
Pendulum
• Monitoring
piezoelectric films
capacitive force
• Sound
–
–
–
• Location
–
–
Permittivity
Dielectric
Going from analog to digital
• What we want
Physical
Phenomena
Engineering
Units
• How we have to get there
Physical
Phenomena
Voltage or
Current
Sensor
Engineering
Units
ADC Counts
ADC
Software
8
Representing an analog signal digitally
• How do we represent an analog signal?
– As a time series of discrete values
 On MCU: read the ADC data register periodically
f (x)
Counts
V
f sampled (x)
t
TS
9
Choosing the horizontal range
• What do the sample values represent?
– Some fraction within the range of values
 What range to use?
Vr 
Vr 
Vr 
Vr 
Range Too Small
t
Range Too Big
t
Vr 
Vr 
Ideal Range
t
10
Choosing the horizontal granularity
• Resolution
– Number of discrete values that
represent a range of analog values
– MSP430: 12-bit ADC
• 4096 values
• Range / 4096 = Step
Larger range  less information
• Quantization Error
– How far off discrete value is from
actual
– ½ LSB  Range / 8192
Larger range  larger error
11
Converting between voltages,
ADC counts, and engineering units
• Converting: ADC counts  Voltage
Vr 
Vin
N ADC  4095
N ADC
Vin  VR 
VR   VR 
Vin  N ADC 
Vr 
t
V R   VR 
4095
• Converting: Voltage  Engineering Units
VTEMP  0.00355(T EMPC )  0.986
VTEMP  0.986
T EMPC 
0.00355
12
A note about sampling and arithmetic
• Converting values in 16-bit MCUs
VTEMP  N ADC 
VR   VR 
4095
TEMPC 
VTEMP  0.986
0.00355
vtemp = adccount/4095 * 1.5;
tempc = (vtemp-0.986)/0.00355;
 tempc = 0
• Fixed point operations
– Need to worry about underflow and overflow
• Floating point operations
– They can be costly on the node
13
Choosing the sample rate
• What sample rate do we need?
– Too little: we can’t reconstruct the signal we care about
– Too much: waste computation, energy, resources
• Example: 2-bytes per sample, 4 kHz  8 kB / second
• What about sampling jitter? Remember Lab 1?
f (x)
f sampled (x)
t
14
Shannon-Nyquist sampling theorem
• If a continuous-time signal f (x) contains no frequencies
higher than f max , it can be completely determined by
discrete samples taken at a rate:
• Example:
fsamples  2 f max
– Humans can process audio signals 20 Hz – 20 KHz
– Audio CDs: sampled at 44.1 KHz
15
Use anti-aliasing filters on ADC inputs to
ensure that Shannon-Nyquist is satisfied
• Aliasing
– Different frequencies are indistinguishable when they
are sampled.
• Condition the input signal using a low-pass filter
– Removes high-frequency components
– (a.k.a. anti-aliasing filter)
16
Designing the anti-aliasing filter
• Note
 w is in radians
 w = 2pf
• Exercise: Find an R+C pair so that the half-power
point occurs at 30 Hz
17
Can use dithering to deal with quantization
• Dithering
– Quantization errors can result
in large-scale patterns that
don’t accurately describe the
analog signal
– Introduce random (white)
noise to randomize the
quantization error.
Direct Samples
Dithered Samples
18
Outline
• Minute quiz
• Announcements
• Sampling
• ADC
• DAC
19
The basics of Analog-to-Digital Conversion
• So, how do you convert analog signals to a
discrete values?
• A software view:
1. Set some control registers :
• Specify where the input is coming from (which pin)
• Specify the range (min and max)
• Specify characteristics of the input signal (settling
time)
2. Enable interrupt and set a bit to start a conversion
3. When interrupt occurs, read sample from data register
4. Wait for a sample period
5. Repeat step 1
20
Architecture of the TI MSP430 ADC subsystem
21
ADC Features
Texas Instruments
MSP430
Atmel
ATmega 1281
Resolution
12 bits
10 bits
Sample Rate
200 ksps
76.9 ksps
Internally Generated 1.5V, 2.5V, Vcc
Reference Voltage
1.1V, 2.56V
Single-Ended Inputs
12
16
Differential Inputs
0
14 (4 with gain amp)
Left Justified Option
No
Yes
Conversion Modes
Single, Sequence,
Repeated Single,
Repeated Sequence
Single, Free Running
Data Buffer
16 samples
1 sample
22
ADC Core
• Input
–
Analog signal
• Output
–
12-bit digital value of input
relative to voltage
references
VR 
Vin
VR 
• Linear conversion
N ADC  4095
Vin  VR 
VR   VR 
Vin  N ADC 
V R   VR 
4095
23
SAR ADC
• SAR = Successive-Approximation-Register
– Binary search to find closest digital value
– Conversion time log(bits)
24
SAR ADC
• SAR = Successive-Approximation-Register
– Binary search to find closest digital value
1 Sample  Multiple cycles
25
SAR ADC
1 Sample  Multiple cycles
26
Sample and Conversion Timing
•
Timing driven by:
–
–
–
•
•
TimerA
TimerB
Manually using ADC12SC bit
Signal selection using SHSx
Polarity selection using ISSH
27
Voltage Reference
Internal
External
Vref+
1.5V, 2.5V, Vcc
VeRef+
Vref-
AVss
VeRef-
•
Voltage Reference Generator
–
–
–
–
1.5V or 2.5V
REFON bit in ADCCTL0
Consumes energy when on
17ms settling time
•
External references allow
arbitrary reference voltage
•
Exercise: If you want to sample
Vcc, what Vref should you use?
28
Sample Timing Considerations
• Port 6 inputs default to high impedance
• When sample starts, input is enabled
– But capacitance causes a low-pass filter effect
 Must wait for the input signal to converge
tsample  (RS  2kΩ)  9.011 40pF  800ns
29
Software Configuration
• How it looks in code:
ADC12CTL0 = SHT0_2 | REF1_5V |
REFON | ADC12ON;
ADC12CTL1 = SHP;
30
Inputs and Multiplexer
•
12 possible inputs
–
–
–
–
–
•
8
1
1
1
1
external pins (Port 6)
Vref+ (external)
Vref- (external)
Thermistor
Voltage supply
External pins may function as
Digital I/O or ADC.
–
P6SEL register
31
Conversion Memory
•
16 sample buffer
•
Each buffer configures sample
parameters
–
–
–
•
Voltage reference
Input channel
End-of-sequence
CSTARTADDx indicates where to
write next sample
32
Conversion Modes
•
Single-Channel Single-Conversion
–
–
•
Sequence-of-Channels
–
–
•
Sequence of channels sampled and
converted once
Stops when reaching ADC12MCTLx
with EOS bit
Repeat-Single-Channel
–
–
•
Single channel sampled and converted
once
Must set ENC (Enable Conversion) bit
each time
Single channel sampled and converted
continuously
New sample occurs with each trigger
(ADC12SC, TimerA, TimerB)
Repeat-Sequence-of-Channels
–
–
Sequence of channels sampled and
converted repeatedly
Sequence re-starts when reaching
ADC12MCTLx with EOS bit
33
Software Configuration
• How it looks in code:
• Configuration
ADC12CTL0 = SHT0_2 | REF1_5V |
REFON | ADC12ON;
ADC12CTL1 = SHP;
ADC12MCTL0 = EOS | SREF_1 |
INCH_11;
•
Reading ADC data
m_reading = ADC12MEM0;
34
A Software Perspective
command void Read.read() {
ADC12CTL0 = SHT0_2 | REF1_5V | REFON | ADC12ON;
ADC12CTL1 = SHP;
ADC12MCTL0 = EOS | SREF_1 | INCH_11;
call Timer.startOneShot( 17 );
}
event void Timer.fired() {
ADC12CTL0 |= ENC;
ADC12IE = 1;
ADC12CTL0 |= ADC12SC;
}
task void signalReadDone() {
signal Read.readDone( SUCCESS, m_reading );
}
async event void HplSignalAdc12.fired() {
ADC12CTL0 &= ~ENC;
ADC12CTL0 = 0;
ADC12IE = 0;
ADC12IFG = 0;
m_reading = ADC12MEM0;
post signalReadDone();
}
35
A Software Perspective
command void Read.read() {
ADC12CTL0 = SHT0_2 | REF1_5V | REFON | ADC12ON;
ADC12CTL1 = SHP;
ADC12MCTL0 = EOS | SREF_1 | INCH_11;
call Timer.startOneShot( 17 );
}
event void Timer.fired() {
ADC12CTL0 |= ENC;
ADC12IE = 1;
ADC12CTL0 |= ADC12SC;
}
task void signalReadDone() {
signal Read.readDone( SUCCESS, m_reading );
}
async event void HplSignalAdc12.fired() {
ADC12CTL0 &= ~ENC;
ADC12CTL0 = 0;
ADC12IE = 0;
ADC12IFG = 0;
m_reading = ADC12MEM0;
post signalReadDone();
}
36
A Software Perspective
command void Read.read() {
ADC12CTL0 = SHT0_2 | REF1_5V | REFON | ADC12ON;
ADC12CTL1 = SHP;
ADC12MCTL0 = EOS | SREF_1 | INCH_11;
call Timer.startOneShot( 17 );
}
event void Timer.fired() {
ADC12CTL0 |= ENC;
ADC12IE = 1;
ADC12CTL0 |= ADC12SC;
}
task void signalReadDone() {
signal Read.readDone( SUCCESS, m_reading );
}
async event void HplSignalAdc12.fired() {
ADC12CTL0 &= ~ENC;
ADC12CTL0 = 0;
ADC12IE = 0;
ADC12IFG = 0;
m_reading = ADC12MEM0;
post signalReadDone();
}
37
A Software Perspective
command void Read.read() {
ADC12CTL0 = SHT0_2 | REF1_5V | REFON | ADC12ON;
ADC12CTL1 = SHP;
ADC12MCTL0 = EOS | SREF_1 | INCH_11;
call Timer.startOneShot( 17 );
}
event void Timer.fired() {
ADC12CTL0 |= ENC;
ADC12IE = 1;
ADC12CTL0 |= ADC12SC;
}
task void signalReadDone() {
signal Read.readDone( SUCCESS, m_reading );
}
async event void HplSignalAdc12.fired() {
ADC12CTL0 &= ~ENC;
ADC12CTL0 = 0;
ADC12IE = 0;
ADC12IFG = 0;
m_reading = ADC12MEM0;
post signalReadDone();
}
38
A Software Perspective
command void Read.read() {
ADC12CTL0 = SHT0_2 | REF1_5V | REFON | ADC12ON;
ADC12CTL1 = SHP;
ADC12MCTL0 = EOS | SREF_1 | INCH_11;
call Timer.startOneShot( 17 );
}
event void Timer.fired() {
ADC12CTL0 |= ENC;
ADC12IE = 1;
ADC12CTL0 |= ADC12SC;
}
task void signalReadDone() {
signal Read.readDone( SUCCESS, m_reading );
}
async event void HplSignalAdc12.fired() {
ADC12CTL0 &= ~ENC;
ADC12CTL0 = 0;
ADC12IE = 0;
ADC12IFG = 0;
m_reading = ADC12MEM0;
post signalReadDone();
}
39
Interrupts and Tasks
Application
Kernel
Driver
command void Read.read() {
ADC12CTL0 = SHT0_2 | REF1_5V | REFON | ADC12ON;
ADC12CTL1 = SHP;
ADC12MCTL0 = EOS | SREF_1 | INCH_11;
call Timer.startOneShot( 17 );
}
event void Timer.fired() {
ADC12CTL0 |= ENC;
ADC12IE = 1;
ADC12CTL0 |= ADC12SC;
}
task void signalReadDone() {
signal Read.readDone( SUCCESS, m_reading );
}
MCU
ADC
async event void HplSignalAdc12.fired() {
ADC12CTL0 &= ~ENC;
ADC12CTL0 = 0;
ADC12IE = 0;
ADC12IFG = 0;
m_reading = ADC12MEM0;
post signalReadDone();
}
40
Outline
• Minute quiz
• Announcements
• Sampling
• ADC
• DAC
41
A decoder-based DAC architecture
in linear and folded forms
42
A binary-scaled DAC architecture
in linear and folded forms
• Much more efficient
• Monotonicity not guaranteed
• May experiences glitches
43
DAC output signal conditioning
• Often use a low-pass filter
• May need a unity gain op amp for drive strength
44
Questions?
Comments?
Discussion?
45
Download