Archiv verlassen und diese Seite im Standarddesign anzeigen : Erster Hexapod
High Light
21.08.2009, 21:07
Hallo zusammen,
zu erst ein Mal zu meiner Person. Ich bin Auszubildender zum Elektroniker für Automtisierungstechnik. Dies bedeutet, ich habe vom Beruf her so gut wie nichts mit Microcontrollern oder ähnlichem zu tun. Jedoch aber mit SPS'n wie sie an Produktionsanlagen vorhanden sind, dies ist jedoch ein komplett anderes Gebiet.
Seit einigen Monaten beschäftige ich mich mehr mit Microcontrollern, jedoch noch totaler Anfänger.
Hexapods sind mir schon länger im Auge und lese zeit gut einem Jahr im wieder die Themen hierzu. Jetzt seit 2 Monaten arbeite ich an meinem eigenen ersten Hexapod.
Es mag zwar sein dass einige behaupten, ein Hexapod ist als Einstiegsprojekt nichts, dies sehe ich anderst. Ich beschäftige mich mit der Materie und dann wird dass auch was O:)
Mein aktueller Stand ist so, ich hatte zuerst einmal Pläne für die Bein-Konstruktionen gemacht (mit Hand)^^, die gerade von einem Freund in einem CAD-Programm gezeichnet werden. (Bilder folgen)
Diese einzelne Teile habe ich nun aus Alu gefertigt und an meinen 3 Servos montiert.
Mein erster Meilenstein ist nämlich, erst mal ein Bein zubauen, dies zu programmieren und wenn dies dann funktioniert, folgen weitere 5 Beine und dann die Hauptelektronik.
Bilder zum ersten Bein folgen auch in den nächsten Tagen.
Vorgestellt habe ich mir die spätere Steuerung so, dass jedes Bein einen Controller (Slave) bekommt und diese über einen Hauptcontroller (Master) gesteuert werden.
In den nächsten Tagen werde ich noch an der Konstruktion und am Gegenlager arbeiten.
Und nun zu meinen Problemen:
- Einige hatten geschrieben, dass sie einen Widerstand in die Steuerleitung des Servos einlöten. Wiso das, und wie dimensioniere ich diesen?
- Im Moment versorge ich den Controller und die Servos über ein selbstgebautes Netzteil. Dieses kann jedoch nur 1 A. Dies reicht zwar für den Controller auf jeden Fall, jedoch überhaupt nicht für die Servos. Deswegen will ich mir nun Lipos anschaffen, die später auch in den Hexa mit eingebaut werden. Was muss ich bei ihnen beachten und wie sieht es mit Wideraufladen aus? Spezielle Ladegeräte?
Gruß High Light
Da_Vinci13
21.08.2009, 21:20
- Einige hatten geschrieben, dass sie einen Widerstand in die Steuerleitung des Servos einlöten. Wiso das, und wie dimensioniere ich diesen?
Hi,
Schönes Projekt!
Den Widerstand solltest du einlöten, damit die Servos bei ausgeschaltetem Servoakku (Akku welches nur für die Servos zuständig ist) den Strom über die PWM Leitung holen zu probieren, denn das ist nicht gut für den Mikrocontroller. Zu Gross sollte der Widerstand aber auch nichts sein, denn sonst kriegen die Servos die falschen Servopositionen (Ich hab zu grosse eingelötet, da haben sie kein klares PWM Signal bekommen), aber mit 1k Widerstsänden sollte es gehen...
Die Frage wie du es demensonierst verstehe ich nicht ganz... also der Widerstand wird einfach auf dem Board in die PWM Leitung des Servos einglötet...
Ich hatte da noch eine Frage:
Was für Servos wirst du verwenden?
Liebe Grüsse!
- Einige hatten geschrieben, dass sie einen Widerstand in die Steuerleitung des Servos einlöten. Wiso das, und wie dimensioniere ich diesen?
Microcontroller können über ihre Pins, bzw. Ausgänge nur recht kleine Ströme schalten. Beim Atmega16 sind es, wenn ich mich richtig erinnere maximal 40mA. Zusätzlich gibt es noch einen maximalen Gesamtstrom für aller Pins zusammen und der ist kleiner als 40mA * Anzahl Pins. Wo der genau liegt, kannst du im Datenblatt nachsehen.
Um den Strom der durch einen Pin fließt zu begrenzen, kannst du Bauteile die du an den Pin anschliesst über einen Widerstand anschliessen.
Als Wert könntest du hier z.B. 1k nehmen. Mut I = U/R fliessen dann maximal 5V/1000 Ohm = 5 mA.
Deswegen will ich mir nun Lipos anschaffen, die später auch in den Hexa mit eingebaut werden. Was muss ich bei ihnen beachten und wie sieht es mit Wideraufladen aus? Spezielle Ladegeräte?
Lipos sind zimlich empfindlich gegen zu johe Lade und Entladeströme und Tiefentladung mögen sie auch nicht so gerne.
Bei falscher Behandlung können sie sogar platzen oder schlimmste Fall in Flammen aufgehen.
Daher brauchst du da schon ein geignetes Ladegerät.Ich würde Sie auch immer nur über eine Sicherung anschliessen und drauf achten, dass du sie nicht zu weit entlädst.
High Light
23.08.2009, 14:28
Danke für die schnelle Antworten. Jetzt macht mir das Sinn mit diesen Widerständen, werde ich am besten gleich morgen einlöten. Hätte ich auch selber drauf kommen können O:)
Ich verwende folgende Servos:
1 Mal den PREMIUM LINE SERVO MC-620 MG-T
2 Mal den TOP-LINE STANDARD SERVO RS 2 JR
Sind nicht gerade die besten Servos, aber zum Bau und zum Testen des ersten Beines genügen sie. Die Frage, die ich mir stelle und mir nicht sicher bin ist, ob sie für den Hexapod ausreichen würden (Kraft) oder ob ich auf andere umsteigen sollte wenn ich alle Beine baue.
Was denkt ihr?
Weiß jemand wo man Lipos und das passend Ladegrät recht günstig kaufen kann? Außer bei ebay!
Verwendet ihr Spannungsstabilisierungs-Schaltungen für die Lipos und überwacht ihr sie, wie voll sie noch sind während des Betriebes?
Gruß Patrick O:)
Chaosmann
23.08.2009, 15:32
Hi,
da wagt sich ja noch einer als Erstlingswerk an einen Hexabot :-)
Wie schwer wird denn dein Bot und welche Dimensionen haben den die einzelnen Elemente?
Ich verwende folgende Servos:
1 Mal den PREMIUM LINE SERVO MC-620 MG-T
2 Mal den TOP-LINE STANDARD SERVO RS 2 JR
Sind nicht gerade die besten Servos, aber zum Bau und zum Testen des ersten Beines genügen sie. Die Frage, die ich mir stelle und mir nicht sicher bin ist, ob sie für den Hexapod ausreichen würden (Kraft) oder ob ich auf andere umsteigen sollte wenn ich alle Beine baue.
Was denkt ihr?
Je nach Ausmaßen und Gewicht deines Bots sollten die 620er schon passen, jedoch würde ich für vertikale Bewegung lieber zwei davon benutzen. die Reserven des RS2 sind doch sehr bescheiden. Klar, für belastungsfreie Tests reicht das (habe ich bis vor kurzem auch nicht anders gemacht.
Welche Elektronik willst du denn zur Steuerung nehmen? Kompletter Eigenbau, oder willst du auf fertige Servokontroller wie den SSC zurückgreifen?
Gruß
Daniel
High Light
24.08.2009, 11:17
Also bis jetzt hatte ich noch nicht vor einen Servokontroller zu verwenden.
Wie schon zu vor beschrieben, stelle ich es mir im Moment so vor, dass jedes Bein einen Controller (Slave) bekommt und diese über einen Hauptcontroller (Master) gesteuert werden. Kommunikation wahrscheinlich über I2C.
Was das Gewicht betrifft, ein Bein wiegt im Moment 195g,
dies mal 6 gibt dann 1170g. Hinzu kommen dann ja noch
die Platinen, Lipos und das Chassi.
Weiß jemand wo man Lipos und das passend Ladegrät recht günstig kaufen kann? Außer bei ebay!
Verwendet ihr Spannungsstabilisierungs-Schaltungen für die Lipos und überwacht ihr sie, wie voll sie noch sind während des Betriebes?
Gruß
High Light
Und hier noch die ersten Bilder vom ersten Bein:
High Light
06.09.2009, 14:09
So ich melde mich auch mal wieder^^.
Zum mechanischen Teil kann ich nur soviel sagen, dass sich durch zeitliche
Problem nicht viel geändert hat. Am Gegenlager habe ich noch nicht viel
gearbeitet, aber das Chassi ist bald fertig^^.
Im Moment plane ich die Master- und Slaveplatinen und beschäftige mich mit dem Datenaustausch und der Kommunikation.
Und so komme ich nun
zu meinem Problem. Ich würde gerne I2C verwenden und dies in [fade:5e5ebae774]Bascom[/fade:5e5ebae774]
programmieren. Ich verwende 2 Atmega 88. Jetzt will ich zum Test eine
Kommunikation zwischen 2 Atmegas aufbauen. Und zwar soll der Master
ein Byte senden und wenn dies der Slave empfängt soll dieser eine LED
einschalten.
Kann mir jemand leicht erklären wie ich dies machen soll?
Oder hat jemand ein Beispielprogramm wie ich ganz einfach ein Byte
versende und empfange?????
Weil ich weiß gar nicht wie ich dies machen soll vor allem mit den
Adressen.
Weil im Netz habe ich kein Beispiel für Anfänger gefunden!!
Bin um jede Hilde dankbar!!!
Gruß High Light
schau mal hier im wiki. da ist nen beispiel für master und slave.
auch ist gerade hier im forum iwo darüber ein thread
High Light
09.09.2009, 20:13
Bringt mir alles nix^^ totaler Anfänger.
Gibt es denn keine Schritt für Schritt Erklärung???
Beispiel:
1. Tue dies
2. Tue das
3. ...
Versteht jemand was ich meine?
Gruß
also dieser i2c krams in bascom ist doch recht einfach. sry erklären kann ichs net aber ich habs schon anhand von beispielen verstanden.
aber mal so nebenbei wenn du da schon net weiterkommst?! dann nen ganzen hexa bauen??? ich hatte das auch vor und es erstmal sein gelassen da ich noch keine großen erfahrungen mit robotern gemacht hatte... jedenfalls keine praktischen naja udn halt die kosten haben mich auch ein wenig abgeschreckt. nun versuche ich erstmal was mit rädern bzw in meinem fall auf ketten.
High Light
10.09.2009, 21:02
1.)An Hand von Beispielen zu vertsehen, des hab ich auch.
Aber dass es auch funktioniert, dass ist eine andere Sache.
Viele machen es unterschiedlich und daher check ich nicht wie ich das
mit der Adressierung mach und dann vom Master aus des richtigen
Slave zu erreichen.
2.) Den ganzen Hexa bauen ist nicht das Problem, wenn ich bedenke was
alles schon geplant ist und in Planung ist (das meiste in meinem Kopf), das
einzige Problem besteht noch in der Kommunikation zwischen den
Controllern und den richtigen Lipo finden.
Ich habe im Geschäft schon ganz andere Sachen gebaut und
programmiert, da wird dies auf jeden Fall funktionieren.
Und da ich mir kein Zeitlimit gesetzt habe, kann der Hexa auch erst im
Januar die ersten Schritte machen.
"Mit der Zeit kommt Rat"
Gruß High Light
Waldichecker
13.09.2009, 14:16
Und da ich mir kein Zeitlimit gesetzt habe, kann der Hexa auch erst im
Januar die ersten Schritte machen.
Naja, das ist sehr wohl ein Zeitlimmit. Ich tüftele an meinem Bot schon seit 3-4 Jahren.
Gruß
Waldichecker
High Light
15.09.2009, 20:33
Das war nicht so gemeint dass es ein Zeitlimit ist, sondern nur ein Beispiel,
dass es egal ist wenn er laufen kann.
So zur Konstruktion gibt es was neues.
Das Chassi ist fertig und für die Montage der Beine hab ich nun Kunststoff-
halterungen entworfen, die ich im Moment von einem Freund fräsen lasse.
Bilder vom Chassi und von den Kunststoffteilen, gibt es in Kürze.
Wahrscheinlich werde ich auf I2C verzichten und mir erst mal selbst eine Möglichkeit austüfteln.
Gruß High Light
High Light
15.09.2009, 21:23
Hier mal noch der Plan für das Kunststoffteil:
hehe auch einer der lieber mit hand zeichnet? naja ich kann das auch besser :D
Waldichecker
16.09.2009, 17:58
Hi High Light,
Was anderes als I2C, was willste denn nehmen? So viele möglichkeiten gibts gar nicht mehr.
Gruß
Waldichecker
Chaosmann
16.09.2009, 20:15
Hier mal noch der Plan für das Kunststoffteil:
In dem Teil hast du einen mechanischen Schwachpunkt:
Das vertikale Servo hat in Lastrichtung keinen halt.
Des weiteren hast du bei der Konstruktion für das horizontale Servo den Kabelaustritt vergessen auszusparen.
High Light
16.09.2009, 20:44
Der Kabelaustritt ist noch nicht eingezeichnet, weil alle Bohrungen in der
Zeichnung sowie Gewinde noch Fehlen. Der Plan enthählt nur die zum
Fräsen nötigen Daten.
Worin soll der Schwachpunkt in vertikaler Richtung liegen?
Gruß High Light
High Light
16.09.2009, 20:47
Aso und wegen I2C, dies wird erst mal profisorisch ohne Bus gemacht, damit er mal dann laufen kann. Wenn dass dann funktioniert, steige ich auf ein Bussystem um. Eine Skizze meiner "Lösung" gibst auch noch.
Kann ich eigentlich Servos auch in unterschiedlichen Geschwindigkeiten fahren lassen? Oder sagen in der Zeit muss er von da nach da fahren?
Gruß High Light
das langsam fahren erreichst du dimit in dem du in einer bestimmten zeit den wert der position imemr erhöhst.. hoffe das war verständlich im schriftlichen erklären bin ich ne null
Chaosmann
16.09.2009, 21:06
Die Verschraubung des Servos an nur einer Seite ist leider (musste ich auch feststellen) eine ziemlich wackelige Geschichte. Das Servo hat nach oben und unten Spiel. Nach unten ist nicht weiter schlimm. Das Gewicht des Bots drückt das Servo nach oben. Je nach Länge des Beins kann sich das am Fuß dann in einem Spiel in der Höhe von 1-2 cm äußern.
Des weiteren hast du dann auch keine Möglichkeit das Servo gegen verdrehen um die Schrauben zu fixieren.
Ich habe bei meinem Bot praktisch das gleiche Konzept für die Hüfte (Bild (http://ihr-werkstattausruester.de/download/huefte_roh_small.jpg)).
Bis vor knapp 30 min hatte ich auch noch das Problem, dass die Servos sich um die Schrauben herum nach vorne und hinten drehen konnten (hat man auch am Abrieb zwischen Servo und Halterung gesehen). Jetzt habe ich an dieser Stelle noch doppelseitiges Klebeband eingebracht um das Servo zu fixieren.
Gruß
Daniel
High Light
16.09.2009, 21:18
Ok macht Sinn. Danke für den Hinweis.
Jetzt lass ich aber leider schon dieses Teil
fräsen. zum Glück erst Mal nur Eins.
Die Frage, die ich mit stelle ist, wär es nicht besser wenn
man den Servo umdreht, damit der Drehkranz oben ist
anstatt unten???
So hatte ich es mir vorgestellt, aber ob das etwas ändert kann
ich nicht sagen.
Um auf das Ansteuern der Servos zurück zukommen:
@Bammel, könntest du mir ein Beispielprogramm geben,welches den
Servo in einer bestimmten Zeit eine bestimmte Strecke fahren lasse?
Gruß HiLight
Chaosmann
16.09.2009, 21:33
... Die Frage, die ich mit stelle ist, wär es nicht besser wenn
man den Servo umdreht, damit der Drehkranz oben ist
anstatt unten???
So hatte ich es mir vorgestellt, aber ob das etwas ändert kann
ich nicht sagen. ...t
Bei mir ist die Femur-Achse so gelegt, dass sie genau auf der Kante der Unterseite des Körpers liegt. Der Unterschenkel ist dann so lang wie der Oberschenkel + den Abstand zwischen Servoscheibe Oberschenkel und Boden. Letzteres wird halt größer, wenn du die Femur-Achse nach innen packst.
High Light
18.09.2009, 15:42
Ja macht schon Sinn, aber jetzt probier ich es Mal sp.
Drehen kann ich es ja immer noch. Erzähle euch dann
meine Erfahrung die ich gemacht habe.
Ich hoffe nur, dass bald mein Kunststoffteil fertig ist, damit ich an der Konstruktion weiter bauen kann.
Ideen sind da, aber nicht das Material.
Schlimmer gehts nimmer!!!
@ Bammel: Hast du auch ein Beispielprogramm, wie ich das
mit der Zeit machen soll?
Für alle anderen, ich brauche ein Beispielprogramm, damit ich verstehe wie
ich einen Servo in einer bestimmten Zeit von a nach b fahren lassen kann.
Kann mir jemad da weiter helfen???
Gruß High Light
High Light
22.09.2009, 20:48
Hallo zusammen,
meint ihr ich kann mein Gegenlager so realisieren:
Eine Kunststoffbuchse kommt ins Allu.
Auf der Unterseite des Servos kommt ein
Messingbolzen hin, welcher in die Buchse
gesteckt wird. Bisschen Fett dazu und des
wars.
Meint ihr des funktioniert so?
Oder wie habt ihr es gemacht?
Gruß High Light
Chaosmann
23.09.2009, 11:38
Wenn du mit Kunstoffbuchse ein ordentliches Gleitlager meinst, dann brauchst du kein Fett.
Die Frage ist nur, wie du den Bolzen auf dem Servo befestigen willst.
Entweder du hast ein Server mit Gegenachse (z. B. Hitec 5980 und 5990) oder du bräuchtest einen verdammt guten Kleber.
Mit einer Schraube kann man den Bolzen jeden Falls nicht auf der Unterseite befestigen. Der Schraubenkopf ist zu dick und kommt mit der elektronik im Inneren des Servos in Konflikt.
Gruß
Daniel
High Light
25.09.2009, 20:54
Hallo zusammen,
ich melde mich auch mal wieder.
@Chaosmann: Das ist gar kein Problem, da ich eine Servohalterung
entworfen und fräsen gelassen habe, kann ich an der den Bolzen
montieren.
Und diese habe ich heute auch bekommen. Sieht echt gut aus. Für das nächste Mal hab ich vlt noch ein paar Änderungen, aber für den ersten Bot
ist es so total ok.
Heute Abend habe ich noch die Löcher gebohrt und Gewinde geschnitten.
Anschließend die Servos montiert. -> Bilder folgen in Kürze!!!
Als nächstes werde ich den Bolzen für das Gegenlager drehen.
Frage:
Hat jemand zum Ansteuern der Servos, damit sie in einer bestimmten Zeit
eine bestimmte Position anfahren, ein Beispielprogramm????
Weiß nämlich nicht wie ich das machen muss.
Bin für jede Hilfe dankbar.
Gruß High Light
High Light
28.09.2009, 21:13
Auf meine Frage hatte wohl noch niemand eine Antwort^^
Sitze gerade in der Bahn und jetzt ist mir eins eingefallen,
wenn ich jetzt einen Output meines Masters mit einem Input eines
Slaves verbinde kann ich ja hier 0 und 1 also High und Low draufgeben.
Kann ich jetzt hier auch ein Byte als Beispielsweise eine 8 oder 7 oder so
vom Master zum Slave senden?
Gruß High Light
als beispiel in bascom für den durchlauf aber keine garantie obs funzt
For n = 1 to 255
servo_pos = n
waitms 100
next n
da sollte der servo immer durchlaufen
welchen bus nutzt du den? beim i2c wird das ganze so erzeugt das du auf der taktleitung immer bei steigender flank auf der signalleitung schaust ob es high oder low ist bei 8x takt von low auf high hast du ein byte übertragen das die werte von 0 bis 255 haben kann
ikarus_177
29.09.2009, 13:11
Hi,
Kann ich jetzt hier auch ein Byte als Beispielsweise eine 8 oder 7 oder so
vom Master zum Slave senden?
Klar kannst du das so machen, ich hab mir auch so ein kleines Bussystem für meinen Bot gebastelt. Du musst dir halt Gedanken über das Protokoll machen, dass während der Übertragung möglichst wenig Daten verloren gehen oder verfälscht werden.
Auf meiner Website gibts da auch ein paar Informationen.
viele Grüße
ikarus_177
High Light
29.09.2009, 21:08
Danke Bammel, so in der Art habe ich mir dass auch schon gedacht, war mir
aber nicht sicher, werde ich so bald es geht ausprobieren.
Danke Ikarus, deine Page ist echt interesant, und ich sehe schon dass es mir
auch weiterhelfen wird. Jetzt muss ich aber erst mal bis aufs WE warten, weil
ich vor her durch die Arbeit keine Zeit haben werde, irgendwas
auszuprobieren.
Aber ich freue mirch jetzt erst recht auf das WE.
Die Kunststoffteile werden nun alle gefräst, da das erste Testteil ein voller
Erfolg war. Die Teile für das Gegenlager sind auch in Bearbeitung
(wahrscheinlich am WE^^).
Gruß High Light
wenn du dir die teile anfertigen lätte würde ich den bolzen 3,9mm machen.. ein 4mm bolzen in eine 4mm passung dürfte recht stramm sein.
wegen dem code. das iost bestimmt nicht der effektivste aber so könnte man es machen.. gerade wait befehle sollte man vermeiden. den in der zeit macht der µC reich garnichts. man könnte sowas bestimmt mit hilfe einer timers eleganter lösen. evtl über timer den servo alle paar ms refreshen udn einfach die positions vcariable langsm erhöhen.. z.b. alle 40ms das könntest du mit nem extra timer amchen.. oder mit dem welchen wnen du alle 10ms refresht.. dann einfahc ne variable hochzählen und immer wenn diese 4 zeigt (4x 10ms) den servo um ein paar stellen erhöhen.
ich würde mcih auch aufs we freuen wnen mein panzerkauf endlich mal abgeschlossen werden könnte und ich den für mein robby schlachten könnte... aber der meldet sich einfach net mehr
High Light
30.09.2009, 19:52
Das mit dem Bolzen hatte ich mir auch schon fast gedacht,
dachte aber ich drehe jetzt mal eins auf 4mm und dann kann ich
immer noch ein bisschen weg drehen. Aber ich werde es jetzt gleich
mal auf 3,9mm drehen.
Wenn ich eine Wait-Funktion habe, macht dann der ganze Controller
gar nichts mehr? Sondern wartet nur noch bis die Zeit vorbei ist?
Das heißt er kann auch keine anderen Funktionen bearbeiten?
Gruß High Light
High Light
30.09.2009, 19:58
BilderAchso hier mal noch Bilder vom Chassi:Bilder
das sind ja garkeine bilder :-( nur zeichnungen... "nur"
ja genau in einer wait function macht der controller null er wartet bis die zeit rumm ist und fängt dann erst an den code weiter zu bearbeitren bzw zu verarbeiten.
also am besten sowas mit nem timer lösen... und erst bei einer bestimmten anzahl an überläufen die position verändern... aber frage mich jezze nicht wie sowas in code aussieht ich weis nur in der theorie wie es laufen müsste
High Light
06.10.2009, 21:13
Hallo zusammen,
ich melde mich auch mal wieder^^
Sorry Bammel, es waren nur Zeichnungen, aber heute gibt es Bilder!!!
Und zwar sind meine Fuß- und Bein-Teile fertig. Hatte sie am WE mit einem
CAD-Programm gezeichnet und heute bei einer Firma lasern lassen. Danke
auch hier noch mal.
Sind echt gut geworden. Muss sie nun noch entgraten und entfetten. Aber ich
musste sie jetzt einfach fotografieren.
Des weiteren sind meine Servos gekommen, der eine Lipo für die Steuerung
muss demnächst auch aus Hong Kong kommen (für die Steuerung). Die
Frästeile müssten am Donnerstag fertig werden. Jetzt muss ich endlich die
Gegenlager machen, und dann gehts endlich an die Elektronik.
Gruß High Light
High Light
01.11.2009, 20:49
Hallo,
lang lang ist es her das ich mich gemeldet habe, aber Schule hatte einfach Vorrang.
So es gibt neues zu berichten:
1. Alle Servos sind nun da.
2. Genauso wie der Lipo und das Ladegerät
3. Gewinde in die Frästeile geschnitten
4. Den Füßen Schuhe angezogen.
5. Gegenlager werde ich mit Imbusschrauben und 2 Kunststoff-
unterlegscheiben realisieren.
6. Gerade bin ich mit Schaltplan zeichnen beschäftigt.
Morgen oder am Di wird dann alles zusammen gebaut.
Hatte irgendjemand Tipps die ich bei I2C zubeachten habe?
Also von der Hardwareseiter her gesehen??????????
Gruß High Light
Hier noch Bilder vom aktuellen Stand:
nett nett da bin ich ja mal gespannt..
beim i2c die 2,2k pullup-widerstände nicht vergessen
021aet04
01.11.2009, 22:45
Über den Widerstand gibt es verschiedene Angaben. Die häufigsten Werte sind 2k2, 4k7 oder 10k. Ich verwende 4k7
High Light
03.11.2009, 21:04
Ok des isch ja dann mal kein Problem. Und wenn es mit dem Widerstand
nicht funktioniert dann halt einen anderen rein machen.
Wenn ich für die Servos eine andere Spannungsquelle als für den Controller
habe, dann muss ich ja die Masse zusammen schließen oder????
So solangsam steht die mechanische Konstruktion. Jetzt muss ich noch die
Abstandsbolzen für die 2 Chassiplatten anfertigen und dann ist dieser Teil
geschafft.
Platinen sind in Planung!
Was meint ihr zur Konstruktion?
Moin moin.
Mechanisch sehr schön gelöst! Alle Achtung. Ich habe mir in meinen
Anfängen hier mal so einen Thread duchgelesen in dem es um die
Berechnung der Bewqegungsabläufe der Beine ging und das war
Härte ³....! Bei 6 Beinen und 6 Slave Kontrollern und jedes Bein muß
immer wissen was das andere gerade macht, ob es ins leere tritt oder
festen halt hat sowie wo es sich wie gerade befindt...Das wird haarig.
Vor allem wo Du schon aufgibst wenn Du ein Byte per I²C Übertragen
willst Du wirst ganz erheblichen Datenverker brauchen und natürlich
auch schnell genug Auswerten müssen, damit die Beine sich nicht
gegenseitig "verhakeln".
Ganz schön Muitig!
Gruß Richard
021aet04
04.11.2009, 11:13
Sieht richtig gut aus. Die Massen musst du miteinander verbinden. Ich würde es mit einer Massefläche machen.
MfG Hannes
Hessibaby
04.11.2009, 13:41
Interessantes Konstrukt. Der Aufbau sieht gut aus. Hut ab.
Du kannst Dir viele Probleme ersparen wenn Du von vorn hinein alle Metallteile elektrisch miteinander verbindest.
Gruß
High Light
06.11.2009, 20:25
Wie so die Metallteile elektrisch verbinden?
Aus was für einem Grund, was für Probleme können da auftreten?
Gruß
021aet04
07.11.2009, 12:47
Metallteile kann man mit "Massebändern" verbinden. Am einfachsten ist es, wenn man Entlötlitzen nimmt.
High Light
12.11.2009, 08:58
Wie ich die Metallteile mit einander verbinde ist ja kein
Problem, jedoch vertsehe ich nicht was das bringen
soll, da ja alles isoliert ist habe ich ja keinen Kontakt
zum Alu.
Daher kann ich auch keine Stöme bzw. Potential-
unterschiede auf den Metallteilen haben.
Was für Probleme sollen den dann auftreten???
Gruß
High Light
High Light
13.11.2009, 20:55
Ok, es gibt wieder neues, habe mir ein altes Computernetzteil so umgebaut,
das ich für die Tests jetzt keine Lipos brauche. Da die Netzteile recht
stabile Spannungen liefern und ich so erst mal meine eine Lipo schone.
Gut, den für die Servos habe ich eh noch nicht^^.
In den nächsten Wochen werde ich meine 2 Slaveboars löten und das
Masterboard, habe ich am letzten WE gezeichnet.
Für die die es interessiert im Anhang ist mal ein Entwurf für ein Slaveboard.
Wenn jemand einen Verbesserungsvorschlag hat, sofort melden!!!!
Jetzt Mal schauen wie ich in den nächsten Woche vorwärts komme,
da Zeit zur Zeit Mangelware ist, da ich jeden Abend (außer heute und
So's) auf Fortbildung bin.
Und was sollen die Massebänder bringen???
Gruß High Light
High Light
10.12.2009, 21:24
Hallo zusammen,
Melde mich auch endlich mal wieder!!!!!!!!
Habe heute meine Paltinen fertig gelötet, also konnte ich auch noch nicht viel austesten.
Spannung stimmt und die Grundprogrammierung funktioniert.
I2C habe ich noch nicht getestet.
Aufgebaut wurde alles auf drei Streifenrasterplatinen. (Billiger als welche zuätzen!)
Bin mit dem Ergebniss recht zufrieden.
Als Nächstes muss ich bei einigen Kontrollern noch die Fusebits richtig
einstellen und dann will ich den Bus testen.
Hoffentlich klappt dass alles. :-D
Gruß High Light
High Light
06.01.2010, 20:37
So heute hat er die ersten Schritte getan, aber es wird noch kein
Video geben, da es mehr ein zucken isch als ein geschmeidiges
Laufen.
Dazu kommt, das der Master noch nichts gemacht hat. Die Slaves
haben nur nach einem festen Ablauf die Servos gesteuert. Also ist
er auch nur vorwärts und rückwärts gelaufen.
Am Bus bin ich gerade dran (Unter dem Thema "» I2C zwischen Atmegas 88") könnt ich mir gern weiter helfen ;-D.
Von was kommt dass wenn die Servos immer wieder zucken
und teilweise alle 6 Füße schnell rumzapeln, wie wenn sie
auf den Boden schlagen würden.
Wo her kommen diese Erscheinungen?
(Spannungseinbruch???)
Gruß High Light
HannoHupmann
07.01.2010, 18:27
Klingt stark nach Spannungseinbruch was du da beschreibst. Du kannst mal versuchen die Logik von der Leistungselektronik zu entkoppeln. Dazu versorgst du die Logik mit einer eigenen Batterie (GND zusammen schalten).
Dass sie rumzappeln, liegt dann an falschen Signalen bzw. nicht korrekt übermittelten Signalen. Mit dem Multimeter wirst du sowas nicht messen können, dazu braucht man leider ein Oszi.
Ansonsten hilft es auch einen 100Ohm Widerstand zwischen Signal und I/O Port des µC zu hängen.
High Light
07.01.2010, 20:48
Des mit dem Oszi isch klar, wenn es klappt kann ich eins
über das Wochenende ausleihen, dann muss ich mal nachsehen.
Ich vermute fast, dass das Netzteil zuschwach ist. Mal schauen.
Werde mal die Servos und die Logik getrennt versorgen, dass wird
wohl das Beste sein.
Danke die, aber ich hab mal noch eine Frage und zwar verstehe ich
nicht dass mit dem 100 Ohm Widerstand. Wie soll den das gehen?
Mein Signal kommt doch aus dem Output heraus.
Gruß HighLight
Ich vermute fast, dass das Netzteil zuschwach ist. Mal schauen.
Werde mal die Servos und die Logik getrennt versorgen, dass wird
wohl das Beste sein.
Und denk daran, dass du die Leistungsseite für die Servos ordentlich pufferst. Ein 1000µF-Elko sollte da wohl das mindeste sein, bei den zu erwartenden Strömen. Und reichlich Entstörkondensatoren vorsehen.
Grüße
Thomas
021aet04
07.01.2010, 21:31
Wie schon erwähnt ordentlich puffern und Logik- und Leistungsteil trennen. Ich habe das SD21 (Servocontroller für max 21 Servos) probiert. Es waren ca. 5 Servos angeschlossen und der Controller hat trotzdem neu gestartet obwohl ich mit das SD21 mit einem 15mF/10V Kondensator gepuffert habe.
MfG Hannes
hi,
wir haben bei unserem "BOB" 2 Akkus.
http://jenskohler.je.funpic.de/BOB/Website/index.php?option=com_content&task=view&id=10&Itemid=11
(der bleiakku ist nicht ernst gemeint :D)
und dann puffern wir jedes servo mit einem 100uF Elko für die niederfrequenzen und einen 100nf Keramikkondensator für die Hochfrequenzen. damit hört das zappeln dann auf.
High Light
13.01.2010, 09:04
Ok schon mal danke für Nachrichten.
Ich werde dann mal einen 1000µF-Elko parallel zur
Spannungsquelle hängen, und für jeden Servo dann einen 100uF Elko
und einen 100 nF Keramikkondensator einbauen. Die für die Servos hänge ich ja dann zwischen das schwarze und rote Kabel des Servos.
@HanoHupmann:
"Ansonsten hilft es auch einen 100Ohm Widerstand zwischen Signal und I/O Port des µC zu hängen."
Wie soll dass gehen? du meinst doch wahrscheinlich zwischen Signal und Masse oder?
Gruß High Light
HannoHupmann
13.01.2010, 15:03
nein, mein ich nicht.
Hab bei meinem Hexa zwischen dem Servosignal und dem I/O Port nen 220Ohm Widerstand hängen (gerade nochmal nachgesehen 100Ohm wars nicht). Der hilft ein wenig gegen das Zappeln, schaden tut er auch nicht, sondern untersützt nur den internen Widerstand des µC.
Bei Signal zu Masse würde das Potential über den Widerstand abfliessen, da dürfte sich dann gar nichts mehr rühren.
Außerdem hab ich der Spannungsversorgung für die Servos eine 1µH Spule gesponsort und zwei Kondensatoren: 100nF und einen 470µF damit kann ich alle Spitzen rausfiltern. Wobei immer 3 bis 4 Servos sich einen Satz LCs teilen.
High Light
13.01.2010, 19:50
Jatzt hab ich das vestanden :-D lol. Zwischen dem I/O Port und dem Servosignalkabel^^. Gut da hab ich schon Widerstände drinen, aber
an bissel mehr. Ich hab 1 kOhm jeweils drin.
Stimmt d hab ich gar net dran gedacht, an nen Tiefpassfilter, das würde natürlich Sinn machen.
Danke für den Hinweis.
Hast du dann die 2 Kondensatoren ind Reihe oder Parallel geschalten.
Hast du dann den Servos auch noch mal Kondensatoren gegeben?
@JensK:
Die zwei Kondensatoren sind beide Parallel zum Servo oder beide in Reiheund dann Parallel zum Servo?
Gruß High Light
Hallo!
Das er einen Elko und einen Kerko in Serie schaltet, bezweifle ich stark. Damit würde die Gesamtkapazität auf unter 100nF sinken, da kann er den Elko gleich wegglassen.
HannoHupmann meint, das du die Kondensatoren parallel schalten sollst. Der Elko puffert mit seiner großen Kapazität die Spannung, für sehr schnelle und kurze Einbrüche ist er aber zu langsam. Dafür ist dann der Kerko parallel geeignet.
Grüße
Thomas
HannoHupmann
14.01.2010, 10:14
der Thomas hats genau richtig beschrieben. Alles Kondensatoren hübsch parallel. Logik und Leistungsteil (Servos) mit unterschiedlichen Quellen und einen GND.
Damit sollte eigentlich alles gut entstört sein. Wenns dann noch Probleme gibt liegt, dann kommen die von wo anders.
Ganz Hartgesotten trennen natürlich den Leistungs und den Logikteil komplett voneinander und machen die Signalübertragung mit Optokopplern. Find ich aber ein bischen übertrieben solange es Modellbau Servos sind.
High Light
19.01.2010, 21:20
Ok alles klar dann werden dass dann mal mein nächster Schritt sein,
die Kondensatoren einzulöten und den Leitungs- und Logikteil zutrennen.
Melde mich wieder wenn ich weiter gekommen bin.
Gruß High Light
P.s.: Vlt kann mir ja jemand auch hier weiter helfen:
Thema: I2C zwischen Atmegas88
High Light
29.01.2010, 21:16
Hallo,
ich weiß auch nicht wo die Zeit bleibt.
Alles bleibt liegen leider auch mein Projekt :-(
Hoffentlich find ich demnächst mal wieder Zeit an meinem
Programm zuarbeiten, dass die Kommunikation der Slaves
auch bald funktioniert.
Aber hier mal 2 Schaltpläne. Die Lampen sollen die Servos sein,
wie würdet ihr die Servos verschalten?
Macht das überhaupt einen Unterschiede aus? Eigentlich ja nicht oder?
Gruß High Light
High Light
12.02.2010, 20:57
Kann mir keiner weiterhelfen?
Gruß High Light
HannoHupmann
12.02.2010, 21:09
Doch, habs aber gerade erst gesehen. Ich würde jedem 3er Block einen 1000µF spenden und dafür die 100 µF weglassen. Also 100nF für jeden und 1000µF für jeweils 3. Wobei ich nur 470µF für 3genommen hab. In die Versorgung hab ich noch pro 3er Block ne 1,5µH Spule gehängt. Damit kann man quasi noch ein bischen die Spannung glätten es geht aber auch sicher ohne. Weiter ist zu Empfehlen in die Signalleitung einen Widerstand zu hängen bei mir waren es glaub ich 220Ohm.
High Light
17.06.2010, 11:47
Hallo,
da bin ich seit langer Zeit mal wieder^^,
letzte Zeit war total streßig durch Abschlussprüfungen,
habe gerade Urlaub und da dachte ich, jetzt muss es mal
wieder mit meinem Projekt vorwärtsgehe.
Habe die Kondensatoren nun eingelötet, und versorge Controller
und Servos getrennt. Und siehe da, es geht besser^^.
Nur die Linke Fußseite spinnt total rum, entweder die Servos machen gar nichts oder nur blödes Zeug, wo das nun her kommt, kp.
Die rechte Seite funktioniert auf jeden Fall!!! Juhuu =D>
So und in den nächsten Tage will ich jetzt mal endlich den Bus mit I2C hinbekommen!!!
Hier mal noch ein neues Bild von Susi...habe ich dass schon mal erwähnt?
Habe sie nun Susi getauft, dachte das passt totalO:)
Grüße High Light
Chaosmann
17.06.2010, 12:05
Die eine Seite geht und die andere nicht?
Das kommt mir aus meine Anfangsphase so bekannt vor *g*
Ich hatte in der IK an einigen stellen vergessen die Vorzeichen für die andere Seite zu ändern.
Gruß
Daniel
High Light
18.06.2010, 11:45
Dass hatte ich zuerst auch gedacht, aber vom Programm her
stimmt alles, irgendwie fang ich mir Störungen auf den Servoleitungen ein.
Weil wenn ich die Controller der rechten Seite abhänge dann geht die Linke
Seite auch, muss ich mal näher nachforschen.
Bin aber gerade mit dem Bus beschäftigt^^
Im Thread "I2C zwischen Atmegas 88" habe ich gerade meine Quellcodes für
Master und Slave reingestellt.
Vlt kann sich die jemand vlt bitte mal durchschauen?
Wäre klasse!!!
Gruß High Light
Chaosmann
18.06.2010, 12:48
Schon mal versucht die Seiten mit getrennten Stromquellen zu versorgen?
High Light
25.06.2010, 14:30
So Stromversorgung passt nun^^,
habe nun die linke und rechte Seite parallel geschalten geschalten,
und zusätzlich jeweils einen Tiefpass eingebaut.
Bus-System geht leider immer noch nicht.
Habe aber ein wenig an meinem Fußablauf gearbeitet.
Und nun werden die Schwächen der billigen Servos deutlich.
Ein einfaches Vorwärtslaufen ist möglich. Mehr aber auch nicht!
Den dadurch, dass sie zuweing Kraft haben, knicken sie bei Seidwerts
oder Kippbewegungen ab und können sich nicht mehr Aufrichten. Zum
Ausprobieren gehts noch, aber nur dann, wenn Susi auf nem Stappel
Bücher sitzt^^
Sobald das Bussystem geht und ich alles recht gut programmiert habe,
kauf ich neue Servos.
Weil wenn ich es nicht hinbekommen sollte, wäre dass Geld verloren.
Aber ich werd es irgendwie hinbekommen!!!...Hoff ;-D
Gruß High Light
Hallo !!
Das Problem mit den Servos kann ich nachvollziehen.
Habe meine MG 995 auch komplett ausgewechselt und bin jetzt zufrieden.
Nutze nun MG 946R, die haben richtig Kraft und benötigen nur halb soviel Strom.
Kosten aber doppelt so viel.
Zum Bus :
Was ist denn dein Problem ?
Bekommst Du die Daten nicht gesendet, oder Empfängt dein Master nichts ?
Du verwendest doch I2C ?
Evtl. kann ich Dir etwas helfen !
Roland
High Light
27.06.2010, 11:01
Hey,
also im Thema "I2C zwischen Atmegas 88" versuche ich
mein Problem zulösen.
Und zwar bekomme ih keine Verbindung zustande, zwischen
den Controllern.
Ich habe einen Master der den Slaves Zahlen (Status) senden
soll. Wenn er eine bestimmte Zahl sendet soll der Slave die
LED einschalten.
Nur es geht gar nichts!!!
Warum weiß ich nicht!
Vlt mach ich das auch viel zu kompliziert^^, hab mit I2C
noch gar keine Erfahrungen
Wäre klasse wenn du mir weiter helfen könntest!!!!!!!!!!
Gruß High Light
HannoHupmann
27.06.2010, 11:47
Gibt ein i2c Tutorial in der Wiki, welches ich mal ausprobiert und verbessert hab. Das sollte funktionieren, zumindest klappt es bei meinen beiden Mega32 ganz gut. Das Problem bei der Komunikation zwischen µC ist, dass es soviele mögliche Fehlerquellen gibt und man so schwer nachprüfen kann woran es liegt.
High Light
28.04.2011, 22:33
Hallo zusammen,
lange ist es her, dass ich mich hier gemeldet habe, aber es hat sich viel getan und ich möchte euch kurz davon berichten.
- Ich habe mir ein LCD-Display besorgt, welches auf Susi montiert wird und
verschiedene Sachen (wie z.B. Akkuzustand) anzeigen soll. Anschließend habe ich mich in
die Programmierung eines solchen Displays eingearbeitet und ich muss sagen, dass es
gar nicht so schwer ist.
- Desweiteren funktioniert nun mein I2C-Bus, nachdem ich mich intensiv damit
beschäftigt habe.
- Susi hat auch noch einen Kopf bekommen, welcher mit Ultraschallsensoren ausgerüstet
ist. Die Abstandswerte werden von einem Atmega48 erfasst und sollen dann über den
Bus an den Master gesendet werden. Jedoch ist der Kopf noch nicht an den Bus
angeschlossen.
Näheres zu den beiden letzten Punkten hier:
1.) https://www.roboternetz.de/community/showthread.php?51072-Variablen-Cases-und-Analogwert-Problem-in-Bascom/page3
2.) https://www.roboternetz.de/community/showthread.php?46100-I2C-zwischen-Atmegas-88
Hier habe ich noch aktuelle Bilder von Susi:
18664
18665
Und hier noch den aktuelle Code des Masters:
$regfile = "m88def.dat"
$crystal = 16000000
'I2C Konfiguration
Declare Sub Twi_send_byte(byval Slave As Byte , Zeichen As Byte)
Dim Twi_control As Byte ' Controlregister lokale kopie
Dim Twi_status As Byte
Dim Twi_data As Byte
Dim B As Byte ' Zeichen von UART
Dim Error As Byte ' Fehlermerker
Dim Wert As Byte 'Wertvariable
' TWI init
Twcr = &B00000100 ' erstmal nur TWI aktivieren
Twsr = 0 ' Status und Prescaler Register
Twbr = 72 ' Bit Rate Register, 100kHz
'StatusLEDs
Statusled_rot Alias Portd.0
Config Statusled_rot = Output
Statusled_gruen Alias Portd.2
Config Statusled_gruen = Output
Statusled_rot = 0
Statusled_gruen = 1
' Hauptschleife
Do
'Start
Wert = 10
Call Twi_send_byte(&Hc0 , Wert) 'Slave SL1
Call Twi_send_byte(&Hc2 , Wert) 'Slave SL2
Call Twi_send_byte(&Hc4 , Wert) 'Slave SL3
Call Twi_send_byte(&Hc6 , Wert) 'Slave SR1
Call Twi_send_byte(&Hc8 , Wert) 'Slave SR2
Call Twi_send_byte(&Hca , Wert) 'Slave SR3
Statusled_rot = 1
Statusled_gruen = 0
Waitms 6000
'Vorwärts
Wert = 20
Call Twi_send_byte(&Hc0 , Wert) 'Slave SL1
Call Twi_send_byte(&Hc2 , Wert) 'Slave SL2
Call Twi_send_byte(&Hc4 , Wert) 'Slave SL3
Call Twi_send_byte(&Hc6 , Wert) 'Slave SR1
Call Twi_send_byte(&Hc8 , Wert) 'Slave SR2
Call Twi_send_byte(&Hca , Wert) 'Slave SR3
Statusled_rot = 1
Statusled_gruen = 0
Waitms 20000
'Stop
Wert = 100
Call Twi_send_byte(&Hc0 , Wert) 'Slave SL1
Call Twi_send_byte(&Hc2 , Wert) 'Slave SL2
Call Twi_send_byte(&Hc4 , Wert) 'Slave SL3
Call Twi_send_byte(&Hc6 , Wert) 'Slave SR1
Call Twi_send_byte(&Hc8 , Wert) 'Slave SR2
Call Twi_send_byte(&Hca , Wert) 'Slave SR3
Statusled_rot = 0
Statusled_gruen = 1
Waitms 2000
Loop
End
' Unterprogramme
' TWI send_byte
' sendet ein Byte und schliesst die Übertragung ab
Sub Twi_send_byte(byval Slave As Byte , Zeichen As Byte)
Error = 0 ' Fehler zurücksetzen
' Startbedingung
Twcr = &B10100100 ' TWINT
' warten bis TWINT gesetzt ist
Gosub Twi_wait_int
' wenn Zugriff auf den Bus erlaubt, Slaveadresse ausgeben
If Twi_status = &H08 Or Twi_status = &H10 Then
Twdr = Slave And &HFE ' slave adresse + Write
Twcr = &B10000100 ' TWINT löschen, Byte senden
' warten bis TWINT gesetzt ist
Gosub Twi_wait_int
' Slave hat sich gemeldet
If Twi_status = &H18 Or Twi_status = &H20 Then
Twdr = Zeichen ' Daten
Twcr = &B10000100 ' TWINT löschen, Byte senden
' warten bis TWINT gesetzt ist
Gosub Twi_wait_int
' Zeichen wurden gesendet
If Twi_status = &H28 Or Twi_status = &H30 Then
Error = 0 ' kein Fehler
Else
Error = Twi_status ' Fehler
End If
Else
' kein slave
Error = Twi_status ' Fehler
End If
' STOPbedingung kommt hier immer im Ablauf, egal welcher Status
Twcr = &B10010100 ' TWINT löschen, STOP senden
' nach einem STOP wird TWINT nicht mehr gesetzt,
' man darf/kann also nicht darauf warten !
Else
' Bus belegt, wird er wieder freigegeben
Twcr = &B10000100 ' TWINT löschen, Bus freigeben
Error = Twi_status ' Fehler
End If
End Sub
' warten bis TWINT gesetzt ist, status auslesen
Twi_wait_int:
Do
Twi_control = Twcr And &H80
Loop Until Twi_control = &H80
Twi_status = Twsr And &HF8 ' status
' status nur zu Debugzwecken ausgeben, weil Bus sehr langsam wird !
' Print "Err " ; Hex(twi_status)
Returnund hier eines Slaves:
$regfile = "m88def.dat"
$crystal = 16000000
'I2C Konfiguration
Dim Twi_control As Byte ' Controlregister lokale kopie
Dim Twi_status As Byte
Dim Twi_data As Byte
Dim Neuesbyte As Byte ' Bytemerker
Declare Sub Twi_init_slave
Twi_data = 0
Call Twi_init_slave ' TWI aktivieren
'Servokonfiguration
Config Portb = Output
Config Servos = 3 , Servo1 = Portb.0 , Servo2 = Portb.1 , Servo3 = Portb.2 , Reload = 10
Enable Interrupts
Dim Xpos1 As Byte
'StatusLED
Config Portd.0 = Output
Statusled Alias Portd.0
Statusled = 1
'Variablen
Dim Freigabe As Byte
Freigabe = 0
' Hauptschleife
Do
' Merker zurücksetzen
Neuesbyte = 0
' schauen ob TWINT gesetzt ist
Twi_control = Twcr And &H80 ' Bit7 von Controlregister
If Twi_control = &H80 Then
Twi_status = Twsr And &HF8 ' Status
' wurde ein Byte geschickt
If Twi_status = &H80 Or Twi_status = &H88 Then
Twi_data = Twdr ' neue Daten merken
Neuesbyte = 1 ' merken das ein neues Byte da ist
End If
' TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht
Twcr = &B11000100 ' TWINT löschen, erzeugt ACK
End If
'Start
If Twi_data = 10 Then
Statusled = 0 ' StatusLED anschalten
Freigabe = 1
End If
'Stop
If Twi_data = 100 Then
Statusled = 1 ' StatusLED ausschalten
Freigabe = 0
End If
'Ablauf start
If Freigabe = 1 Then
Select Case Twi_data
Case 10:
Servo(1) = 100
Servo(2) = 125
Servo(3) = 130
Case 20:
Servo(1) = 100
Servo(2) = 125
Servo(3) = 130
For Xpos1 = 100 To 97 Step -1
Servo(1) = Xpos1
Waitms 167
Next
For Xpos1 = 97 To 94 Step -1
Servo(1) = Xpos1
Waitms 167
Next
For Xpos1 = 94 To 90 Step -1
Servo(1) = Xpos1
Waitms 167
Next
Servo(1) = 98
Servo(2) = 90
Servo(3) = 160
Waitms 250
Servo(1) = 106
Servo(2) = 125
Servo(3) = 130
Waitms 250
For Xpos1 = 106 To 103 Step -1
Servo(1) = Xpos1
Waitms 167
Next
For Xpos1 = 103 To 100 Step -1
Servo(1) = Xpos1
Waitms 167
Next
Case 100:
Servo(1) = 100
Servo(2) = 125
Servo(3) = 130
End Select
End If
Loop
End
' Unterprogramme
' TWI als slave aktivieren
Sub Twi_init_slave
Twsr = 0 ' status und Prescaler auf 0
Twdr = &HFF ' default
Twar = &HC0 ' Slaveadresse setzen
Twcr = &B01000100 ' TWI aktivieren, ACK einschalten
End Sub- Wie kann ich auf die ganzen Waitms-Befehle verzichten??? Denn so lange die ausgeführt werden,
bekommt zum Beispiel der Slave nicht mehr mit, wenn der Master ihn anspricht.
- Dass Andere, was ich sehr gerne anders realisieren möchte, ist, dass wenn der Master "Stopp" sagt,
dass dann alle Slaves in ihrer Postion verharren und die Servos nicht mehr angesteuert werden,
außer ein Fuß befindet sich gerade in der Luft.
Hat jemand eine Idee oder Anregung um dies so zu realisieren???
Grüße High Light
High Light
17.05.2011, 14:49
Kann mir keiner weiterhelfen?
Gruß High Light
021aet04
17.05.2011, 16:52
Bei Bascom kann ich dir leider nicht helfen. Könntest du mit einem Timer einen Int auslösen und diese Int zählst du. So sparst du dir die Waitms Befehle.
MfG Hannes
High Light
17.05.2011, 20:43
So irgendwie hatte ich es mir auch gedacht, nur weiß ich nicht wie???
da_reefer
17.05.2011, 21:03
Hallo,
Im Prinzip läufts genauso wie von 021aet04 beschrieben, ich habe das für 255 Software Timer in einer Library verpackt:
http://bascom-forum.de/index.php/topic,2821.0.html
mfg
High Light
27.05.2011, 21:27
Danke für den interesanten Link,
als ich ihn letzte Woche gelesen hatte, dachte ich sehr schön,
aber diese Woche geht er leider nicht mehr...:-(
Aber ich kam mit dem Beispiel nicht ganz zu recht,
könnte mir jemand sagen, wie ich die Theorie, in mein Programm bekomme,
als zum Beispiel für einen Servo? So eine Art Muster?
Grüße High Light
da_reefer
31.05.2011, 03:28
Hallo,
Im Zuge der Umstellung des deutschen Bascom-Forums wurden auch die Beiträge verschoben: http://bascom-forum.de/showthread.php?1301-Software-Timer
Eine Möglichkeit wäre, die Bewegungsdaten in eine Tabelle einzutragen (Servo-Nummer, Zeit, Servoposition), das könnten zb. Arrays oder Data-Anweisungen sein.
Dann definierst du dir für jeden Servo einen Software-Timer, der bei jedem Auslösen den Servo nach den Daten in der Tabelle neu positioniert und gleichzeitig setzt du dessen Auslöse-Intervall auf die nächste Zeit in der Tabelle.
Mit einer State-Machine und ein paar gespeicherten einfachen Grundabläufen sollten dann schon komplexere Abläufe möglich sein.
Bascom verwendet für die Servo-Ansteuerung den Timer0, der steht somit nicht für den Software-Timer zur Verfügung.
mfg
High Light
07.06.2011, 20:38
Danke für den neuen Link!!!
Hättest du für mich ein Beispiel, wie ich deine Timer in Verbindung mit den Servo-Befehlen bringen muss?
Ich weiß zwar, dass Bascom den Timer0 für die Servos verwendet, aber nicht wie man da einen anderen verwendet...
Grüße High Light
High Light
19.06.2011, 22:17
Anscheinend kann mir wohl niemand weiter helfen???
Aber ich habe da noch ein anderes Problem.
Und zwar:
- Wenn der Master einen Wert an seine Slaves schickt und diese ihren "Fußablauf" starten sollen,
dann tun sie dies nur so versetzt, dass wenn der erste Slave einen Durchlauf gemacht hat, dann der Nächste
anfängt und so weiter.
Also starten sie ihre Ablaufprogramme nicht gleichzeitig, sondern immer um einen Durchlauf versetzt.
- Wenn aber LEDs statt Servos eingeschaltet werden funktioniert alles.
Woran kann dies liegen?
Grüße High Light
High Light
20.06.2011, 09:32
Wenn ein Slave vom Master angesprochen wird, besetzt dann vielleicht dieser Slave für einen Durchlauf den Bus, damit der Master erst nach einem Durchlauf den nächsten Slave ansprechen kann? Im Moment kann ich es mir nicht anderes erklären...
Was meint ihr?
Gibt es vielleicht eine Möglichkeit einen Wert an alles Slaves gleichzeitig zusenden?
Also einen Befehl der allen Slaves einen Wert mitteilt.
High Light
21.07.2011, 16:02
Jemand eine Idee??? Ich kommt nicht mehr weiter...
da_reefer
21.07.2011, 19:36
Hallo,
im I²C-Protokoll ist ein sogenannter General Call vorgesehen (senden an die Adresse 0), damit kann jeder Slave gleichzeitig angesprochen werden.
Du könntest also zuerst an jeden Slave wie bisher die Bewegungsdaten schicken und sie damit "scharf" machen und im Anschluß den Bewegungsablauf mit einem GC starten.
mfg
High Light
22.07.2011, 15:21
Genau nach so etwas habe ich gesucht. Danke!!!
Probiere ich sofort aus, sobald ich zu Hause bin :-D
Einfach an die Adresse 0 senden?
da_reefer
22.07.2011, 17:35
Hallo,
ja, einfach an Adresse 0 senden!
Hier sind die Original-I²C-Spezifikationen, der General Call ist im Detail auf Seite 16 beschrieben: http://www.nxp.com/documents/other/39340011.pdf
mfg
High Light
22.07.2011, 21:39
Als Adresse gebe ich beim Master &H0 an,
aber es geht nicht. Slaves ragieren nicht...
Also stimmt doch irgendetwas mit der Adressierung nicht oder?
da_reefer
22.07.2011, 22:25
Hallo,
Damit der Slave GCs auswertet, muss in seiner Adresse Bit 0 gesetzt sein (vgl. Datenblatt Atmega32 S.179-180, TWI Slave Adress Register).
Weiters steht im TWI Status Register bei erkanntem GC ein anderer Wert als bei normalen Übertragungen (vgl. Datenblatt Atmega32 S.191, Table 76 - Slave Receiver Status Codes).
mfg
High Light
23.07.2011, 16:45
Sehr cool:-D Danke!!!
Das funktioniert jetzt schon mal so wie ich es mir vorgestellt habe!
Jetzt noch die Servos mit Timern steuern und dann will ich mich an die Interrupts machen...
Grüße High Light
High Light
25.07.2011, 16:48
Hier mal noch ein kleines Video von Susi...
http://www.myvideo.de/watch/8216409/Hexabot_Susi
Wie man sieht, ist sie aufgebockt, da die Spannung nach ca 20-30s einbricht
und so die Servos zusammenklappen. Dies bedeutet, dass sie alle 20-30s auf
den Boden fällt :-(...aber das ist ein anderes Problem!!!
Jetzt geht es in erster Stelle um die Servoansteuerung mit Timern...
Grüße High Light
HannoHupmann
26.07.2011, 13:01
Ohne jetzt alles gelesen zu haben, hast du mal die Spannung gemessen @High Light? Nicht mit einem Multimeter sondern mit einem Oszi?
So ein Verhalten kenn ich von meinem Hexa, wenn die Servos Strom ziehen, dann bricht die Logikspannung ein und der Roboter sackt in sich zusammen. Das Problem lässt sich aber sehr leicht lösen indem man Logik und Leistungselektronik voneinander trennt. Mein Phoenix² hat deswegen 7,4V Akku für die Servos + 9V Block für die Logik (über einen Spannungsregler auf 5V gewandelt).
High Light
26.07.2011, 13:11
Nein ich habe leider kein Oszi, darin liegt auch das Problem, dass ich es nicht genau anschauen kann... Servos und Logik werden von 2 getrennten Netzteilen versorgt. Wenn er aufgebockt ist, wie auf dem Video, kommt der Fehler nicht vor!?!...
Projekt 2252
14.01.2012, 19:40
Und wie läuft es bis jetzt mit deinem Hexapod ?
Gruß Tjark
High Light
30.04.2012, 10:34
Hallo zusammen,
fast ein Jahr ist schon vergangen, seit ich mich hier das letzte Mal gemeldet habe.
Krankheit und Prüfungen sind nun überstanden und ich möchte mich nun wieder mehr um Susi kümmern.
Daher hat sich auch nicht viel geändert.
Ich habe die Vermutung, dass das Netzteil die Fehlerquelle ist. Dies werde ich nun genauer analysieren und beheben.
Als nächster Schritt soll dann endlich ein geeigenetes Programm für den Bewegungsablauf geschrieben werden.
Wenn irgendwann :p alles soweit funktioniert, sollen die die Platinen neu hergestellt werden.
Diese möchte ich dann ätzen und nicht mehr auf Streifenrasterplatinen aufbauen.
Mein Belichtungsgerät ist soweit fertig und muss nur noch ein wenig optimiert werden.
http://pe-products.jimdo.com/projekte/uv-belichtungsgerät/ (http://pe-products.jimdo.com/projekte/uv-belichtungsger%C3%A4t/)
Ich bin jetzt schon ein paar Mal auf die Aluteile von Susi angesprochen worden und wie ich diese gefertigt habe.
Wenn einige Leute an diesen Teilen interessiert sind, würde ich mir ein Angebot bei der Firma machen lassen, welche mir die Teile gelasert haben.
Je mehr Leute interessiert sind, desto billiger wird ein solcher "Bausatz".
Der "Bausatz" würde dann aus 2 Körper-, 6 Bein- und 6 Fußteilen bestehen.
Wer hätte interesse??????
MfG High Light
High Light
01.05.2012, 08:54
Guten Morgen,
ich habe gestern mit einem Freund geredet, dieser schätzt die Kosten für den "Bausatz" auf ca. 80€.
Hat jemand Interesse?
Gruß High Light
HannoHupmann
02.05.2012, 16:03
Was für einen Bausatz meinst du jetzt? Für den ganzen Hexa ohne Servos? Ich bin skeptisch ob das für 80€ realisierbar ist.
Geistesblitz
02.05.2012, 22:18
Er sagte doch vorher, alle Aluteile. Wenn mich nicht alles täuscht, sind das 14 Teile. Woher sind eigentlich die Schulterschenkel, die anscheinend aus massivem Kunststoff bestehen?
High Light
02.05.2012, 22:20
Der "Bausatz" würde dann aus 2 Körper-, 6 Bein- und 6 Fußteilen bestehen.
Wer hätte interesse??????
Also nur die Aluminiumteile die gelasert werden!!!
High Light
02.05.2012, 22:22
Die Schulterschenkel habe ich aus Kunststoff von einem Freund fräsen lassen...
High Light
25.06.2012, 15:30
Interesse besteht anscheinend also nicht...
...was aber vielleicht auch nicht schlecht ist.
Denn ich bin ja schon lange am herum tüffteln, wieso meine Servos immer Mal wieder herum zucken.
Heute habe ich einige Tests gemacht auch mit einem anderen Netzteil und ich konnte keine Veränderung feststellen.
Jedoch habe ich die Vermutung, dass Susi zu schwer ist und wenn die Last für einzelne Servos zu groß wird, fangen sie wahrscheinlich an zu zucken.
Warum dann alle anfangen zu zucken, weiß ich noch nicht. Entweder die Spannung bricht einfach komplett ein oder es bildet sich irgendwo eine Störfrequenz, die die Servosignale stört.
Ich weiß es nicht :-( ... um ehrlich zu sein stehe ich auf dem Schlauch und würde echt gerne mit meinem Projekt so langsam weiter kommen.
Vielleicht wäre eine Möglichkeit, das Gewicht zu veringern, jedoch ist mir das Risiko zu groß, dass der Fehler dann immer noch auf tritt!
Was meint ihr? Kann mir jemand weiter helfen?
Grüße High Light
HannoHupmann
25.06.2012, 16:15
Meine Erfahrung mit zuckenden Servos - und ja ich hab die auch - ist, dass die Spannungsquellen bzw. Netzteile meistens den geforderten Strom nicht liefern können. Zum einen kommen hier leicht mal 4-5A zusammen und zum anderen, werden diese sehr schnell gefordert. Zwar lässt sich mit vielen Kondensatoren schon einiges machen, aber wirklich gut geht es eigentlich nur mit einem Akku der ohne Probleme die geforderte Leistung bereit stellt.
Solange der Roboter aufgebockt ist sollten die Servos sich normal bewegen, wenn es an der zu großen Belastung liegt.
High Light
25.06.2012, 17:02
Okey... jetzt gerade zucken sie sogar im aufgebockten Zustand, was sie heute morgen nicht getan haben...vielleicht liegt es an der radikalen Programmänderung....
Nun gut...ich habe hier 2 Lipo-Akkus mit jeweils 2800 mAh... meinst du es wäre mit diesen einen Versuch wert?
Wie würdest du die Überwachung der einzelnen Zellen realisieren, damit diese nicht unterladen werden beim Versuch?
HannoHupmann
26.06.2012, 10:26
Gar nicht. Ich schließ meine LiPos immer direkt an und vertrau darauf, dass sie sich gleichmässig entladen (was sie ja im Modellsport auch tun). Wenn es wirklich lange Tests werden, überwache ich die Spannung und schalte den Roboter aus bevor die Zellen in die nähe des kritischen Bereichs kommen. Aufpassen, dass er wirklich ausgeschaltet ist (mir schon passiert, dass ich nur die Logik nicht aber die Servos ausgeschaltet hab. Die Zelle war dann kaputt). Meistens ist es aber eher so ein anschalten, Programm checken bisschen laufen lassen, ausschalten. Bei 2800mAh sollten schon 45mins Dauerbetrieb möglich sein (bei 4A), in der Regel zieht der Roboter nicht konstant 4A sondern im Mittel etwa 3A, also um ganz sicher gehen, nach ner halben Stunde mal die Spannung messen.
High Light
26.06.2012, 18:55
Alles klar, dann probiere ich das die Tage Mal aus.
Bin gespannt...wäre super, wenn dies klappen würde *grins*:p
High Light
27.06.2012, 17:37
So...kurzes Update:
Ich habe heute noch etwas anderes ausprobiert und dabei feststellen müssen, das meine Lipos keine 5V haben. :-(
Zum Glück ist nicht viel kaputt gegangen! Man merkt, dass die Gedanken manchmal woanders sind! Aber gut...
Um die Spannung der Lipos möglichs verlustfrei auf 5V zu reduzieren, habe ich gedacht ich benutze einen Spannungsregler.
Dabei bin ich auf folgenden gestoßen:
LM 1084 IT5,0 :: Spannungsregler, Low-Drop, TO-220http://www.reichelt.de/ICs-LM-1000-LM-1999/LM-1084-IT5-0/3/index.html?;ACTION=3;LA=446;ARTICLE=39422;GROUPID= 5465;artnr=LM+1084+IT5%2C0;SID=10T@sdsH8AAAIAAFF2E 8Y0370c3c5ec537c445b44e58682096f5c
Kann ich diesen benutzen oder soll ich einen Anderen nehmen?
Für jeden Lipo einen Eigenen nehmen?
HannoHupmann
28.06.2012, 09:08
5V warum brauchst du die? Meine Servos laufen in der Regel mit 7,2V das ist zwar mehr als sie spezifiziert sind aber dafür ist dann auch die Spannungsversorgung stabil. Bei guten Servos überhaupt kein Problem.
Mit Spannungsreglern hab ich in der Leistungsklasse für Servos weniger gute Erfahrungen gemacht, ich hab dann direkt zu DC/DC Wandler verwendet. Die Lipos müssten wohl parallel geschaltet werden und dann eben an den Wandler angeschlossen. Allerdings würde ich dann tatsächlich aus dem Modellbau-Bedarf nach geeigneten LiPo-Entladern suchen, damit alle Zellen schön gleichmäßig entladen werden.
High Light
28.06.2012, 13:05
Okey, also die einen sind von MODELCRAFT und die anderen sind BLUE BIRD...wenn du sagst, dass ihnen 7,2V nichts ausmachen, dann glaub ich dir das.
Wo lagen deine Probleme mit den Spannungsreglern?
Was für einen DC/DC Wandler könntest du mir empfehlen? Bisher habe ich keinen passenden gefunden, der auch einen entsprechend hohen Ausgangsstrom hat?
Kennst du auch einen für ca 6V?
Wieso brauch ich in dem Fall dann doch einen LIPO-Entlader?
Gruß High Light
HannoHupmann
29.06.2012, 08:41
@HighLight, also meine BlueBirds bekommen schon auch die 7,2V direkt aus dem Akku, werden dabei auch ein wenig warm, allerdings hab ich noch keine Dauertests gemacht. Bei meinem Vorgängermodell hatte ich HiTec Servos genommen und die schafften die 7,2V problemlos. Bei den Modelcraft weis ich es leider nicht, geh aber auch davon aus, dass die alle robust genug sind.
Die Spannungsregler haben alle nicht genug Power bereitstellen können um die Stromspitzen abfangen zu können. Die gehen vermutlich kurzzeitig über die 4A, vielleicht kann man mit Kondensatoren noch was machen. Bei den DC/DC Wandlern hab ich bisher für einen Hexa noch keinen gekauft, nur für mein WallE aber der hatte nicht so einen hohen Stromverbrauch.
Ich bin kein LiPo Experte aber meine Roboter arbeiten jeweils mit nur einem Akkupack (mit 2 Zellen), wenn du jedoch zwei unabhängige AkkuPacks verwendest, dann nehme ich an, dass die sich unterschiedlich entladen. Um sicher zu gehen würde ich es entweder überwachen oder mit nem LiPo-Entlader machen.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.