PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-VN2 DualMotor (für 2 Motoren)



Scalli
24.01.2015, 22:49
Hallo an Alle!
Kann mir jemand weiterhelfen.
Ich habe mir RN-VN2 DualMotor (für 2 Motoren) zugelegt. Wie kann ich die zwei Motoren zum Laufen bringen. Ich bin Anfänger und hatte mir das etwas zu einfach vorgestellt. An PIN 1 z.B. 5 Volt anlegen, dann läuft Motor nach rechts, PIN 2 5 Volt anlegen, dann läuft Motor nach links.PIN 9 und 10 habe ich mit 5 Volt versorgt.
Zusätzlich habe ich noch 12 Volt für die Hauptversorgung der Platine angeschlossen.
Es tut sich nichts. Keine Spannung am Motoranschluss 1 feststellbar.Nachfolgend ist beschrieben, wie die PIN`s belegt sind.
Danke für Hilfe..
Gruß an alle



Pin 1 Motor 1 IN 1
Pin 2 Motor 1 IN 2
Pin 3 Motor 2 IN 1
Pin 4 Motor 2 IN 2
Pin 5 Rückgabe Signal von 0 bis 2,5V (bei ca. 0-15A) das einem AD-Port die
Strommessung für Motor 1 erlaubt (siehe dazu Tabelle nächste Seite)
Pin 6 Enable Motor1 ein (PWM)
Pin 7 Rückgabe Signal von 0 bis 2,5V (bei ca. 0-15A) das einem AD-Port die
Strommessung für Motor 2 erlaubt (siehe dazu Tabelle nächste Seite)
Pin 8 Enable Motor2 ein (PWM)
Pin 9 GND
Pin 10 Logikspannung 5V

Geistesblitz
25.01.2015, 01:41
Das funktioniert üblicherweise so: wenn Motor IN 1 High und Motor IN 2 Low ist, dreht sich der Motor in eine Richtung, anders herum in die andere Richtung. Sind beide High oder Low, ist der Motor kurzgeschlossen und wird gebremst. Das alles trifft aber nur dann zu, wenn auch der Enable-Eingang auf High gelegt wird, sonst ist der Motor wie nicht angeschlossen und lässt sich frei drehen. Ich vermute mal, du hast vergessen, den Enable-Eingang anzusteuern.

oberallgeier
25.01.2015, 08:46
Hallo Scallli,

willkommen im Forum. Eigentilch ist diese Sache einfach, Geistesblitz hats ja schon mal kurz und knackig beschrieben. Hier die "Langform" *gg*.


... Ich habe mir RN-VN2 DualMotor (für 2 Motoren) zugelegt. Wie kann ich die zwei Motoren zum Laufen bringen ...Jetzt fehlen noch ein paar Angaben.
- Vermutlich betreibst Du das Ganze mit der RN-Motorcontrol-Platine die auf die Treiberplatine aufgesteckt wird ! ? ! ? (mega328, programmiert erhältlich). Aber die Fragen klingen nach eigener Programmierarbeit.
- Welche Programmiersprache ?
- ein paar genauere Angaben eben, auch die Angabe der oder ein Link zur Controllerplatine wäre nützlich.


... Nachfolgend ist beschrieben, wie die PIN`s belegt sind ...Also die "ganz normale" Konfiguration. Die habe ich auch, läuft z.B. in meinem Archie (klick mal). (https://www.roboternetz.de/community/threads/61379-Kopfsache-und-ein-m1284-etliche-Servos-viel-Alu?p=600400&viewfull=1#post600400) Der Archie läuft mit einer 12V-Versorgung des Motors und mit den üblichen 5V für Controller. Hier ohne Bedeutung ist es, dass ich die Controllerspannung vollständig von der Motortreiberplatine mit den VN2-Chips abgekoppelt habe. Dies hat KEINEN Einfluss auf die Programmierung.

Also zu Deiner Frage:
Hier mal ein Auszug aus meinem Modul "Motortreiber", Programmiersprache C, dazu ein Auszug aus dem zugehörigen Header mit den #defines für die Motoransteuerung. Darin ist einmal die Belegung der Pins am Controller zu sehen -- gilt aber für meinen aktuellen mega1284, eine Anmerkung zum früheren mega328 ist dabei. Wenns noch weitere Fragen gäbe (aber ich kann kein Bascom) - dann nur zu.

////////////// 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 **************************** */

Scalli
25.01.2015, 12:17
Hallo Geistesblitz!
Erst einmal vielen Dank für die schnelle Antwort. Ich habe deinen Tipp mit Enable 1 auf High umgesetzt. Jetzt funktioniert es.
Vielleicht kannst Du mir noch folgende Frage beantworten. Wie ist die Grundeinstellung betreffend Stromabschaltung.
Ich beabsichtige zwei Motoren anzutreiben und wenn der Strom zu hoch wird, sollen die Motoren abschalten.Die Motoren setzen zwei Hubstützen in Bewegung. Wenn die Stützen auf Widerstand stoßen und der Motor bzw. die Motoren blockieren, soll automatisch abgeschaltet werden. Benötige hierfür unbedingt das Controllerboard (z.B. RN-Control) um die Abschaltstromhöhe festzulegen oder ist RN-VN2 DualMotor-Modul schon so programmiert, das es bei einem Strom, zB. 10 Ampere automatisch abschaltet.

Gruß
Scalla

Geistesblitz
25.01.2015, 12:38
Keine Ahnung, was für ein Programm benutzt du denn? An sich sollte das aber nicht schwer sein, da sich ja der Motorstrom über die Rückmeldungs-Pins auslesen lässt. Dazu musst du die aber mit einem ADC verbinden können (weiß gerade nicht, wie es mit dem Controller verschaltet ist). Im Programm sollte man dann festlegen können, ab welchem ADC-Wert die Motoren abgeschaltet werden. Dazu empfielt sich aber auch eine gescheite Filterung, außerdem ziehen DC-Motoren beim Anfahren auch schon recht viel Strom, nicht dass die gleich beim Anfahren wieder abgeschaltet werden. Kommt auch drauf an, welche Referenzspannung eingestellt ist (entweder Vcc, Aref oder die interne Referenzspannung von 2,56V). Musst dich mal mit deinem Programm auseinandersetzen, wie es dort gemacht wird, das wird doch sicher irgendwo dokumentiert sein. Wenn du selber programmierst, ist hier das Datenblatt des Atmega32 dein Freund.

Therion
08.02.2015, 20:32
Hallo

Ich muss mich auch mal hier melden, denn ich habe ein Problem mit RN-MotorControl und RN-VH2DualMotor Platine.
Die beiden sind aufeinander gesteckt, genauso wie das im Shop von Robotikhardware beschrieben ist - wenn das so ist muss man ja eigentlich
nichts mehr miteinander verbinden (von RS232 für PC mal ganz abgesehen).
Leider funktioniert es nicht, ich habe ein Programm (in py) geschrieben welches bereits existiert und fröhlich Befehle sendet (funktioniert auch, genauso wie in der Dokumentation beschrieben) - hier habe ich schon alles überprüft.
Der µC nimmt schon alle Befehle entgegen, nur leider dreht sich kein Motor ... es tut sich nichts.
Wenn ich Pin1 Motor 1 IN 1 mit einem der PWM Pins verbinde, fängt er sich an zudrehen (dreht sich dann immer) - das kann ja nicht richtig sein,
der µC soll das ja schalten.

Ich habe mir jetzt schon min. 3x das PDF durchgelesen und viel Doku dazu, werde aber nicht schlauer.
Was kann ich hier vergessen habe, bzw. wie wäre die Minimal Konfiguration um einen Motor einfach mal via RS232 Befehl einzuschalten/auszuschalten?