Saya sedang mencari-cari ide rangkaian untuk membuat filter analog yang frekuensi cut-off nya dapat diprogram secara digital. Tujuannya jangka pendek adalah untuk filter anti aliasing dan reconstruction filter untuk suatu pengolahan sinyal digital.
Beberapa artikel berisi ide yang sudah didapat:
Ide rangkaian dari “Application Note 269 Circuit Applications of Multiplying CMOS D to A Converters”
Ide rangkaian dari Application Note: “Application Ideas for Multiplying DAC’s Digital Controlled Gain is Useful in Filter Circuits”
Ide dari “”A Digitally Controllable Lowpass Filter Using a Digital Potentiometer”
Rangkaian ini berisi 2 buah potensiometer digital (MCP42100) , opamp MCP601 (single supply, rail to rail). Konfigurasi filter yang dipakai adalah Sallen-key orde 2, low-pass filter.
Pada tulisan ini diuraikan cara kerja rangkaian penggerak relay dengan transistor NPN.
Contoh rangkaian penggerak relay dengan transistor NPN adalah sebagai berikut:
Rangkaian penggerak relay dengan transistor NPN
Komponen utama rangkaian adalah transistor NPN tipe BC337
Input rangkaian adalah terminal dengan tanda OUT, yang merupakan output dari mikroprosesor seperti Arduino. Tegangan input rangkaian ini diasumsikan 0 volt (untuk logika LOW) dan 5 volt ( untuk logika HIGH)
Tegangan supply relay diasumsikan 5 volt DC.
Tipe relay diasumsikan adalah JQC-3F
Emitter pada transistor terhubung ke GND
Cara Kerja Rangkaian
Jika pin OUT berada pada tegangan rendah (LOW) atau 0 volt, maka transistor akan berada pada keadaan OFF, jadi tidak ada arus mengalir antara kolektor (C) dan emiter (E). Dengan demikian maka kumparan relay tidak mendapat arus. Maka kontak pada relay akan berada pada kondisi normalnya.
Jka pin OUT berapa pada tegangan tinggi (HIGH) atau 5 volt, maka transistor akan berada pada keadaan ON/saturasi. Transistor bertindak sebagai sakelar yang sedang ON. Pin kolektor dan emitter dapat dianggap terhubung dengan resistansi yang sangat rendah. Arus akan mengalir dari supply 5V, melalui kumparan relay, kemudian masuk ke terminal kolektor (C) pada transistor, dan keluar di terminal emitter (E) pada transistor, kemudian masuk ke GND.
Fungsi dioda 1N4007 adalah untuk pada waktu transistor dimatikan. Pada waktu transistor dimatikan, masih ada energi yang tersimpan sebagai medan magnet di dalam kumparan relay. Energi ini berusaha mempertahankan arus pada kumparan. Jika tidak ada dioda, maka arus ini akan memaksa untuk mengalir melalui transistor, sehingga dapat merusak transistor. Dengan adanya dioda, arus ini akan mengalir melalui dioda, sehingga energi yang tersimpan pada kumparan relay dapat dibuang pada dioda tersebut.
Perhitungan Arus dan Tegangan
Pada waktu pin OUT pada tegangan rendah, maka praktis tidak ada arus mengalir pada transistor. Sebenarnya ada, namun kecil sekali sehingga dapat diabaikan.
Pada waktu pin OUT pada tegangan tinggi (5 volt), maka akan ada arus mengalir melalui basis transistor. Tegangan antara basis dan emiter transistor antara 0,6 volt sampai dengan 1,2 volt, tergantung tegangan antara terminal C dan E.
Arus pada relay diasumsikan sekitar 70 mA
Tegangan Vbe pada kondisi itu dapat dilihat pada gambar berikut ini. Ambil kurva Vbe(sat)
Penguatan arus transistro BC337 sekitar 100 sampai 630. Untuk aplikasi ini dianggap penguatan arus = 100
Arus pada kolektor (Ic) adalah:
Ic=Ib x hfe = 2 mA x 100 = 200 mA
Besar arus pada Ic maksimum adalah 200 mA , namun bisa kurang dari 200 mA jika transistor dalam keadaan saturasi. Untuk itu mesti melihat perilaku kumparan relay.
Tegangan Vce saturasi dapat dilihat pada grafik berikut ini:
BC337-saturasi
Tegangan Vce saturasi adalah sekitar 0,2 volt
Tegangan nominal relay adalah 5 volt . Daya pada kumparan relay adalah 0.36 watt. Maka resistansi kumparan relay adalah:
Pengolahan sinyal digital dapat diimplementasikan dengan mikroprosesor. Berikut ini blok diagram pengolahan sinyal digital minimalis:
Komponen Sistem
Pengkondisi sinyal
Anti aliasing filter
ADC (Analog to Digital Converter)
Mikroprosesor
DAC (Digital to Analog Converter)
Filter rekonstruksi (reconstruction filter)
Catu daya untuk rangkaian analog
Catu daya untuk rangkaian digital
Cara kerja sistem
sinyal analog masuk ke pengkondisi sinyal.
Pengkondisi sinyal memperkuat atau memperlemah sinyal agar tegangannya sesuai dengan tegangan masukan Anti Aliasing Filter (AAF). AAF biasanya penguatannya 1, sehingga tegangan ini sesuai juga dengan tegangan masukan pada ADC (Analog to Digital Converter). Pengkondisi sinyal juga dapat menambah atau mengurangi tegangan sesuai keperluan.
Anti aliasing filter (AAF) menghillangkan sinyal frekuensi tinggi untuk mencegah terjadinya aliasing pada proses sampling
ADC (Analog to Digital Converter) mengubah tegangan analog menjadi angka digital dengan jumlah bit tertentu.
Mikroprosesor mengendalikan ADC dan DAC. Data dari ADC diterima oleh mikroprosesor. Proses pengolahan sinyal digital dilakukan di mikroprosesor. Proses perhitungan sinyal mesti dilakukan dengan kecepatan pencuplikan (sampling) tertentu, tidak terlalu cepat dan juga tidak terlalu lambat. Untuk membuat frekuensi pencuplikan yang konstan, umumnya dapat menggunakan interupsi timer pada mikroprosesor, atau dapat juga menggunakan Real Time Operating System (RTOS).
Mikroprosesor mengirimkan sinyal dalam bentuk angka digital ke DAC.
DAC (Digital to Analog Converter) mengubah sinyal digital menjadi sinyal analog. Sinyal ini masih berbentuk anak tangga.
Filter rekonstruksi (reconstruction Filter) mengubah sinyal analog yang berbentuk anak tangga dari DAC menjadi sinyal analog yang lebih mulus. Proses pengubahan digital ke analog mempunyai efek samping mengubah respon frekuensi sinyal. Ada sinyal frekuensi tertentu yang diperlemah, ada frekuensi tertentu yang diperkuat. Untuk mengembalikan respon frekuensi ini menjadi datar, maka diperlukan filter rekonstruksi dengan respon frekuensi tertentu. Filter rekonstruksi ini bertindak sebagai equalizer.
Output analog diambil dari output filter rekonstruksi
Catu daya (power supply) bertugas menyediakan daya dengan tegangan konstan sesuai keperluan. Umumnya dipisahkan antara catu daya rangkaian analog dan rangkaian digital, supaya noise dari rangkaian digital tidak mengganggu rangkaian analog.
Pada percobaan ini dilakukan pengukuran kadar gas CO2 (karbon dioksida) di udara dengan sensor CCS811.
Mikrokontroler yang digunakan adalah modul ESP32 Lolin32 Lite
Modul CJMCU-811 tidak dilengkapi sensor temperatur & kelembaban, sehingga perlu tambahan sensor BME280.
Kompensasi temperatur dan kelembaban untuk sensor CCS811 menggunakan sensor BME280
Berikut ini foto perangkat keras yang digunakan
Berikut ini rangkaian sistem mikroprosesornya
Berikut ini source code program yang dipakai (dengan Arduino)
// https://bitbucket.org/christandlg/bmx280mi/src/master/examples/BMx280_I2C/BMx280_I2C.ino
// BMx280_I2C.ino
//
// shows how to use the BMP280 / BMx280 library with the sensor connected using I2C.
//
// Copyright (c) 2018 Gregor Christandl
//
// connect the AS3935 to the Arduino like this:
//
// Arduino - BMP280 / BME280
// 3.3V ---- VCC
// GND ----- GND
// SDA ----- SDA
// SCL ----- SCL
// some BMP280/BME280 modules break out the CSB and SDO pins as well:
// 5V ------ CSB (enables the I2C interface)
// GND ----- SDO (I2C Address 0x76)
// 5V ------ SDO (I2C Address 0x77)
// other pins can be left unconnected.
// https://github.com/adafruit/Adafruit_CCS811
// https://github.com/adafruit/Adafruit_CCS811/blob/master/examples/CCS811_test/CCS811_test.ino
#include "Adafruit_CCS811.h"
Adafruit_CCS811 ccs;
#include <Arduino.h>
#include <Wire.h>
#define I2C_SDA 15
#define I2C_SCL 13
#include <BMx280I2C.h>
#define I2C_ADDRESS 0x76
//create a BMx280I2C object using the I2C interface with I2C Address 0x76
BMx280I2C bmx280(I2C_ADDRESS);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(1000);
//wait for serial connection to open (only necessary on some boards)
while (!Serial);
// Wire.begin();
Wire.begin(I2C_SDA, I2C_SCL);
I2C_Scan() ; // just for verifying
// check CCS811
Serial.println("CCS811 test");
if (!ccs.begin()) {
Serial.println("Failed to start sensor! Please check your wiring.");
while (1);
} else {
Serial.println("CCS811 ready");
}
//begin() checks the Interface, reads the sensor ID (to differentiate between BMP280 and BME280)
//and reads compensation parameters.
if (!bmx280.begin())
{
Serial.println("begin() failed. check your BMx280 Interface and I2C Address.");
while (1);
}
if (bmx280.isBME280())
Serial.println("sensor is a BME280");
else
Serial.println("sensor is a BMP280");
//reset sensor to default parameters.
bmx280.resetToDefaults();
//by default sensing is disabled and must be enabled by setting a non-zero
//oversampling setting.
//set an oversampling setting for pressure and temperature measurements.
bmx280.writeOversamplingPressure(BMx280MI::OSRS_P_x16);
bmx280.writeOversamplingTemperature(BMx280MI::OSRS_T_x16);
//if sensor is a BME280, set an oversampling setting for humidity measurements.
if (bmx280.isBME280())
bmx280.writeOversamplingHumidity(BMx280MI::OSRS_H_x16);
}
void loop() {
float temperature = 0;
float pressure = 0;
float humidity = 60; // default humidity
float co2 = 0;
float tvoc = 0;
delay(1000);
//start a measurement
if (!bmx280.measure())
{
Serial.println("could not start measurement, is a measurement already running?");
return;
}
//wait for the measurement to finish
do
{
delay(100);
} while (!bmx280.hasValue());
// Serial.print("Pressure: "); Serial.println(bmx280.getPressure());
// Serial.print("Pressure (64 bit): "); Serial.println(bmx280.getPressure64());
// Serial.print("Temperature: "); Serial.println(bmx280.getTemperature());
pressure = bmx280.getPressure();
temperature = bmx280.getTemperature();
//important: measurement data is read from the sensor in function hasValue() only.
//make sure to call get*() functions only after hasValue() has returned true.
if (bmx280.isBME280())
{
// Serial.print("Humidity: ");
// Serial.println(bmx280.getHumidity());
humidity = bmx280.getHumidity();
}
ccs.setEnvironmentalData( humidity, temperature );
if (ccs.available()) {
if (!ccs.readData()) {
// Serial.print("CO2: ");
//Serial.print(ccs.geteCO2());
//Serial.print("ppm, TVOC: ");
//Serial.println(ccs.getTVOC());
co2 = ccs.geteCO2();
tvoc = ccs.getTVOC();
}
}
Serial.print("Temp\t");
Serial.print(temperature);
Serial.print("\t");
Serial.print("Humidity\t");
Serial.print(humidity);
Serial.print("\t");
Serial.print("Pressure\t");
Serial.print(pressure);
Serial.print("\t");
Serial.print("CO2\t");
Serial.print(co2);
Serial.print("\t");
Serial.print("TVOC\t");
Serial.print(tvoc);
Serial.println("");
}
void I2C_Scan() {
byte error, address;
int nDevices;
Serial.println("I2C Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address < 16) {
Serial.print("0");
}
Serial.println(address, HEX);
nDevices++;
}
else if (error == 4) {
Serial.print("Unknow error at address 0x");
if (address < 16) {
Serial.print("0");
}
Serial.println(address, HEX);
}
}
if (nDevices == 0) {
Serial.println("No I2C devices found\n");
}
else {
Serial.println("done\n");
}
}
Berikut ini software versi lain
// pengukuran CO2, tanpa wifi
// https://bitbucket.org/christandlg/bmx280mi/src/master/examples/BMx280_I2C/BMx280_I2C.ino
// BMx280_I2C.ino
//
// shows how to use the BMP280 / BMx280 library with the sensor connected using I2C.
//
// Copyright (c) 2018 Gregor Christandl
//
// connect the AS3935 to the Arduino like this:
//
// Arduino - BMP280 / BME280
// 3.3V ---- VCC
// GND ----- GND
// SDA ----- SDA
// SCL ----- SCL
// some BMP280/BME280 modules break out the CSB and SDO pins as well:
// 5V ------ CSB (enables the I2C interface)
// GND ----- SDO (I2C Address 0x76)
// 5V ------ SDO (I2C Address 0x77)
// other pins can be left unconnected.
// https://github.com/adafruit/Adafruit_CCS811
// https://github.com/adafruit/Adafruit_CCS811/blob/master/examples/CCS811_test/CCS811_test.ino
#include "Adafruit_CCS811.h"
Adafruit_CCS811 ccs;
#include <Arduino.h>
#include <Wire.h>
#include <BMx280I2C.h>
#include "ClosedCube_HDC1080.h"
#define I2C_SDA 15
#define I2C_SCL 13
#define I2C_ADDRESS 0x76
#define LED_ONBOARD 22
const char *ssid = "First";
const char *password = "satu2345";
//create a BMx280I2C object using the I2C interface with I2C Address 0x76
BMx280I2C bmx280(I2C_ADDRESS);
ClosedCube_HDC1080 hdc1080;
char mac_str[20];
byte mac_byte[6];
void setup() {
pinMode(LED_ONBOARD, OUTPUT);
// put your setup code here, to run once:
Serial.begin(9600);
delay(1000);
//wait for serial connection to open (only necessary on some boards)
while (!Serial);
// Wire.begin();
Wire.begin(I2C_SDA, I2C_SCL);
I2C_Scan() ; // just for verifying
// check CCS811
Serial.println("CCS811 test");
if (!ccs.begin()) {
Serial.println("Failed to start sensor! Please check your wiring.");
while (1);
} else {
Serial.println("CCS811 ready");
}
SetupBME280();
SetupHDC1080();
}
void SetupBME280() {
//begin() checks the Interface, reads the sensor ID (to differentiate between BMP280 and BME280)
//and reads compensation parameters.
if (!bmx280.begin())
{
Serial.println("begin() failed. check your BMx280 Interface and I2C Address.");
while (1);
}
if (bmx280.isBME280())
Serial.println("sensor is a BME280");
else
Serial.println("sensor is a BMP280");
//reset sensor to default parameters.
bmx280.resetToDefaults();
//by default sensing is disabled and must be enabled by setting a non-zero
//oversampling setting.
//set an oversampling setting for pressure and temperature measurements.
bmx280.writeOversamplingPressure(BMx280MI::OSRS_P_x16);
bmx280.writeOversamplingTemperature(BMx280MI::OSRS_T_x16);
//if sensor is a BME280, set an oversampling setting for humidity measurements.
if (bmx280.isBME280())
bmx280.writeOversamplingHumidity(BMx280MI::OSRS_H_x16);
}
void SetupHDC1080() {
hdc1080.begin(0x40);
Serial.println("HDC1080");
Serial.print("Manufacturer ID=0x");
Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas Instruments
Serial.print("Device ID=0x");
Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 ID of the device
hdc1080.setResolution(HDC1080_RESOLUTION_11BIT, HDC1080_RESOLUTION_11BIT);
}
void loop() {
float temperature = 0;
float pressure = 0;
float humidity = 60; // default humidity
float co2 = 0;
float tvoc = 0;
if (1) {
//start a measurement
if (!bmx280.measure())
{
Serial.println("could not start measurement, is a measurement already running?");
}
do
{
delay(100);
} while (!bmx280.hasValue());
pressure = bmx280.getPressure();
temperature = bmx280.getTemperature();
//important: measurement data is read from the sensor in function hasValue() only.
//make sure to call get*() functions only after hasValue() has returned true.
if (bmx280.isBME280())
{
humidity = bmx280.getHumidity();
}
}
ccs.setEnvironmentalData( humidity, temperature ); // kompensasi humidity & temperature
if (ccs.available()) {
if (!ccs.readData()) {
// Serial.print("CO2: ");
//Serial.print(ccs.geteCO2());
//Serial.print("ppm, TVOC: ");
//Serial.println(ccs.getTVOC());
co2 = ccs.geteCO2();
tvoc = ccs.getTVOC();
}
}
Serial.print("Temp\t");
Serial.print(temperature);
Serial.print("\t");
Serial.print("Humidity\t");
Serial.print(humidity);
Serial.print("\t");
Serial.print("Pressure\t");
Serial.print(pressure);
Serial.print("\t");
Serial.print("CO2\t");
Serial.print(co2);
Serial.print("\t");
Serial.print("TVOC\t");
Serial.print(tvoc);
Serial.println("");
delay(500);
digitalWrite(LED_ONBOARD, HIGH);
delay(500);
digitalWrite(LED_ONBOARD, LOW);
}
void I2C_Scan() {
byte error, address;
int nDevices;
Serial.println("I2C Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address < 16) {
Serial.print("0");
}
Serial.println(address, HEX);
nDevices++;
}
else if (error == 4) {
Serial.print("Unknow error at address 0x");
if (address < 16) {
Serial.print("0");
}
Serial.println(address, HEX);
}
}
if (nDevices == 0) {
Serial.println("No I2C devices found\n");
}
else {
Serial.println("done\n");
}
}
Berikut ini contoh tampilan outputnya
13:08:18.861 -> I2C Scanning...
13:08:18.861 -> I2C device found at address 0x5A
13:08:18.896 -> I2C device found at address 0x76
13:08:18.931 -> done
13:08:18.931 ->
13:08:18.931 -> CCS811 test
13:08:19.101 -> CCS811 ready
13:08:19.101 -> sensor is a BME280
13:08:19.135 -> HDC1080
13:08:19.135 -> Manufacturer ID=0xFFFF
13:08:19.135 -> Device ID=0xFFFF
13:08:19.239 -> Temp 30.83 Humidity 50.10 Pressure 87156.00 CO2 0.00 TVOC 0.00
13:08:20.368 -> Temp 30.83 Humidity 50.29 Pressure 91715.00 CO2 0.00 TVOC 0.00
13:08:21.464 -> Temp 30.84 Humidity 50.37 Pressure 91714.00 CO2 0.00 TVOC 0.00
Berikut ini ide penguat daya untuk menggerakkan motor DC dengan sinyal analog
TDA2050 dikonfigurasikan sebagai buffer op amp. Tegangan input akan sama dengan tegangan output, hanya arusnya saja yang diperkuat.
TDA2050 ini normalnya dipakai untuk penguat audio. Namun bandwidthnya cukup untuk motor, motor DC perlu sinyal frekuensi 0 Hz (DC) sampai beberapa puluh Hz saja.
TDA2050 akan menjadi panas, sehingga perlu dipasang di heatsink.
Berikut ini ide rangkaian driver motor DC dengan menggunakan IC TDA2050
TDA2050 sejatinya adalah penguat kelas AB untuk aplikasi audio. Komponen yang lebih tepat untuk driver motor DC misalnya adalah L293, DRV8833 dan TB6612FNG.
Cara kerja
Tegangan PWM dari mikroprosesor. HIGH = 5 volt, LOW = 0 volt.
Tegangan 2,5 volt fungsinya sebagai referensi setengah tegangan Vcc digital. Jika menggunakan PWM dengan tegangan 3 volt, maka tegangan 2,5 volt perlu diganti dengan 1,5 volt.
Jika tegangan PWM = 5 volt, maka tegangan ini akan dibandingkan oleh TDA2050 dengan input inverting (2,5 volt). Output akan saturasi mendekati V+, yaitu 5 volt.
Jika tegangan PWM = 0 volt, maka tegangan ini akan dibandingkan oleh TDA2050 dengan input inverting (2,5 volt). Output akan saturasi mendekati V-, yaitu -5 volt.
Dioda 1N5401 fungsinya melindungi TDA2050 dari arus balik motor. Motor menggunakan arus 3 ampere, sehingga perlu menggunakan 1N5401 yang punya rating arus 3 ampere. 1N4001 memiliki rating arus kontiyu 1 ampere. 1N4001 mungkin bisa dipakai juga, asal arus balik tidak terlalu lama. Kalau mau aman, langsung saja pakai 1N5401. Jika tidak ada 1N5401 bisa diganti dengan yang rating arusnya mirip, seperti 1N5402 sampai 1N5408.
Perhatian
TDA2050 dirancang untuk penguat audio amplifier, bukan untuk motor driver. Beberapa kelemahan yang akan terjadi pada rangkaian ini:
efisiensi rendah
kecepatan switching lambat dibandingkan motor driver betulan, seperti DRV8833 dan TB6612FNG
Pengaruh ampere terlalu besar pada amplifier tidak akan merusak amplifiernya, hanya jadinya power supply lebih besar, lebih mahal daripada yang diperlukan.
Audio amplifier 100 watt stereo
Sumber gambar: By Justin Davis – originally posted to Flickr as McIntosh MC2505, CC BY-SA 2.0, https://commons.wikimedia.org/w/index.php?curid=11571968
Suatu penguat audio memerlukan sumber daya dengan tegangan dan arus tertentu.
Tegangan yang diberikan oleh power supply harus tepat dengan yang diperlukan. Pada umumnya amplifier memiliki batas toleransi tegangan input tertentu, jadi tegangan supply tidak terlalu eksak. Power supply yang dipakai juga biasanya akan turun sedikit tegangannya ketika dibebani oleh amplifier.
Arus yang diberikan oleh power supply harus sesuai dengan batas minimum. Kemampuan arus power supply harus sesuai dengan kebutuhan amplifier. Jika arus kurang, maka suara akan cacat / mengalami distorsi. Biasanya jika arus kurang, hal ini tidak sampai merusak amplifier. Jika kemampuan arus power supply melebihi keperluan, hal ini tidak mengganggu amplifier. Hanya saja biasanya power supply dengan arus besar lebih berat dan lebih mahal daripada power supply dengan arus kecil.
Power supply untuk amplifier
Sumber gambar: https://id.aliexpress.com/item/32831354120.html
Ringkasan
Pengaruh ampere power supply/adaptor/trafo terlalu besar pada amplifier: tidak ada masalah. Power supply hanya akan memberikan arus sesuai keperluan pada amplifier sehingga tidak akan merusak amplifier.
Pengaruh ampere power supply/adaptor/trafo terlalu kecil pada amplifier: output amplifier tidak bisa terlalu besar. Kalau dipaksakan untuk output dengan volume besar, maka amplifier tidak kuat, sehingga sinyalnya akan cacat/ kecil suaranya.
Pengaruh voltase /tegangan power supply/adaptor/trafo terlalu besar pada amplifier: ada potensi merusak amplifier. Komponen pada amplifier memiliki batas tegangan tertentu yang tidak boleh dilampaui.
Pengaruh voltase / tegangan power supply/adaptor/trafo terlalu kecil pada amplifier: tidak akan merusak amplifier, namun output amplifier akan kecil. Suara tidak keras, ataupun akan ada distorsi / cacat pada suaranya.
Sinyal dari sensor dapat memiliki rentang tegangan besar, rentangan tegangan kecil ataupun tegangan negatif dan positif. ADC pada mikroprosesor umumnya hanya dapat menerima input tegangan positif dengan rentang tegangan terbatas. Untuk itu sinyal dari sensor perlu diperkuat/diperlemah, dan digeser supaya tepat dengan rentang tegangan ADC.
Skema Rangkaian
Berikut ini contoh rangkaian untuk melakukan pengkondisian sinyal tersebut.
Rangkaian Pengkondisi Sinyal ADC
Dasar Teori
Rangkaian ini terdiri dari 3 bagian:
inverting amplifier
buffer amplifier
summing amplifier
Inverting amplifier
Komponen IC1 berfungsi sebagai inverting amplifier. Menguatkan input dan membalik polaritasnya.
Detail dan rumus-rumus buffer amplifier dapat dipelajari di Buffer Amplifier
Komponen IC3 berfungsi sebagai summing amplifier / adder / penjumlah.
Detail dan rumus-rumus summing amplifier dapat dipelajari di Summing Amplifier
Cara Kerja
Cara kerja rangkaian adalah sebagai berikut
Rangkaian ini terdiri dari 3 buah op-amp. Op-amp yang digunakan adalah LM358. Power supply plus minus 12 volt, dari DC to DC converter.
IC1 berfungsi sebagai penguat/peredam inverting. Penguatan/peredaman dapat diatur dengan menggunakan potensiometer VR1. Total penguatan/redaman dapat dihitung berdasarkan nilai R1 dan VR1.
Tegangan untuk menggeser naik-turun tegangan dihasilkan oleh VR2. Pada contoh ini sumber tegangan menggunakan power supply -12 volt. Jika diinginkan ketelitian lebih tinggi, sumber tegangan dapat menggukan dioda zener atau sumber tegangan referensi yang lebih baik. Pada contoh ini tegangan penggeser adalah negatif, karena hanya diperlukan penaikan tegangan Jika diinginkan juga penurunan tegangan, maka tegangan referensi yang diperlukan adalah plus minus 12 volt.
IC2 berfungsi sebagai buffer dari VR2. Jika tidak ada IC2, resistansi dari VR2 dapat mempengaruhi penguatan summing amplifier, karena resistansi dari VR2 akan diseri dengan R3.
Sinyal hasil penguatan/peredaman dan sinyal penggeseran dijumlahkan dengan menggunakan IC3. IC3 dikonfigurasikan sebagai op-amp penjumlah inverting.
Pada contoh ini semua resistor yang digunakan sama, 1k ohm untuk memudahkan pembuatan dan perhitungan.
Untuk lebih amannya , pada bagian output perlu dipasang dioda clamp, supaya tegangan output tidak melebihi batas maksimum dan minimum ADC pada mikrokontroler.
Foto Alat
Pada percobaan ini, digunakan sinyal dengan frekuensi 50 Hz dan tegangan amplitudo 1 volt.
Sumber sinyal dengan generator sinyal GW Instek AFG-2012.
Pengukuran sinyal dengan Osiloskop GW Instek GDS-1152-U
Generator sinyal
Implementasi rangkaian dengan breadboard, sebagai berikut:
Rangkaian dengan breadboardSuasana percobaan
Foto Sinyal
Berikut ini contoh sinyal yang dihasilkan.
Pertama-tama sinyal dengan penggeseran tanpa penguatan.
Contoh geser naik saja
Sinyal input pada kanal 1, dengan warna kuning. Sinyal output pada kanal 2, dengan warna biru.
Berikut ini sinyal yang diredam, dan digeser naik ke positif.
Contoh redaman dan geser naik
Berikut ini sinyal dengan penguatan dan penggeseran naik.
Contoh penguatan dan geser naik
Arduino Nano memerlukan tegangan ADC antara 0~5 volt atau 0~1,1 volt, tergantung setting tegangan referensi ADC tersebut. Arduino Nano KW biasanya tegangan VCC nya adalah kurang dari 5 volt, sekitar 4,6 volt. Untuk itu perlu tegangan input ADC antara 0 ~ 4 volt. Berikut ini contoh sinyal (biru) yang sudah cocok untuk rentang tersebut.
Contoh penguatan dan geser naik untuk Arduino
Output dari op-amp dibatasi oleh tegangan supply. Percobaan berikut menunjukkan apa yang terjadi jika output mengalami saturasi.
Output saturasi
Output (warna biru) mengalami saturasi di 7.12 volt. Tegangan supply positif yang dipakai adalah 9 volt. Datasheet LM358 menunjukkan bahwa LM358 memiliki ‘voltage output swing to rail’ sebesar 1.35 volt sampai 1,61 volt tergantung arus output. Hasil pengukuran menunjukkan jarak antara output ke VCC adalah 1,88 volt, masih di sekitar angka yang ditunjukkan di datasheet LM358.
Apa yang terjadi jika op-amp LM358 diberi input negatif?
Sebuah integrator dapat memberikan output tegangan negatif. Untuk itu perlu dikaji, apa yang terjadi jika sinyal tegangan negatif ini masuk ke op-amp di tahap selanjutnya.
Batas Maksimum LM358
Pada datasheet LM358, disebutkan bahwa input voltage Vi mempunyai nilai minimal -0,3 volt. Jika nilai input lebih kecil dari angka ini, perilaku sistem dapat tidak normal, bahkan bisa rusak dengan cepat maupun lambat.
LM358 Absolute Maximum Ratings
Percobaan
Pada percobaan dibuat rangkaian buffer op-amp LM358, dengan input dari integrator dari tahap selanjutnya. Sinyal dari buffer ini mengandung tegangan negatif dan tegangan biasa.
Buffer op-amp unity gain
Input dan Ouput Buffer LM358
Input adalah sinyal warna biru muda. Output adalah sinyal warna kuning.
Sinyal input berasal dari output sebuah integrator dari tahap sebelumnya. Sinyal ini awalnya bernilai 0 volt, kemudian menuju negativ (- 0,56 volt), kemudian naik menuju saturasi maksimum.
Output buffer adalah sinyal warna kuning. Ketika input negatif cukup besar, output menuju saturasi maksimum. Ketika tegangan input sudah lebih dari 0,3 volt ( di gambar cursor X2 menunjukkan tegangan -280 mV), output sudah mulai ‘normal’, yaitu menunjukkan 0 volt. Output LM358 tidak dapat negatif walaupun inputnya negatif. Setelah input lebih besar dari 0 volt, barulah buffer berfungsi sebagamana mestinya.
Pada sebuah buffer op-amp, seharusnya tegangan output sama dengan tegangan input. Namun hal ini tidak berlaku jika inputnya negatif. Ternyata perilaku buffer ini ada 2 macam: ketika input negatif besar (lebih kecil dari – 0,3 volt), dan negatif kecil (antara – 0,3 volt dan 0 volt)
Kesimpulan
Jika tegangan input buffer kurang dari 0,3 volt, maka output akan menuju saturasi maksimum.
Pada tulisan ini disampaikan percobaan pembuatan integrator berbasis operational amplifier.
Parameter Sistem
tipe op amp: LM358
Tegangan power supply: tunggal, 3,2 volt dari sebuah modul ESP32 Lolin32 Lite
Pengukuran dengan osiloskop GW Instek 1152A-U
Sinyal dari pembangkit sinyal GW Instek AFG-2012
Berikut ini adalah rangkaian yang digunakan:
Rangkaian buffer dan integrator berbasis LM358
Power supply tunggal dengan tegangan adalah 3,2 volt, berasal dari sebuah modul ESP32 Lolin32 Lite. Sebagai referensi ground, digunakan pembagi tegangan resistor 2k2 dan 1k, menghasilkan tegangan 1,02 volt.
Operational amplifier menggunakan LM358. Pertimbangannya adalah op amp ini dapat bekerja dengan single supply, dengan tegangan supply dapat mencapai 3 volt. op-amp juga dapat menerima tegangan input yang sudah mendekati 0 volt. op-amp ini bukan jenis rail-to-rail, sehingga tetap akan terjadi clipping di output jika output mendekati tegangan supply.
Op-amp lain yang sering dipakai untuk aplikasi single supply tegangan rendah adalah LM324. LM324 memiliki kemampuan output sampai VCC – 1,5 volt. Jadi kalau diberi VCC 5 volt, output op-amp dapat mulai dari 0 volt sampai 3,5 volt.
Nilai resistor 100k dan kapasitor 10uF. Dari hasil pengukuran, nilai tepat dari resistor adalah 101,5 k dan kapasitor 9,1 uF. Tujuan pemilihan nilai ini adalah untuk mendapatkan parameter time-constant sekitar 1 detik.
Percobaan
Rangkaian dibuat dengan breadboard. Input dengan sinyal persegi dari generator sinyal GW Instek AFG-2012. Output diukur dengan osiloskop GW Instek GDS-1152A-U. Tegangan , nilai resistor dan nilai kapasitor diukur dengan osiloskop dan juga multimeter Kyoritsu KEW 1021R.
Kapasitor pada integrator menggunakan kapasitor non-polar, supaya tegangan pada kapasitor tersebut dapat bernilai positif dan negatif. Jika dipakai kapasitor polar seperti elektrolit, maka kapasitor hanya berfungsi pada 1 polaritas saja.
Set up rangkaian dengan breadboard, osiloskop dan generator sinyal
Berikut ini pengukuran sinyal input yang berasal dari sinyal generator.
Sinyal input dari generator sinyal
Sinyal diukur di channel 1 (sinyal kotak di bawah warna kuning). Frekuensi 0,1 Hz. Amplitudo 2 Vpp. Tegangan terukur adalah 40 mV di bagian low, dan 2,160 di bagian HIGH.
Berikut ini sinyal output dari output integrator.
Sinyal output integrator
Sinyal diukur di channel 2 (sinyal atas warna biru).
Tegangan output integrator naik jika input LOW. Tegangan akan naik dengan kemiringan sesuai time constant, sampai mencapai saturasi. Tegangan maksimum output op amp adalah 1,84 volt, jadi ini adalah tegangan saturasi output op amp.
Jika input HIGH, output integrator akan turun dengan kemiringan sesuai time constant. Tegangan terendah pada output integrator adalah 40 mV.
Ketika input berubah dari HIGH ke LOW, output sejenak berubah menjadi negatif (diukur mencapai -0.6 volt). Tegangan negatif ini berasal dari tegangan yang tersimpan di kapasitor.
Rangkaian Clamp Dioda
Output integrator dapat negatif. Jika terlalu negatif dapat mengganggu/merusak komponen selanjutnya. Berikut ini hasil percobaan menambah diode clamp pada output integrator. Clamp pertama adalah rangkaian diode clamp konvensional.
Perbandingan tanpa clamp dan dengan clamp dioda 1N4148
Tanpa clamp, tegangan minimum adalah -680 mV
Dengan rangkaian clamp dioda 1N4148, tegangan minimum adalah 400 mV
Berikut ini rangkaian clamp dengan perubahan sedikit. Pada rangkaian clamp biasa, anoda disambungkan ke 0 volt. Pada rangkaian ini, anoda disambungkan ke tegangan 0,7 volt supaya tegangan output tidak dapat negatif.
Berikut ini hasil percobaan output integrator dengan diode clamp hasil modifikasi.
Dioda clamp dan resistor 1k
Dengan dioda clamp 1N4148 dan resistor 1k, maka tegangan minimum integrator adalah 120 mV
Dioda clamp dan resistor 10k
Dengan dioda clamp 1N4148 dan resistor 10k, maka tegangan minimum integrator adalah 0 mV
Dari percobaan didapat rangkaian clamp terbaik adalah dengan dioda 1N4148 dan resistor 10k.
Analisis
Tegangan supply 3,2 volt dari ESP32 dapat menjadi power supply untuk LM358.
Rangkaian yang menggunakan komponen op-amp umumnya perlu menggunakan power supply ganda, karena op-amp memerlukan catu daya tegangan positif dan negatif.
Jika diinginkan rangkaian op-amp yang hanya menggunakan sebuah catu daya saja, maka perlu dibuat suatu tegangan sebagai ‘virtual ground’. Virtual ground ini berfungsi sebagai ground pada rangkaian op-amp, namun tegangannya tidak sama dengan 0 volt .
Ground buatan ini dikenal dengan berbagai nama:
Virtual ground
Phantom ground
Floating ground
Ada beberapa cara membuat virtual ground untuk op-amp sebagai berikut:
Pembagi tegangan resistor
Pembagi tegangan resistor dengan decoupling
Dioda Zener
Regulator linear DC
Pembagi tegangan resistor dengan op-amp
Virtual Ground Dengan Resistor Pembagi Tegangan
Virtual Ground Dengan Resistor Pembagi Tegangan Dan Decoupling
Virtual Ground Dengan Dioda Zener
Virtual Ground Dengan Regulator Linear DC
Virtual Ground Dengan Pembagi Tegangan Resistor Dengan Op-Amp