PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mikrocontroller



lincoln126
15.11.2009, 23:32
hallo einmal, ich habe vor auch ein roboterprojekt zu starten und wollte vll, nach einer umentscheidung, einen 6 beinigen roboter bauen.

jetzt möchste ich erst mal mit mikros erfahrung sammeln wie ich motoren über pwm ansteuer und mir sensordaten zum steuern lesen lasse

jetzt möchste ich aber schon etwas kaufen, was in die richtung geht,
also grobe berechnung bei 6 beinen, a 3 motoren ( korrigiert mich wenn ich mehr brauche) komme ich auf 18 motoren die ich ansteuern möchte und dementsprechend auch 18 sensoren einlesen.

wie realisiere ich das jetzt? habe ich einen "großen" mikro, wie ein atmega128 mit dem ich komplett die steuerung übernehme, oder verteilt dieser nur die bewegungsdaten an kleinere mikros die diese dann umsetzen?
sind diese kleineren mikros dann so etwas wie ein atmega16? denn ich habe auf der atmel seite auch spezielle pwm prozessoren gesehen

ich hoffe ich konnte mich verständlich ausdrücken :-)

greez

Ceos
15.11.2009, 23:54
die AT90PWMx Prozessoren, zu finden auf
http://www.atmel.com/dyn/products/param_table.asp?family_id=607&OrderBy=1241&Direction=DESC#1723

haben zwischen 6 und 10 PWM kanälen ... man lann es zwar mit softwarepwm lösen, aber ich würde eher versuchen 2 x 10fach oder 3 x 6fach PWM controller nehemn und diese per TWI/SPI/UART mit daten füttern, die von einem zentral gelagerten "gehirn" controller gesteuert werden .... das ist meine einstellung dazu, gibt aber auch viele die es nur mit software pwm gemacht haben

ATmega640 hat sogar 16 PWMs ... gar nicht gleich gesehen ^^

und wenns extrem werden soll, die xmegas haben zwischen 16 und 24 ... sind aber ne spur komplizierter ^^

lincoln126
15.11.2009, 23:58
okay, das ist ja schonmal ein guter input, welchen mikro würdest du als "hirn" benutzen?

er bräuchte ja trotzdem 20 ausgänge um die gewünschte position an die knechte zu vermitteln, oder?

welche boards sollte ich benutzen, bin durch die angebotvielfalt sichtlich verwirrt ^^
oder lohnt es sich doch ein board selber zu bauen, und somit optimal den bedingungen anzupassen

danke

wisda.noobie
16.11.2009, 17:15
nimm doch nen mega 32, also wenn du dich an die externen PWM controller entscheidest. Du solltest aber in deine Überegung mit einbeziehen, wie viele andere Sensoren du noch verwende willst.

Zum board: Es gibt einige, die schwören auf fertige Boards, andere wiederrum nicht. Ich löte mir meine Controllerplatinen immer auf lochraster, da ist man am Flexibelsten mit änderungen der Schaltung.

Besserwessi
16.11.2009, 18:06
Wenn es die AVRs sein sollen, würde ich erst mal mit was kleinerem wie z.B. Mega88 anfangen. Ein wesenlicher Vorteil für den Anfang ist, dass man die im DIP Gehäuse kreigt und es entsprechend Sockel gibt und man auch ein Steckbrett nutzen kann. Für erste Versuche Reicht das auch vollkommen aus. Die größeren Chips sinn sehr ähnlich zu programmieren ein umstiegt ist entsprechend wirklich minimal (z.B. den Compiler sagen das es für einen anderen Chip ist und eventuell ein ganz paar Registernahmen anders).
Ob man jetzt eine großen Mikro, oder mehrere kleine nimmt, ist sicher etwas geschmackssache. Hier würde es sich anbieten z.B. für die Steuerung jedes Beines (=3 Motore) einen µC zu nehmen. Je nach Art der Motoransteuerung könnte da z.B. ein Mega88 reichen. Wenn man Servos als Motoren nimmt, könnte ein µC auch mehr 3 Motoren steuern.

Für die Koordination, externe Sensoren usw. dann halt noch ein µC. Da ist dann wahrscheinlich mehr die Speichergröße interessant.

Ein Modularer Aufbau hat auch den Vorteil, dass die Platinen überschaubar bleiben und man auch Teile gut Testen kann.

Für die ersten Tests würde ich ein fertiges Board vorschlagen, dann hat man erst mal nur die Software. Ob man später fertige Boards nimmt, oder was selber entwirft, hängt davon ab was man an Hardware, z.B. Motortreiber, braucht.

wisda.noobie
16.11.2009, 18:48
Wenn du noch keine Erfahrungen in Richtung mikrocontroller hast und komplett neu anfängst, könntest du auch zu einem propeler greifen. Schau mal bei google nach das sind sehr interessante µCs zu denen es gute dokumentationen gibt.

Hubert.G
16.11.2009, 19:07
Es ist wahrscheinlich besser wenn du je Bein einen eigenen Kontroller verwendest.
Mein Junior hatte in der FH bei einer theoretischen Planung eines Hexabot festgestellt, das bei einer optimalen Wegeberechnung der Beine und Auswertung der Sensoren der Rechenaufwand so hoch ist, das ein FPGA als "Hirn" notwendig wäre.
Als Einfach-Variante, je ein Mega8 für die Beine und ein Mega128 für die Koordination.

wisda.noobie
16.11.2009, 19:09
deshalb meine empfehlung: ein propeller: schafft ungefähr so viel weg wie ein 1Ghz Pentium III....

Ceos
16.11.2009, 21:40
der propeller ist ne nummer zu hoch möchte ich meinen ... ich finde den beschaltungsaufwand ein wenig zu hoch ... zumal es beim programmieren relativ viele stolperfallen gibt ... ich würde für so ein projekt lieber 3 controller mit je 6(AT90PWM), respektive 10(ATMega Serie) PWM nehmen und einen Mega88 als gehirn .. das ganze mit einem TWI/SPI Bus verbinden

lincoln126
16.11.2009, 22:48
okay, dankeschön, das sind ja schonmal echt viele informationen, also ich habe erfahrung in programmieren von mikros, allerdings nicht mit der kommunkitation zwischen mikros, was ja eintreten würde wenn ich pro bein 1 mikro hätte, und eins als gehirn.
ich hatte heute mal ein langes gespräch mit meinem prof und der meinte ich sollte für die steuerung servos nehmen, da fühl ich mich aber irgendwie eingeschränkt.
hätte wie gesagt lieber vollwertige motoren, mit einem schönen getriebe, die ich bis zur soll position (ist position vom sensor) bewegen lasse
ich denke auch das dass die beste wahl ist für ein roboter den ich auch vielen bedingungen anpassen kann, ausserdem ist sowas ja auch schön erweiterbar.

ausserdem hat er mir noch einen 4017 dekadencounter als alternative genannt, aber wie gesagt ich finde auch die idee mit dem modularem aufbau irgendwie interresannter!

also das mit den eigenen boards kann ich mir ja bei den atmega8 für die beine noch vorstellen, obwohl ich auch da keine erfahrung habe, aber für den 128 wird das ja löttechnisch nicht zu bewältigen

kennt ihr denn günstige boards für den mega128 mit dem nötige anschlüsse für 18 sensoren habe, und ich n gescheites bus-system zur übertragung habe?

ich weiss viele fragen, aber ich denke ne gute anfangsplanung ist bei so nem komplexen thema schon wichtig

greez

Hubert.G
17.11.2009, 10:39
Im RN-Shop gibt es ein Mega2560-Board
Hier ein Mega128-Board
http://cgi.ebay.de/AVR-Modul-ATmega128-RS232-Atmel-Adapter-Board-Platine_W0QQitemZ260504155177QQcmdZViewItemQQptZLH _DefaultDomain_77?hash=item3ca741f429

Das Angebot ist aber sicher noch viel größer.

Die Motoren mit schönen Getriebe und Positionssensoren wirst du hier dann hoffentlich vorstellen. Da gibt es sicher viele Interessenten.

Vitis
17.11.2009, 12:57
4017 ?¿ ... möcht der Gute n CMOS-Grab bauen?
Man nehme I-Träger als Beinsegmente und 2,2kw Synchonmotoren
als Antriebe um den Schaltschrank bewegen zu können :)

nee, 3 Servos für die Beinmuskulatur heißt 3-mal PWM-Erzeugung,
nett wär dann noch 3-mal Stromsensor in der Versorgungsspannung der
Servos um die "Belastung" messen zu können, optional noch nen Taster
an der Fußspitze um auch wirklich den Bodenkontakt zu registrieren,
das macht dann so in etwa 3x AD-Kanal input, 1x digital input, 3x pwm-digital Output ... n Tiny 2313 kann das schon wuppen von den IOs her.
Dann das Netzwerk, es würde sich I2C anbieten, schnell genug sollt das sein,
es werden ja "nur" die Kommandos übertragen:

Bein 1 anheben auf 5cm über Bodenniveau, drehen 30° nach vorne

oder so ähnlich. kann man noch ausfeilen ... die Befehle könnte man
von der Zeichenfolge her straffen auf 5-6 Bytes + Adresse, das kann I2C
denk ich schon ganz gut.
Die Berechnung wo welches Bein sein soll und welche Aktion als Nächstes
ansteht ist ja dann Aufgabe des Gehirns, da ist halt die Frage nach der
gewünschten Rechenleistung. IOs braucht das relativ wenig, die Beincontroller hängen ja am 2-wire bus.

lincoln126
17.11.2009, 15:34
das mit den bbodenkontaktsensoren ist ne echt gute idee, aber dasmit dem spannungssensoren ist ja eigentlich nur mehr oder weniger ne spielerei oder bringt mit das auch für die steuerung n richtigen nutzen?

also das mit den position und bodenkontaktsensoren, sollten die zum "gehirn" gehen und der errechnet das nötige impuls das er zu den kleinen mikros zu den beinen schickt, der diesen impuls dann einfach nur ausführt um das bein an gewünschte position zu bewegen, oder sollten die sensoren zum kleinen mikro führen und er berrechnet die nötige aktion um den soll wert vom grossen hirn zu erreichen?

denn um mal weiter zu spinnen, (als wichtige info für euch vll), hatte ich noch vor den roboter über funk mit dem pc zu steuern, und n kamerabild vom roboter an den pc zurückschicken lassen, diese aufgabe könnte ja auch gut der grosse mikro übernehmen

greez

wisda.noobie
17.11.2009, 16:21
auf jeden fall ist ein motorstromsensor hilfreich!! wenn der Servo blockiert hast du abgesehen vom motorstrom keine chance das zu registrieren, da der servo selbst nichts zurück meldet...

Hubert.G
17.11.2009, 17:22
Beim Tiny2313 wird es mit den AD-Eingängen schwierig.

Besserwessi
17.11.2009, 22:16
Zumindest die Rückmeldung über die Postion sollte zum "kleinen" µC fürs Bein gehen. Der zentrale µC braucht dann nur noch die Sollwerte zu den Beinen Schicken und man hat nicht mehr so viel Daten, die hin und her geschickt werden müssen. Bei Sensoren für die Kraft hat man ein bischen die Wahl. Da hat beides (zur Zentrale oder zum Bein) Vorteile, wobei ich auch hier eher der µC fürs Bein naheliegender ist.

Ist ist auch nicht klar das man als Zentralen µC einen mega128 braucht. Da könnte auch ein Mega644 oder so reichen: man braucht da kaum so viele Ports mehr.

Die Lösung mit Servos ist vom Aufbau deutlich einfacher, denn da hat man schon je eine Regelschleife für die Position drin. Allerdings ist die Mechanische Belastung für die Servos recht groß.

Der 4017 wäre zusammen mit Servos eine Idee um mit wenig (2) IO Pins bis zu 10 Servos steuern könnte. Jeder Zählerausgang geht an einen Servo, und ein PWM ausgang steuert den Zähleingang des 4017. Da ist dann wie im RC Empfänger die Umsetzung vom Summensignal in die Einzelpulse.

lincoln126
18.11.2009, 00:41
okay, also so langsam bildet sich schon ein recht konkretes bild in meinem kopf, ich denke das ich von den servos ganz weggehe, ich sehe da mit "normalen" motoren mehr spielraum, ebenso denke ich das es sinnvoll ist pro bein ain mikro zu nutzen.
eine frage ist mir jetzt ja allerdings schon fast peinlich :-D
wofür sind denn die AD Eingänge da? ^^

greez

021aet04
18.11.2009, 01:04
Die AD Eingänge wandeln eine Analoge Spannung in einen Digitalen Wert um. Damit kann man z.B. sagen 5V am Eingang ergibt einen Wert von 1024 (das wären 10bit). Bei 0V ist der Wert 0.

MfG Hannes

lincoln126
18.11.2009, 18:20
ahso, ja klar ^^, und wovür sollte ich diese brauchen?

wisda.noobie
18.11.2009, 18:34
also du solltest schon ein gewisses Grundwissen haben, wenn du so etwas komplexes vorhast. lies dir doch mal ein paar tutorials über Avrs durch. Ich weis ja nicht welche programmiersprache geplant ist, aber das avr-gcc tutorial von mikrocontroller.net ist sehr gut.

lincoln126
18.11.2009, 19:11
naja, also grundlagen habe ich schon, hatte in der uni mikro programmierung, wo wir auch schon voltmeter programiert haben. die geplante sprach sollte c++ sein
nur der name vom ad eingang ist mir entfallen, aber wozu brauche ich denn in diesem konkretem beispiel die ad eingänge am mikro?
das signal für die ist position kommt ja über den digitaleingang

greez

wisda.noobie
18.11.2009, 19:18
Das signal kommt über die Digitalen einnänge solange es nur 2 zustände gibt: an und aus

sobald du aber abstufungen erkennen willst, ist ein A/D wandler erforderlich, z.B. bei einem Motorstromsensor.

Hubert.G
18.11.2009, 19:45
Wie willst du denn überwachen ob ein Motor blockiert oder an die Lastgrenze kommt.
Oder wie willst du denn die Drehwinkelerkennung von einem deiner Gelenke machen.
Es gibt noch viele Möglichkeiten der AD-Anwendungen.

lincoln126
18.11.2009, 19:57
ehm, moment mal, also ich glaube ich missverstehe hier grade was, also vom "hirn" wird ein digitales signla ausgegeben das über ein bus system zu den mikro kommt der jeweils ein bein steuert, dieses signal beinhaltet den digitalen sollwert für die position,. sooo

der mikro für das bein liest dann die daten der sensoren ein und gibt dann je nach sensorinformation eine bestimmte pwm aus, auch über den digitalen ausgang, da die motoren ja permanent über ne seperate stromvquelle versorgt werden.
also wir waren beim mikro pro bein, deieser sendet jetzt die pwm, abhängig davon was der sensor für ne postion meldet. und über die pwm kann ich ja auch die geschwindigkeit des motors steuern (langsam oder schneller).
für diese art der realisierung brauch ich doch keine ad eingänge....

habe ich jetzt n denkfeher?

greez

lincoln126
18.11.2009, 20:02
ahhh, also die ad eingänge für die neigungssensoren und den sensor für den stromfluss am motor.

okay ja, das ist klar
aber habe ich noch bei meinem oben genannten beitrag n fehler?

greey

Hubert.G
18.11.2009, 20:03
Was hast du denn für einen Sensor für die Position? Wenn du einen digitalen hast, dann OK.

Richard
18.11.2009, 20:09
naja, also grundlagen habe ich schon, hatte in der uni mikro programmierung, wo wir auch schon voltmeter programiert haben. die geplante sprach sollte c++ sein
nur der name vom ad eingang ist mir entfallen, aber wozu brauche ich denn in diesem konkretem beispiel die ad eingänge am mikro?
das signal für die ist position kommt ja über den digitaleingang

greez

Du willst doch wissen um welchen Winkel ein Gelenk ausgelenkt ist.
D as geht z.B. mit einem Poti. Das liefert aber Analoge Werte die dann
mittel ADC über einen AD Eingang digitalisiert werden...wenn das so
programmiert wurde.

Es gibt auch Digitale Servos, ob diese eine Digitale Rückmeldung ihrer
Tatsächlichen Position melden können? Darauf vertrauen das die
vom Programm vorgegebene Position tatsächlich eingenommen wurde
ist ein wenig "Blauäugig"......(Vertrauen ist gut, Kontrolle ist besser).

Gruß´Richard

lincoln126
19.11.2009, 00:07
ich denke das der neigungssensor schon n analogen wert zurückgeben wird, kennt ihr ein laden wo ich günstig pwmmotoren und neigungssensoren her bekomme?

Richard
19.11.2009, 05:34
ich denke das der neigungssensor schon n analogen wert zurückgeben wird, kennt ihr ein laden wo ich günstig pwmmotoren und neigungssensoren her bekomme?

Was wsillst Du mit Neigungssensoren? Was sollen pwmmotoren sein?
Schaue Dir doch bitte einmal das RN-Wiki an und dann suche nach
ADC,PWM,PID......Getriebemotor, Servo.

Gruß Richard

Ps.: Deine Uhr geht falsch.

lincoln126
21.11.2009, 20:32
sers, also der motor wird permanent mit seiner betriebsspannung versorgt und über ein pwm signal vom mikro will ich die drehzahl steuern.

die neigungssensoren dienen zur ermittlung der beinpositionen
ich hab heut ma n schematischen übersicht gezeichnet und lade das bild mal morgen oder übermorgen hoch

greez

wisda.noobie
21.11.2009, 20:35
ähm... das wird so nicht funktionieren, oder hast du an einem motor schon mal einen PWM anschluss gesehen? da brauchst du noch einen Motortreiber...

was für neigungssensoren sind denn geplant? eig. würden doch potis reichen ider stroboscheiben...

ich bin gespannt auf diene übersicht!

lincoln126
21.11.2009, 20:57
okay, ich hab keinen scanner hier, aber ich habs ma n foto gemacht, das sollte so also eig auch gehen, bin mal aufs feedback gespannt, hoffe bild erklärt sich von selber

http://s3.directupload.net/images/091121/temp/2d37pbce.jpg (http://s3.directupload.net/file/d/1985/2d37pbce_jpg.htm)

originalgröße:

http://s3.directupload.net/images/091121/2d37pbce.jpg (http://www.directupload.net)

wisda.noobie
21.11.2009, 21:01
sieht so weit ganz gut aus... aber einfache servos währen um einiges besser anzusteuern... naja musst du wissen.