ADCs, sampling, precision, reference, signal conditioning

advertisement
Dealing with Analog Signals
A Microcontroller View
Jonathan Hui
University of California, Berkeley
2008
EECS194-5
1
An Analog World
• Everything in the physical world is an analog
signal
– Sound, light, temperature, gravitational force
• Need to convert into electrical signals
– Transducers: converts one type of energy to another
• Electro-mechanical, Photonic, Electrical, …
– Examples
• Microphone/speaker
• Thermocouples
• Accelerometers
2008
EECS194-5
2
An Analog World
• Transducers
– Allow us to convert physical phenomena to a voltage
potential in a well-defined way.
2008
EECS194-5
3
Going From Analog to Digital
• What we want
Physical
Phenomena
Engineering
Units
• How we have to get there
Physical
Phenomena
Voltage
Sensor
2008
Engineering
Units
ADC Counts
ADC
EECS194-5
Software
4
Sampling Basics
• How do we represent an analog signal?
– As a time series of discrete values
 On the MCU: read the ADC data register periodically
f (x )
V
Counts
f sampled (x )
t
2008
EECS194-5
TS
5
Sampling Basics
• 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
2008
EECS194-5
t
6
Sampling Basics
• 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
2008
EECS194-5
7
Sampling Basics
• Converting: ADC counts  Voltage
Vr 
Vin
N ADC  4095 
N ADC
Vin  VR 
VR   VR 
Vin  N ADC 
Vr 
t
VR   VR 
4095
• Converting: Voltage  Engineering Units
VTEMP  0.00355(TEMP C )  0.986
TEMP C 
2008
VTEMP  0.986
0.00355
EECS194-5
8
Sampling Basics
• Converting values in 16-bit MCUs
VTEMP  N ADC 
VR   VR 
4095
TEMP C 
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
2008
EECS194-5
9
Sampling Basics
• 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
– But the mote only has 10 kB of RAM…
f (x )
f sampled (x )
2008
EECS194-5
t
10
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:
f samples  2 f max
• Example:
– Humans can process audio signals 20 Hz – 20 KHz
– Audio CDs: sampled at 44.1 KHz
2008
EECS194-5
11
Sampling Basics
• 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)
2008
EECS194-5
12
Sampling Basics
• 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.
2008
Direct Samples
EECS194-5
Dithered Samples
13
Analog-to-Digital Basics
•
So, how do you convert analog signals to a
discrete values?
•
A software view:
1. Set some control registers :
•
•
•
2.
3.
4.
5.
2008
Specify where the input is coming from (which pin)
Specify the range (min and max)
Specify characteristics of the input signal (settling time)
Enable interrupt and set a bit to start a conversion
When interrupt occurs, read sample from data register
Wait for a sample period
Repeat step 1
EECS194-5
14
Block Diagram (MSP430)
2008
EECS194-5
15
ADC Features
2008
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
EECS194-5
16
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 
2008
EECS194-5
VR   VR 
4095
17
SAR ADC
• SAR = Successive-Approximation-Register
– Binary search to find closest digital value
2008
EECS194-5
18
SAR ADC
• SAR = Successive-Approximation-Register
– Binary search to find closest digital value
1 Sample  Multiple cycles
2008
EECS194-5
19
SAR ADC
1 Sample  Multiple cycles
2008
EECS194-5
20
Sample and Conversion Timing
•
Timing driven by:
–
–
–
•
•
2008
EECS194-5
TimerA
TimerB
Manually using ADC12SC bit
Signal selection using SHSx
Polarity selection using ISSH
21
Voltage Reference
Internal
External
Vref+
1.5V, 2.5V, Vcc
VeRef+
Vref-
AVss
VeRef-
•
Voltage Reference Generator
–
–
–
–
2008
1.5V or 2.5V
REFON bit in ADCCTL0
Consumes energy when on
17ms settling time
•
External references allow arbitrary
reference voltage
•
Want to sample Vcc, what Vref
to use?
EECS194-5
22
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
t sample  ( RS  2kΩ)  9.011 40pF  800ns
2008
EECS194-5
23
Software Configuration
•
How it looks in code:
ADC12CTL0 = SHT0_2 | REF1_5V |
REFON | ADC12ON;
ADC12CTL1 = SHP;
2008
EECS194-5
24
Inputs and Multiplexer
•
12 possible inputs
–
–
–
–
–
•
External pins may function as
Digital I/O or ADC.
–
•
2008
EECS194-5
8 external pins (Port 6)
1 Vref+ (external)
1 Vref- (external)
1 Thermistor
1 Voltage supply
P6SEL register
Is this a multiplexor as you saw
in CS150?
25
Conversion Memory
•
16 sample buffer
•
Each buffer configures sample
parameters
–
–
–
•
2008
EECS194-5
Voltage reference
Input channel
End-of-sequence
CSTARTADDx indicates where to
write next sample
26
Conversion Modes
•
Single-Channel Single-Conversion
–
–
•
Sequence-of-Channels
–
–
•
–
–
EECS194-5
Single channel sampled and converted
continuously
New sample occurs with each trigger
(ADC12SC, TimerA, TimerB)
Repeat-Sequence-of-Channels
–
2008
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
Sequence of channels sampled and
converted repeatedly
Sequence re-starts when reaching
ADC12MCTLx with EOS bit
27
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;
2008
EECS194-5
28
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();
}
2008
EECS194-5
29
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();
}
2008
EECS194-5
30
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();
}
2008
EECS194-5
31
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();
}
2008
EECS194-5
32
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();
}
2008
EECS194-5
33
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
2008
ADC
async event void HplSignalAdc12.fired() {
ADC12CTL0 &= ~ENC;
ADC12CTL0 = 0;
ADC12IE = 0;
ADC12IFG = 0;
m_reading = ADC12MEM0;
post signalReadDone();
}
EECS194-5
34
Interrupts and Tasks
• Tasks are run-to-completion
– Used to signal application events
– Break up computation in the application
• Interrupts
– Generated by the hardware
– Preempt execution of tasks
• Interrupts and tasks can schedule new tasks
Task
Task
Task
Handler
Interrupt
2008
Hardware
EECS194-5
35
Download