Hi,
ich hab mal wieder ein bissel was zu erzählen.
Die Botelektronik ist fertig \
/ . Hab mich gestern (Edit: mittlerweile vorgestern) noch mal rangehalten und war dann am Abend fertig geworden. Heute wollte ich dann schnell mal die Bauteile überprüfen und dann den Funktest machen. Aber es kommt ja immer anders. Die Motoren haben mich den ganzen Tag aufgehalten
.
Es fing schon an bevor ich überhaupt nur an programmieren denken konnte. Die Platine ist zu groß (das gleiche Problem wie beim Akku, an sich passt alles super aber um den Akku aus dem Bot herausnehmen oder einbauen zu können muss man einige Teile demontieren). Ich musste eine Strebe demontieren um an den Platz für die Platine ranzukommen. Jetzt weiß ich was Klingon77 meinte als er mir immer mal gesagt hat es dauert sehr lang den Bot auseinander zu bauen und wieder zusammen zu setzen. Der Wahnsinn wie viele Schrauben da verbaut sind. Wenigstens konnte ich so leichter die Kabel und Entstörkondensatoren an den Motor löten.
Ab da gings wieder flott weiter. Alles angeschlossen, verschraubt, Strom gemessen, Spannungen überprüft, Controller überprüft (2 LEDs blinken lassen) --> alles wunderbar. Dann ein kleines Prog geschrieben mit dem ich die Motortreiber überprüfen wollte. Einfach auf max. Geschwindigkeit beschleunigen, 10 s fahren, wieder abbremsen und 10 s stillstehen. Und dann wieder von vorn. Zur Sicherheit hab ich auch die Motoren vom Rad getrennt (einfach den Zahnriemen runter gemacht), da beim ersten Test ja unter anderem die Drehrichtungen der Motoren überprüft werden müssen.
Hier der Code:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Config Portb.0 = Output
Led_gruen Alias Portb.0 'grüne LED
Config Portb.1 = Output
Led_rot Alias Portb.1 'rote LED
Config Portc.2 = Output
Mo1_1 Alias Portc.2
Config Portc.3 = Output
Mo1_2 Alias Portc.3
Config Portc.4 = Output
Mo1_3 Alias Portc.4
Config Portc.5 = Output
Mo1_4 Alias Portc.5
Config Pind.4 = Output 'OC1B, PWM-Ausgang
Config Pind.5 = Output 'OC1A, PWM-Ausgang
Config Timer1 = Pwm , Pwm = 9 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Pwm1a = 0
Pwm1b = 0
Dim I As Integer
Do
I = 0
Mo1_1 = 0
Mo1_2 = 1
Mo1_3 = 0
Mo1_4 = 1
Do
Pwm1b = I
Waitms 40
I = I + 5
Loop Until I > 500
Wait 10
Do
Pwm1b = I
Waitms 40
I = I - 5
Loop Until I < 10
Pwm1b = 0
Wait 10
Loop
Passiert ist gar nichts. Dann das Prog überprüft (eigene Aufzeichnungen und RN-Wissen) aber keine Fehler gefunden (zur Sicherheit dann doch noch mehrmals das Prog etwas abgeändert und ausprobiert aber nichts gefunden). Also Platine wieder ausbauen und überprüfen
. Da war auch der Fehler --> beim Motortreiber hab ich die 5V vergessen anzuschließen (Anfängerfehler
).
Zwei stückchen Kabel und 4 Lötpunkte später dann der nächste Test (vorsorglich ohne die Platine wieder einzubauen). Ein Motor dreht sich aber der andere nicht. Nach langer Suche nach Hard- oder Softwarefehlern wieder nen Anfängerfehler gefunden --> ich hab die PWM-Leitung zu den Motortreibern unterbrechbar gemacht (mit Kurzschlusssteckern) und die zweite Leitung deaktiviert
.
Einen Kurzschlussstecker später drehten sich beide Motoren (sogar in die richtige Richtung). Also Zahnriemen wieder drauf und weiter testen. Da kam das nächste Problem. Die beiden Motoren konnten das Rad nicht bewegen und blockierten, obwohl der Bot aufgebockt war und somit fast keine Fahr-, Roll- oder andere Widerstände überwinden musste. Und der Strom stieg in ungeannte Höhen. 6-8 A (ohne das sich irgendwas bewegte). Nachdem ich fix die Spannungsversorgung vom Bot getrennt habe (die Motortreiber waren schon ziemlich heiß geworden
) wieder auf Fehlersuche gemacht und einen mechanischen Fehler gefunden (bei Klingon77 wird jetzt wohl das Herz in die Hose sacken
). Eine der Wellen mit den Rollerblades ließ sich nur sehr schwer drehen. War aber meine Schuld (Entwarnung für Klingon77). Ich muss beim wieder anbauen der demontierten Strebe das Kugellager verkantet haben. Nachdem ich die Schrauben noch mal gelockert und ordnungsgemäß über Kreuz angezogen habe lief die Welle wieder super leicht. Danach lief auch das große Rad super.
Und damit jetzt zum letzten Problem was ich heute noch feststellen konnte. Dazu ein kleines Video: http://de.youtube.com/watch?v=2BkPCR6vSyg
Zu sehen ist das das Rad beschleunigt bis es auf Endgeschwindigkeit kommt, einen kurzen Moment so weiter fährt (bis hier hin alles wie geplant) und dann aber ruckartig abbremst und wieder beschleunigt (ohne stehen zu bleiben). Zuerst hab ich gedacht das das ein Controller-reset ist, da es super zu dem Verhalten passt. Das Prog startet und beschleunigt auf max. Geschwindigkeit und will dann die 10 s so bleiben, geht aber in den 10 s in reset --> das Prog startet neu und geht davon aus das die Motoren sich nicht drehen --> fängt also von null an zu beschleunigen. Die Motortreiber bremsen die Motoren ab da ihnen vom Controller gesagt wird, das Rad sollte sich in dem Moment am Anfang der Beschleunigungsphase befinden und somit gar nicht oder nur langsam drehen. Das sich das Rad noch mit volle-Pulle dreht weiß der Controller nicht (obwohl er es noch einen Augenblick vorher so gesagt hat). Durch die Trägheit des Rades und die relativ schnelle Beschleunigung des Controllers kommt das ganze nicht zum Stehen.
Passt super allerdings gibts da zwei Probleme:
1. Was löst den Reset aus?
Spannungseinbruch kanns nicht sein weil in der Beschleunigungsphase viel mehr Strom gezogen wird als in den 10s fahren. Aber es passiert häufiger in den 10s fahren. Außerdem hab ich haufenweise Pufferkondensatoren verbaut und das Netzteil was ich bei stationären Tests verwende schafft 10A.
Ein Wackelkontackt kommt eher in Frage. Ab und zu passiert es auch wenn ich die Platine grade bewegt habe. Allerdings konnte ich kein Kabel ausfindig machen das einen hat. Aber das muss ja nix heißen. Wackelkontackt war meine beste Theorie und wurde aber durch Problem 2 umgestoßen.
2. Auf dem Video ist zu sehen das das Rad nach einigen "vielleicht-Resets" plötzlich gar nicht mehr aufhört sich mit volle-Pulle zu drehen. Warum?
Da hab ich dann das Handtuch geschmissen. Das passt nicht zu dem Verhalten von einem Reset. Das sich das Programm so aufhängt glaub ich auch nicht (also nicht das macht was es soll aber die Motoren weiter fahren lässt). Dafür ist es viel zu einfach. Es gibt nirgens Schleifen in den es sich festfahren könnte, keine Goto's oder sonst was wo man sich aufhängen könnte. Und das die Motoren mit max. Speed weiter fahren kann ich mir auch nicht erklären.
Habt ihr ne Idee wo der Fehler sein könnte? (Ich weiß ohne Schaltplan schwierig aber es liegt ja scheinbar auch nicht an der Hardware, oder?)
Gruß
Borr, ist das nen haufen Text. \
/
Lesezeichen