Code:
////////////// Auszug aus (meinem) Modul Motoransteuerung
// ============================================================================= =
// Motoransteuerung mit RN VN2 MotorControl, hier werden die Drehrichtungen gesetzt
// Anschlüsse am mwga1284 auf MoCo4 (eigne Platine, Stand Anfang Sep14 ) :
// Motor12 ist in Fahrtrichtung rechts, Rad rechts vom Motor
// Motor34 ist in Fahrtrichtung links, Rad links vom Motor
// Motorbefehle: Mxxxxvor => Rad bewegt Gefährt VORwärts etc.
// A C H T U N G : Motoranschlüsse der VN haben (+) "innen" und GND/(-) "aussen"
// ############### ########## ############
// - - - - - - - - - -
// XTAL1 PB6___9 20___VCC
// XTAL2 PB7 10 19 PB5, SCK, _|-- 3,4 Guz
// PD5 11 18 PB4, MISO
// Mot12 _|-- 1,2 uz, PD6__12 17___PB3, MOSI, Reserve 2
// Mot12 _|-- 1,2 Guz, PD7 13 16 PB2, OC1B => PWM4 für Mot34
// Mot34 _|-- 3,4 uz, PB0 14 15 PB1, OC1A => PWM1 für Mot12
// - - - - - - - - - - - - - - - - - - - - - - - - - -
// vgl. Erklärung von Hubert.G (zu L293D)
// https://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 Setzen 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) // Recht Mot12 dreht rechts=Uhrzeiger=math-negativ
{ // dann fährt recht. Rad "vorwärts" = Mrechtsvor
TCCR1A |= (1<<COM1A1); // Clear/set OC1A on Cmp Match enabled 132
PORTD |= (1<<M11); // => 1; Setze M1-IN1 high
PORTD &= ~(1<<M12); // => 0; Setze M1-IN2 low
m12dir = 1; // m12dir ist positiv, weil Antrieb VORWÄRTS
} //
// ============================================================================= =
void Mrechtszur (void) // ReMot12 dreht links=Gegenuhrzeigersinn=math-pos
{ // .. dann fährt rechtes Rad "rückwärts"
TCCR1A |= (1<<COM1A1); // Clear/set OC1A on Cmp Match enabled 132
PORTD &= ~(1<<M11); // => 0; Setze M1-IN1 low
PORTD |= (1<<M12); // => 1; Setze M1-IN2 high
m12dir = -1; // m12dir ist negativ, weils Antrieb RÜCKWÄRTS
} //
// ============================================================================= =
void Mrechtsaus (void) // Motor 12 aus
{ //
TCCR1A &= ~(1<<COM1A1); // Disable clear/set OC0B on Compare Match
OCR1A = 0; // PWM-Wert Mot12 auf Null setzen
PORTD &= ~(1<<M11); // Setze M1-IN1 low
PORTD &= ~(1<<M12); // Setze M1-IN2 low => beide low => Freilauf
m12dir = 0; //
} //
// ============================================================================= =
void Mrechtsbrms (void) // Motor 12 BREMSEN
{ //
TCCR1A &= ~(1<<COM1A1); // Disable clear/set OC0B on Compare Match
OCR1A = 0; // PWM-Wert Mot12 auf Null setzen
PORTD |= (1<<M11); // Setze M1-IN1 high
PORTD |= (1<<M12); // Setze M1-IN2 high => beide high => Bremsen
m12dir = 0; //
} //
// -----------------------
// 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) // LiMot34 dreht im Gegenuhrzeigersinn = math. neg
{ // dann fährt linkes Rad "vorwärts" = Mlinksvor
TCCR1A |= (1<<COM1B1); // Enable clear/set OC0B on Compare Match
PORTC &= ~(1<<M41); // => 0; Setze M4-IN1 low
PORTC |= (1<<M42); // => 1; Setze M4-IN2 high
m34dir = 1; // m34dir ist positiv, weils Antrieb VORÄRTS
} //
// ============================================================================= =
void Mlinkszur (void) // Linkr Mot34 dreht im Uhrzeig=math-pos.
{ // .. dann fährt linkes Rad "rückwärts"
TCCR1A |= (1<<COM1B1); // Enable clear/set OC0B on Compare Match
PORTC |= (1<<M41); // => 1; Setze M4-IN1 high
PORTC &= ~(1<<M42); // => 0; Setze M4-IN2 low
m34dir = -1; // m34dir ist negativ, weil Antrieb RÜCKWÄRTS
}
// ============================================================================= =
void Mlinksaus (void) // Motor 34 aus
{ //
TCCR1A &= ~(1<<COM1B1); // Disable clear/set OC1B on Compare Match
OCR1B = 0; // PWM-Wert Mot34 auf Null setzen
PORTC &= ~(1<<M41); // => 0; Setze M4-IN1 low
PORTC &= ~(1<<M42); // => 0; Setze M4-IN2 low
m34dir = 0; //
} //
// ============================================================================= =
void Mlinksbrms (void) // Motor 34 BREMSEN
{ //
TCCR1A &= ~(1<<COM1B1); // Disable clear/set OC1B on Compare Match
OCR1B = 0; // PWM-Wert Mot12 auf Null setzen
PORTC |= (1<<M41); // => 1; Setze M4-IN1 high
PORTC |= (1<<M42); // => 1; Setze M4-IN2 high => beide high = Bremsen
m34dir = 0; //
} //
// ============================================================================= =
// Wahrheitstabelle für die Motoren gemäß VN2 und Drehsinn-Definitionen
// #define M11 PD6 // M1-IN1 auf PD6 Motor 1 (12) weil er auf
// #define M12 PD7 // M1-IN2 auf PD7 den Anschlüssen 12 liegt
// #define M41 PC4 // M4-IN1 auf PC4 Motor 4 (34) weil er auf
// #define M42 PC5 // M4-IN2 auf PC5 den Anschlüssen 34 liegt
// - - - - - - - - - - - - - - -
// 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= 1 0 0 1 re / li = Motordrehrichtung
// M12= 0 1 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
// - - - - - - - - - - - - - - -
// ============================================================================= =
//////////// Auszug aus der Headerdatei:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RXD0, PD0 14 A A 27 PC5, Mot34 _|-- 3,4 Guz *)
// TXD0, PD1 15 A A 26 PC4, Mot34 _|-- 3,4 uz *)
// JP5-INT0, PD2 16 EU EU 25 PC3, JP6-IencB1
// JP6-INT1, PD3 17 EU EU 24 PC2, JP5-IencB0
// OC1B-PWM4_f-MOT34, PD4 18 A E 23 PC1, SDA
// OC1A-PWM1_f-MOT12, PD5 19 A E 22 PC0, SCL
// Mot12 _|-- 1,2 uz, PD6 20 A A 21 PD7, Mot12 _|-- 1,2 Guz
// *) Guz (math pos) und uz (Uhrzeigersinn) ##>> auf Motor-Abtriebswelle bezogen !
// - - - - - - - - - - - - - - - -
#define OCPWM1 OCR1A // PWM1 auf PD5 für Motor 12
#define OCPWM4 OCR1B // PWM4 auf PD4 für Motor 34
#define M11 PD6 // M1-IN1 auf PD6 ###>>> gleich wie 328
#define M12 PD7 // M1-IN2 auf PD7 ###>>> gleich wie 328
#define M41 PC4 // M4-IN1 auf PC5 ###>>> ÄNDERUNG
#define M42 PC5 // M4-IN2 auf PC4 ###>>> ÄNDERUNG
/* ****************** War auf MotoControl mega328:
#define M11 PD6 // M1-IN1 auf PD6
#define M12 PD7 // M1-IN2 auf PD7
#define M41 PB0 // M4-IN1 auf PB0
#define M42 PB5 // M4-IN2 auf PB5 **************************** */
Lesezeichen