Pengaturan Kecepatan Motor DC dengan ATMEGA16 dan L293D

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, berikut skema rangkaian tersebut :


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

      }
}

Terima Kasih, semoga membantu.

Monitoring SUHU dan Detector Smoke menggunakan ATmega16 Dengan Bahasa Basic (Bascom AVR)

Pada project kali ini adalah sedikit eksperimen menggunakan sensor suhu LM35 dan smoke detektor, rangkaian akan mendeteksi tingkat ketebalan asap dan nilai parameternya akan ditampilkan melalui LCD, dan akan menentukan tingkat bahaya dan adanya api jika terjadi peningkatan suhu. Monitoring SUHU dan Detector Smoke menggunakan ATmega16 Dengan Bahasa Basic )Bascom AVR) Berikut daftar Komponen Library nya... :-) ATMega 16 Led Button LCD 20*4 Sensor LM35 Detector Smoke Berikut Listing Program Basic nya 'Konfigurasi ATmega 16 '================================== $regfile = "m16def.dat" $crystal = 1200000 'Konfigurasi LCD '================================== Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.0 Config Lcd = 20 * 4 Cursor Off 'Konfigurasi Input & Out put '================================== Config Portd = Output Config Porta = Input 'Bagian ADC '================================== Dim Y As Integer Deflcdchar 0 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32 Config Adc = Single , Prescaler = Auto , Reference = Internal Dim A As Word , Volt As Word , Volt_d As Byte Dim Z As Word , I As Word , I_d As Byte Start Adc 'analisasi Port '================================== C Alias Portd.3 'Star Awal Program '================================== Cls Locate 1 , 4 Lcd "ALARM KEBAKARAN" Locate 3 , 1 Lcd " Suhu & Sensor Asap" Locate 4 , 1 Lcd " AVR ATmega16" Wait 1 Cls Waitms 500 'Mulai Program '=================================== Do 'Baca Sensor Suhu '=================================== Locate 1 , 1 Lcd "MONITORING SUHU" A = Getadc(0) Volt = A * 5 Volt_d = Volt Mod 10 Volt = Volt / 20 Locate 2 , 1 Lcd Volt ; "," ; Volt_d Locate 2 , 6 Lcd Chr(0) ; "C" 'Baca Sensor Asap '================================== Locate 3 , 1 Lcd "MONITORING ASAP" Z = Getadc(1) I = Z * 10 I_d = I Mod 10 I = I / 20 Locate 4 , 1 Lcd I ; "," ; I_d Locate 4 , 6 Lcd Chr(1) ; "ppm" 'Bagian Suhu Normal '================================== Normal: If Volt < 31 Then If Volt > 19 Then Locate 2 , 9 Lcd "SUHU NORMAL " C = 1 End If End If 'Bagian Suhu Dingin '=================================== Dingin: If Volt < 19 Then Locate 2 , 8 Lcd " SUHU DINGIN " C = 1 End If 'Bagian Suhu Siaga '=================================== Siaga: If Volt > 30 Then If Volt < 41 Then Locate 2 , 9 Lcd "SUHU SIAGA1" C = 1 End If End If If Volt > 40 Then If Volt < 51 Then Locate 2 , 9 Lcd "SUHU SIAGA2" C = 1 End If End If If Volt > 50 Then If Volt < 61 Then Locate 2 , 9 Lcd "SUHU SIAGA3" C = 1 End If End If 'Bagian Suhu Bahaya '=================================== Bahaya: If Volt > 60 Then Locate 2 , 9 Lcd "KEBAKARAN " C = 0 End If Loop Skema Rangkaian Menggunakan Proteus 7.7 SP2 Untuk pertanyaan dan kelengkapannya Klick Disini Inbox ajah