Nama : KHAIRUL AGUNG
Langkah - Langkahnya:
Pada posting kali ini dilakukan uji coba pengaturan kecepatan putaran motor DC, menggunakan mikrokontroler ATMEGA16 sebagai prosesor, dan driver menggunakan ICL293D yang dapat di inputkan tegangan maksimum 32V, LCD karakter 16x2 sebagai user interface, adapun rangkaian yang diperlukan adalah sebagai berikut:
Read More
Kelas : 1 CB
NIM :
061530700547
Mata Kuliah : Praktek Gambar TeknikLangkah - Langkahnya:
Pada posting kali ini dilakukan uji coba pengaturan kecepatan putaran motor DC, menggunakan mikrokontroler ATMEGA16 sebagai prosesor, dan driver menggunakan ICL293D yang dapat di inputkan tegangan maksimum 32V, LCD karakter 16x2 sebagai user interface, adapun rangkaian yang diperlukan adalah sebagai berikut:
- ATMEGA16
- ICL293D
- LCD
- 2 buah Kapasitor
- 2 Buah Motor-DC
- BATTERY
- 4 buah Push Button
- CRYSTAL
Kemudian setelah semua rangkain diletakkan pada lembar
kerja, susun rangkaian menjadi seperti skema rangkaian berikut:
Adapun Motor DC yang di
kontrol berjumlah 2 buah, dengan pengaturan dengan 4buah push button, yang
berfungsi menaikan dan menurunkan kecepatan.
Driver motor
menggunakan IC L293D yang sudah biasa digunakan, dengan fungsi sebagai berikut
:
- IN1 & IN2 =
arah putaran motor 1 misal (IN1=High & IN2=Low) maka motor forward dan
sebaliknya
- IN3 & IN4
= arah putaran motor 2 misal (IN3=High & IN4=Low) maka motor forward
dan sebaliknya
- EN1 = Pengatur
kecepatan motor 1 dengan metode PWM (Pulse Width Modulation)
- EN1 = Pengatur kecepatan motor 2 dengan metode
PWM (Pulse Width Modulation)
Dengan memanfaatkan
fitur Fast PWM yang terdapat dalam mikrokontroler ATMEGA16, pemrograman diawali
dengan mengaktifasi Fast PWM mode OCR1A untuk motor 1, dan OCR1B untuk motor 2,
kemudian nilai OCR1A dan OCR1B
ditampilkan melalui
LCD sebagai parameter. Berikut merupakan program lengkapnya yang saya tulis
dengan bahasa C pada CodeVision AVR :
#include
// Alphanumeric
LCD Module functions
#include
#include
//Deklarasi
variabel
int SA,SB;
char MA[8];
char MB[8];
void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 12000.000 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
/ Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C
Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 8
lcd_init(8);
while (1)
{
lcd_gotoxy(0,0);lcd_putsf("M1=");lcd_gotoxy(0,1);lcd_putsf("M2=");
PORTD.0=1; //Motor 1
Forward
PORTD.1=0;
PORTD.3=1; //Motor 2
Reverse
PORTD.4=0;
if(PINA.0==0){SA++;} //Jika
pushbutton A0 ditekan naikan kecepatan motor 1
if(PINA.1==0){SA--;}
//Jika pushbutton A1 ditekan turunkan kecepatan motor 1
if(PINA.2==0){SB++;} //Jika
pushbutton A2 ditekan naikan kecepatan motor 2
if(PINA.3==0){SB--;}
//Jika pushbutton A3 ditekan turunkan kecepatan motor 2
lcd_gotoxy(5,0);itoa(SA,MA);lcd_puts(MA); //Tampilkan nilai kecepatan Motor 1
lcd_gotoxy(5,1);itoa(SB,MB);lcd_puts(MB); //Tampilkan nilai kecepatan
Motor 2
OCR1A=SA;
OCR1B=SB;
// Place your code here
}
}