====== Motoren ====== //Bezug nehmend auf: [HW] [[en:hardware:homelab:motor]]// Diese Bibliothek enthält Funktionen zur Steuerung der verschiedenen HomeLab Motoren. Sie enthält Funktionen für Gleichstrom- (DC-), Schritt- und Servomotoren, ===== Funktionen ===== * **//void dcmotor_init(unsigned char index)//** \\ Initialisiert einen der Controller für die DC Motoren. Parameter: * //index// - Index des Motorencontrollers. 0 bis 3. * **//void dcmotor_drive(unsigned char index, signed char direction)//** \\ Betriebt einen der Controller der DC Motoren. Parameter: * //index// - Index des Motorencontrollers. 0 bis 3. * //direction// - Polarität des Motors. -1, 0 oder +1. Bei 0 wird der Motor angehalten, ansonsten bewegt er sich in die vorgegebene Richtung. * **//void unipolar_init(unsigned char index)//** \\ Initialisiert den Controller eines der unipolaren Schrittmotoren. Parameter: * //index// - Index des Motorencontrollers. 0 oder 1. * **//void unipolar_halfstep(unsigned char index, signed char direction, unsigned short num_steps, unsigned char speed)//** \\ Befehl zum Halbschrittbetrieb für unipolaren Schrittmotor. Die Funktion ist blockierend bis sie erfüllt ist, bis alle Schritte durchgeführt wurden. Parameter. * //index// - Index des Motorencontrollers. 0 oder 1. * //direction// - Rotationsrichtung. -1 oder +1. * //num_steps// - Zählen der Halbschritte. * //speed// - Zeit eines einzelnen Schritts in Millisekunden. * **//void bipolar_init(void)//** \\ Initialisiert den Controller des bipolaren Schrittmotors. * **//void bipolar_halfstep(signed char direction, unsigned short num_steps, unsigned char speed)//** \\ Befehl zum Halbschrittbetrieb für bipolaren Schrittmotor. Die Funktion ist blockierend bis sie erfüllt ist, bis alle Schritte durchgeführt wurden. Parameter: * //direction// - Rotationsrichtung . -1 oder +1. * //num_steps// - Zählen der Halbschritte. * //speed// - Zeit eines einzelnen Schritts in Millisekunden. * **//void servomotor_init(unsigned char index)//** \\ Initialisiert eine der PWM Signal-generierenden Einheiten eines Servomotors des ATmega128 Timers 1. Das PWM Signal beträgt 50 hz bei einer high period of 1.5 ms ± 0.5 ms. Parameter: * //index// - Index des Servomotors. 0 oder 1. * **//void servomotor_position(unsigned char index, signed short position)//** \\ Takt des Servomotors mit Kontrollbefehl. Die Position eines Servomotors verändert sich wenn dieser betrieben wird. Wird er gedreht, verändert sich seine Drehzahl. Parameter: * //index// - Index des Servomotors. 0 oder 1. * //position// - Position oder Drehzahl. -100 bis +100. Bei 0 stoppt der Motor. ===== Beispiel ===== Nutzung von Gleichstrom- (DC-), Schritt- und Servomotoren. #include int main(void) { // Initialisierung der DC Motoren. dcmotor_init(0); dcmotor_init(1); // Initialisierung des bipolaren Schrittmotors. bipolar_init(); // Initialisierung der Servomotoren. servomotor_init(0); servomotor_init(1); // Ein DC Motor fährt vorwärts, ein anderer rückwärts. dcmotor_drive(0, -1); dcmotor_drive(1, +1); // Bewegt den Schrittmotor 100 Schritte in eine Richtung // und daraufhin zurück mit doppelter Geschwindigkeit. bipolar_halfstep(1, 100, 50); bipolar_halfstep(-1, 100, 25); // Bewegt Servomotoren in entgegengesetzte Richtungen. servomotor_position(0, -100); servomotor_position(1, +100); }