PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motorproblem: Motor dreht sich nicht



gandalfsz
16.02.2007, 22:16
Hi ich hab folgendes Problem:
Der rechte Motor meines Asuros dreht sich nicht. Wenn man allerdings den Prozessor rausnimmt und die Pins so zusammen schließt wie der AVR das tut wenn er Vollgas gibt drehen sich beide Motoren (Das hab ich nicht selber getan sondern jemand der sich auskennt und mir freundlicherweiße geholfen hat). Ich hab auch schon an den Pins gemessen (16,18,19). Achja das ganze lief mit folgendem Programm:

#include "asuro.h"
int main(void) {
Init ();
StatusLED (GREEN);
MotorDir (FWD,FWD);
MotorSpeed (255,255);
return 0;
}

Bitte helft mir sobald wie möglich !
mfg Daniel

damaltor
17.02.2007, 01:08
Schritt Eins: Lies in der Anleitung: Ein Programm darf NIEMALS am ende ankommen. ansonsten ist das verhalten des prozessors nicht definiert. daran könnte es evtl liegen. schau dir mal die datei test.c im ordner firsttry an da siehst du wie es besser ist:
vor return 0 muss eine endlosschleife stehen.beispiel:
while(1);
vielleicht wars das dann schon...

radbruch
17.02.2007, 09:08
Die StatusLED wird schon bei Init() auf GREEN gesetzt. Wenn du also sehen willst, ob dein Programm überhaupt was tut, solltest du eine Farbe ungleich grün setzen.

damaltor
17.02.2007, 14:02
ich glaube es geht mehr um die motoren... aber schreib mal
StatusLED(RED) oder so, dann weisst du wenigstens dass du das richtige programm gelasht hast. an sowas hab ich mal 4 stunden festgehangen =)

gandalfsz
17.02.2007, 14:16
könnt ihr mir ein programm posten das ganz sicher funktioniert ? Ich brauch es nämlich dringend zum testen.
mfg Daniel

gtacelt
17.02.2007, 14:24
#include "asuro.h"
int main(void) {
Init ();
StatusLED (GREEN);
MotorDir (FWD,FWD);
MotorSpeed (255,255);
while(1);
return 0;
}
So wie Damaltor gesagt hat...

gandalfsz
17.02.2007, 19:13
Hab dein Programm geflasht und es dreht sich nur der linke Motor :-(
mfg Daniel

gtacelt
17.02.2007, 19:33
Ich hab echt keine Ahnung woran das liegen könnte. :/

Hast du die Spg an beiden Motoren gemessen wenn sie sich drehen sollten?

Vllt. kann dir ja wer anderes aus den Forum helfen.

Wenn die Motoren so gehen und du das mit den Pins probiert hast, kann es eig. nur am Atmega liegen... *grübel* ^^

gandalfsz
17.02.2007, 19:59
Ja und irgendwas stimmt nicht ich weiss nicht mehr genau aber ich glaub bei pin 16 0V bei pin 18 5V und bei Pin 15 0V auf jedenfall hat mir jemand gesagt das irgendwas nicht stimmt. und das es vielleicht an der Software liegt.
mfg Daniel

gandalfsz
17.02.2007, 21:28
Spannung an dem rechten Motor ist 0V am linken hab ich nicht gemessen der geht ja :-)
mfg Daniel

gtacelt
17.02.2007, 21:31
Gerade das wäre doch Interessant, als Vergleich.

Außerdem bin ich mir nicht sicher was genau du da misst (sry xD) weil die Motoren werden ja über PWM angesteuert...
Aber auf Vollgas müsste da schon was zu messen sein. :)

gandalfsz
17.02.2007, 21:35
Linker Motor 4,5 V
mfg Daniel

gtacelt
17.02.2007, 21:47
Das ist aber ein deutlicher Unterschied. :D

Wo hast du den gemessen?
Dort wo die 2 Motorkabeln angelötet sind?

Hm..
Wenn ein Kurzschluss im Motor wäre, dann würdest du 0V messen. Aber der Motor funktioniert doch wennst du ihn "normal" betreibst oder?

Wenn ja, dann liegts wahrscheinlich wirklich am Atmega und ab da kenn ich mich dann nicht mehr aus. (bin selbst erst Asuro-Neuling und komme selten dazu, das ich was tue)
Punkto IC's hab ich nur ein kleines Halbwissen und will/kann dir keine Hilfe geben. ^^'

Danjo00
17.02.2007, 23:29
Hi geht den deine Front LED? weil wenns am prossesor ligt geht diese meisten auch nicht nur als rotiene frage

gandalfsz
18.02.2007, 08:19
Front Led ging bisher solange kein Motor im spiel ist geht alles.
mfg Daniel

Danjo00
18.02.2007, 10:34
Hast du schon an Pin 15 und 16 , Pin 18 und 19 gemessen beim atmeg. ? Und messen noch den strom bei R5, R6, R7, R8. Und flash mal den tex mal schauen ob er sich nur in einer richtung nicht dreht


#include "asuro.h"

int main(void)
{
Init();
MotorDir(RWD,RWD);
MotorSpeed(250,250);

while(1);
return 0;
}

damaltor
18.02.2007, 12:14
Hat der Motor beim Selftest funktioniert?

könnte es vielleicht sein, dass ein beinchen des atmega abgeknickt ist?

Danjo00
19.02.2007, 12:21
mein linker motor will und will einfach nich rückwerts laufen habe die diodengemessen die wiederstände ausser die transistoren aber da weiss ich nicht wie ich die messen muss bzw was ich messen muss vorwärts gehts.

allerdings verstehe ich nicht die werte bei den dioden bei rechten motor haben die dioden ein wert bei ca. 774 (alle 4). Beim linken haben sie alle 4 einen wert von 1774

damaltor
19.02.2007, 21:36
was für einen wert? spannung? strom? widerstand? oder den der bei "Diodenprüfung" angezeigt wird?

Danjo00
20.02.2007, 01:53
jo die widerstände haben 1 k ohm 100% strom ist bei R3 4,31v bei max speed dioden bei 5,17v bei D4 und D3 und bei den transistoren T2 und T4 bei 5,20V. Wenn ich allerdings bei R2 und 3 überbrücke (habe eine scherre benutzt) Funktioniert es aber ich habe keine kalten lötstellen und keine brücken drinne aber mit digitalem Multie zeigt er trotzdem alle wieder stände auf 1 k ohm an (unten an den lötpunkten wo ich gelötet habe) irgendwie merkwürdig das passiert beim selftest.


edit: die platine ist 100% i.o. der rest funktioniert tadellos (vom selbsttest)

damaltor
20.02.2007, 10:23
also so langsam fällt mir dazu nich mehr viel ein... hat der motor nicht schonmal richtig funktioniert? ansonsten würde ich denken dass ein transistor oder eine diode vertauscht bzw falschrum ist...

gandalfsz
20.02.2007, 16:54
Hab meinen ASURO grad nicht (bin in Deutschland) aber beim Selftest funktioniert der Motor aber auch nicht so wie er sollte aber ich werd sobalt ich wieder in Österreich bin mal ein Video machen. Ich glaube nicht dass ich irgendwas falsch eingelötet hab kann es vielleicht am Atmega liegen ?
mfg Daniel

damaltor
20.02.2007, 17:13
also das wäre das allerletzte was ich vermuten würde. 99% der fehler sind entweder fehler beim löten, oder beim programmieren. ich glaube einen einzigen kaputten atmega hab ich jetzt hier mal gesehn, der war falsh geflasht worden. aber normalerweise ist das wirklich die allerletzte möglichkeit.
wenn man am pc etwas versucht zu ändern, und es geht nicht, ist es ja im allgemeinen auch so dass man nicht den prozessor als fehlerhaft vermutet =)

Danjo00
21.02.2007, 01:16
also so langsam fällt mir dazu nich mehr viel ein... hat der motor nicht schonmal richtig funktioniert? ansonsten würde ich denken dass ein transistor oder eine diode vertauscht bzw falschrum ist...

Jo hat er sogar perfekt jetzt gehts aber nemmer leider ich komm und komm einfach nicht drauf kann es sein das es die lib von i2c_master ist (was ich allerdings jetzt nicht so ganz glaube). Die transen habe ich beim ersten falsch gemacht aber beim 2ten habe ich alles richtig gemacht und noch mal über prüft wie gesagt wenn ich R1 und R3 überbrücke mit einer nagel scherre funktionierts wenn ich alles an den lötstellen messe kommen die richtigen werte und alles ist heile gebliben das ist irgendwie merkwürdig



----------------------------------------------------------------------


überneme keine garantie für schlechtschreib fehler.

damaltor
21.02.2007, 10:35
hm... an der lib wirds nicht liegen, sofern du nicht die ports darin völlig falsch eingestellt hast. in der i2cmaster.s kannst du am anfang einstellen welche ports den i2cbus emulieren sollen. wenn da einer der motorenports steht (sieh in den schaltplan) dann könnte es evtl probleme geben. kompilier doch einfach mal ein programm ohne diese lib.
flashe nochmal den selftest drauf, und sag uns dann was passiert. der ist auf der c im ordner asuro_src/selftest/selftest.hex.

Danjo00
22.02.2007, 20:04
jo beim selbst test ist leider das gleiche ligt dann doch eher am asuro habe jetzt heute endlich mein lcd wieder bekommen. gestern war alles etwas stressig und zuviel habe das alles gar nicht so regestriet. sorry

gandalfsz
25.02.2007, 17:39
Was kann ich noch tun ?? Ich weiss nicht mehr weiter :cry:
mfg Daniel

gandalfsz
27.02.2007, 18:29
Er fährt beim selftest so :
links rück,links vor,pause,rechts vor,links rück,beide vor
hoffe weiterhin auf hilfe.
mfg Daniel

damaltor
27.02.2007, 21:59
das ist falschrum... also musst du erstmal die kabel an den motoren vertauschen. ausserdem fährt er rechts nicht zurück, das ist ein fehler. dafür sind die transistoren, der kleinere ic und die dioden zuständig. alles genau checken!

gandalfsz
28.02.2007, 16:28
Ja aber die Transistoren und die Dioden sind alle richtig drin !
Und das And-Gatter geht glaub ich auch (wie testet man dass ?). Und das rechts nicht zurückfährt ein Fehler ist weis/ss/ß (keine ahnung wie man dass schreibt) ich auch nur weis/ss/ß ich nicht was man dagegen tun kann.
mfg Daniel

damaltor
01.03.2007, 14:56
mehr teile betreffen die motoren wigentlich nicht. am ende der anleitung ist ein schaltplan des asuro. da kannst du genau sehen welche teile du nochmal prüfen musst.
kontrolliere genau ob alles richtig rum drin ist, ob alle lötstellen wirklich 1A in ordnung sind, und ob die Nummern auf den transistoren die richtigen sind.
versuche, mit drahtbrücken die verbindungen neu herzustellen, evtl hat eine leiterbahn etwas gelitten.

gandalfsz
01.03.2007, 18:25
Er wurde aber in beide richtungen durchgemessen und hat funktioniert !
Aber ich verste nicht warum sich der linke Motor statt dem rechten dreht.
mfg Daniel

W.Schimpf
19.03.2007, 11:46
Hallo,
ich hab das problem das mein Asuro manchmal einfach nicht fahren will.
Ob er nun auf dem Schreibtisch oder auf dem Laminat steht.
Er fährt vieleicht eine Sekunde los und bleibt dann stehen.

Ich vermute das vieleicht ein Taster klemmt oder das vieleicht auch das Getriebe nicht richtig funktioniert. Die Räder lassen sich leicht drehen und nach überprüfen der Taster keine Ergebnisse...
Ich habe versucht den Motoren mehr speed zugeben auch daran lag es nicht.

habt ihr vieleicht eine idee?

auch habe ich versucht meine Linienfolgesensoren zu optimieren. ich habe gelesen das jemand mit "jogurtbecher-teilen" eine abschirmung um diese herum gebastelt hat.
Inspiriert bin ich auf die idee gekommen ein stück aus einen milchtetrapack heraus zu schneiden, da die innenseite mit der aluminiumbeschichtung vieleicht ganz gut taugt...was meint ihr? reflektiert das zu sehr? stört das die sensoren? Leider habe ich keine besondere Ergebnisse damit erzielt...
Mal abgesehen davon das wenn ich mein asuro startbereit auf eine linie stelle, er eine leichte ahnung von der linie hat, einen leichten schwenker macht und er ihr keines wegs folgt...
Die Pape die ich da herum gebastelt habe ist ca. 5-8mm breit und ca. 2cm lang. 8-[

nun ja...aller anfang ist schwer...aber wenigstens hab ich den selftest überstanden... =D>

grüße Wolf

radbruch
19.03.2007, 12:23
Hallo

Erstmal herzlich willkommen hier.


ich hab das problem das mein Asuro manchmal einfach nicht fahren will.
Könnte an einer kalten Lötstelle liegen oder am Programm.

Abschirmen der Liniensensoren (und auch der Odometriesensoren) bringt bessere Ergebnisse. Zu den Sensoren reflektierende Abschirmungen könnten die Messungen allerdings ungünstig beeinflussen.

Gruß

mic

damaltor
20.03.2007, 13:18
zeig uns doch mal deinen programmcode. vielleicht liegt der fehler ja da.

wenn der asuro anhält, blinkt dann die statusled? dann hat der prozessor zu wenig spannung, er hat einen BrownOut-Reset durchgeführt und meldet durch das blinken (und auch über die infrarotschnittstelle, wenn man den transceiver drüberhält) dass die spannung nicht reicht.

W.Schimpf
25.03.2007, 14:23
Hallo und danke,
das anfahrts problem tritt jetzt nicht mehr auf...
ich habe die programme aus der anleitung benutzt...ich habe jetzt eins von eueren beispiel programmen benutzt und etwas umgeschrieben, da das funktionen enthielt die anscheinend nicht von meiner version unterstütz wurden.

ich hab mir darauf hin die v2.70 runtergeladen...bekomme aber immer fehler beim compilieren das die ir-asuro.h fehlt? die ich auch sonst nicht finde. muss ich die vorhergehenden updates auch runterladen?

statt Msleep hab ich dann sleep benutzt....aber mit 3ms...
nun ja, für was braucht man eigentlich die "sleep()" funktion? warum ist sie so nützlich wenn die verzögerung nur 3ms beträgt? und warum hat die sleep() ein intervall von 216-255 ? ich hab mir gedacht anstatt die Msleep() zu benutzen könnte ich vieleicht die sleep() benutzen und irgend wie umschreiben das ich vieleicht dann auf sekunden komme? geht das
ich hab mir dabei sowas gedacht:
(meine Msleep)
void Msleep(int i)
{ i= Sleep(216) *1000;
}
ich weiss,...blöde idee, man kann ja nicht eine funktion multiplizieren...ich hab halt keine ahnung von programmieren...aber könnte es vieleicht so ähnlich funktionieren? :cry:

ich hab mal versucht ob ich mit meinem ir-transceiver datan von handy auf mein computer senden kann. auf meim handy stand dann übertragen....aber ich habe keine dateien oder sonst irgend was auf dem computer gefunden. dabei habe ich das standart hyper-terminal von WinXp benutzt.

gut dann werde ich eine andere abschirmung benutzen.
wie finde ich kalte lötstellen?

soll ich ein neuen thread aufmachen?
grüße wolf

radbruch
25.03.2007, 15:07
void Msleep(int i)
{ i= Sleep(216) *1000;
}
Mach daraus besser ein

void Msleep(int i)
unsigned int j;
{for (j=0;j<i;j++) {Sleep(216) ; }
}
dann wartet die Funktion i mal Sleep(216);

Wo die 216 herkommen, weis ich auch nicht genau, der Wertebereich ist byte, also 0-255. Bei 36kHz-Timer entspricht 36 einer Milisek. glaube ich irgendwo gelesen zu haben.

Solche "Zeitschleifen" sind meiner Meinung nach Schrott, weil der Prozessor in dieser Zeit (ausser Interrupts bearbeiten) nichts tun kann.

damaltor
25.03.2007, 18:27
der wertebereich der sleep-funktion geht vfon 0 bis 255. die 216 hat folgenden grund: es ist die höchstmögliche zahl, welche eingesetzt werden kann, um eine glatte millisekundenzahl zu bekommen. die funktion arbeitet mit 72kHz, also sleep(1) wartet eine 72.000stel sekunde. 72*3=216. also wartet sleep(216) ziemlich exakt 3 millisekunden.

msleep wartet einen millisekundenwert, also msleep(1000) wartet eine sekunde. lade dir von sourceforge die version 2.6.1 runter (von der lib) dass ist etwas einfacher als mit version 2.70

geh auf www.sorceforge.net (oder com? oder org?) und gib beim suchen asuro ein, dann findest du die. entpacke die dateien asuro.c und asuro.h in das verzeichnis des quellcodes, und überschreibe die daten die du von der cd kopiert hast. dann kannst du die funktion msleep benutzen.

W.Schimpf
26.03.2007, 11:55
hallo,

void Msleep(int i)
unsigned int j;
{for (j=0;j<i;j++)
{Sleep(216) ; }
}
Dann würde ich in einem programm i einen wert geben zum beispiel 3 und die funktion noch aufrufen...?...danke,

und was ist mit: wie finde ich kalte lötstellen?
und der ir-transciever?

grüße wolf

damaltor
26.03.2007, 16:20
die geschweifte klammer vor dem for muss vor das unsigned int. dann sollte es klappen. aufrufen kannst du dann so:

Msleep(100) oder Msleep(10) oder ähnlich. allerdings: um millisekunden zu bekommen, musst du die 216 in eine 72 ändern:

void Msleep(int i)
{
unsigned int j;
for(j=0;j<i;j++)
{
Sleep(72);
}
}

dann wartet Msleep(1000) etwa eine sekunde.

kalte lötstellen: schau auf deinem lötzinn nach. wenn es bleihaltig ist (es steht igendwo Pb drauf) dann erkennst du kalte lötstellen meistens (!) daran, dass sie nicht glänzen. sie entstehen dadurch, dass das bauteil bewegt wird während der lötpunkt erhärtet. solltest du bleifreies lötzinn verwenden (bei der zusammensetzung steht NICHT Pb, oder es steht irgendwo "ROHS-konform" (kannst auch im katalog oder da wo du es bestellt hast nachsehen) dann funktioniert das leider nicht... dann ist vorsichtiges (!) nachlöten angesagt.

der ir-transceiver funktioniert nicht zur dateiübertragung. er folgt dem rs232-protokoll (so in etwa) und dein handy folgt dem IrDA-Protokoll, welche beide grundverschieden sind.

W.Schimpf
27.03.2007, 14:05
hallo,
ja, danke...ich habs gestern abend noch hin bekommen...schön, ja, der fährt ganz gut... =D> ich hab Msleep aufgerufen und dem i den wert 333 gegeben damit sinds dann rund 1 sekunde die er wendet...tata...toll

ähm, ich versteh nicht so ganz warum du einen unsigned int benutzt? damit der wert nach oben erstmal unbegrenzt ist? oder...tja...warum?

aha, verschiedene protokolle...gut...danke.

die lötstellen...,gibt es noch andere möglichkeiten?...kann ich sie auch messen?das sie keine klumpen sein sollten und das sie glänzen sollen wusste ich schon...ich bin dir trotzdem sehr dankbar.

damaltor
27.03.2007, 14:24
du kannst sie auch messen. 1. asuro AUS, 2. widerstandsmessung einschalten am multimeter, 3. ein messpunkt ist auf der leiterbahn (feste draufpiksen damit du durch den lack kommst) zweiter messpunkt ist am beinchen des bauteils (auf der oberseite wenn möglich). der widerstand sollte nahezu null sein, auch wenn du wackelst.

einen unsigned int: aus praxisgründen. auch ein unsigned int ist nicht unbegrenzt, aber ich brauche wohl eher extrem hohe werte als negative werte. ausserdem würde die funktion bei einem negativen wert SEHR lange warten, wenn ein signed int benutzt wird, denn in der schleife wird immer 1 abgezogen bis der wert null ist... und wenn du von -1 solange eins abziehst biss es null ist, dann muss erstmal ein overflow (bzw underflow =) auftreten, und dann steht der kleine da einige zeit. der unsigned int kann nicht negativ sein, dadurch ist diese fehlerquelle schonmal gebannt.