PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Physik Projekt



juhecomp
31.01.2009, 22:25
Hallo

ich bin in der zehnten Klasse und wir im Naturwissenschaftlichen Zug, haben dieses Halbjahr vierstündig Physik in denen wir in zwei der vier stunden ein Projekt haben bei dem wir in kleinen Gruppen etwas "bauen" dürfen das wir uns vorher überlegen.
Unser Lehrer hat uns den Asuro vorgeschlagen den ich aber schon gebaut habe und deswegen muss ich mir was eigenes überlegen.
(Muss kein Roboter sein ;) )
Nun hatte ich überlegt den RP6 zu bauen aber der kommt ja schon fertig zusammengebaut. Yeti ist ja soweit ich das auf den Bildern erkenne nicht sehr anspruchsvoll außer, dass man ihn zum laufen bringen muss ist dann ja auch schon fertig.
Also ist meine Frage gibt es noch andere Roboter etc. bei denen man viel zu tun hat (bestenfalls auch löten muss) die Anspruchsvoll genug sind (es gibt am Schluss eine Note :D)
Ich würde mich über eure Ideen und Vorschläge freuen.

Mit freundlichen Grüßen juhecomp

the_Ghost666
01.02.2009, 09:08
Moin,
Ich finde den Asuro ganz schön komplex um auch nur 2 Stunden dran zu Programmieren. Einen Asuro sauber aufzubauen braucht ja wirklich schon 2x 45min, ohne Mehrarbeit zu Hause wirst du das sicher nicht schaffen.
Moment.. oder meinst du über das Schuljahr jede zweite Stunde Projekt?

Ich habe selber keinen, finde den Asuro aber genial. Und für so ein Projekt wäre es schön etwas zu haben, was man selber demonstrieren kann. Was ist, wenn du dem Lehrer vorschlägst mit deinem fertigen Asuro ein Programm zu schreiben (ja, auch Software ist echte Arbeit *G*), mit dem er dann selbstständig eine Aufgabe ausführt? Z.B. der Altbekannte Linienfolger. Es gibt viele Anleitungen zu dem Thema, wenn ich mich nciht täusche, sodass man mit nem Erfolg rechnen kann.
Wenn der Linienfolger zu langweilig ist, könntest du überlegen ein verzweigtes Linienmuster zu nehmen, mit Gabelungen die in Sackgassen enden (Kreise sind schon sehr komplex), und er muss den Weg aus dem Labyrinth finden. Oder ein Fussballer, es gibt fertige Infrarot-Bälle, alternativ könntest du einige IR-LEDs und ne Batterie in nen Tischtennis-Ball packen und dem Asuro beibringen, den Ball zu kicken oder zu dribbeln. Dazu müsstest du noch einen Zusatzsensor löten, der mit zwei Detektoren den Ball finden kann.
Das sind erstmal meine Vorschläge. Und verrenn dich nicht in eine Software- UND Hardware Aufgabe, das ist aufwendiger als du meinst.
Wenn doch, könntest du dem Lehrer vielleicht ein kleines Messgerät vorschlagen, z.B. Umdrehungen einer Luftschraube. Ein Controller, etwas Elektronik und ne Eingabe, sodass du dann die Blattzahl einstellen kannst, der Controller macht eine Messung und gibt diese auf einem Dispplay aus.
Das gleiche kannst du auch mit anderen Sachen machen.
Mhh, oder ein Selbstbau-Tacho fürs Fahrrad, du könntest dann am Dynamo die Spannung anschauen, diese auswerten und gleichzeitig als Energiequelle nutzen, oder einfach ne Batterie und ein Hall-Sensor, wie beim normalen Tacho, nur dass deine Schaltung im Sekundenabstand die Geschwindigkeit speichert, sodass du danach ein Geschwindigkeitsprofil deines Heimweges hast. Dazu brauchst du neben der Platine mit dem Controller noch ein EEPROM, was groß genug ist, die Speicher-Software, sowie eine Schnittstelle zu einem PC, damit man sich das auch angucken kann. Ist schon recht umfangreich, aber wohl in einem Halbjahr machbar.
MfG
Björn

juhecomp
01.02.2009, 11:49
Vielen Dank für die lange Antwort.
Ja wir haben ein ganzes Halbjahr lang pro Woche vier Stunden Physik und davon soweit ich weiß immer zwei für das Projekt.
Ich habe nicht ganz verstanden wie du das meinst mit den Umdrehungen der Luftschraube.
Ich habe überlegt vielleicht einen RP6 mit Kamera und fernsteuerung über den Computer zu bauen (wobei das dann ja nicht autonom wäre) man müsste dann ja eine Software programmieren die zum einen den Roboter steuert und zum anderen zum beispiel die Kamera dreht was man mit einem Servo machen könnte. Der roboter müsste allerdings über Bluetooth (oder wlan) verbunden werden :D

Linienverfolgung für den Asuro habe ich schon programmiert aber mit Verzweigungen wäre das natürlich auch eine Aufgabe.

Mit freundlichen Grüßen

oberallgeier
01.02.2009, 12:35
Hi juhecomp,

man findet ja seine eigenen "Kinder" immer am schönsten. Meine beiden Projektchen, - Dottie, eigentlich R2D03 (https://www.roboternetz.de/phpBB2/viewtopic.php?t=40507) - eine fahrende Coladose mit leicht autonomen (http://www.youtube.com/watch?v=sRNSIBpK8sQ) Funktionen und WALL R - ein Fernsteuerauto ohne Fernsteuerung, (https://www.roboternetz.de/phpBB2/viewtopic.php?t=45658) das fast genauso funktioniert wie Dottie ist nicht sooo komplex. Auch der Schaltungsaufbau ist relativ einfach (sonst hätte ich das als Einsteigermodell garnicht geschafft). Von der Optik nicht so futuristisch wie asuro und kein Baukasten - aber Du willst
... bei denen man viel zu tun hat (bestenfalls auch löten muss) ...
... ja auch was tun *gggggg*.

Egal was Du/Ihr macht, viel Erfolg

juhecomp
01.02.2009, 16:07
ja ich hatte auch schon daran gedacht einen eigenen Roboter zu entwickeln das problem ist, dass ich mich noch nicht zu sehr in der Elektronik auskenne
Wie ich zum Beispiel die Motoren verschalten muss oder welche Widerstände ich wo hin löten muss und das alles. ;)

oberallgeier
01.02.2009, 17:15
... schon daran gedacht einen eigenen Roboter zu entwickeln das problem ... nicht zu sehr in der Elektronik auskenne ...Das ist nicht total problematisch. Z.B. bringt die Suchfunktion vermutlich einige Schaltungen (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=368984#368984). Und es gibt immer wieder jemand hier im Forum, der Dir auch mal ne Schaltung (https://www.roboternetz.de/phpBB2/files/m168d-schaltung-x97.pdf) postet. Nur löten müsstest Du dann schon selbst *gggggg*.

Was hattest Du geschrieben?
... bei denen man viel zu tun hat ... die Anspruchsvoll genug sind ... es gibt am Schluss eine Note ...

juhecomp
01.02.2009, 17:34
jaja klar aber ich kann ja nicht einfach willkürlich widerstände zusammen schmeißen n paar ultraschall entfernungsmeser lichtsensoren... und dann denken das was dabei raus kommt was man gebracuehn kan und viel zu tun hatte man trotzdem ;)

Wsk8
01.02.2009, 17:38
Hallo,
wie wärs mit dem Probot 128 von Conrad.
Den gibts als Bausatz und der µC hat genug Resourcen für Erweiterungen.
Mit dem kannste dich lange beschäftigen.
Ansonsten selbstbauen:-).

mfg

juhecomp
02.02.2009, 05:52
sorry hab ausversehn zweimal darufgeklickt war zu schnell^^

juhecomp
02.02.2009, 05:53
ist das nicht fast das geiche wie der Asuro???

the_Ghost666
02.02.2009, 09:15
Ich finde, dass ein halbes Halbjahr vielleicht nicht ausreichen könnte, wenn du dich erst in ein neues System einarbeiten möchstes. Der RP6 hat ja seine eigene Entwicklungsumgebung und Programmiersprache, wenn ich mich nicht täusche, deswegen würde ich dir zumindest raten bei Atmel-Controllern zu bleiben. Ich weiß natürlich nicht, was du sonst noch so machst, aber wette mit dir, dass du auch ab und an Nachmittags an dem Projekt sitzen wirst. Warum dann noch zusätzliche Steine in den weg legen. Ausserdem mag ich den Asuro *G*
Die Probot128 hat nen Atmega128 als Herzstück, oder?

juhecomp
02.02.2009, 12:52
Auf conrad.de steht C-Control Pro 128 aber das ist wahrscheinlcih das gleiche oder?
Ja klar ich warte nur darauf das das Projekt anfängt ich werde ihn/sie/es (jenachdem was es wird) sicher mit nach hause nehmen ;)


EDIT:
Ich lese gerade das der RP6 mit einem Atmega32 geliefert wird ist das so ein großer Unterschied zu den anderen Atmegas?

Wsk8
02.02.2009, 13:35
Hallo,
ist das gleiche. Die Ccontrol hat ein Metallgehäuse und ein Quarz ist glaube ich auch schon eingebaut. Somit ist sie steckbar, denn den atmega128 gibt es nicht mehr im DIP-Gehäuse. Für mich ist der Probot 128 so etwas wie der große Bruder vom Asuro(Für mich!). Er hat halt wie gesagt viel mehr Möglichkeiten. Zudem ist er in C und Basic programmierbar. Und er ist gut erweiterbar. Zudem ist er mit ca. 80 € (komplett) im Vergleich zum Asuro nicht wesentlich teurer. (Asuro + usbtransreceiver = 70 €) . Aber es ist deine Entscheidung was du nimmst.

mfg

the_Ghost666
02.02.2009, 15:40
Mega8 und Mega32 unterscheiden sich nur durch die Flash-, SRAM- und EEPROM-Größe, und der 32er hat einen Port mehr, glaube ich.
Ist also von der Programmierung das gleiche. War auch eher auf die Software bezogen, ich weiß nicht genau ob man den RP6 einfach in C programmieren kann, oder unbedingt einen Bootloader und damit verbunden einen C-Dialekt wie bei der CControl nutzen muss.

juhecomp
03.02.2009, 08:02
Wir haben uns jetzt für den eigenen Roboter entschieden.
Was würdet ihr mir empfehlen Linien bot oder Ultraschall bzw. Infrarot oder kann man das kombieren???
Wir haben viel zeit ;) und sind zu dritt :P

Also wäre über vorschläge dankbar.

Vielen Dank und Grüße Juhecomp

Wsk8
03.02.2009, 13:07
Hallo,
das kannst du alles nach belieben kombinieren. Aber je mehr Sensoren du hast, desto mehr Ein-/Ausgänge benötigt der Controller.

mfg

juhecomp
03.02.2009, 13:18
ja wenn ich einen mega128 oder 32 nehmen würde ging das dann z.B. mit liniensensoren und infrarot abstendsmessung???

Wsk8
03.02.2009, 13:31
Hallo,
dafür würde schon ein Atmega8 völlig ausreichen. Dafür benötigst du im idealfall 3 Pins (2 liniensensoren und 1x IR) am controller. Atmega128 würde ich nicht nehmen. Den gibst nicht mehr im DIP-Gehäuse. Nimm nen Atmega8 oder 32, völlig ausreichend für einen Anfänger.
Denk daran, dass du zum Selbstbau noch Programmiersoftware und einen Programmer benötigst.

mfg

juhecomp
03.02.2009, 13:57
Also ein atmega 8 ooder 32 reicht ok und für die Motoern brauche ich soweit ich das verstanden habe einen Motortreiber oder? beim Asuro wird das doch über eine H-Brücke geregelt oder???

Wsk8
03.02.2009, 14:21
Hallo,
nimm einfach den L293D(bis 600mA oder L298 bis 2 A) als Motortreiber. Da brauchste dann keine Transistoren oder so mehr und er kann auch 2 Motoren ansteuern.

informier dich am besten mal im rn-wiki: https://www.roboternetz.de/wissen/index.php/Kategorie:Robotikeinstieg

mfg

juhecomp
03.02.2009, 14:48
ok vielen dank und der kann dann auch die geschwindigkeit der Motoren regeln?

oberallgeier
03.02.2009, 15:15
Hi juhecomp


... nimm einfach den L293D(bis 600mA oder L298 bis 2 A) als Motortreiber ...Wenn Du nur einen Motor verwendest, kannst Du bis 1,2 A den L293D nehmen, wenn Du beide Treiberkanäle parallel schaltest. Aber pass auf: der Anfahrstrom bzw. der Strom bei blockiertem Motor kann ziemlich hoch werden. Datenblatt ansehen und am Besten auch messen . . .

BTW: Die Geschwindigkeit des Motors kannst Du mit dem Motor treiber NICHT regeln, nur entsprechend den Vorgaben durch die PwM steuern. Der Motor treiber ist "nur" ein IC, das beim L293D und beim L298 zwei komplette H-Brücken enthält. Der Buchstabe D im L293D zeigt übrigens, dass die Löschdioden für die möglichen/auftretenden Rückströme des Motors bereits im Chip integriert sind. Zum Regeln brauchst Du eine geeignete Sensorik (analoges Tachosignal oder digitale Encodersignale), mit deren Signal der Controller mit einer entsprechenden Software die Regelung erledigt. Dazu könntest Du den Encoder zur Wegmessung nehmen (was aber tun, wenn der Antrieb durchrutscht und die Wegmessung auf "null Fahrt" detektiert?). Ich regel üblicherweise den Motor mit einem Encoder direkt an der Motorwelle. Wenn das gut werden soll, muss man ein bisschen Aufwand treiben: (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=389526#389526) Regelungskonzept, Sprungfunktion (nicht NUR des Motors) messen, Algorithmus erstellen . . . . Dazu gibts von Waste diese schöne Ausarbeitung, (https://www.roboternetz.de/wissen/index.php/Regelungstechnik) die auch gleich ein gutes Beispiel für einen digitalen Regler (https://www.roboternetz.de/wissen/index.php/Regelungstechnik#Realisierung_mit_digitalem_Regler ) enthält.

juhecomp
03.02.2009, 18:33
Wie wird das denn beim Asuro gemacht das geht ja nicht über die Odometriesensoren oder?

juhecomp
04.02.2009, 20:57
Ich habe noch zwei Fragen zum einen würdet ihr das ganze in C oder in Basic programmieren. Im RN-Wissens Berreich wird das ganze mit Basic gemacht aber da wird auch kein roboter programmiert ;)

Die zweite: Gibt es auch günsitgere Lösungen den ATMega32 über USB (bzw. mit einem PC ohne Druckerschnitstelle) zu Programmieren als diese:
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=73&products_id=161

oberallgeier
04.02.2009, 21:22
... würdet ihr das ganze in C oder in Basic ...Da kann ich schlecht raten - ich habe mit µC angefangen u.a. weil ich C lernen und anwenden wollte. Und Bascom kann ich nicht.


... günsitgere Lösungen den ATMega32 über USB (bzw. mit einem PC ohne Druckerschnitstelle) ...Mit ein bisschen Selbstmachen (https://www.roboternetz.de/phpBB2/viewtopic.php?t=40584) - ja. Aber da sollte man vielleicht auch Vorkenntnisse haben. Ich habe das da für die LPT-Schnittstelle (http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=73&products_id=41) als Erstausstattung - flashe damit aus PonyProg - und seit einiger Zeit mit einem "STK500-Clon" am USB-Stecker direkt aus dem AVRStudio (wird im AVRStudio als STK500 angesprochen). Der kostet auch . . . . . Ähnliches gibts bei einigen Forumsmitgliedern für wirklich wenig Geld. Z. B. dies hier. (http://www.ulrichradig.de/home/index.php/avr/usb-avr-prog) Aber auch noch andere die auf USB laufen.

juhecomp
04.02.2009, 21:26
wie ist das denn mit einem Adapter ich habe hier einen Adapter von rs232 auf usb ?
(...beim Asuro ging das Flashen darüber nicht.)

oberallgeier
04.02.2009, 21:32
wie ist das denn mit einem Adapter ich habe hier einen Adapter von rs232 auf usb ...Hmmmm - RS232 nach USB??? Ein RS232-Anschluss am PC - von da zu einem USB-Ausgang und weiter zu einem ISP-Stecker am Controllerboard - das klingt eher sehr umständlich.

Oder ist das einer von USB nach RS232? Im Forum gibt es mehrere Threads, in denen es um Probleme beim Flashen mit einem USB-nach-RS232-Adapter und anschließendem RS232-Programmer geht. Aber dazu weiß ich nix - müsste ich erst die Suchfunktion bemühen. Die hast Du ja selber . . . .

juhecomp
04.02.2009, 21:36
Ja das kann sein wobei eigentlich ghet es in beide Richtungen, da nur das flashen nicht ging die Komunikation zwischen Asuro und Computer ging in beide Richtungen. Also ich konnte über das Terminal Dinge Empfangen aber auch senden (beispiel im Demo Modus des Asuro --> sende a empfange b).
Hoffentlich geht das ich habe nämlich ehrlich gesagt keine Lust den Roboter über die alte Kiste im Keller zu programmen :D

oberallgeier
05.02.2009, 12:18
... flashen ... Komunikation zwischen Asuro und Computer ging in beide Richtungen. Also ich konnte über das Terminal Dinge ...... sind zwei paar Stiefel. Soweit ich weiß, werden beim seriellen Flashprogrammiergerät mehrere Statusleitungen der RS232 zum Senden der Daten verwendet. Lies vielleicht die beiden Dinge hier durch:
http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#Serieller_Port_.28RS-232.29
http://www.lancos.com/siprogsch.html

juhecomp
05.02.2009, 15:15
Aha ok das heist bei den USB kabel, die es zu kaufen gibt ist noch ein USB seriell wandler eingebaut bzw. verschaltet. OK dann werde ich mir eine andere Lösung ausdenken müssen.

andieh
05.02.2009, 16:23
Diese Wandler gehen definitiv nicht. Es gibt aber mitlerweile unendlich viele Möglichkeiten, an USB Progger zu kommen. Wenn du sogar noch einen alten Rechner mit parallelport und Programmierkabel dafür hast, kannst du einfach einen Schaltplan runterladen, den Atmega8 einmal im Keller flashen und hast ein bissi was gespart.

Ich würde aber einfach dazu raten, einen direkt zu bestellen, manche von denen kommen sogar schon fertig aufgebaut (usbprog) und können sogar noch so einiges mehr. Preis hier, ca 35-40 euro.

Der USBasp (hab ich mir jetzt gerade gekauft) kostet nur 20 Euro, sogar mit nem Gehäuse. Und ist auch so alles dabei, was man zum loslegen brauch. Das fand ich voll in Ordnung und bin auch sehr zufrieden damit.

oberallgeier
05.02.2009, 16:40
... raten, einen direkt zu bestellen, manche von denen kommen sogar schon fertig aufgebaut ...
... dann werde ich mir eine andere Lösung ausdenken müssen.
Reichelt ging vor einer Weile mit dem AvR Programming Tool AT AvR ISP2 (http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=A38;GROUPID=2969;ARTICLE=450 40;START=0;SORT=user;OFFSET=16;SID=25M57b9awQARkAA AMpQHQ6b302c57408faa29b7f953390f306478) mit U5B im Preis runter - derzeit 32,90. Und der funzt direkt aus dem AVRStudio heraus. Ich glaube, das ist derzeit eines der besten Angebote. Kann sein, dass Du einen Firmware-Upgrade brauchst - den gibts auch am obigen Link (na ja, eins weiter).

andieh
05.02.2009, 16:44
naja, bissi löten wollte er ja schon noch, oder :-D

juhecomp
05.02.2009, 16:51
ok danke
dann werde ich jetzt mal schauen wie ich das machen werde :)
Wie ist das jetzt mit den Motoren ich denke ich werde zwei gehackte Servomotoren nehmen. Diese werden ja dann mit den PWM Signalen gesteuert oder?

oberallgeier
05.02.2009, 17:13
... Wie ist das jetzt mit den Motoren ... zwei gehackte Servomotoren nehmen. ... mit den PWM Signalen gesteuert oder?Kommt drauf an, wie fein Du die 5ervos hackst *gggggg*.

Hack1: Poti im 5ervo auf Mitte stellen oder besser Poti auslöten und durch zwei gleiche Widerstände so um 2k5 bis 5 k ersetzen. Dann in der üblichen Weise mit PwM (siehe Servoansteuerung - insbes. die Zeitvorschriften) ansteuern. Da Du in diesem Fall vermutlich keinen Encoder in den 5ervo einbauen kannst, wird die Sensorik für die Regelung wohl auf das Antriebsrad verlegt werden müssen.

Hack2: Servoelektronik ausbauen, danach z.B. Gabellichtschranke einbauen und den 5ervo als simplen Motor mit hoch übesetztem Getr iebe verwenden - habe ich hier gemacht. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=344432#344432) Und nun kann man (ich) diese 5ervos einfach regeln.

juhecomp
05.02.2009, 18:23
Ich habe von einer Möglichkeit gelesen das der von dir beschriebene Hack1 nicht genau Steuerbar ist und das man auch die ganze Elektronik des Servos auslöten kann und den Motor dann als normalen Getriebemotor verwendet.

oberallgeier
05.02.2009, 18:36
... von einer Möglichkeit gelesen ... Hack1 nicht genau Steuerbar ... auch die ganze Elektronik des Servos auslöten kann und den Motor dann als normalen Getriebemotor verwendet ...Wahrscheinlich bin ich zu dämlich um mich verständlich auszudrücken - aber ich dachte, dass ich das ziemlich genauso geschrieben hatte. Bis auf die von mir behauptete Tatsache, dass man mit einem Encoder nach dem 5ervo Typ Hack1 die Drehzahl nicht nur dosiert steuern sondern auch regeln kann. Die Auflösung ist halt nicht so toll genau.

Merke:
Eine Steuerung ist in jedem Fall möglich durch PwM-Signale, egal welcher Hacktyp.
Eine Regelung braucht immer ein von der Drehzahl abhängiges Signal. Das kann analog oder digital sein.

juhecomp
05.02.2009, 19:27
Oh entschuldigung wenn ichs jetzt noch mal durchlese weiß ich was du meinst.
Ich bin dir sehr dankbar das du mir hilfst.

EDIT:
Ist es eigentlich wichtig an welchen Pin die Motoren Eingänge gehen.

(https://www.roboternetz.de/wissen/index.php/Bild:Hbrueckel298.gif)

oberallgeier
05.02.2009, 21:57
... Ist es eigentlich wichtig an welchen Pin die Motoren Eingänge gehen ...
Jein.

1) Die Motoren gehen an keinen Pin des Controllers. Ein Controller kann einen Motor praktisch nicht treiben - für den üblicherweise erforderlichen Strom liefert ein Pin nicht genug. Daher ist die Antwort auf Deine Frage ein klares : so gehts garnicht.
2) Motoren werden durch Motor treiber gesteuert, das sind geeignete ICs, die komplette "Brücken" enthalten. Die nächste Möglichkeit ist die Ansteuerung über diskrete Bauteile, aus denen eine Brückenschaltung gebaut wird - siehe z.B. den asuro (guck Dir bei Interesse mal dessen Schaltung an). Die Geschichte dazu hast Du ja in dem RN-Wissen "Getrie bemotoren" schon gelesen. Diese Darstellung ist ziemlich umfangreich - und das könnte einen schon verwirren *ggggg*.
3) Fürs Erste könnte es vermutlich reichen, wenn Du diesen Link durcharbeitest (https://www.roboternetz.de/wissen/index.php/Getriebemotoren_Ansteuerung#Ansteuerung_mit_Treibe r_IC_L293_D) - durch die Abschnitte vom L293D und vom L298.
4) Eine übliche Ansteuerung ist pro Motor durch drei Controllerpins die an die entsprechenden Pins des Motortreibers gehen. Zwei sozusagen als Richtungpins und einer als PwM-Signal, das den Motor mit unterschiedlichen Drehzahlen im Griff hält. Genaueres steht in den bereits genannten Links. Daher ist auch die Auswahl geeigneter Pins wichtig. Gute Beispiele sind z.B. die RNControl oder den asuro.
5) Es macht wenig Sinn, sich theoretisch durch das alles durchzuwühlen. Nimm Dir einen Motor und lass ihn mal mit einem entsprechenden Aufbau fahren.
6) Das Datenblatt zum Motor treiber gibt Dir über die Ansteuerung (nicht über den Code!) Auskunft.
7) Meine Vorgehensweise ist stets so: Gesamtskizze eines Projektes - - - aufteilen in Teilprojekte - - - EIN Teilprojekt aufbauen (hier also Platine mit Controller + Motor treiber und sonstigem Hühnerfutter, das in diesem Projektteil NICHT gebraucht wird) - - - Programm für Teilprojekt schreiben - - - Teilprojekt zum Laufen bekommen - - - nächstes Teilprojekt. Wenn alle Teilprojekte fertig sind, dann wird alles zusammengesetzt und die Software zusammengelötet. Das ist auch nicht ganz ohne.

8 ) Ich vermute, daß bei Deinem aktuellen Wissensstand die Lern- und Einarbeitungsphase deutlich mehr Zeit braucht, als Dir zur Verfügung steht, wenn Du diese Sache erstmal nur theoretisch durcharbeitest.
9) Natürlich kann die oben beschriebene Platine zum Ingangsetzen der Teilprojekte bereits ein Roboter sein - asuro etc. lassen grüßen.

juhecomp
06.02.2009, 05:53
Zu Punkt 1) und 2)
Ich meinte wenn ich mit diesem Motortreiber eine Schaltung aufbaue ob ich die Pins, die mit dem Controller verbunden werden sollen zum Beispiel so schalten kann:

Motor 1 Enable: OSC1A

Motor 2 Enable: OSC1B

Motor 1 Eingang A und Motor 1 Eingang B: PA0 und PA1

Motor 2 Eingang A und Motor 2 Eingang B: PA2 und PA3

oberallgeier
06.02.2009, 08:31
Hallo Frühaufsteher,


... ob ich die Pins, die mit dem Controller ...Ich hoffe, dass es Du mir nicht allzu krumm nimmst, wenn ich bei manchen Fragen oder Aussagen recht pingelig formuliere/nachhake. Ich hatte schon angenommen, dass Du es so meinst . . . aber solche Annahmen sind manchmal die Grundlage von unnötigen Missverständnissen.


... Lösungen den ATMega32 ...Wir setzen voraus, dass Du einen m32 hast. Und dann gehen wir mal ein bisschen Technologie klauen. Öffne bitte diesen Link in einer extra (http://www.robotikhardware.de/download/rncontrol14.pdf) Registerkarte/Fenster und geh auf S31 - Schaltplan. Den Schaltplan gibt es auch hier (https://www.roboternetz.de/wissen/index.php/Bild:Rncontrol1.4schaltplan.gif) aus dem RNWissen zur RNControl. (https://www.roboternetz.de/wissen/index.php/RN-Control) Wenn Du Zeit hast, kannst Du vielleicht beide Beschreibungen lesen - und vielleicht Einiges zum Schaltungsaufbau und zum Betrieb des m32 lernen. !!Aber das ist nur eine von mehreren Möglichkeiten!!

In der Mitte-unten-rechts siehst Du den Mot orcontroller = Moto rtreiber L293D, wenn Du den Schaltplan der RNControl auf Querformat stellst. Da siehst Du, dass die Eingänge EN1 und EN2 des Moto rtreibers, also seine Pinne 1 und 9, an den Pinnen OC1A und OC1B des Controllers hängen. Nur diese beiden müssen beim L293D durch ne PwM versorgt werden, um die Motordrehzahl zu steuern. Die restlichen Steuerleitungen werden (nur) geschaltet - das ergibt dann Vor- oder Rückwärtsfahrt oder Stop, siehe z.B. im Code unten. Andere Moto rtreiber machen das ähnlich - aber ich kenne nicht allzuviele Varianten aus eigener Erfahrung. Eines sollte Dir jetzt klar sein: Motoren sind häufig mit einer 8bittigen PwM genug fein dosiert bedient. Du benutzt den Timer1 (wieder meine Annahme des m32), der ein 16Bitter ist - also wären das theoretisch 65 535 Geschwindigkeitsstufen; praktisch läuft der Motor irgendwo im unteren Drittel an und im obersten Viertel tut sich nicht mehr viel. Dieser Timer ist vielleicht für andere Aufgaben (Zeitmessung u.ä.) besser eingesetzt.

Du hast Deine angedachte Pinbelegung also richtig ausgelegt.

Das Folgende ist nicht zum Lesen gedacht. Hier gibts meine Moto ransteuerung und -regelung mit einem mega168 und einem L293D. Für die Motorpwm wird der 8bittige Timer0 des m168 verwendet.

/* >> Sicherung 15sep08 1740 ...C1..\m168D_10\m168D_mot_10x80.c
================================================== =================================
Target MCU : M168
Target Hardware : m168D
Target cpu-frequ. : In der Quelle wählbar
================================================== =================================
Enthaltene Routinen: Alle Motorroutinen
void XTI_0_1_init( void )
ISR(INT0_vect) // hiess mal: ISR(SIG_INTERRUPT0)
ISR(INT1_vect) // hiess mal: ISR(SIG_INTERRUPT1)
void rgl_mo_12(void) // Regelung für Motor 12 (neuer Name: 09jul08)
void rgl_mo_34(void) // Regelung für Motor 34
void TC0PWM_init(void) //Init Timer/Counter0 für Erzeugung des PWM-Signals

void setPWMrechts(uint8_t speed) //Geschwindigkeit rechter Motor
void setPWMlinks(uint8_t speed) //Geschwindigkeit linker Motor

void Mrechtsvor(void) //Motor dreht im mathematisch positiven Drehsinn
void Mrechtszur(void) //Motor 1,2 dreht im Uhrzeigersinn
void Mrechtsstop(void) //Motor aus

void Mlinksvor(void) //Motor dreht im mathematisch positiven Drehsinn
void Mlinkszur(void) //Motor 3,4 dreht im Uhrzeigersinn
void Mlinksstop(void) //Motor aus

================================================== =================================
*** Versionsgeschichte:
====================
x80 15sep08 1740 Version wie x77 - für zusätzliches Modul ~kal~
x70 22jul08 1620 Nach erfolgreicher Regelung versuch eines "echten" Laufes
mit Ausweichmanövern etc
....
x342 26jun08 08ff Interrupt für Motoren in TC0PWM_init/~mo1~ auf 1200 Hz stellen
================================================== =================================
*** Aufgabenstellung : Software für R2_D03
in einer ersten Ausbaustufe angelehnt an: siehe Original
Original: ...C1..\m168D_10\mm168D_mo1_10x342.h 26jun08 08ff
================================================== ============================== */


/* ================================================== ============================ */
/* === Initialisierung fuer EXT_INT0/1 auf Pin 4+5/PD2,3 bei m168 ================
$002 jmp SIG_INTERRUPT0 ; IRQ0 Handler _VECTOR(1)
$004 jmp SIG_INTERRUPT1 ; IRQ1 Handler _VECTOR(2) ================ */
void XTI_0_1_init( void )
{ //Initialisiere beide Interrupts auf rising edge
// d.h. EICRA ISC00,01,10+11 auf 1 (doc,S68)
EICRA |= (1<<ISC11)|(1<<ISC10)|(1<<ISC01)|(1<<ISC00);
EIMSK |= (1<<INT1)|(1<<INT0); // und erlaube diese I´s in EIMSK
// Initialisierung der Zeiten:
Iencdr0 = 0;
Iz_diff0 = 0;
Iz_yseci0 = 0;
Iz_ysecv0 = 0;
}
/* ================================================== ============================ */


/* ================================================== ============================ */
/* === Nicht unterbrechbare ISR für EXT_INT0 auf Pin 46/PD2/mega168 =========== */
/* Routine setzt einen Zähler hoch. Der Zähler wird im main ausgelesen
##>> cli/sei setzen ?? <<## und nach 2 (od. 5) hunderstel Sekunden
auf den Speicher WEG_L/_R vorzeichenrichtig aufaddiert und dann zurückgesetzt.
##>> Beim Richtungswechsel (cli/sei) wird der Zähler ausgelesen und genullt,
damit ist eine saubere Wegmessung möglich.
Der zugehörige Motor auf PD7/PB0 = re,li und PB1 Geschwind./PWM */
ISR(INT0_vect) // hiess mal: ISR(SIG_INTERRUPT0)
{ // Zuerst mal sehen, ob das ein Spike ist
uint8_t itest = 16;

Iztmp_0 = Izeit_1 - Iz_yseci0; //Wie lange seit der letzten Flanke
if (Iztmp_0 < itest) //wenn zu kurz (spike!?), dann
{
return; // Routine verlassen
}
else
{ // ansonsten
Iencdr0 ++; //zähle Counter/encoder0 hoch
Ienc0alt = Iencdr0;
Iz_yseci0 = Izeit_1; //Weise Iz_ysec1 dem akt. Timerwert zu
Iz_diff0 = Iz_yseci0-Iz_ysecv0; //Neue Zeit-Differenz1 ausrechnen
Iz_ysecv0 = Iz_yseci0; //der aktuelle Zeitwert wird "Alter"
}
// Bessere Spikeerkennung - dynamisch
itest = Iztmp_0 - 8;
}
/* ================================================== ============================ */


/* ================================================== ============================ */
/* === Nicht unterbrechbare ISR für EXT_INT1 auf Pin 17/PD3/mega16(32) ======== */
/* Routine setzt einfach einen Zähler hoch.
Sonst wie ISR für EXT_INT0 für Motor li,re und PWM/Geschw. */
ISR(INT1_vect) // hiess mal: ISR(SIG_INTERRUPT1)
{ // Zuerst mal sehen, ob das ein Spike ist
uint8_t itest = 10;

Iztmp_1 = Izeit_1 - Iz_yseci1; //Wie lange seit der letzten Flanke
if (Iztmp_1 < itest) //wenn zu kurz (spike!?), dann
{
return; // Routine verlassen
}
else
{ // ansonsten
Iencdr1 ++; //zähle Counter/encoder1 hoch
Iz_yseci1 = Izeit_1; //Weise Iz_ysec1 dem akt. Timerwert zu
Iz_diff1 = Iz_yseci1-Iz_ysecv1; //Neue Zeit-Differenz1 ausrechnen
Iz_ysecv1 = Iz_yseci1; //der aktuelle Zeitwert wird "Alter"
}
// Bessere Spikeerkennung - dynamisch
itest = Iztmp_1 - 8;
}
/* ================================================== ============================ */


/* ================================================== ============================ */
/* == Initialisierung der PWM zur Motoransteuerung ============================ */
void TC0PWM_init(void) //Init Timer/Counter0 für Erzeugung des PWM-Signals
{
TCCR0A |= (1<<COM0A1)|(1<<COM0B1); //Clear/set OC0A/OC0B on Compare Match,
// doc S102 , OC0A/OC0B ist Port PD6/D5
TCCR0A |= (1<<WGM01)|(1<<WGM00); // Fast PWM, TOP=0xFF=dez255, doc S104
// das ergibt aus 20 MHz mit Prescaler 1/64 1220 Hz
TCCR0B |= (1<<CS01)|(1<<CS00); // Prescaler ist clk/64 doc S106
TIMSK0 &= ~(1<<OCIE0A)|(1<<OCIE0B); // Tmr/Cntr0 Oput CompB Match intrrpt dsabld
TIMSK0 &= ~(1<<TOIE0); // Tmr/Cntr0 Overflow interrupt disabled
OCR0A = 0; // PWM auf Null setzen
OCR0B = 0; // PWM auf Null setzen
Iz_diff0 = 0;
iesum12 = 0;
ie_mot12 = 0;
}
/* ================================================== ============================ */
void setPWMrechts(uint8_t speed) //Geschwindigkeit rechter Motor
{OCR0A = speed;} // PWM auf PD6
/* ================================================== ============================ */
void setPWMlinks(uint8_t speed) //Geschwindigkeit linker Motor
{OCR0B = speed;} // PWM auf PD5
/* ================================================== ============================ */


/* ================================================== ============================ */
/* === Regelungsroutine für Motor 12 ========================================== */
/* Die gemessene Zeitdifferenz Iz_diff0 wird zur Regelung verwendet
*/
void rgl_mo_12(void) // (Wird) Regelung für Motor 12
{
if (stupsi12 <= 5) // Soll überhaupt gefahren werden?
{
OCR0A = 0;
return;
}
tupsi12 = Iz_diff0; // Übernahme Iz-Wert in Regelung
ndrz12 = stupsi12;
if ( tupsi12 > 100 ) { tupsi12 = 100; } // Eingrenzen
idrz12 = 1000 / tupsi12;
ie_mot12 = ndrz12 - idrz12; // Vergleich => Regelabweichung
iesum12 = iesum12 + ie_mot12;
if (iesum12 < -10) { iesum12 = -10;}
if (iesum12 > 500) { iesum12 = 500;}
iy12 = iesum12/2;
iy12 = iy12 + ie_mot12 + ie_mot12 + ie_mot12 + ie_mot12 + ie_mot12;
// Diese Rechenoperation benötigt in float 0,20 bis 0,25 ms!

if ( iy12 < 0 ) { iy12 = 0;}
if ( iy12 > 255 ) { iy12 = 255;}

OCR0A = iy12; // Ansteuerung der PWM direkt statt "setPWMlinks"

return;
}
/* ================================================== ============================ */


/* ================================================== ============================ */
/* === Regelungsroutine für Motor 34 ========================================== */
/* Die gemessene Zeitdifferenz Iz_diff1 wird zur Regelung verwendet
*/
void rgl_mo_34(void) // (Wird) Regelung für Motor 34
{
if (stupsi34 <= 5) // Soll überhaupt gefahren werden?
{
OCR0B = 0;
return;
}
tupsi34 = Iz_diff1; // Übernahme Iz-Wert in Regelung
ndrz34 = stupsi34;
if ( tupsi34 > 100 ) { tupsi34 = 100; } // Eingrenzen
idrz34 = 1000 / tupsi34;
ie_mot34 = ndrz34 - idrz34; // Vergleich => Regelabweichung
iesum34 = iesum34 + ie_mot34;
if (iesum34 < -10) { iesum34 = -10;}
if (iesum34 > 500) { iesum34 = 500;}
iy34 = iesum34/2;
iy34 = iy34 + ie_mot34 + ie_mot34 + ie_mot34 + ie_mot34 + ie_mot34;

if ( iy34 < 0 ) { iy34 = 0;}
if ( iy34 > 255 ) { iy34 = 255;}

OCR0B = iy34; // Ansteuerung der PWM direkt statt "setPWMxxx"

return;
}
/* ================================================== ============================ */


/* ================================================== ============================ */
/* Motoransteuerung mit dem L293D, hier werden die Drehrichtungen gesetzt */
/* Vorgesehene/belegte Anschlüsse am ATMega168 für R2D03:
==========
hier, unter anderem, für die Motoransteuerung (Stand 22mai08 11ff) :
(E7) _|-- 3,4 Guz, PD4___6 23___PC0, SFH 5110, IN irDME 1-2 } ´168 n
VCC 7 22 GND
GND 8 21 AREF
XTAL1 PB6___9 20___VCC
XTAL2 PB7 10 19 PB5, Startblink (LED0), 3sec v Tmr0, Mehrzweck
(E6) PWM 1,2 uz+Guz,PD5 11 18 PB4 _|-- 3,4 uz (E4) (hier oder PB3)
(E5) PWM 3,4 uz+Guz,PD6___2 17___PB3, Reserve 2
(E8) _|-- 1,2 uz,PD7 13 16 PB2, Reserve 1
(E9) _|-- 1,2 Guz,PB0 14 15 PB1 SFH 415, OUT (irDME) */
// -----------------------
// Drehrichtungsbefehle für Motor 1,2 = "rechter" Motor
void Mrechtszur(void) //Motor 1,2 dreht im Uhrzeigersinn
{PORTB |= (1<<PB4); PORTD &= ~(1<<PD4);}
// r r r r r r r rechts rechter Motor r r r r r r
void Mrechtsvor(void) //Motor dreht im mathematischer Drehsinn
{PORTB &= ~(1<<PB4); PORTD |= (1<<PD4);}
// r r r r r r r rechts rechter Motor r r r r r r
void Mrechtsstop(void) //Motor aus
{ PORTB &= ~(1<<PB4); PORTD &= ~(1<<PD4);}
// -----------------------
// Drehrichtungsbefehle für Motor 3,4 = "linker" Motor
void Mlinkszur(void) //Motor 3,4 dreht im Uhrzeigersinn
{PORTB |= (1<<PB0); PORTD &= ~(1<<PD7);}
// l l l l l l l links linker Motor l l l l l l l
void Mlinksvor(void) //Motor dreht im mathematischer Drehsinn
{PORTB &= ~(1<<PB0); PORTD |= (1<<PD7);}
// l l l l l l l links linker Motor l l l l l l l
void Mlinksstop(void) //Motor aus
{ PORTB &= ~(1<<PB0); PORTD &= ~(1<<PD7);}
/* ================================================== ============================ */


/* ================================================== ============================ */
/* ===== ENDE Subroutinen ================================================== */
/* ================================================== ============================ */
Ausserdem könntest Du Dir mal eine (funktionierende) Motorregelung ansehen. Aber - wie gesagt - das ist eher für Mussestunden geeignet - *gggg*: nicht zum Lesen *gggg*.

andieh
06.02.2009, 10:36
Nur mal so nebenbei:
Jetzt sind hier schon 2 Seiten vollgesabbelt, hast du überhaupt schon angefangen?

Manchmal verwirrt einen auch zu viel Informationen einfach nur. Hast du schon einen Mega32 selber geflashed? Na dann auf, wird höchste Zeit!

juhecomp
06.02.2009, 12:43
Der Mega32 muss ja erst da sein hier in Freiburg kann man den soweit ich weiß nicht kaufen also muss ich bestellen ;)


@obeallgeier
Vielen Dank du hast mir sehr geholfen ich werde jetzt ersteinmal die Motoren Schaltung realisieren :D

Am Montag fängt das zweite Halbjahr an dann gehts los Montag oder Donnerstag sind die ersten zwei Stunden des Projekts (ich freu mich drauf)

oberallgeier
06.02.2009, 19:26
Hi andieh,


... schon 2 Seiten vollgesabbelt, hast du überhaupt schon angefangen ...Wenn Dir zuviel gesabbelt wird, brauchst Du diesen Thread nicht zu lesen. Vom Informationsgehalt war Dein Posting aber nicht wirklich der Hit - deshalb verstehe ich Deine Kritik schon zweimal nicht. Der Treadersteller juhecomp ist offenbar mit den Beschreibungen zurechtgekommen. Ja, noch was: die 15jährigen sind üblicherweise deutlich aufnahmefähiger als mancher denkt, insbesondere wenn Interesse vorliegt, sodass man sich über ihre Verwirrtheit keine Sorgen zu machen braucht.

@juhecomp viel Erfolg beim Projekt.