der Betrieb eines Gleichstrommotors (DC Motor) basiert, wie alle elektrischen Motoren, auf Elektromagnetismus. The operation of direct current (DC) motors, like all other electric motors, is based on simple electromagnetism. Gleichstrommotoren mit Bürsten haben zwei Kabelverbindungen, eine positive und eine negative. Die Rotationsrichtung wird über die Polarität bestimmt, die Geschwindigkeit über die Spannung.
Steuern des Gleichstrommotors:
Eine H-Brücke oder zwei Halbbrückentreiber können eingesetzt werden um einen Gleichstrommotor vorwärts und rückwärts laufen zu lassen. Als Schaltung können fertige Anwendungsspezifische Integrierte Schaltungen (engl. application specific integrated circuit, ASIC) genutzt werden, oder eine aus einzelnen Komponenten, wie z.B. Transistoren, selbst zusammengebaut werden. In diesem Lab kommt der IC L293D zum Einsatz, welcher 4 Halbbrückentreiber, geeignet zur Ansteuerung von 2 DC-Motoren, bietet.
Mit diesem kompilierten Programm lässt sich das Set-Up der Geräte testen. Der Gleichstrommotor ist an DC1 Port 2 und der Servomotor an PWM1 angeschlossen. mootorite_testv5.hex
Elektrische Verbindungen
/*------------------------------------------------------------- Title: DC motor with Actuator Board Date: 080424 Ver.: 1.2 Compiler: AVR-GCC Target: ATmega128 Hardware: ATmega128 controller board, Actuator board, DC motor Author: Raivo Sell 2008 Notes: in1 PD7 in2 PD6 Optimization: -O0 (needed for delay function) Description: Start and stop the DC motor and change the rotation direction. Motor is connected to the DC1 pins 3 ---------------------------------------------------------------*/ #define SET(x) |= (1<<x) //set bit high bit in pin x #define CLR(x) &=~(1<<x) //set bit low bit in pin x #define MS (100) //defines delay #define F_CPU 14745600UL //CPU Frequency (influences delay function) #include <avr/io.h> ///////////////// Functions ////////////////////////////////// void dc_drive(int pin, int op){ // DC motor control function if (op==1) PORTD SET(pin); else PORTD CLR(pin); } void _delay_ms(int t){ // Delay function int i,j; for (i=0;i<t;i++){ for (j=0;j<8000;j++){} } } ///////////////// Main function ////////////////////////////////// int main (void){ DDRD = 0xFF;// set port direction (output) PORTD = 0x00;// initialize port while(1){ dc_drive(6,1); // Start DC motor dc_drive(7,0); _delay_ms(MS); // Wait for a second dc_drive(6,0); // Change direction dc_drive(7,1); _delay_ms(MS); // Wait for a second dc_drive(6,0); // Stop DC motor dc_drive(7,0); _delay_ms(MS); // Wait for a second } }