Capaian Pembelajaran

  • Memahami prinsip kerja motor DC dan servo
  • Mengimplementasikan kontrol motor menggunakan PWM
  • Membuat program kontrol servo dengan mikrokontroler
  • Merancang driver circuit untuk motor DC
  • Mengintegrasikan sensor dengan kontrol motor

1. Motor DC dan Servo: Konsep Dasar

Motor DC adalah aktuator yang mengubah energi listrik menjadi gerakan rotasi. Motor DC dikontrol dengan mengatur tegangan yang diberikan, sedangkan Servo Motor adalah motor yang dapat dikontrol secara presisi untuk mencapai posisi sudut tertentu.

Parameter Motor DC Servo Motor
Kontrol Kecepatan (Speed) Posisi (Position)
Sinyal Kontrol PWM (Duty Cycle) PWM (Pulse Width)
Range Gerak Rotasi kontinu 360° Terbatas (biasanya 180°)
Komponen Internal Motor + Gearbox (opsional) Motor + Gearbox + Control Circuit
Aplikasi Drone, mobil RC, conveyor Robotika, kamera, valve control

PWM (Pulse Width Modulation)

PWM adalah teknik mengontrol peralatan elektronik dengan mengubah lebar pulsa sinyal digital. Duty Cycle menentukan persentase waktu sinyal dalam keadaan HIGH.

  • Duty Cycle 0%: Motor mati
  • Duty Cycle 50%: Motor setengah kecepatan
  • Duty Cycle 100%: Motor kecepatan penuh

2. Kontrol Motor DC dengan PWM

Driver Circuit untuk Motor DC

Mikrokontroler tidak dapat memberikan arus yang cukup untuk menggerakkan motor DC langsung. Diperlukan driver circuit seperti:

H-Bridge Circuit untuk Motor DC

L293D Motor Driver IC

IC khusus untuk mengontrol motor DC dengan arus hingga 600mA per channel

Keuntungan H-Bridge

  • Dapat mengontrol arah putaran motor
  • Mendukung PWM untuk kontrol kecepatan
  • Melindungi mikrokontroler dari back EMF

Simulasi Kontrol Motor DC

Motor DC Visualization

Kecepatan: 0%
Arah: STOP

Kontrol Kecepatan

0%

Kontrol Arah

Kode Program Motor DC

motor_dc.c - Kontrol Motor DC dengan PWM

#include 
#include 

// Pin configuration for L293D
#define MOTOR_PIN1 PB0
#define MOTOR_PIN2 PB1
#define PWM_PIN PB2

void PWM_Init() {
    // Set Fast PWM mode, non-inverting
    TCCR0A = (1 << COM0A1) | (1 << WGM01) | (1 << WGM00);
    TCCR0B = (1 << CS01);  // Prescaler 8
    DDRB |= (1 << PWM_PIN);
}

void setMotorSpeed(uint8_t speed) {
    OCR0A = speed;  // Set PWM duty cycle
}

void setMotorDirection(uint8_t direction) {
    switch(direction) {
        case 0:  // Stop
            PORTB &= ~((1 << MOTOR_PIN1) | (1 << MOTOR_PIN2));
            break;
        case 1:  // Forward
            PORTB |= (1 << MOTOR_PIN1);
            PORTB &= ~(1 << MOTOR_PIN2);
            break;
        case 2:  // Reverse
            PORTB &= ~(1 << MOTOR_PIN1);
            PORTB |= (1 << MOTOR_PIN2);
            break;
    }
}

int main(void) {
    // Initialize motor control pins
    DDRB |= (1 << MOTOR_PIN1) | (1 << MOTOR_PIN2);
    PWM_Init();
    
    uint8_t speed = 0;
    
    while(1) {
        // Accelerate forward
        setMotorDirection(1);
        for(speed = 0; speed < 255; speed++) {
            setMotorSpeed(speed);
            _delay_ms(10);
        }
        
        // Decelerate
        for(speed = 255; speed > 0; speed--) {
            setMotorSpeed(speed);
            _delay_ms(10);
        }
        
        // Change direction
        setMotorDirection(2);
        // Repeat pattern for reverse...
    }
    
    return 0;
}
                        

3. Kontrol Servo Motor

Prinsip Kerja Servo

Servo motor dikontrol dengan sinyal PWM yang memiliki karakteristik khusus:

Sinyal Kontrol Servo

  • Frekuensi: 50Hz (Period 20ms)
  • Pulse Width: 1ms - 2ms
  • Sudut: 0° - 180° (tergantung servo)
  • 1ms pulse: 0° position
  • 1.5ms pulse: 90° position
  • 2ms pulse: 180° position

Simulasi Kontrol Servo

Servo Motor Visualization

Sudut: 90°
Pulse: 1.5ms

Kontrol Posisi Servo

90°

Mode Sweep

Kode Program Servo

servo_control.c - Kontrol Servo Motor

#include 
#include 

#define SERVO_PIN PB1

void servoInit() {
    // Set Fast PWM mode, 8-bit
    TCCR1A = (1 << COM1A1) | (1 << WGM11);
    TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11);
    
    // Set frequency to 50Hz
    ICR1 = 39999;  // 16MHz / 8 / (39999 + 1) = 50Hz
    
    DDRB |= (1 << SERVO_PIN);
}

void setServoAngle(uint8_t angle) {
    // Convert angle (0-180) to pulse width (1000-2000 microseconds)
    uint16_t pulse_width = (angle * 1000 / 180) + 1000;
    
    // Convert to timer value
    // Timer counts every 0.5us (16MHz/8 prescaler = 2MHz = 0.5us per count)
    uint16_t timer_value = pulse_width * 2;
    
    OCR1A = timer_value;
}

int main(void) {
    servoInit();
    uint8_t angle = 90;
    
    while(1) {
        // Sweep from 0 to 180 degrees
        for(angle = 0; angle <= 180; angle++) {
            setServoAngle(angle);
            _delay_ms(15);
        }
        
        // Sweep from 180 to 0 degrees
        for(angle = 180; angle > 0; angle--) {
            setServoAngle(angle);
            _delay_ms(15);
        }
    }
    
    return 0;
}
                        

4. Aplikasi dan Integrasi Sistem

Robot Mobile dengan Sensor

Integrasi motor control dengan sensor untuk membuat sistem autonomous:

Contoh Aplikasi: Line Follower Robot

  • Sensor: Infrared sensors untuk deteksi garis
  • Kontrol: PID controller untuk steering
  • Actuator: 2x Motor DC untuk drive wheels
  • Servo: Untuk sensor pan/tilt (opsional)

Tips Desain Sistem Motor

  • Gunakan diode flyback untuk proteksi back EMF
  • Tambahkan capacitor decoupling pada power supply
  • Pisahkan power supply motor dan mikrokontroler
  • Gunakan heat sink pada driver IC jika diperlukan

Latihan Praktikum

Tugas implementasi kontrol motor dan servo

Tugas 1: Sistem Kontrol Motor DC

Buat program untuk mengontrol motor DC dengan fitur:

  • Kontrol kecepatan dengan PWM (0-100%)
  • Kontrol arah putaran (maju/mundur)
  • Acceleration dan deceleration smooth
  • Emergency stop function

Tugas 2: Sistem Kontrol Servo

Implementasikan kontrol servo untuk aplikasi:

  • Servo sweep otomatis (0° - 180°)
  • Kontrol posisi berdasarkan input sensor
  • Preset positions (0°, 45°, 90°, 135°, 180°)
  • Smooth movement dengan acceleration

Tugas 3: Integrasi Sistem

Rancang sistem integrated dengan:

  • 2x Motor DC untuk movement
  • 1x Servo untuk steering/sensor mount
  • Ultrasonic sensor untuk obstacle detection
  • LED indicators untuk status system