Apakah ada pin analog output di Arduino? Ada Arduino yang memiliki analog output sesungguhnya, ada yang tidak. Analog output yang sesungguhnya menggunakan DAC (Digital to Analog Converter). Pada Arduino yang tidak ada DAC, analog output dapat ditiru menggunakan output PWM (Pulse Width Modulation) / Modulasi Lebar Pulsa.
Apa bedanya sinyal output dari DAC dan dari PWM? Sinyal DAC berupa tegangan tertentu yang dapat diatur tegangannya sesuai dengan parameter yang diberikan. Sinyal PWM berupa tegangan HIGH (biasanya 5 volt) dan LOW (0 volt), dengan perbandingan antara HIGH dan LOW mengikuti suatu perbandingan tertentu.
Berikut ini contoh sinyal PWM
Arduino yang memiliki DAC adalah di antaranya sebagai berikut:
Suatu sistem filter digital secara prinsip sederhana mengubah sinyal analog menjadi digital, kemudian mengolah sinyal digital tersebut dengan algoritma tertentu, kemudian mengubah sinyal digital kembali menjadi sinyal analog. Secara diagram blok dapat digambarkan sebagai berikut:
Sistem filter digital
Filter digital dapat diimplementasikan dengan beberapa cara, di antaranya dengan sistem mikroprosesor dan sistem digital seperti FPGA (Filed Programmable Gate Array).
Dalam prakteknya, sistem tersebut perlu beberapa tambahan subsistem/modul supaya dapat diimplementasikan secara nyata.
Berikut ini sistem lengkap filter digital untuk diimplementasikan dengan sistem mikroprosesor:
Detail sistem filter digital versi 1
Penjelasan Sistem Filter Digital Sederhana
Input: sinyal input berasal dari input, misal untuk sistem audio dapat berupa mikrofon, atau MP3 player, atau komputer.
Sinyal input ini memiliki level tegangan dan impedansi tertentu. Seringkali sinyal ini perlu diperkuat dulu. Misal mikrofon biasanya memiliki kuat sinyal puluhan sampai ratusan milivolt dengan impedansi ratusan ohm.
Penguat: Penguat memiliki fungsi buffering dan juga menyesuaikan amplitudo supaya cocok dengan amplitudo dari ADC yang dipakai.
Pengubah Level Tegangan: tegangan input berupa tegangan bolak-balik, bisa saja memiliki tegangan positif dan negatif. ADC yang dipakai seringkali hanya dapat menerima tegangan positif, sehingga tegangan input mesti digeser agar menjadi positif.
Low Pass Filter (anti aliasing): sesuai teori sinyal, frekuensi sampling setidaknya memiliki frekuensi 2x frekuensi kerja sinyal yang diukur. Sinyal input yang lebih dari 1/2 frekuensi sampling harus ditapis supaya tidak terjadi aliasing.
ADC (Analog to Digital Converter): mengubah tegangan analog menjadi suatu angka digital, dengan resolusi bit tertentu, dan kecepatan sampling tertentu.
Filter Digital: melakukan proses pengolahan sinyal yang diinginkan, dapat berupa LPF (low pass filter) , HPF (high pass filter), BPF (band pass filter), BSF (band stop filter) ataupun Equalizer.
Digital to Analog Converter: mengubah sinyal digital menjadi sinyal analog. Umumnya menggunakan prinsip ZoH (Zero order Hold).
Reconstruction Filter: sinyal dari Zero order Hold memiliki bentuk seperti anak tangga (staircase), sehingga memiliki komponen frekuensi tinggi. Untuk itu perlu ada filter rekonstruksi yang menghilangkan komponen frekuensi tinggi tersebut. Selain itu ZoH juga mengubah respon frekuensi, yaitu memberi redaman di frekuensi tinggi. Idealnya reconstruction filter juga mengkompensasi hal tersebut.
Penguat: untuk menyesuaikan level tegangan dan impedansi dari DAC ke tahap selanjutnya
Power supply: implisit semua sistem elektronika perlu power supply. Sistem pengolah digital ada bagian analog dan digital, sehingga masing-masing perlu level tegangan dan power supply tersendiri.
Kelemahan Sistem Filter Digital Sederhana
Sistem di atas sudah dapat berfungsi dengan baik, namun memiliki beberapa kelemahan.
Masalah pertama: konversi analog ke digital
filter anti aliasing sulit untuk dibuat ‘tajam’, sehingga frekuensi sampling mesti jauh lebih tinggi daripada frekuensi kerja sinyal. Jika frekuensi sampling terlalu dekat, respon frekuensi kerja terpengaruh oleh anti aliasing filter, atau juga sebagian sinyal frekuensi tinggi dapat menembus filter anti aliasing.
akibat frekuensi sampling tinggi, maka bagian filter digital mesti bekerja pada frekuensi lebih tinggi daripada frekuensi kerja sinyal.
hal ini juga berpengaruh jika sinyal perlu disimpan: storage akan membesar
hal ini juga berpengaruh jika sinyal perlu dikirim: keperluan bandwidth komunikasi membesar.
solusi: sampling dilakukan dengan frekuensi tinggi, namun frekuensi sampling diturunkan (downsampling) sebelum sinyal diolah/dikirim/disimpan.
pada proses downsampling, sinyal perlu difilter secara digital supaya tidak terjadi aliasing. proses filter digital lebih mudah dibandingkan filter analog, terutama karena masalah ketelitian nilai komponen analog.
Masalah kedua: konversi digital ke analog
Zero order Hold pada DAC mempunyai respon frekuensi sinc(), sehingga ada redaman di frekuensi tinggi
solusi 1: sinyal digital diubah ke frekuensi tinggi sebelum masuk ke DAC, dengan demikian pengaruh redaman frekuensi tinggi berkurang.
solusi 2: sinyal digital diperkuat dulu di frekuensi tinggi dengan equalizer, supaya dapat mengkompensasi redaman di frekuensi tinggi.
Berikut ini proses ekualisasi sinyal untuk kompensasi pengaruh ZoH.
Ekualisasi sinyal digital to analog
Pada solusi (a) proses ekualisasi dilakukan secara digital sebelum DAC , disebut sebagai tahap pre-equalization.
Pada solusi (b) proses ekualisasi dilakukan secara analog setelah LPF, disebut sebagai tahap post-equalization.
Sistem Lengkap
Berikut ini blok diagram sistem filter digital dengan tambahan solusi-solusi supaya mengurangi permasalahan-permasalahan.
Sistem filter digital lengkap versi 2
Pada sistem ini dipilih pre-ekualisasi secara digital , dengan pertimbangan merancang equalizer secara digital lebih mudah. Proses pembuatan equalizer ini dapat dilakukan dengan metode ‘Design of FIR Filters Using the Frequency Sampling Method’.
Suatu sinyal analog dapat diubah menjadi digital dan sebaliknya. Teknik ini memiliki beberapa manfaat. Pada tulisan ini hanya dibahas contoh aplikasi yang bersifat LTI (Linear Time Invariant).
Berikut ini contoh beberapa sistem yang di dalamnya terdapat sinyal analog dan sinyal digital:
undersampling / decimation pada pengolahan sinyal digital
Filter Digital
Sistem filter digital dengan input analog dan output digital
Pada sistem ini sinyal analog diubah dulu menjadi digital, untuk kemudian dilakukan proses filtering (tapisan) secara digital. Setelah itu sinyal tersebut dikembalikan menjadi sinyal analog.
Jenis tapisan yang umum:
LPF: low pass filter
HPF: high pass filter
BPF: band pass filter
BSF: band stop filter
Proses tapisan (filter) dapat dilakukan di domain analog, namun dalam beberapa kasus terdapat kelebihan pada filter digital, sehingga lebih baik jika proses tapisan dilakuan di domain digital.
Equalizer Digital
Sistem equalizer digital dengan input analog dan output analog
Pada sistem ini sinyal analog diubah dulu menjadi digital, untuk kemudian dilakukan proses ekualisasi secara digital. Setelah itu sinyal tersebut dikembalikan menjadi sinyal analog.
Proses ekualisasi adalah proses mengubah komposisi frekuensi pada suatu sinyal (wikipedia)
Perekam Digital Dengan Input Output Analog
Sistem perekam digital
Pada sistem ini sinyal analog diubah dulu menjadi digital, untuk kemudian disimpan di suatu media. Setelah itu sinyal yang telah disimpan dapat dibaca dan dikeluarkan pada waktu lain. Setelah itu sinyal tersebut dikembalikan menjadi sinyal analog.
Sistem Komunikasi Digital Dengan Input Output Analog
Sistem komunikasi digital
Pada sistem ini sinyal analog diubah dulu menjadi digital, untuk kemudian dikirim oleh pemancar melalui suatu media komunikasi . Di penerima sinyal diubah lagi menjadi sinyal digital.. Setelah itu sinyal tersebut dikembalikan menjadi sinyal analog.
Komunikasi digital memiliki beberapa kelebihan dibandingkan komunikasi analog.
Tahap-tahap simulasi pengolahan sinyal digital dengan LTSpice, dan compiler C
Dokumen ini fokus pada menunjukkan terjadinya proses di setiap tahap dan integrasi proses-proses tersebut, tidak membahas optimasi sistem ataupun subsistem.
Persiapan
install LTSpice
install JDK untuk Netbeans 8.2
Install Netbeans 8.2 untuk IDE compiler C
Install Cygwin dan compiler gcc di Cygwin
Install Python 3.x
Install library SciPy untuk melakukan konversi file WAV
Install Arduino IDE untuk kompilasi kode ATmega328
Proses aliran sinyal pada pengolahan sinyal digital lengkap adalah sebagai berikut (sumber):
Berikut ini diagram sinyal yang akan disimulasikan
Tahap simulasi ringkas:
Input AC dan rangkaian analog disimulasikan dengan LTSPice
Kuantisasi di ADC disimulasikan dengan program C
Filter digital disimulasikan dengan program bahasa C
DAC disimulasikan dengan program bahasa C
Reconstruction filter disimulasikan dengan LTSpice
Simulasi
ini hanya untuk menunjukkan kerangka kerja untuk melakukan simulasi
filter digital, maka dilakukan penyederhanaan sebagai berikut
Filter
anti aliasing menggunakan filter RC orde 1, tanpa menghitung nilai
frekuensi cut-offnya. Dalam tugas mesti diperhatikan frekuensi cut off,
orde filter dan jenis filter
Filter rekonstruksi menggunakan filter RC orde 1, tanpa menghitung nilai frekuensi cut-offnya.
Filter digital menggunakan moving average dengan 3 angka. Seharusnya menggunakan LPF,HPF BPF, BSF sesuai keperluan.
Hanya
menghitung respon pada 1 frekuensi. Seharusnya diukur respon pada
beberapa frekuensi untuk mendapatkan kurva respon frekunsi / Bode plot.
Output
WAV di LTSpice memiliki keterbatasan yaitu hanya mempunyai level
tegangan -1 volt sampai +1 volt, sehingga untuk subsistem yang memiliki
input/output melebihi rentang tersebut mesti dilakukan penyesuaian, atau
simulasi dilakukan hanya pada rentang -1 sampai +1 volt.
Tahap Simulasi Secara Detail
Simulasi di Komputer Desktop
Buat simulasi rangkaian analog bagian depan meliputi sumber tegangan
AC, LPF, level shift, penguat dan sebagainya. Output blok ini akan masuk
ke ADC, jadi seharusnya level tegangannya sudah sesuai dengan level
tegangan input ADC. ATmega328 dapat diatur referensinya di 2,56 volt
atau VCC. Dalam prakteknya, VCC kurang stabil, lebih baik pakai
referensi internal atau eksternal.
16 : bitrate jumlah bit, berapa saja karena nanti akan dipotong pada waktu kuantisasi
10000 : frekuensi sampling 10 kHz
VIN : nama label yang dijadikan winyal WAV (kanal 1)
OUTPUT : nama label yang dijadikan sinyal WAV (kanal 2)
Sampling rate disamakan dengan frekuensi sampling dari software (misal 10 kHz)
Bitrate pakai yang besar saja (misal 16 bit), nanti dapat dibulatkan di program C. Realitasnya adalah nanti dibulatkan sesuai dengan jumlah bit pada ADC (10 bit pada ATmega328)
Berikut tampilan V(vin) dan V(output). NampakV(output) teredam sedikit dan bergeser fase sedikit.
Seharusnya sinyal V(output) sudah dalam batas tegangan 0 sampai VREF.
Sinyal V(output) di atas belum cocok untuk dimasukkan ke ADC karena ADC
pada ATmega328 hanya menerima sinyal dengan tegangan 0 volt sampai
VREF.
Simulasi pada LTSPice di atas menghasilkan output time series dalam format WAV.
Periksai sinyal output pada file WAV dengan program yang dapat menampilkan file WAV (misal Audacity https://www.audacityteam.org/) , pastikan bahwa sinyal WAV yang dihasilkan ‘masuk akal’.
Berikut contoh tampilan file WAV (anti-aliasing-out.wav) dengan Audacity:
Selanjutnya file WAV diubah menjadi CSV supaya mudah dibaca oleh program simulator filter. Kalau ada librarynya, bisa juga file WAV langsung dibaca dengan program simulator filter.
Contoh converter: https://github.com/Lukious/wav-to-csv , diubah sedikit menjadi script wav2csv.py di repository. Install python, scipy dan panda untuk dapat menjalankan wav2csv.py
File anti-aliasing-out.wav diubah menjadi anti-aliasing-out.csv
Cek isi file CSV, bisa dilihat dengan Excel untuk melihat apakah hasilnya sesuai.
Berikut contoh file CSV dilihat di Excel: (anti-aliasing-out.xlsx)
Selanjutnya jalankan program simulator filter digital
(simulasi-filter/main.c) . Program ini membaca file CSV, kemudian data
time series dimasukkan ke fungsi filter_moving_average. Output ditulis
ke sebuah text file dalam format CSV (“simulasi-filter.csv”).
ADC
disimulasikan dengan melakukan kuantisasi sinyal LPF_OUT sejumlah
resolusi ADC yang dipakai. ATmega328 mempunyai resolusi 10 bit, sehingga
sinyal LPF_OUT mesti dikuantisasi menjadi angka 0 sampai 1023 (1024
tingkat).
Untuk
memastikan, dapat dibandingkan antara sinyal output dari generator
sinyal, sinyal masuk ke ADC, dan sinyal hasil filter digital.
Berikut grafik VIN, LPF_OUT dan FILTER_OUT (simulasi-filter.xlsx)
Tahap selanjutnya adalah membuat sinyal output DAC dalam format WAV dan kemudian simulasi reconstruction filter dengan LTSpice.
Output DAC adalah dalam bentuk zeroth order hold, contohnya seperti berikut ini: (sumber)
Untuk menghasilkan sinyal zeroth order hold, perlu dilakukan hal berikut
melakukan
kuantisasi output sesuai dengan resolusi DAC yang dipakai. Pada sistem
ini digunakan DAC MCP4725 mempunyai resolusi 12 bit. Jika dipakai ESP32,
maka mesti menggunakan resolusi 8 bit.
menaikkan sampling rate,
untuk simulasi terjadinya sinya berbentuk anak tangga (staircase).
Misal dengan menaikkan jadi 10x sinyal sampling saat ini menjadi 100
kHz.