Anda di halaman 1dari 10

MODUL 5 MOTOR DC

Raditya Priyongga (13216056)


Asisten: Andra Miftah Ar-Rahman / 13215025
Tanggal Percobaan: 11/04/2019
EL3214-Praktikum Sistem Mikroprosesor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan informatika ITB

Abstrak menggunakan pull-up internal pada


mikrokontroler.
Pada percobaan ini, kita melakukan 5 percobaan dimana
Kata Kunci : motor DC, rotary encoder, dan Motor
Driver H-Bridge Tb6612fng

1. PENDAHULUAN
Pada modul ini, kita akan

Tujuan dari percobaan ini : [1] Praktikan dapat


membuat antar muka mikrokontroler ke rotary
encoder; [2] Praktikan dapat membaca informasi
posisi dan kecepatan dari rotary encoder; [3]
Praktikan dapat membuat antar muka output
mikrokontroler ke motor DC dan; [4] Praktikan
mampu membuat pengendali PID digital untuk
mengendalikan posisi dan kecepatan motor DC

2. STUDI PUSTAKA

2.1 ROTARY ENCODER

Output rotary encoder berupa pulsa yang


frekuensinya sebanding dengan kecepatan putaran.
Arah putaran juga dapat diketahui dari perbedaan
fasa antara sinyal A dan sinyal B. Sinyal A dan B
adalah open collector, sehingga memerlukan
resistor pull up. Resistor pull up ini dapat
menggunakan resistor biasa, bisa juga
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
2.2 MOTOR DRIVER H-BRIDGE • Mikroprosesor Arduino Nano
TB6612FNG (ATMega328P) 3
• Kabel USB mini untuk Arduino Nano
• Breadboard
• Modul Motor Driver TB6612FNG
• Potensiometer dengan nilai 1k sampai 10k
untuk input posisi
• Power Supply 5 volt 2 ampere untuk
supply ke motor
• Osiloskop
• Multimeter
• Kabel-kabel jumper

3. JUDUL SUB-BAB
Abstrak
3.1.1 Pendahuluan
3.1.2 Studi Pustaka
3.1.3 Metodelogi
3.1.3.1 Alat dan Komponen yang
digunakan
3.1.3.2 Langkah-Langkah
Percobaan
3.1.4 Hasil dan Analisis
3.1.5 Kesimpulan
3.1.6 Daftar Pustaka

4. METODOLOGI

4.1 ALAT DAN KOMPONEN YANG


DIGUNAKAN

Pada percobaan kali ini membutuhkan Gambar 4.1 Alat-alat yang diperlukan
beberapa alat. Alat-alat yang digunakan :
• Kit Motor DC

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2


Dalam pengerjaannya, lakukan dengan cara/ 3. Berikan pull up resistor pada output A dan
metode yang bertahap. Diawali dengan (1) B dari rotary encoder.
Pengesetan alat. Pada tahap ini kita akan
4. Ukur tegangan output rotary encoder A
melakukan kalibrasi/ pengecekan alat apakah alat
dan B (kabel putih dan hijau) dengan
dapat digunakan/ tidak. Bila tidak, maka alat
menggunakan osiloskop
tersebut harus diganti. Bila alat telah dicek,
nyalakan alat tersebut. Mula-mula, Hubungkan 5. Putar sedikit poros motor dengan tangan.
Power Supply 9V ke kit praktikum dan hidupkan Jika sensor berfungsi baik,seharusnya ada
Komputer lalu jika telah muncul tampilan Desktop, sinyal pada output A dan B pada rotary
buka Software WinAVR. Siapkan alat-alat yang
6. Bandingkan fasa output rotary encoder
akan dikombinasikan dengan computer.
antara datasheet dengan yang diukur dan
Kemudian, upload program C pada WinAVR ke
Catat tegangan keluaran rotary
ATMega via usbasp downloader. Bila downloader
encoderencoder. Perhatikan perbedaan
belum terdeteksi pada komputer, ikuti tahap pada
fasa jika arah putaran dibalik.
Appendix A pada modul (lihat Daftar Pustaka
Laporan ini). Jika sudah terdeteksi, program dapat B. Pengujian motor DC + rotary encoder
diimplementasikan. Jangan lupa spesifikasi pada
1. Pengujian ini lanjutan dari pengujian
program diubah sesuai yang diinginkan. rotary encoer
2. Berikan tegangan 5 volt DC pada motor,
seharusnya motor akan berputar
3. Amati tegangan output rotary encoder,
Pengesetan seharusnya sinyal A dan B ada beda fasa 90
Alat derajat
4. Ganti polaritas tegangan pada motor DC,
seharusnya perbedaan fasa yang muncul
Percobaan pada output rotary encoder (A dan B) akan
Pencatatan dan Analisis kebalikan fasa dari sebelumnya.
Kejadian
5. Bandingkan fasa output rotary encoder
antara datasheet dengan yang diukur,
Catat tegangan keluaran rotary encoder,
dan ukur / hitung kecepatan motor
Gambar 4-2 Diagram Metode Pengerjaan Praktikum maksimum berdasarkan frekuensi sinyal
yang terlihat pada osiloskop, untuk
Bila sudah, lakukan (2) Percobaan dan Analisis. masing-masing arah, dengan tegangan
Pada tahap ini kita melakukan pengamatan pada pada motor dibatasi 5 volt
rangkaian yang sudah dibuat. Bila data C. Software Pengukur Posisi
pengamatan sesuai/mendekati hasil nilai tertulis/
perumusan, lakukan pencatatan. Bila tidak, 1. Pada percobaan ini akan dijalankan
lakukan kembali. Bila tidak sesuai pula, lakukan software yang mengukur posisi sudut
pencatatan analisis. Setelah itu, lakukan (3) (Lampiran 1). Posisi awal ketika reset
pencatatan kejadian. Aktivitas praktikan, asisten, diasumsikan adalah 0. Output posisi
hingga hal-hal aneh terjadi di Laboratorium dan ditampilkan pada port serial dengan
berkaitan dengan Anda dan percobaan tersebut, kecepatan 9600 bps.
masukan kedalam pencatatan kejadian. 2. Amati berapa perubahan posisi yang
dicatat jika sistem diputar 360 derajat
4.2 PERCOBAAN A : SENSOR ROTARY
ENCODER 3. Software ini menggunakan pin INT0 dan
INT1. Bagaimana cara menghubungkan
A. Pengujian Rotary Encoder Manual INT0 dan INT1 supaya angka hasil
1. Sambungkan GND pada rotary encoder pengukuran posisi sesuai (positif /
(kabel hitam) negatifnya).

2. Berikan tegangan 5V ke VCC pada rotary 4. Modifikasi software ini supaya dapat
encoder (kabel merah) dijalankan menggunakan “Interupsi Pin
Change”, supaya dapat dipakai di pin
selain INT0 dan INT1

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3


5. Modifikasi software ini supaya dapat 4.4 PERCOBAAN C : KENDALI
dijalankan pada CodeVisionAVR KECEPATAN OPEN LOOP
D. Software Pengukur Kecepatan 1. Buatlah rangkaian & program untuk
mengirimkansinyal PWM ke motor driver
1. Pengukuran kecepatan dilakukan dengan
dan mencatat kecepatan motor secara
cara membagi posisi dengan waktu.
periodik.
Teknisnya dapat dilakukan dengan
menggunakan interupsi timer untuk 2. Amati untuk tegangan -100%, -75%, -50%, -
membangkitkan sampling dengan 25%, 0,25%, 50%, 75%, 100%
frekuensi tertentu, dan mereset counter
3. Buat grafik transien kecepatan terhadap
posisi setiap terjadi interupsi timer. Angka
waktu.
posisi yang tercatat ketika terjadi interupsi
mewakili kecepatan sudut. 4. Apakah perilaku sistem orde1 , atau orde 2
ataulebih lagi? Berapakan bandwidth
2. Interupsi Timer1 di Arduino dapat
sistem tersebut?
menggunakan library Timer1
(http://playground.arduino.cc/code/tim 5. Buat grafik korelasi duty cycle PWM
er1) dengankecepatan steady state motor.
3. Interupsi Timer1 di CodeVisionAVR dapat 6. Ukur juga berapa deadband dengan cara
diaktifkan dengan menggunakan Code mencarinilai PWM yang tidak dapat
Wizard ataupun cara manual (membaca membuat motor berputar.
register dari datasheet ATMega328)
4. Buatlah software yang menampilkan
kecepatan sudut sistem berbasis software
Arduino
5. Buatlah software yang menampilkan
kecepatan sudut sistem berbasis software
CodeVisionAVR
4.5 PERCOBAAN D : KENDALI
KECEPATAN MOTOR DC DENGAN
PID
4.3 PERCOBAAN B : MOTOR DRIVER H-
BRIDGE TB6612FNG 1. Buatlah pengendali tipe PID (Proporsional
Integral Derivatif) untuk mengendalikan
1. Buatlah software pada Arduino Nano kecepatan motor.
untuk menghasilkan sinyal PWM dari
motor driver dengan berbagai duty cycle 2. Frekuensi sampling 1 kHz, atau
(0%, 25%, 50%, 100%) dan polaritas positif disesuaikan dengan bandwidth dari sistem
dan negative. Jadi total ada 7 pengukuran. motor DC tersebut.

2. Ukurlah tegangan power supply motor 3. Input kecepatan diberikan melalui


dan tegangan yang muncul pada resistor potensiometer
beban. Hitunglah disipasi energy pada 4. Data yang dikirim ke PC adalah kecepatan
motor driver, dan efisiensi motor driver ini. target dan kecepatan yang dicapai.
Bandingkan dengan teori efisiensi
transistor MOSFET sebagai sakelar. 5. Pewaktuan menggunakan interupsi timer

3. Ukurlah tegangan power supply motor, 6. Analisis Rangkaian percobaan, Software


cek apakah terjadi fluktuasi tegangan percobaan, Output respon terhadap input
berkaitan dengan tegangan pada beban step. Input step dapat dibuat dengan
resistor. menambahkan tombol atau sinyal input
dari port serial.

4.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4


4.6 PERCOBAAN E : KENDALI POSISI 5.2 PERCOBAAN B : MOTOR DRIVER H-
MOTOR DC DENGAN PID BRIDGE TB6612FNG
1. Berikut ini contoh program kendali posisi
sederhana (Lampiran 2).
2. Program ini masih memiliki kelemahan
sebagai berikut:
a. Menggunakan delay() untuk
pewaktuan, sehingga frekuensi
sampling tidak tepat. Perlu diubah
menggunakan interupsi timer.
b. Terdapat serial output pada loop
yang dapat mempengaruhi
frekuensi sampling.

5. HASIL DAN ANALISIS


Semua diagram alir pada laporan ini dibuat
secara manual menggunakan draw.io. Sebelum Gambar 5.2
melakukan percobaan, kita terlebih dahulu Dari gambar diatas, sinyal duty cycle dan
menginisiasi contoh program template yang ada sinyal PWM memiliki beda fasa sebesar 180
pada software Arduino yang diakses dari menu derajat. Hal ini menjelaskan bahwa sinyal input
“File” -> “Examples” -> “01. Basics” -> Blink dan 1 dan 2 di encoding sesaat seteleah duty cycle
DigitalReadSerial. Tujuannya untuk memastikan bernilai ’HIGH’. Dengan nilai frekuensi <2Hz,
potensio bekerja dengan baik. Saat memutar maka delay ini bisa dilihat dengan kasat mata.
potensiometer, keluaran yang di hasilkan hanya
‘1’/ HIGH dan ‘0’/ LOW. Kemudian, saat tegangan diubah ubah, daya
dispasi yang dihasilkan juga bervariasi.
5.1 PERCOBAAN A : SENSOR ROTARY Semakin besar tegangan yang dihasilkan, maka
ENCODER daya dispasi akan semakin besar.

%Vpowesupply Vmotor (V)

0 0

50 3.62

75 4.2

100 5.3

Gambar 5.1 Hasil pembacaan rotary encoder


saat rotor diputar
Pada percobaan ini, kita mendapatkan hasil
rotary encoder seperti gambar diatas. Secara
teori, sinyal keluaran harus berbentuk sinyal
kotak. Namun hasil yang diperoleh merupakan
sinyal transien. Hal ini dapat disebabkan
system yang kita gunakan system analog
sehingga sinyal yang ditampilkan pada
osiloskop adalah sinyal waktu riil

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5


5.3 PERCOBAAN C : KENDALI kapasitif yang menyebabkan gesekan elektron
KECEPATAN OPEN LOOP. yang mengalir di udara.

5.5 PERCOBAAN E : KENDALI POSISI


MOTOR DC DENGAN PID

Diperoleh hasil satu putaran memiliki pulsa


sebanyak 2400 (360 derajat). Apabila diputar searah
Motor bergerak pada arus 1.35 A (<1.5A) dengan jarum jam, maka pulsa bernilai positif sedangkan
bila diputar berlawanan arah jarum jam maka
kecepatan tidak konstan. Motor harus diberi
pulsa bernilai negative.
stimulasi terlebih dahulu agar memiliki kecepatan
awal untuk memutar momen inersia. Kemudian, Pada percobaan ini dapat disimpulkan
saat setelah motor beputar selama 2 detik, tiba-tiba berhasil
motor berhenti

5.4 PERCOBAAN D : KENDALI


KECEPATAN MOTOR DC DENGAN 6. KESIMPULAN
PID Dari hasil percobaan diatas, dapat disimpulkan
bahwa :
 Sinyal rotary encoder yang dihasilkan
beupa sinyal kotak
 Motor DC pada sistem open loop mulai
bergerak pada arus 1.35 A
 Motor DC pada sistem pengendali PID
mulai bergerak konstan pada arus 1.4 A.
Saat diberi arus sebesar 1.4A. dibanding sistem  Pulsa yang dihasilkan untuk 1 putaran
kendali terbuka, motor berputar tanpa berhenti. adalah 2400
Hal ini disebabkan adanya sistem umpan balik
yang memiliki fungsi untuk mengalibrasi
kecepatan pada 1.4A serta kontrol PID yang DAFTAR PUSTAKA
meminimalisisr error steady state, mempercepat [1] Hutabarat, Mervin Tangguar, dkk. Modul
respon transien, dan mengidealkan redaman Praktikum EL3214 Sistem Mikroprosesor.
sehingga motor dapat berputar secara sustainable. Bandung: ITB. 2018.
Namun pada saat melakukan percobaan ini, saat
diberi arus berangsur-angsur membesar, terdengar
suara bising yang dihasilkan motor DC. Hal ini
dapat disebabkan adanya konduktor yang tak
terhubung dengan baik sehingga terjadi kondisi

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6


LAMPIRAN

1. Source code pengukur_posisi


/*
Mengukur posisi relatif rotary encoder
dengan INT0 dan INT1
*/
int state=0;
long int posisi=0;
void ISR_INT0(){
int pinA,pinB;
pinA=digitalRead(2);
pinB=digitalRead(3);
if(pinA==LOW && pinB==LOW){
posisi--; // CCW
}
if(pinA==LOW && pinB==HIGH){
posisi++;
}
if(pinA==HIGH&& pinB==LOW){
posisi++; // CCW
}
if(pinA==HIGH && pinB==HIGH){
posisi--; // CCW
}
}
void ISR_INT1(){
int pinA,pinB;
pinA=digitalRead(2);
pinB=digitalRead(3);
if(pinA==LOW && pinB==LOW){
posisi++; // CCW
}
if(pinA==LOW && pinB==HIGH){
posisi--;
}

if(pinA==HIGH&& pinB==LOW){
posisi--; // CCW
}
if(pinA==HIGH && pinB==HIGH){
posisi++; // CCW
}
}
void setup() {
// initialize serial communications at
9600 bps:
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT); // untuk
indikator
pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), ISR_INT0,
CHANGE);
attachInterrupt(digitalPinToInterrupt(3), ISR_INT1,
CHANGE);
}
void loop() {
if(state==0){
state=1;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7


digitalWrite(LED_BUILTIN, HIGH);
// turn the LED on (HIGH is the
voltage level)
}else{
state=0;
digitalWrite(LED_BUILTIN, LOW);
// turn the LED on (HIGH is the
voltage level)
}
Serial.print("posisi ");
Serial.print(posisi);
Serial.println("");
delay(1000);
}

2. Source code kendali_posisiPID


/*
Kendali posisi sederhana
*/
const int IN2=10; // pin untuk kendali arah
motor
const int IN1=11;
const int PWM=9; // pin untuk PWM
const int analogInPin = A0;
long int sensorValue = 0;
// value read from the pot
int outputValue = 0;
// value output to the PWM (analog
out)
int state=0;
long int posisi=0;
long int kecepatan=0;
int pinA;
int pinB;
void ISR_INT0(){
17
pinA=digitalRead(2);
pinB=digitalRead(3);
if(pinA==LOW && pinB==LOW){
posisi--; // CCW
kecepatan--;
}
if(pinA==LOW && pinB==HIGH){
posisi++;
kecepatan++;
}
if(pinA==HIGH&& pinB==LOW){
posisi++; // CCW
kecepatan++;
}
if(pinA==HIGH && pinB==HIGH){
posisi--; // CCW
kecepatan--;
}
}
void ISR_INT1(){
pinA=digitalRead(2);
pinB=digitalRead(3);
if(pinA==LOW && pinB==LOW){
posisi++; // CCW
kecepatan++;
}
if(pinA==LOW && pinB==HIGH){
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8
posisi--;
kecepatan--;
}

if(pinA==HIGH&& pinB==LOW){
posisi--; // CCW
kecepatan--;
}
if(pinA==HIGH && pinB==HIGH){
posisi++; // CCW
kecepatan++;
}
}
void motor_power(int power){
int pwm_value;
pwm_value=abs(power);
if(pwm_value<0)
pwm_value=0;
if(pwm_value>255)
pwm_value=255;

if(power>0){
digitalWrite(IN1,LOW); // turn
off
digitalWrite(IN2,HIGH); // turn
off
analogWrite(PWM, pwm_value);
} else if(power<0){
digitalWrite(IN1,HIGH); // turn
off
digitalWrite(IN2,LOW); // turn
off
analogWrite(PWM, pwm_value);
}else{
digitalWrite(IN1,LOW); // turn
off
digitalWrite(IN2,LOW); // turn
off
}
}
void setup() {
// initialize serial communications at
9600 bps:
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), ISR_INT0,
CHANGE);
attachInterrupt(digitalPinToInterrupt(3), ISR_INT1,
CHANGE);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(PWM, OUTPUT);
}
void loop() {
static float error_integral=0;
int target;
float control;
float error;
// print the results to the Serial
Monitor:
sensorValue=0;
//posisi=0;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9


// wait 2 milliseconds before the
next loop for the analog-to-digital
// converter to settle after the last
reading:
if(state==0){
state=1;
digitalWrite(LED_BUILTIN, HIGH);
// turn the LED on (HIGH is the
voltage level)
}else{
state=0;
digitalWrite(LED_BUILTIN, LOW);
// turn the LED on (HIGH is the
voltage level)
}
sensorValue = analogRead(analogInPin);
target=sensorValue*2;
error=target-posisi;
error_integral=error_integral+error;
control=error*0.15+error_integral*0.001;
motor_power(control);
Serial.print(target);
Serial.print(" ");
Serial.print(kecepatan);
Serial.print(" ");
Serial.print(posisi);
Serial.print(" ");
Serial.print(control);
Serial.println("");
kecepatan=0;
delay(10);
}

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1


0

Anda mungkin juga menyukai