PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro - Motoren spielen verrückt....



Illuminon
16.02.2006, 13:47
Hallo Leute

Ich habe ein ziemlich merkwürdiges Problem mit meinem Asuro. Er scheint es mit Fahrbefehlen nicht mehr sehr genau zu nehemen. Nach langem Suchen habe ich den Code auf dieses winzige Schnippsel zusammengestaucht:


#include "asuro.h"

unsigned char SPEED_LEFT=255, SPEED_RIGHT=255;
int TIME_FORD=500, TIME_TURN=500;


void LongSleep(int msec)
{
int i;
for (i=0; i<msec; i++) Sleep(72);
}


int main(void)
{
Init();
StatusLED(RED);

while(1)
{
MotorDir(RWD,FWD); // vorwärtsfahren, motoren sind vertauscht, daher RWD...
MotorSpeed (SPEED_LEFT,SPEED_RIGHT);
LongSleep(3000);
MotorSpeed (BREAK,BREAK);
LongSleep(3000);
}
return 0;
}


Soweit ich das verstehe, sollte der Roboter alternierend 3s fahren und dann 3s stehen. Das tut er aber nur manchmal. Er haltet immer den 3s Takt ein, aber manchmal machen die Motoren überhaupt nichts und manchmal funktioniert alles. An den Batterien kann es nicht liegen, da der Asuro extern gespiesen wird. Ein Hardwaremangel ist auch unwahrscheinlich, da der Selftest zuverlässig funktioniert.
Ich bin mit meinem Latein am Ende, hat irgendwer eine Idee?

Ich wäre für Anregungen sehr dankbar :-k
Illuminon

super_castle
17.02.2006, 18:11
schmelz den ausro ein...

Arexx-Henk
17.02.2006, 19:34
Hallo Illuminon,

Konnte es vielleicht sein das die Accu's oder Batterien nicht mehr ganz geladen sind?

Wenn die beide Motoren zugleich mit maximalen Speed (255) gestartet werden dann konnte es sein dass die Versorgungsspannung ein bischen heruntersturtzt und damit die Asuro aufs neu Booted/Aufstartet.

Wenn die Rote led Orange aufleuchtet ist die Asuro aufs neu gestartet worden.

Gruss

Henk

Baracke
18.02.2006, 07:36
Hallo Leute

Ich habe ein ziemlich merkwürdiges Problem mit meinem Asuro. Er scheint es mit Fahrbefehlen nicht mehr sehr genau zu nehemen. Nach langem Suchen habe ich den Code auf dieses winzige Schnippsel zusammengestaucht:


#include "asuro.h"

unsigned char SPEED_LEFT=255, SPEED_RIGHT=255;
int TIME_FORD=500, TIME_TURN=500;


void LongSleep(int msec)
{
int i;
for (i=0; i<msec; i++) Sleep(72);
}


int main(void)
{
Init();
StatusLED(RED);

while(1)
{
MotorDir(RWD,FWD); // vorwärtsfahren, motoren sind vertauscht, daher RWD...
MotorSpeed (SPEED_LEFT,SPEED_RIGHT);
LongSleep(3000);
MotorSpeed (BREAK,BREAK);
LongSleep(3000);
}
return 0;
}


Soweit ich das verstehe, sollte der Roboter alternierend 3s fahren und dann 3s stehen. Das tut er aber nur manchmal. Er haltet immer den 3s Takt ein, aber manchmal machen die Motoren überhaupt nichts und manchmal funktioniert alles. An den Batterien kann es nicht liegen, da der Asuro extern gespiesen wird. Ein Hardwaremangel ist auch unwahrscheinlich, da der Selftest zuverlässig funktioniert.
Ich bin mit meinem Latein am Ende, hat irgendwer eine Idee?

Ich wäre für Anregungen sehr dankbar :-k
Illuminon

Diese Zeile
MotorSpeed (BREAK,BREAK);

könte der Fehler sein.

Korrekt wäre

MotorDir (BREAK,BREAK);
MotorSpeed(0,0);

Gruß Detlev

Spessi
18.02.2006, 07:50
Für was dann BREAK, wenn man die Geschwindigkeit sowieso runterdrehen muss?

Lunarman
18.02.2006, 09:57
Es könnte übrigens auch sein, dass die Motoren einfach wackeln und sich dann manchmal so fest an die Zahnräder drandrücken, dass sie einfach nicht mehr drehen - aber das hört man dan auch an so einem leisen PIEPEN.

Baracke
18.02.2006, 11:26
Für was dann BREAK, wenn man die Geschwindigkeit sowieso runterdrehen muss?

Man kann auch einfach die Geschwindigkeit auf 0 setzen, mit MotorDir(BREAK,BREAK) laufen die Moteren nicht so lange nach, da die Motoren über die H-Brücke quasi "kurzgeschlossen werden" - Motorbremse

Gruß Detlev

Illuminon
19.02.2006, 10:23
Hallo Leute

Vielen Dank für die zahlreichen Antworten. Zuerst einmal vorweg: Es funktioniert wieder... Es ist mir allerdings komplett schleierhaft warum. Ich habe den Code Schritt für Schritt wieder zusammengesetzt, bis ich beinahe den identischen Code wieder hatte. Der einzige Unterschied lag in der Position der Breaks:



for(i=0;i<100;i++)
{
MotorDir(FWD,FWD);
MotorSpeed (SPEED_LEFT,SPEED_RIGHT);
LongSleep(3000);
MotorSpeed (BREAK,BREAK);
}
MotorSpeed (BREAK,BREAK); // irgendwie scheint es dieses Break zu brauchen...

Spannungsprobleme können es nicht sein, da der Roboter über ein Powersupply versorgt wird und da wir die Spannungen am Oszilloskop überwacht haben. Auch am Getriebe kann es nicht liegen, da wir in unserem Roboter nur noch die Asuroplatine verwenden. Das PWM Signal geht auf Maxonmotoren und mit Schneckentrieb auf die Räder. Die Aufhängung ist CNC gefrässt und daher sehr präzis.

Ich traue langsam dem Chip nicht mehr. Nebst dem Motorenproblem hatten wir auf einmal noch ein zweites. Die SerRead Funktion wollte einfach beim zweiten Durchlauf nichts mehr einlesen. Und dies in einem Codeabschnitt, den ich nie angerührt hatte und der immer einwandfrei gelaufen ist. So mysteriös wie das Problem gekomment war, so still verschwand es auch wieder. Jetzt funktioniert im Moment alles, aber bezüglich des Fehlers tappe ich im Dunkeln...

Trotzdem danke für eure Hilfe :-)
Gruss
Illuminon

Sternthaler
19.02.2006, 13:13
@Illuminon
Wenn ich deinen letzten Beitrag richtig interpretiere, dann hast du den ASURO 'etwas' umgebaut. Ist es möglich, dass du eventuell an der Platine irgendwo eine Leiterbahn 'gekillt' hast und da ein Wackelkontakt entstanden sein könnte?
Für so einen Fall könnte ich mir 2 Fehlermöglichkeiten vorstellen:
1: Wurde schon mit dem Reset bei zu kleiner Spannung aufgeführt -> Gelbe LED leuchtet zwischendurch?
2: Zeitweiliger Kurzschluss in der Motoransteuerung?

Hoffentlich muss dein ASURO nicht zum Arzt.

@super_castle
Was ist los mit dir? Nur ein so kurzer 'aufbauender' Kommentar?