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
}
Tidak ada komentar:
Posting Komentar