PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motor-programmierung verquer



Targion
25.12.2007, 22:46
Hallo!
Ich habe meinen ASURO problemlos zusammengebaut, alle Kabel sind richtig angeschlossen. Wenn ich mit folgendem C-Code die Motoren vorwärts drehe:


#define FULL_L 250
#define FULL_R 250

/* Motor vorwärts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
drehen sich beide Motoren rückwärts.
Nagut, habe ich gedacht und folgenden Code ausprobiert:


void MotorFwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
Damit sollten beide Motoren rückwärts (in meinem Fall: vorwärts) drehen. Stattdessen dreht sich allerdings nur der linke Motor vorwärts!
Habe ich mit dem Code was falschgemacht, oder gibt es da noch Hardwäreprobleme? Alle motoren sind richtig gepolt.
Vielen Dank schon mal für eure Hilfe und frohe Weihnachten!

Lunarman
25.12.2007, 23:30
also dass beide Motoren rückwärts drehen - nun gut, kann ja nen platinenfehler sein so dass die Pins am Anschluss vertauscht sind, ist glaub ich sogar so dass man die andersrum einlöten muss. Aber das sich einer vorwärts dreht statt beide... *grübel* überprüf mal die H-Brücke, vermutlich eine kalte Lötstelle.

Targion
26.12.2007, 13:23
Es gibt keine kalten Lötstellen an der H-Brücke (zumindest soweit ich das sehen kann (da klebt der halbe Tischtennisball drüber)), das Vertauschen der Motoranschlüsse hat zumindest dafür gesorgt, dass ASURO nun vorwärts fährt. War wahscheinlich wirklich ein Beschriftungsfehler. Der Selbst-Test war erfolgreich.
Kann das (der Fehler beim Rückwärtsgang) auch ein Fehler in der ASUROLib sein? Soll ich mal die ein Foto der entsprechenden Platinenteile machen?

Lunarman
26.12.2007, 13:29
ja tu das mal. Der Trick ist ja, dass beim vorwärtsfahren die 4 Pins so sind:
0101 (Beispiel)
und beim rückwärtsfahren
1010.
Wenn jetzt das Signal des dritten Pins zum Beispiel nicht durchkommt, funktioniert zwar das Vorwärtsfahren, aber nicht das Rückwärtsfahren. Unwahrscheinlich dass das so perfekt kaputt ist aber versuchs mal...

Targion
26.12.2007, 13:51
So, hier mal die Platine von oben und unten. Welche 4 Pins meinst du?

Lunarman
26.12.2007, 13:56
aaaalso die Fotos... naja erkenn ich nix drauf 8-[
aber die 4 pins - die, die zum motoren steuern benutzt werden. pro Motor hat man drei Pins, zwei fr die Richtung und einen für die PWM. ist jetzt ein pin 1, der andere 0, dreht der motor so rum, wenns andersrum ist dreht er andersrum. Verstanden?

radbruch
26.12.2007, 13:58
Hallo

Ein zeitlang wurden die asuro-Bausätze mit verpolten Motoranschlüssen ausgeliefert. Da waren dann Vorwärts und Rückwärts vertauscht und man mußte die Anschlusskabel umlöten. Das erklärt aber leider nicht, dass ein Motor überhaupt nicht dreht. Vermutlich stimmt irgendwas mit der H-Brücke nicht. Möglicherweise verklemmt sich auch das Getriebe oder der Motor selbst. Vielleicht mal die Motoren ausbauen und/oder überkreuz anlöten.

Gruß

mic

Lunarman
26.12.2007, 14:00
zum Beispiel könnte es sein dass du einen Transistor... übertemperiert hast ;)

Targion
26.12.2007, 14:03
Ja. Wo sind denn solche Steuerpins am Asuro zu finden?
P.S: Jetzt habe ich noch ein weiteres Problem: Der Asuro führt mein programm nicht mehr aus, stattdessen blinkt er und zuckt etwas mit den Motoren.

sloti
26.12.2007, 14:18
Wenn die Status LED hektisch blinkt ist das ein zeichen dafür, dass die Akkus oder Baterien alle sind.

mfg
Erik

Targion
26.12.2007, 14:23
Das Problem tritt nur mit der aufgebohrten ASURO-Lib auf, wohingegen das Motorproblem auch mit der "normalen" Bibliothek Probleme macht.

Targion
26.12.2007, 21:00
Hier habe ich noch ein weiteres Problem: Ich versuche folgendes Programm auszuführen:

#include <asuro.h>

/* Motor rückwärts Links */
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(190,0);
}

/* Motor rückwärts Rechts */
void MotorRwdR(void)
{
MotorDir(FWD,RWD);
MotorSpeed(0, 190);
}

void Msleep (
int dauer)
{
int z;
for (z = 0; z < dauer; z++)
Sleep (36);
}

int main(void) {
unsigned char t1, t2;

Init ();
t1=0;
t2=0;
while (1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if (t1 == 0 && t2 == 0)
{
MotorDir(FWD,FWD);
MotorSpeed(190,190);
FrontLED(ON);
BackLED(OFF,OFF);
StatusLED(GREEN);
}
else if (t1 && t2 && t1 == t2)
{
MotorSpeed(0,0);
StatusLED(RED);

if (t1 & 0x07)
{
MotorRwdL();
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x38)
{
MotorRwdR();
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep(1000);
}

}
return 0;
}

Das Ergebnis: Der Roboter zuckt mit den Motoren und die Backled leuchtet, als wäre schon ein Tastsensor gedrückt. Ist das ein programmfehler, oder ist da irgendwo ein Hardwarefehler, der die ganzen Probleme verursacht?
@Lunarman: Ich prüfe mal die Transistoren.

Targion
27.12.2007, 15:08
Ich habe jetzt folgendes weiteres ausprobiert: Den Minuspol des rechten Motors mit dem Pluspol des linken Motors verbunden. (Der linke motor ist der, der sich nicht rückwärts drehen will) Nun können beide Motoren rückwärts laufen! (Aber wahrscheinlich wird keine getrennte Geschwindigkeitssteuerung mehr möglich sein)
Kann jemand erkennen, wo der Fehler liegen könnte? Denn dieses Verhalten ist doch sehr merkwürdig.

Lunarman
27.12.2007, 15:56
also zu Deutsch: Der Pin der eigentlich Saft bekommen sollte kriegt keinen Saft und wenn man Saft anschließt funktioniert es. Ist doch mehr oder weniger gut. Es bedeutet die H-Brücke ist im Eimer... ob dich dasn un freut odern icht ist die andere Frage.

radbruch
27.12.2007, 16:28
Das Problem tritt nur mit der aufgebohrten ASURO-Lib auf
Bedeutet das, mit der CD-Version von asuro.c funktionieren beide Motoren normal?

Wenn du die Motorleitungen beider Motoren verbindest, kann das deine H-Brücken endgültig töten! Normalerweise verhindert das AND-Gatter (IC3) das falsche Ansteuern der H-Brücke und vermeidet damit Kurzschlüsse der Transitoren. Bei verbundenen Motorleitungen umgehst du diesen Schutz.

mic

Targion
27.12.2007, 19:12
Hurra!? Ich glaube ich habe den Übeltäter: T3 ist kaputt. Das würde auch mit meinem Verständnis des Schaltplans übereinstimmen. Vielen Dank für die Hilfe!

@radbruch: Gut, dass ich mich nicht entschlossen habe, das Drahtstück festzulöten. So ist noch alles ganz, was vorher auch schon ok war.