Document

advertisement
Kuliah Mikrokontroler
AVR
Contoh Comparator, ADC, DAC
AVR
Eru©September 2009
PENS
Bagian-bagian ADC
Sampling and Hold (S/H)
Frekuensi/Time Sampling
Referensi
Multiplexer Analog
SAR ADC
SOC (ADSC)
EOC (ADIF)
Beberapa Teknik Pengukuran
Pooling
Interupsi EOC (ADIF)
Free Running
Auto Scanning
– Multi Channel
Time Sampling
Pooling
Tidak bergantung dengan sampling
tertentu
Interupsi EOC (ADIF)
Jika tidak ingin kehilangan waktu
sedikitpun untuk menunggu sampai ADC
selesai melakukan konversi
Tidak ada gunanya dalam sistem, single
task
Free Running
Jika tidak ingin direpotkan dengan aktifitas
SOC dan EOC
Biasanya berpasangan dengan interupsi
SOC awal dilakukan secara manual
– ADSC  1
SOC berikutnya otomatis dilakukan saat
EOC (ADIF)
– Raising edge dari sinyal ADIF (EOC) akan
men-trigger SOC kembali
Auto Scanning
Jika tidak ingin diributkan dengan membaca
satu-per-satu tegangan tiap channel
– Data akan tersimpan pada variable array
Multi Channel
– ADC menggunakan Multiplexer Analog untuk
memilih input tegangan yang akan dibaca
– Dalam keadaan tertentu, proses untuk
mengubah dari satu channel ke channel lainnya
bisa gagal
Artinya saat membaca suatu channel, ternyata yang
terbaca adalah channel sebelumnya
– Sebaiknya setiap channel dibaca dua kali
Time Sampling
Jika dikehendaki pembacaan ADC
dilakukan secara terus-menerus dan
periodik dengan interval waktu yang selalu
sama)
Misalkan
– Real-time Digital Control System
– Real-time Digital Sinyal Processing
Akurasi interval bervariasi tergantung
aplikasi yang ingin dibangun
Contoh Aplikasi
Volt Meter Sederhana
Alat Ukur Suhu
Pengukuran Multi-channel
Time-sampling
–
–
–
–
Sederhana
Interupsi
Presisi
Per Frame
Filter
Volt Meter Sederhana
Mengukur tegangan 1 Volt dc dengan
ketelitian 1 mV
Kecepatan pembacaan 500 ms
VRef
-
R1
ADC
Port
+
Program
Vin
R2
Clock
AVR ATmega16
LCD
Perancangan Volt Meter
VrefADC = 5 volt dc
VinADC = 5 volt dc
Vin = 1 volt  penguatan A = 5x
R1= 1K, R2 = 4K
Ketelitian = 1 mV  resolusi = 1V/1mV=1000
Resolusi ADC 2Log(1000)  10 bit
Perhitungan
Data ADC .Vref ADC Data ADC .5
Vin 

10
A.2
5.1024
Pemilihan Referensi
ARef pin
– Tegangan referensi dari sumber luar
– Nilai dapat disesuaikan dengan kebutuhan
AVCC pin
– Tegangan referensi dari VCC analog
Internal dengan Kapasitor pada ARef pin
– Tegangan 2,56 volt
– Harus ada kapasitor filter pada pin ARef
Semua secara manual
Agar lebih mudah
Program
Volt Meter
Alat Ukur Suhu
Buat alat ukur suhu menggunakan LM35
dengan batas pengukuran sekitar 60
derajat
– Catatan: LM35 memiliki ketelitian 3 °C,
sehingga meskipun resolusi ADC
ditingkatkan, tetapi ketelitian pembacaan
suhu tetap maksimal 3 °C.
Pengukuran Multi-channel
Usahakan untuk melakukan pembacaan
pada channel yang sama dua kali
– Sering terjadi, karena cepatnya proses
pembacaan ADC (karena clock terlalu tinggi),
pembacaan pada suatu channel akan salah.
Hal ini disebabkan MUX ADC ternyata masih
membaca channel sebelumnya.
Contoh Multi Channel
Umumnya …
Sebaiknya …
Free Running
ADATE = 1
ADTS = 0  Free Running  ADIF
Start pertama harus manual  ADSC=1
Start berikutnya saat ADIF = 1 (EOC)
Perhitungan sampling tergantung
kecepatan konversi dari ADC
Hanya efektif saat
– menggunakan interupsi
– Masalah waktu sampling tidak dipentingkan
Contoh Sistem Kontrol
Menggunakan Free Running
Timer/Counter 0
Sebagai Fast PWM
ADC Mode
Free Running
Dan Interupsi
ADSC (SOC)
Pertama manual
Sistem kontrol
tegangan
(motor) dengan
pembacaan
secara free
running
menggunakan
interupsi
Program utama
Dapat diisi lain-lain
Contoh Sistem
Kontrol
Menggunakan Free
Running
Rutin interupsi
ADIF
Baca tegangan dan
Hitung nilainya
Proses kontrol
Cara ini hanya
dapat
digunakan jika
program
pemroses
memiliki
kecepatan
lebih tinggi dari
kecepatan
konversi ADC
– Sampling ADC
harus lebih
rendah dari
proses
ADC
Menggunakan delay
Time-sampling: Sederhana
PWM
Tidak diperlukan
waktu sampling
yang akurat
Time-sampling:
Interupsi
Menggunakan timer
interupsi
Menggunakan Polling
Rutin read_adc()
Tidak ditampilkan
Lebih aman
Menggunakan timer interupsi
Time-sampling: Interupsi
Rutin read_adc()
Tidak ditampilkan
Harus diletakkan
Di atas interupsi timer
Awas !
Berbahaya kalau salah
Membuat program
(Hung/Macet/Dsb)
Time-sampling: Per Frame
Membaca beberapa sampling sekaligus
dan disimpan pada variable array
– Cara sederhana (dengan delay)
– Lebih presisi (dengan timer mode CTC)
Filter
Membuang variasi pembacaan, yang
dapat disebabkan oleh
– Noise
– Ketelitian/error ADC/device konversi/input lain
Download