Table of Contents

RC Servomotor

Servomotoren werden oft in ferngesteuerten (radio-controlled/ RC) Modellen eingesetzt und sind aufgrund ihrer Kompaktheit und ihres günstigen Preises nützlich für viele Anwendungen im Bereich der Robotik. Ein RC Servomotor beinhaltet einen eigebauten Gleichstrommotor, ein Getriebe, eine Messeinrichtung zur Bestimmung der genauen Rotorposition (meist ein Potentiometer) und die Fahrelektronik. RC Servomotoren werden mit einem externen Pulsweitenmodulierten Steuersignal (PWM) angesteuert. Das Steuersignal gibt eine (Ziel)Position für die Servo-Elektronik an, welche die angegebene Position der Motorwelle mit der geforderten vergleicht und bestmöglich anpasst. Das Steuersignal ist ein stetiges Rechtecksignal (siehe Bild)

Servomotoren haben drei Kabel:

Das PWM Signal hat folgende Form:

?400

1.0ms = weiteste linke Position

1.5 ms = Center Position

2.0 ms = weiteste rechte Position

Elektrische Verbindung

Tabelle Steuersignale vom ATmega128 zu dem Actuator-Board.

servo_connection_table.jpg

  1. Schalte den Strom ab.
  2. Verbinde Actuator-Board und Main-Board mit einem 26-pin Kabel.
  3. Verbinde den RC Servomotor mit dem Actuator-Board (siehe Bild 2). Anmerkung: Das Signal-Kabel (normalerweise Geld oder Weiß) befindet sich am äußeren Rand des Boards.
  4. Verbinde den JTAG Converter mit dem ATmega128 Main-Board und dem PC.
  5. Schließe Actuator- und Main-Board an den Strom an.

Beispiel Code

/*-------------------------------------------------------------
Title:		RC Servo motor with Actuator Board
Date:		080327
Ver.:		1.1
Compiler:	AVR-GCC
Target:		ATmega128
Hardware:	ATmega128 controller board, Actuator board, RC servo motor
Author: 	Raivo Sell 2008
 
Notes:	Description: Moves slowly RC motor shaft from one edge to another.
---------------------------------------------------------------*/
#define F_CPU 14745600UL //CPU Frequency (influences delay function)
 
#include <avr/io.h>
#include <util/delay.h>
 
///////////////// Main function //////////////////////////////////
int main (void){
 
	// Set timer control registers
	TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM11);
	TCCR1B = _BV(CS11) | _BV(WGM13) | _BV(WGM12); 
 
    	DDRB 	 = 0x30;  // PB5 & PB6 output
	ICR1   = 36000; // Sets the upper limit to Timer1 
    			//(creates 50 Hz signal) XTAL/8/256*50   14745600
	OCR1A  = 2700;  // Sets when the PWM signal should toggle.
 
	while(1){
		for(OCR1A=500;OCR1A!=5000;OCR1A++)  {_delay_ms(3);}
		for(OCR1A=5000;OCR1A!=500;OCR1A--)  {_delay_ms(3);}
	}
}