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
Kontrol Kecepatan
Kontrol Arah
Kode Program Motor DC
#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
Kontrol Posisi Servo
Mode Sweep
Kode Program Servo
#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