Gebürsteter Motor (wohl das, was Du mit Gleichstrommotor meinst) oder Schrittmotor sind (meiner unbedarften Meinung nach) eher Glaubensbekenntnisse (abgesehen von Spezialfällen). Vorteil des Schrittmotors: das Verfahren hat eine - meist, aber nicht unbedingt, zuverlässige - Drehzahlvorgabe (ausser es gibt Schrittverluste). Wird Dir sicher bekannt sein... Gleichstrommotor oder Schrittmotor .. wie macht man den Motor bidirektional?
Zum Beschreiben der Gleichstrommotor-Ansteuerung zitiere ich unten meinen entsprechenden C-Code für meine rollende Coladose. Dort sind modifizierte Modellbauservos als Antrieb eingebaut denen ich eine Drehzahlmessung verpasst hatte. Beispiel für ne Testfahrt - uralt. Im wahren Leben sieht das dann beispielsweise so aus - wieder nur ne Art Test. Autonom kommt dann noch ne Hinderniserkennung (Hindernis oder Abgrund) ins Spiel.
Für die Ansteuerung solcher Motoren macht man sich zweckmässigerweise ne "Wahrheitstabelle", nochnBeispiel:Code:// ============================================================================== = // Motoransteuerung mit dem L293D, hier werden die Drehrichtungen gesetzt // Anschlüsse M168 für R3D01 für die Motoransteuerung (Stand 24mrz09 1410) : // Motor 12 ist in Fahrtrichtung rechts (Kennzeichen 1 Punkt) // Motor 34 ist in Fahrtrichtung links (Kennzeichen 2 Punkte) // // (E7) _|-- 1,2 Guz, PD4___6 23___PC0, SFH 5110, IN irDME 1-2 // . . . . . . . . . . . . // XTAL1 PB6___9 20___VCC // XTAL2 PB7 10 19 PB5, SCK, Taster2 // (E6) PWM 1,2 uz+Guz,PD5 11 18 PB4, MISO, _|-- 1,2 uz, Taster1 // (E5) PWM 3,4 uz+Guz,PD6__12 17___PB3, MOSI, Reserve 2 // (E8) _|-- 3,4 uz,PD7 13 16 PB2, Servo // (E9) _|-- 3,4 Guz,PB0 14 15 PB1, OC1A = SFH 415, OUT (irDME) // - - - - - - - - - - - - - - - - - - - - - - - - - - // vgl. Erklärung von Hubert.G (zu L293D) // http://www.roboternetz.de/community/threads/59146 //-Wieso-benötigt-RN-Control-(1-4-)-für //-integrierten-Motortreiber-gleich-3-freie-Ports?p=558716&viewfull=1#post558716 // Zitat Mit setzten von Kanal 1 und 2 auf 0 ist der Motor im Freilauf, // werden beide Kanäle auf 1 gesetzt wird der Motor gebremst // - - - - - - - - - - - - - - - - - - - - - - - - - - // ----------------------- // Drehrichtungsbefehle für Motor 1,2 = "rechter" Motor // r r r r r r r Motor 1,2 = rechter Motor r r r r r r // ============================================================================== = void Mrechtsvor (void) // Mot12 dreht im Uhrzeigersinn = neg. math. { // .. dann fährt rechtes Rad "vorwärts" // TCCR0A |= (1<<COM0B1); // Enable clear/set OC0B on Compare Match PORTD &= ~(1<<PD4); // Setze 1A low PORTB |= (1<<PB4); // Setze 2A high mdir12 = 1; } // // ============================================================================== = void Mrechtszur (void) // Mot12 dreht im mathematisch positiven Drehsinn { // .. dann fährt rechtes Rad "rückwärts" // TCCR0A |= (1<<COM0B1); // Enable clear/set OC0B on Compare Match PORTD |= (1<<PD4); // Setze 1A high PORTB &= ~(1<<PB4); // Setze 2A low mdir12 = -1; // } // // ============================================================================== = void Mrechtsstop (void) // Motor 12 aus { // // TCCR0A &= ~(1<<COM0B1); // Disable clear/set OC0B on Compare Match PORTD &= ~(1<<PD4); // Setze 1A low PORTB &= ~(1<<PB4); // Setze 2A low } // // ----------------------- // Drehrichtungsbefehle für Motor 3,4 = "linker" Motor // l l l l l l l Motor 3,4 = linker Motor l l l l l l // ============================================================================== = void Mlinksvor (void) // Mot3,4 dreht im mathematisch positiven Drehsinn { // .. dann fährt linkes Rad "vorwärts" // TCCR0A |= (1<<COM0A1); // Enable clear/set OC0A on Compare Match PORTB |= (1<<PB0); // Setze 3A high PORTD &= ~(1<<PD7); // Setze 4A low mdir34 = 1; } // ============================================================================== = void Mlinkszur (void) // Mot3,4 dreht im Uhrzeigersinn = neg. math. { // .. dann fährt linkes Rad "rückwärts" // TCCR0A |= (1<<COM0A1); // Enable clear/set OC0A on Compare Match PORTB &= ~(1<<PB0); // Setze 3A low PORTD |= (1<<PD7); // Setze 4A high mdir34 = -1; // } // // ============================================================================== = void Mlinksstop (void) // Motor 34 aus { // // TCCR0A &= ~(1<<COM0A1); // Disable clear/set OC0A on Compare Match OCR0A = 0; // PWM-Wert Mot34 auf Null setzen PORTB &= ~(1<<PB0); // Setze 3A low PORTD &= ~(1<<PD7); // Setze 4A low } // // ============================================================================== =Ist ein bisschen viel - viel-leicht hilfts Dir aber .Code:// ============================================================================= = // Motorsteuerung babyorangutan/TB6612FNG - Wahrheitstabelle // übernommen am 19. Nov. 2018 aus Smt01_mot10.c, Version // D02_x15 19Sep18 23ff Ausgänge A01 und A02 getestet und bestätigt // ============================ // Motor12 (A) Motor 34 (B) Motor- // PB4 PD4 P?? P?? AO1,BOx AO2,BOx effekt // PWMA PWMB // AIN1 AIN2 BIN1 BIN2 // H H H H L L brake // L H H L L H math.neg = uz // H L L H H L math.pos = Guz *) 19Nov18 ok! // L L L L OFF (high impedance) coast // coast =: auslaufen, ausrollen // *) WENN der Positive Motoranschluss an AO1 liegt resultiert bei den (meisten) // Motoren ein Lauf im Gegenuhrzeiger, mat-pos, bei Blick auf Abtriebswelle // ============================================================================= = // ============================================================================= = // - - - - - - - - - - - - - - - // MoRe "vor" =: Vorwärtsfahrt "rechts" =: Drehsinn Mot // Beispiel mot12 dreht mathematisch negativ bei Befehl "vor" = "rechts" // vor/re zur/li stop brems vor/zur = Rad-/Fortbewegung // M11= 0 1 0 1 re / li = Motordrehrichtung // M12= 1 0 0 1 // - - - - - - - - - - - - - - - - // MoLi =: Mot34, "vor/links" dreht Motor mathematisch positiv // vor/li zur/re stop brems vor/zur = Rad-/Fortbewegung // M41= 1 0 0 1 re / li = Motordrehrichtung // M42= 0 1 0 1 // ============================================================================= = // ============================================================================= = // Motoransteuerung mit L293D, auch TB66.., hier werden die Drehrichtungen gesetzt // Anschlüsse: Motor 12 ist in Fahrtrichtung rechts (Kennzeichen 1 Punkt) // Motor 34 ist in Fahrtrichtung links (Kennzeichen 2 Punkte) // // -|__ 1,2 Guz, PD4___6 23___PC0, SFH 5110, IN irDME 1-2 // . . . . . . . . . . . . // XTAL1 PB6___9 20___VCC // XTAL2 PB7 10 19 PB5, SCK, Taster2 // PWM 1,2 uz+Guz,PD5 11 18 PB4, MISO, _|-- 1,2 uz // PWM 3,4 uz+Guz,PD6__12 17___PB3, MOSI, Reserve 2 // _|-- 3,4 uz,PD7 13 16 PB2, Servo // _|-- 3,4 Guz,PB0 14 15 PB1, OC1A = SFH 415, OUT (irDME) // - - - - - - - - - - - - - - - - - - - - - - - - - - // ============================================================================= =
Zur GeschwindigkeitsREGELUNG (die beiden Motoren der Coladose laufen unabhängig von einander - geradeaus läuft die Dose nur wenn BEIDE Motoren exakt gleich schnell laufen) muss man noch n bisschen Regelungstechnik machen. Die ist dann aber auch kein wirkliches Geheimnis.







Zitieren

Lesezeichen