... schön langsam denke ich eher in Richtung Hardware defekt da es nur die Steuerung der Fahrmotoren betrifft
Bei meinen Anfängen (Teillösungen zusammengeschnitten und auf einen Controller gebracht) hatte ich auch Probleme mit der Motorsteuerung.
Was half dann:
- Leitungstest Motorausgang vom Treiberbaustein zum Motoreingang auf Platine und Verdrahtung
- Leitungstest von Kurzschlüssen (Übersprechen) von einer Motorleitung zur andern
- GENAUE Inspektion der Schaltbefehle - also Testprogramm dass nacheinander für je 30 sec einen Motorpin nach dem andern schaltet - und das Ganze mit dem DMM nachverfolgen.
- Prüfung der PWM-Funktion statt Nur-Motorpinne-ein-aus
- GENAUE, aufmerksame (umständliche *gg*) Programmiererei, gut kommentierte Motoransteuerung, siehe Beispiel unten
- Zusammenbau der Grundfunktionen Motoransteuerung und NUR die in einem Test prüfen in der Art Mot1 vor, Mot1 zurück, Mot2 ...
- Die Motoren werden softwareseitig NUR über diese Funktionen geschaltet!!
Nur so, als (m)ein Beispiel - und das läuft und läuft. BTW: die Motoren werden softwareseitig NUR über diese Funktionen geschaltet!!
Code:
// ============================================================================= =
// Motoransteuerung mit RN VN2 MotorControl, hier werden die Drehrichtungen gesetzt
// Anschlüsse am mega1284 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
// - - - - - - - - - - - - - - -
// ============================================================================= =
// ===== ENDE Subroutinen ================================================= =
// ============================================================================= =
Lesezeichen