ADC
Analog-to-Digital Converter
Kuliah #9
Aplikasi ADC
cabonauts.com maximintegrated.com enterprise-europe.iwt.beSistem
terkomputerisasi
Pokok Bahasan
● Konversi analog ke digital
● Arsitektur ADC di AVR Atmega8/16/32 ● Register
● Pemrograman
● Aplikasi
Setelah mempelajari bab ini, mahasiswa akan mampu
● [C2] memahami prinsip ADC dan DAC
● [C5] mendesain mikrokomputer dengan antarmuka ADC untuk
peripheral sensor suhu dan kelembaban udara
● [C5] mendesain mikrokomputer dengan antarmuka DAC untuk
ADC dan DAC
ADC SAMPLED AND QUANTIZED WAVEFORM
DAC RECONSTRUCTED WAVEFORM
ADC: Konverter A/D
● Menghasilkan keluaran digital sesuai dengan nilai sinyal
analog masukan relatif terhadap tegangan referensi
● Proses: sinyal analog --> digital
– Analog: amplitudo kontinyu, waktu kontinyu
– Digital: amplitudo diskrit, waktu diskrit
– Jumlah nilai diskrit terbatas: 2N , N=jumlah bit
ANALOG INPUT DIGITAL OUTPUT RESOLUTION N BITS REFERENCE INPUT Analog Input
DIGITAL OUTPUT CODE = x (2N - 1)
Proses Konversi
● Proses konversi
– Pencuplikan (sampling)
● Mengubah sinyal waktu kontinyu menjadi sinyal
waktu diskrit
● Parameter: frekuensi sampling
– Kuantisasi
● Mengubah sinyal amplitudo kontinyu menjadi
sinyal amplitudo diskrit
● Parameter: jumlah representasi bit
– Pengkodean
● Mengkodekan sinyal diskrit dalam representasi
1. Pencuplikan
● Merepresentasikan sinyal waktu kontinyu ke
dalam waktu diskritnya
● Menentukan bandwidth sinyal tercuplik
(kriteria Nyquist)
– Frekuensi sinyal Fs harus dari 1/2*Fsampling
agar tidak terjadi aliasing
DISCRETE TIME SAMPLING AMPLITUDE QUANTIZATION y(t) y(n) y(n+1) n-1 n n+1 n+3 ts t
Bandwidth Nyquist & Aliasing
1 MHz 4 MHz
fsampling fsampling + fsignal fsampling - fsignal signal passband 3 MHz 5 MHz fsignal (FSIGNAL < ½ FSAMPLING) 1 MHz 4 MHz
fsampling fsampling + fsignal fsampling - fsignal signal passband 3 MHz 5 MHz fsignal (FSIGNAL < ½ FSAMPLING)
2. Kuantisasi
● Merepresentasikan sebuah sinyal analog yang
mempunyai resolusi tak terbatas (kontinyu) ke digital yang mempunyai resolusi terbatas
100 11 10 01 00 Analog 0 1/4 1/2 3/4 1 = FS 1LSB
Any Analog Input in this Range Gives the
Same Digital Output Code
Relasi Ideal Konverter A/D
D IG IT A L O U T P UT 1 LSB ANALOG INPUT 1/8 2/8 3/8 4/8 5/8 6/8 7/8 001 010 011 100 101 110 111Spesifikasi DC
● Transisi kode ADC
ideal tepat 1 LSB
● Untuk N-bit ADC,
terdapat 2N kode
● 1 LSB = FS/2N
● Untuk ADC 3-bit,
FS=1Volt, 1 LSB=1V/8
● Tiap langkah berpusat
di tiap 1/8 FS 0 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 0 0 0 1 / 8 1 / 4 3 / 8 1 / 2 5 / 8 3 / 4 7 / 8 0 A n a l o g I n p u t D ig ita l O ut p ut 1 L S B A D C T r a n s f e r F u n c t i o n ( I d e a l )
3. Pengkodean Digital
● Mentranslasikan nilai
analog terkuantisasi menjadi kode digital
● a/FS = d/M
a=nilai analog, FS=Vmax M=jumlah langkah=2N d=nilai digital proportionality Vmax = 7.5V 0V 1111 1110 0000 0010 0100 0110 1000 1010 1100 0001 0011 0101 0111 1001 1011 1101 0.5V 1.0V 1.5V 2.0V 2.5V 3.0V 3.5V 4.0V 4.5V 5.0V 5.5V 6.0V 6.5V 7.0V
Metode Konversi
Successive-approximation
Resolusi ADC
● Merupakan perubahan tegangan analog
terkecil yang menghasilkan perubahan 1 bit (=1 LSB)
– Jarak antara 2 level kuantisasi yang
berdekatan
● Resolusi ADC: r = FS / 2N
ADC dan Sistem Sensor
● K dan B: rangkaian pengkondisi tranduser
– K = pengali tegangan skalar
– B = tegangan bias untuk menempatkan
tegangan di Vmin dan Vmax ADC
● V2,max = (V1,max * K) + B
Contoh Rangkaian Pengkondisi
● Sensor photodiode menyediakan tegangan 0V
untuk intensitas cahaya terbesar dan -2.50V untuk intensitas cahaya terkecil. Hitung nilai K dan B untuk tranduser ini sehingga dapat
mempunyai skala penuh di ADC dengan FS=5V dengan referensi ke GND.
ADC di AVR ATMega16/32
● 8 Channel ADC Multiplexed – 8 Single-ended – 2 Differential with Programmable Gain at 1x, 10x, or 200x ● 8/10 bit resolution● Variable Clock Speed
● Various Reference Voltage
Fitur ADC di AVR
● 10-bit Resolution ● 0.5 LSB Integral Non-linearity ● ±2 LSB Absolute Accuracy ● 13 - 260 µs Conversion Time ● Up to 15 kSPS at Maximum Resolution● 8 Multiplexed Single Ended Input Channels
● 7 Differential Input Channels
● 2 Differential Input Channels with Optional Gain of 10x and 200x(1) ● Optional Left adjustment for ADC Result Readout
● 0 - VCC ADC Input Voltage Range
● Selectable 2.56V ADC Reference Voltage
● Free Running or Single Conversion Mode
● ADC Start Conversion by Auto Triggering on Interrupt Sources
● Interrupt on ADC Conversion Complete
Distribusi Clock di AVR
● ADC has a dedicated
clock domain (clkADC)
– reduce noise
generated by digital circuitry
– gives more accurate
ADC conversion results
Diagram Pewaktuan ADC
(Konversi Pertama, Mode Tunggal)
Konversi Mode Tunggal
Konversi Auto-Triggered
Masukan Analog
dan Power
Hasil Konversi
● Setelah konversi selesai (ADIF=1), hasil
konversi disimpan dalam register hasil (ADCL, dan ADCH)
Single-ended conversion
ADMUX: Register Pemilihan MUX
● REFS[1:0]: memilih tegangan referensi
MUX[4:0]: Pemilihan Kanal Input dan
Gain
SFIOR – Special FunctionIO Register
Pemrograman ADC
● Hanya 1 kanal ADC yang bisa dikonversikan
dalam 1 waktu
– Memilih Prescaler ADC (pembagi frekuensi):
set ADPS[2:0] di register ADCSRA
– Memilih masukan analog MUX[4:0] di register
ADMUX
– Memilih sumber tegangan referensi REFS[1:0]
– Mengeset ADLAR
Inisialisasi ADC
//************************************************************* //InitADC: initialize analog-to-digital converter
//************************************************************* void InitADC( void)
{
ADMUX = 0; //Select channel 0
ADCSRA = 0xC3; //Enable ADC & start 1st dummy conversion
//Set ADC module prescalar to 8 critical for //accurate ADC results
while (!(ADCSRA & 0x10)); //Check if conversation is ready ADCSRA |= 0x10; //Clear conv rdy flag - set the bit
Pembacaan Data ADC
//************************************************************* //ReadADC: read analog voltage
//************************************************************* unsigned int ReadADC(unsigned char chan)
{
unsigned int result, hvoltage, lvoltage; //weighted binary voltage ADMUX = channel; //Select channel
ADCSRA |= 0x43; // Start conversion, Set ADC module
// prescalar to 8 critical for accurate results while (!(ADCSRA & 0x10)); //Check if converstion is ready ADCSRA |= 0x10; //Clear Conv rdy flag – set the bit
hvoltage = ADCL;
lvoltage = (ADCH << 8); result = hvoltage | lvoltage; return result;
Digital Termometer
● Sensor Temperatur LM35 http://extremeelectroni cs.co.in/avr- tutorials/interfacing- temperature-sensor-lm35/Antarmuka Accelerometer 3 Sumbu
● ATMega32 + Accelerometer mma7260 + LCD
http://extremeelectronics.co.in/avr-tutorials/interfacing-mma7260-triple-axis-accelerometer-with-atmega32-avr-tutorial/
● http://extremeelectronics.c o.in/tools/visualize-adc- data-on-pc-screen-using-usart-avr-project/