Guten Tag liebes yC-Forum, ich denke ihr könnt mir weiterhelfen: Ich soll in einem kleinen Team für ein Projekt an der Hochschule eine Roboter-Spinne konstruieren und programmieren: Die 2 Maschbauer konstruieren und ich enwerfe die Elektronik und programmiere. Folgende Rahmenbedingungen wurden festgelegt: -Nicht zu viele Servos: Maximal 2 Servomotoren pro Bein -Anzahl der Beine ist egal. Man muss es nur irgendwie hinbekommen eine "schöne" Bewegung hinzubekommen, obwohl der RS232 nur 8 Datenpins hat. Am einfachste wären dann wohl 4 Beine mit je 2 Servos. -Die Spinne soll ein Embedded System unter Linux sein -Programmiert wird mit C -Die Ansteuerung darf einfach über ein Kabel von einem Rechner im Labor getätigt werden, an dem RS232 vorhanden ist -Zur Spannungsversorgung darf ein Netzteil benutzt werden. Es hängen also recht viele Kabel an der Spinne. Das ist aber egal für unsere Aufgabe. -Die Elektronik soll Prototypen-mäßig auf eine Lochrasterplatine gesteckt werden. Also kein Leiterplattenentwurf oder irgendein fertigen Arduino oder so. Programmieren geht klar, aber ich habe Probleme mit der Elektronik. Obwohl ich schon recht viel in der HS über Elektronik gelernt habe stehe ich trotzdem ein bisschen auf dem Schlauch wie ich die Schaltung am besten aufbaue. Was brauche ich alles? -Die Impulse für die Servos kommen aus den Datenpins des RS232 -Die 5V-Versorung für die Servos kommt von einem Netzteil -Der 3. Anschluss der Servos kommt auf GND Würde es nicht auf einfachste Art und Weise so gehen, wie im Bild im Anhang (ganz grob)? Im Labor habe ich eine andere Servo-Schaltung gesehen mit einem invertierenden open-collector IC (74LS 05) und einer Spannungsregelung. Brauch ich das wirklich (siehe anhang)? Vielen dank.
> Die Impulse für die Servos kommen aus den Datenpins des RS232 Wie genau? Von was für Servos redest du? Nenne mal ein konkretes Produkt? > 4 Beine mit je 2 Servos Dann ist es aber keine Spinne. Dazu bräuchte man 8 Beine, oder wenn man nicht so genau hinschaut wenigstens 6 Beine. > Die Spinne soll ein Embedded System unter Linux sein Schwierig, da nicht Echtzeit-fähig. Ich würde eher auf einen Arduino Nano setzen, aber den darfst du ja leider nicht benutzen.
Stefan U. schrieb: >> Die Spinne soll ein Embedded System unter Linux sein > > Schwierig, da nicht Echtzeit-fähig. RTLinux ist zwar schon ein bisschen älter, aber schafft selbst auf Dragonballs mit 16Mhz anständig kurze ISR Latenzzeiten. Ausserdem braucht so ein Gefährt vermutlich gar kein RT Betriebssystem. Allerdings kann man Modellbau-Servos z.B. auch gar nicht mit RS232 direkt ansteuern. Irgendwie fehlt dazwischen ein MC, der die Bewegungsabläufe steuert und die Kommandos dazu von der RS232 erhält. Sas M. schrieb: > Also kein Leiterplattenentwurf oder irgendein fertigen > Arduino oder so. Ihr könnte den Tutor aber bemopsen, wenn ihr das auf einem Arduino entwickelt und dann auf die Platine einen AVR montiert, in den ihr Arduinoprogramme flasht. Dann sieht das aus wie selbstgemacht, und ihr habt trotzdem durch fertige Servo Libraries u.ä. ne Menge Zeit gespart. > Bsp_Schaltung.jpg Erschliesst sich mir im Moment nicht. Das sieht einem älteren Parallelport Interface verdammt ähnlich und hat vermutlich mit eurem Projekt nicht viel zu tun? Wenn doch, dann sag mal, was das sein soll.
Nimm doch einen Raspberry, kloppe Linux drauf und nutze eines der zahllosen Beispiele im Netz. Ich befürchte mit allem anderen würdet ihr dieses Semester nicht fertig werden. http://docs.biicode.com/raspberrypi/examples/wiringpi.html
Ich orakele auch mal ein bisschen die Aufgabenstellung: - Es ist eine "Spinne" zu bauen. -> Fortbewegung über mehr als zwei Beine - Die Beine sollen mit Servos betrieben werden. - Die Ansteuerung (PWMs) der Servos soll über einen Parallelport (Der "breite" "RS232" mit acht Datenleitungen xD) mit einem LINUX Rechner erfolgen. Das klingt glaube ich realistisch für ein Semester.
@Stefan US: -Die Modelle der Servos stehen noch nicht wirklich fest. Vlt. etwas kleineres wie der Modelcraft WG-90MG. Oder etwas größeres wie der hier: http://www.pollin.de/shop/dt/NjA5OTcxOTk-/Freizeit_Buero_Modellbau/Modellbau/Servomotor_analog.html -Wie genau die Impulse? Hmmm: In Form von einer PWM: alle 2ms einen Impuls mit der Impulsdauer von 0,5 bis 2ms. 2ms Impulsdauer entspricht einer Drehung von 180 Grad.In dem man dann alle 2ms einen 2ms Impuls schickt, wird die 180 Grad post z.B. gehalten. -4-Beinige Spinne: Hehe. Das ist bei uns irgendwie ein Sammelbegriff für alles was mehr als 3 Beine hat, auch wenn es biologisch falsch ist :D -Wie genau der Prof die Ansteuerung der Servos vorsieht, bekomme ich in ein paar Wochen im Embedded-Systems-Praktikum mit, bei dem wir Servos ansteuern :D Dann weiß ich wohl genaueres dazu. @all: -Ja Linux ist nicht optimal und auch die Lochrasterplatine nicht. Aber das ist nun mal die Aufgabenstellung. @Bernhard: Genau das. Gut orakelt! Nur das wir eine eigene Lochrasterplatine bauen müssen.
:
Bearbeitet durch User
@ Sas Mol (saesch) >"schöne" Bewegung hinzubekommen, obwohl der RS232 nur 8 Datenpins hat. ;-) [ ] Du hast RS232 verstanden. >Am einfachste wären dann wohl 4 Beine mit je 2 Servos. Mindestens 6, eher 8 Beine. >-Die Spinne soll ein Embedded System unter Linux sein Keine elektronische Spinne ist ein Embeded Systen, sie wird bestenfalls durch eins gesteuert. Mit dem Linx machst du dir mehr Probleme als du löst. Fang mal ne Nummer kleiner an und nimm einen Arduino Mega, der hat genug PWMs für die Servos. >-Die Ansteuerung darf einfach über ein Kabel von einem Rechner im Labor >getätigt werden, an dem RS232 vorhanden ist Eine Dampfmaschine? Echtes RS232 ist heute ziemlich out, man nimmt USB. Dort läuft meist ein virueller UART drüber. So auch beim Arduino. >-Zur Spannungsversorgung darf ein Netzteil benutzt werden. Es hängen >also recht viele Kabel an der Spinne. Ist doch realisitsch, die Spinne zieht viele Fäden ;-) >-Die Elektronik soll Prototypen-mäßig auf eine Lochrasterplatine >gesteckt werden. Klar. > Also kein Leiterplattenentwurf Auch für den Lochrasteraufbau bist du mit einem ENTWURF im CAD-System gut beraten. Egal ob mit Lochmaster, Eagle oder sonstwas. https://www.mikrocontroller.net/articles/Eagle_im_Hobbybereich#Lochrasterlayout > oder irgendein fertigen Arduino oder so. Doch, den solltest du nutzen. Einen Raspberry Pi baust du ja auch nicht allein auf. >Obwohl ich schon recht viel in der HS über Elektronik gelernt habe stehe ;-) Glaubst du >-Die Impulse für die Servos kommen aus den Datenpins des RS232 Nö. Das ist weder sinnvoll noch technisch möglich. >-Die 5V-Versorung für die Servos kommt von einem Netzteil >-Der 3. Anschluss der Servos kommt auf GND WOW! Da bist du ja schon ein echter Servo-Spezialist ;-) >Würde es nicht auf einfachste Art und Weise so gehen, wie im Bild im >Anhang (ganz grob)? OK. >Im Labor habe ich eine andere Servo-Schaltung gesehen mit einem >invertierenden open-collector IC (74LS 05) und einer Spannungsregelung. >Brauch ich das wirklich (siehe anhang)? Nö. Das Steuersignal kann man direkt aus einem 5V CMOS-Ausgang beziehen. Das kann der Arduino direkt.
@ Sas Mol (saesch) >-Wie genau die Impulse? Hmmm: In Form von einer PWM: alle 2ms einen >Impuls mit der Impulsdauer von 0,5 bis 2ms. Alle 20ms. >-Wie genau der Prof die Ansteuerung der Servos vorsieht, bekomme ich in >ein paar Wochen im Embedded-Systems-Praktikum mit, bei dem wir Servos >ansteuern :D Dann weiß ich wohl genaueres dazu. Mein Gott, so einen Krümelkram kann man in 1-2h im Netz lernen. Aber Eigeninitiative scheint heute Mangelware zu sein. >-Ja Linux ist nicht optimal und auch die Lochrasterplatine nicht. Aber >das ist nun mal die Aufgabenstellung. Dann wirst du sehr viel drum herum bauen dürfen, denn dein schönes Linux und der Raspberry Pi können keine Servosignale erzeugen (nicht ohne massiven Zusatzaufwand in Form eines Kerneltreibers/Modul) Was macht dein schönes Linux dann, ausser booten?
Sas M. schrieb: > -Wie genau die Impulse? Hmmm: In Form von einer PWM: alle 2ms einen > Impuls mit der Impulsdauer von 0,5 bis 2ms. 2ms Impulsdauer entspricht > einer Drehung von 180 Grad.In dem man dann alle 2ms einen 2ms Impuls > schickt, wird die 180 Grad post z.B. gehalten. Nich so ganz. Schau mal hier, wie so ein Servoimpuls wirklich aussieht: https://www.mikrocontroller.net/articles/AVR-Tutorial:_Servo
Das sollte die Komplexität der Aufgabenstellung doch schon hinreichend eingegrenzt haben... Bernhard R. schrieb: > - Es ist eine "Spinne" zu bauen. -> Fortbewegung über mehr als zwei > Beine > - Die Beine sollen mit Servos betrieben werden. > - Die Ansteuerung (PWMs) der Servos soll über einen Parallelport (Der > "breite" "RS232" mit acht Datenleitungen xD) mit einem LINUX Rechner > erfolgen. Sas M. schrieb: > @Bernhard: > > Genau das. Gut orakelt! Nur das wir eine eigene Lochrasterplatine bauen > müssen. @Sas Mol Hat dein Prof schon was über die Praktika verraten? Welchen Controller werdet ihr verwenden? Welchen Studiengang besuchst du denn? Mach dir mal über Linux keinen Kopf. ;-)
@ Bernhard: -Ja mir geht es auch nicht um die Programmierlogik an sich (Krümelkram), sondern das mit den Kerneltreibern etc. Ich besuche parallel eine Vorlesung zu dem Thema meines Projektes. Treiber minimalster Intelligenz etwerfen wir noch später. -Und nein ich bin keine Servospezialist will aber vielleicht einer werden :P -Den Impuls-Pin des Servos schliesst man also an einen IC mit CMOS-Schaltung, richtig?: Die 5V des Netzteils an die Pull-Up-Seite, GND an Pull-Down, und das Steuersignal des RS232 an die Inputseite? -Wieso habe ich den RS232 nicht verstanden? Aber ja, mir ist klar das man einen Datenpin auch für mehrere Servos nutzen kann, sofern diese die gleiche Bewegung ausführen sollen.
Also dann rate ich Dir dazu, einen Arduino Nano zu verwenden. Der hat ein seriell/USB Interface zum PC hin und kann die Steuersignale für deine Modellbau-Servos erzeugen. Du kannst dazu die Arduino Entwicklungsumgebung nutzen, oder klassisch mit Texteditor und GNU C Compiler arbeiten. Mit 6V laufen die Modellbau-Servos übrigen schneller und stärker. Die Abschätzung zur Stromaufnahme halte ich für unrealistisch. Rechne mal eher mit 1-2 Ampere pro aktivem Servo. Hier hast du ein Beispiel für ein Programm auf AVR Mikrocontroller, dass bis zu 10 Servos ansteuert: http://stefanfrings.de/servocontroller/index.html Da müsstest du im Grunde genommen nur die I2C Schnittstelle durch die serielle ersetzen und vielleicht den zweiten Timer benutzen, um weitere 10 Servos ansteuern zu können. Einen Raspberry Pi kann man da sicher auch noch irgendwie unterbringen, doch ich sehe dazu keine Notwendigkeit. Die vielen PWM Signal erzeugst du damit jedenfalls nicht direkt ohne größere Hürden. >> Die Impulse für die Servos kommen aus den Datenpins des RS232 > Wie genau? Ich meinte nicht, wie die Impulse aussehen, sondern wie dieses ominöse RS232 Dings funktioniert. Eine RS232 Schnittstelle alleine eignet sich keinesfalls, um Modellbua-Servos anzusteuern und sie hat auch keine 8 Datenleitungen. Schau Dir mal Arduino Nano Module an. Die gibts bei Amazon schon für unter 5 Euro. Wie gesagt zwingt dich niemand, das Ding mit Arduino Software zu programmieren, falls das unerwünscht sein sollte. Betrachte das Teil eher als eine praktische Kombination aus AVR Mikrocontroller mit USB/seriell Interface. > sondern das mit den Kerneltreibern Lass lieber die Finger davon. Das ist nichst für Anfänger. Nutze lieber handelsübliche USB/seriell Interface (auch USB-UART genannt), wie sie unter anderem auf dem Arduino Nano zu finden sind. Arduino Nano Module kann man auf Steckbretter stecken. In diesem Buch wird die Programmierung von AVR und Servos ausführlich erklärt und ausprobiert: http://stefanfrings.de/mikrocontroller_buch/index.html
@Sas Mol (saesch) >-Den Impuls-Pin des Servos schliesst man also an einen IC mit >CMOS-Schaltung, richtig?: Die meisten Logik-ICs sind heute in CMOS-Technologie gefertigt. > Die 5V des Netzteils an die Pull-Up-Seite, GND >an Pull-Down, und das Steuersignal des RS232 an die Inputseite? AUA! Was ist das denn für eine abstruse Formulierung? Und du glaubst, "schon viel über Elektronik gehört zu haben"? Ich nicht. >-Wieso habe ich den RS232 nicht verstanden? Das beweisen deine Aussagen. >Aber ja, mir ist klar das >man einen Datenpin auch für mehrere Servos nutzen kann, sofern diese die >gleiche Bewegung ausführen sollen. Na dann mal los!!!
Ich bedanke mich bis jetzt für alle Antworten, sehr nett und hilfreich. Hilft mir erst mal weiter. @ Bernhard: Auch zum Entwicklungsboard weiß ich noch nicht so viel: Ich glaube es ist das EVA2. Sorry das ich das nicht früher geschrieben hab. Ich lade es mal hoch.
MMn verwechselt der TE immer noch RS232 mit LPT - die alte parallele Druckerschnittstelle, die man im letzten Jahrhundert immer wieder als 'Frickelport' benutzt hat. Die kann man natürlich prima unter MS-DOS mit Turbo-C oder Turbo Pascal und dem Tickerinterrupt der PCs anpusten - aber das kann eigentlich nicht Sinn der Sache sein und wird schon lange nicht mehr gemacht. Evtl. stellt sich der Prof. (wir wissen ja nicht, wie alt er ist) aber so was ähnliches vor. Das man heute unter Linux (und allen andereren OS) nicht mehr direkt an Schnittstellen rumfummeln kann, ohne sich Exceptions und Access Violations vorwerfen zu lassen, weiss er evtl. gar nicht.
Matthias S. schrieb: > MMn verwechselt der TE immer noch RS232 mit LPT - die alte parallele > Druckerschnittstelle, die man im letzten Jahrhundert immer wieder als > 'Frickelport' benutzt hat. So einen Verdacht habe ich auch. Könnten wir vielleicht ein paar Details (Schaltplan) zu der "Bsp_Schaltung" haben? (der 74LS05 ist ein Hex-Inverter)
Peterle schrieb: > Könnten wir vielleicht ein paar Details (Schaltplan) zu der > "Bsp_Schaltung" haben? (der 74LS05 ist ein Hex-Inverter) Mir sieht das so aus wie ein 2-bit Output/ 2-bit Input I/F für LPT. Wenn man die Bahnen verfolgt, gehen da 2 in Richtung Pin 2 und 3 der DB25 und zwei andere Richtung Inputs (Busy oder PaperEnd oder so). Da der Druckerport keine Spannung liefert (jedenfalls nicht mit Dampf), hammse noch ein 3-Bein Regler mit Hohlbuchse fürs Netzteil draufgebaut.
Ich sammel mal noch ein paar Infos bevor ich mich wieder melde ich merke das bringt so noch nix. Danke bis jetzt. @Falk wäre nett wenn Sie Ihr wissen ein bisschen netter verteilen würden. @Matthias: Kann gut sein das ich da etwas verwechsle. Ich meine die "parallele Schnittstelle" mit 8 Datenpins.
:
Bearbeitet durch User
Hallo hier bin ich nochmal: Ja, ich habe die Schnittstellen die ganze Zeit verwechselt. Die parallele Schnittstelle die ich nutzen soll, ist tatsächlich die alte parallele Druckerschnittstelle. Habe den Prof. gefragt warum wir diese in der Vorlesung zu Embedded System überhaupt nutzen. Er hat zwei Vorteile genannt - hauptsächlich aus didaktischen Gründen: 1.) Mit dem PIN 10 am Statusport lassen sich sehr einfach Interrupts auslösen. Das wird beim Programmieren einfachste Treiber ausgenutzt. 2.) Auf die Datenports kann man ganz einfach zugreifen und kann auf einfachste Art unt Weise hardwarenah programmieren. Mit IOPERM-Funktionen und Bit-Masken zum ausblenden der nicht belegten Bits lässt sich so ganz einfach die Hardware ansteuern, ohne Probleme mit Treibern zu haben. Das folgende Beispiel (1) bezieht sich nur auf die Variable Bitmuster. Bei meinem Projekt wäre dann beispielsweise Bitmuster = Moter_1_ein... Motor_2_aus... etc. Für die PWM-Form soll ich die Funktion "microsleep()" nutzen. (1) • Programm übersetzen: user1@linux: /ppcheck> make ioperm1 gcc -g -O2 -Wall -I/usr/include ioperm1.c -o ioperm1 user1@linux: /ppcheck> • Programmlauf nur als Root! • Programmlisting von ioperm1.c: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <sys/io.h> /* for glibc */ 4 #include <unistd.h> 5 6 const unsigned long DATAPORT = 0x378; 7 const unsigned long STATUSPORT = 0x379; 8 const unsigned long CTRLPORT = 0x37A; 9 const unsigned long BEREICH = 3; 10 11 int i, bitmuster, Taste; 12 13 int main(int argc, char** argv) 14 { 15 16 i = ioperm( DATAPORT, BEREICH, 1 ); 17 if ( i < 0 ) { printf( "Fehler bei ioperm 1 "); exit(1); } 18 else { printf ( " ioperm 1 ok \n" ); } 19 20 for ( i=0; i<= 3 ; i++ ) 21 { 22 bitmuster = 0xFF; // alle Datenleds an 23 outb ( bitmuster, DATAPORT ); // Bitmuster schieben 24 sleep(1); // 1 Sekunde warten 25 26 bitmuster = 0x00; // alle Datenleds aus 27 outb ( bitmuster, DATAPORT ); // Bitmuster schieben 28 sleep(1); // 1 Sekunde warten 29 } 30 } 1 2 printf ( "\n bitte Taste(n) drücken \n" ); 3 sleep(1); 4 5 Taste=0; 6 7 8 do 9 { 10 bitmuster = inb ( STATUSPORT ); 11 bitmuster = bitmuster & 0xf8; //relevanten Bits testen 12 13 if ( (bitmuster & 0x80) == 0x00 ) //x000 0000 invert. 14 {printf( " Taste pin 11 gedrückt \n" ); Taste=1;} 15 if ( (bitmuster & 0x40) ) //1x00 0000 16 {printf( " Taste pin 10 gedrückt \n" ); Taste=1;} 17 if ( (bitmuster & 0x20) ) //10x0 0000 18 {printf( " Taste pin 12 gedrückt \n" ); Taste=1;} 19 if ( (bitmuster & 0x10) ) //100x 0000 20 {printf( " Taste pin 13 gedrückt \n" ); Taste=1;} 21 if ( (bitmuster & 0x08) ) //1000 x000 22 {printf( " Taste pin 15 gedrückt \n" ); Taste=1;} 23 } 24 while(Taste!=1); 25 26 27 28 i = ioperm( DATAPORT, BEREICH, 0 ); // schließen 29 if ( i < 0 ) { printf( "Fehler bei ioperm 0 "); exit(1); } 30 else { printf ( " ioperm 0 ok \n" ); } 31 32 return 0; Ich soll also direkt Daten aus den Datenpins von der parallelen Schnittstelle auf meinen Spinnenchip schicken. Deswegen nochmal zur alten Frage, wie die Elektronik auszusehen hat: Ich habe dabei mal mit PSPICE ein Bild gezeichnet was ich erreichen möchte (im Anhang: "BufferSpinne"). Die Frage ist nun: Was nehme ich am Besten als Bufferbaustein? Die Platine, die wir in Embedded nutzen haben einen LS244 Tri-State-Buffer. Also so etwas was ich simuliert habe. Geht es auch anders? Wie sieht es mit einem normal Buffer aus? PS: Kann mir jemand eine gute Simulationssoftware für schaltkreise nennen? Ich nutze hier die PSPICE-Version von der Tietze-und-Schenk-Homepage und komme damit nicht so wirklich klar. Grüße und danke
:
Bearbeitet durch User
Das Programm wird wegen der direkten Hardware Zugriffe nur als Root laufen. Dies halte ich didaktisch für fragwürdig. Das macht man eigentlich seit mindestens 10 Jahren schon nicht mehr.
Stefan U. schrieb: > Das macht man > eigentlich seit mindestens 10 Jahren schon nicht mehr. So isses. Userspace darf gar nicht auf den I/O Bereich direkt rangehen, so was macht man über Treiber. Glücklicherweise sollte es für Linux aber Parport Treiber geben, die den Zugriff auf Pins erlauben. Ich habe jetzt gerade keine Kiste mit Parallelport hier, aber in /dev sollte da was zu finden sein. Dann muss dein Programm nur noch einen RW Kanal auf /dev/lpt1 oder wie er heisst, öffnen und kann von lesen und schreiben.
Ist etwa schon wieder Freitag? Da gab es schon bessere "Verarsche" :-)
Bernhard R. schrieb: > - Die Ansteuerung (PWMs) der Servos soll über einen Parallelport (Der > "breite" "RS232" mit acht Datenleitungen xD) mit einem LINUX Rechner > erfolgen. > > Das klingt glaube ich realistisch für ein Semester. Schon die Kombination aus "RS232" und "8 Datenpins" hört sich so an, als ob da noch ein paar Grundlagen erarbeitet werden müssen. Normalerweise besitzt eine RS232 Schnittstellen genau einen Sende- und einen Empfangspin. Selbst mit allen irgendwo mal spezifizierten Klingel- und Handshakeleitungen kommt man nie auf 8 Pins für eine Richtung.
Das haben wir doch schon geklärt. Es ist der alte Parallelport: Sas M. schrieb: > Die > parallele Schnittstelle die ich nutzen soll, ist tatsächlich die alte > parallele Druckerschnittstelle. Nur ist es eben seit über 10 Jahren nicht mehr ohne weiteres möglich, so direkt auf den LPT zuzugreifen, wie der Prof. das noch aus seinem Studium kannte. Ich habe dafür auch noch tolle MS/DOS Turbopascal Programme, mit IRQ und allen Spässchen. Aber die Zeiten sind vorbei.
Sas M. schrieb: > Guten Tag liebes yC-Forum, Wo das µ-Zeichen auf deine Tastatur zu finden ist, weißt du auch nicht? Man, das fängt ja gut an. Versuche mal die Tasten AltGr+m in der Nähe von der Space-Taste rechts. > ich denke ihr könnt mir weiterhelfen: Helfen ja, zur Selbsthilfe, aber dein Projekt zu umfangreich zu tutoren oder für dich die ganze Arbeit zu erledigen, würde ich mir aus dem Kopf schlagen. Das kann das Forum nicht leisten. Es soll ja gerade der Sinn eines Bildungsziels sein, dass du lernst wie man ein Problem analysierst und eine Lösung synthetisiert. > Ich soll in einem kleinen Team für ein Projekt an der Hochschule eine > Roboter-Spinne konstruieren und programmieren: Die 2 Maschbauer > konstruieren und ich enwerfe die Elektronik und programmiere. Schon mal den Bewegungsablauf so eines Tierchens analysiert? Damit würde ich erst mal anfangen und dann prüfen wieviel Antriebseinheiten tatsächlich benötigt werden. Manche Beine kann man dann mechanisch synchronisieren und braucht gar nicht so viele Antriebseinheiten. Ein Bein muss angehoben werden, dann um einen definierten Weg nach vorne Bewegt werden und wieder abgesetzt werden. Dann wird das Bein abgesenkt wieder um den gleichen Weg zurück bewegt. Wenn die Anzahl Beine nicht Acht ist, ist es auch keine Spinne, sondern irgend ein anderes Krabbeltier. Man gut, dass es kein Tausendfüßler ist. ;-b Zumindest müsste dann erst mal geklärt werden wie viele Beine für eine stabile Fortbewegung, aber auch sicheren Stand, mindestens nötig sind. Sas M. schrieb: > Würde es nicht auf einfachste Art und Weise so gehen, wie im Bild im > Anhang (ganz grob)? > > Im Labor habe ich eine andere Servo-Schaltung gesehen mit einem > invertierenden open-collector IC (74LS 05) und einer Spannungsregelung. > Brauch ich das wirklich (siehe anhang)? Bau doch das Beispiel nach, programmiere es und bring es zum laufen. Nutze die Möglichkeiten die Software funktionell zu testen (Simulator oder Debugger). Die Mittel müssten dir zur Verfügung stehen. Welche Software bereit gestellt wird, würde ich mal erwähnen und nicht aufzählen was NICHT genutzt wird, denn das ist nicht zielführend. Mit einem funktionalen Blockschaltbild von der Elektronik würde ich weiter machen. Sas M. schrieb: > -Wie genau der Prof die Ansteuerung der Servos vorsieht, bekomme ich in > ein paar Wochen im Embedded-Systems-Praktikum mit, bei dem wir Servos > ansteuern :D Dann weiß ich wohl genaueres dazu. Na, dann bist wohl sowieso zu früh dran. Was für ein Chaos. :(
@Nemesis: reite doch nicht auf den uralten Posts von mir rum. Ich habe im letzten Post schon längst zusammengefasst wie ich es machen möchte und fragte lediglich, wie auch am Anfang, SONST NICHTS, wie die elekektronische Schaltung am Ende aussehen muss. Die Frage habe ich auch schon eingegrenzt auf die Frage, ob ich einen anderen Baustein als den LS244 als Buffer nehmen kann. Was kann ich als Bufferbaustein nehmen (siehe letztes Bild von mir im letzten Post). Der LS244 ist ein Tri-State-Buffer. Verstehe nicht ganz warum nicht ein normale Buffer-Baustein ausreicht. Mit dem im letzten Post geschilderten Code kann ich meine Servos mit der Platine aus unserem Hochschullabor schon ansteuern. Nur das die LED-Bitmuster mit Motor-Bitmuster getauscht werden. Das geht. Und ob es Sinn macht oder nicht ist mir egal. Habe hier bis jetzt nur 1% hilfreiche Infos bekommen und werde zu 99% nur runtergebuttert. Was soll das?
:
Bearbeitet durch User
Sas M. schrieb: > Ich soll in einem kleinen Team für ein Projekt an der Hochschule eine > Roboter-Spinne konstruieren und programmieren: Die 2 Maschbauer > konstruieren und ich enwerfe die Elektronik und programmiere. Welche Hochschule und welcher Professor? Ist ja nicht verfänglich und weitgehend anonym ... Für mich bist Du ansonsten schlicht ein Troll - bei dem, was Du so schreibst.
Sas M. schrieb: > Der LS244 ist ein > Tri-State-Buffer. Verstehe nicht ganz warum nicht ein normale > Buffer-Baustein ausreicht. Der 244 ist eben schon ein 8-bit Treiber und alles in einem Gehäuse. Wenn du seine Enable Eingänge dauerhaft auf Masse legst, ist er ein Buffer ohne Tri-State. LS ist übrigens ein bisschen ausser Mode gekommen, die meisten nehmen heute HCT.
Sas M. schrieb: > Der LS244 ist ein > Tri-State-Buffer. Verstehe nicht ganz warum nicht ein normale > Buffer-Baustein ausreicht. Tri-State bezieht sich auf die Output-Funktionalität des Bausteins womit man die Ausgänge hochohmig schalten kann. Wenn man auf ein Bussystem mehrere solcher Treiber selektiv parallel schalten konnte, machte das schon Sinn. Ich glaube nicht, dass du das brauchst, aber nehmen kannst du den Chip schon, genauso wie alle von 74240-74245. Leg einfach den Tri-State Steuereingang auf High. Die Ausgänge bleiben dann aktiv. Viel wichtiger ist die Schmitt-Trigger-Eigenschaft dieser Chipgruppe, die für ein besseres Signal sorgt, gerade wenn Störungen auf längeren Leitungen möglich sind, bzw. zu befürchten sind. Auch 74xx14/19 (ohne TS)würden wohl gehen, aber die haben nur sechs Buffer im Chip. Für weitergehende Tipps müsste man den Rest der Schaltung kennen.
nemesis... schrieb: > Leg einfach den Tri-State Steuereingang auf High. Nö, da muss man ins Datenblatt gucken. Der 74XX244 und -245 hat nun mal invertierte Enable Pins und man muss sie auf low legen. Der -240 auch, der -241 hat positive, usw.
:
Bearbeitet durch User
Matthias S. schrieb: > LS ist übrigens ein bisschen ausser Mode gekommen, die meisten nehmen > heute HCT. Und HCT ist nur ein Zugeständniss an die Logikpegeldefinitionen von LS und Ur-TTL. Bei CMOS-Logik ist HC angesagt.
Wolfgang schrieb: > Und HCT ist nur ein Zugeständniss an die Logikpegeldefinitionen von LS > und Ur-TTL. > > Bei CMOS-Logik ist HC angesagt. Kennst du den Druckerport des TE? Ich nicht und deswegen HCT - ich schreibe sowas schon mit Absicht.
:
Bearbeitet durch User
Hallo, ich habe mal kurz was mit Paint zusammen gekritzelt, wie ich es mir vorstelle. Ich habe mich für LS244 entschieden, weil der IC bei uns auf den Platinen überall verbaut ist und funktioniert und auch die LOW-Pegel (0,4) und HIGH-Pegel (2,4) zur Druckerschnittstelle passen (TTL-Pegel). Ist ein HCT so viel mehr von Vorteil? Aber nun zur Elektronik: 1.) Der Steuerungsteil mit den LS244-Buffer-Bausteinen steht. Jetzt zur Stromversorgung: 2.) Ich dachte daran ein 9V Netzteil mit genug Luft anzuschließen: Die Servos brauchen bei maximaler Last mit 5V ca. 0,7A. Also kann ein Spitzenstrom von 12*0,8A=8,4A durch die Schaltung fließen. Im Worst Case. Meint ihr ich kann ein 5V 10A Festregler nehmen? Das Ding wird bei steigender Servolast natürlich heiß: 12*0,7A*5V=42 Watt. Auf einen Step-Down-Wandler wollte ich eigentlich verzichten, aber geht wohl nicht anders oder? Grüße
12*0,7=8,4 ... sorry Verlustleistung über dem Regler im Worst Case: 4V*8,4A=33,6Watt
:
Bearbeitet durch User
Wenn da jetzt sowieso ein PC rumsteht, kannst du die Schaltung mit einem Labornetzteil testen, und wenn alles klappt, vom PC die 5V anzapfen. Oder du stellst ein PC Netzteil daneben, am besten eines, was noch aus den älteren AT(X) Zeiten kommt, als die Rechner noch 5V richtig belasteten. Aber immer erst mit Labornetzteil testen, denn bei einem Schaltungsfehler isst das PC Netzteil deinen Versuchsaufbau zum Frühstück. sas mol schrieb: > neu_spinne.png Leider habe ich keine Ahnung, was mir dieses Bild sagen soll.
:
Bearbeitet durch User
Okay die Zeichnung ist ein wenig sonderbar: Zeigt im Prinzip die Pins, die ich von der Druckerschnittstelle nutze und 3 Pufferbausteine LS244. Also so in etwa löte ich den Spinnenchip zusammen. Wobei man sich natürlich auch noch die Ausgänge Q1-Q12 an die Servos denken muss. Das hab ich aber zur "Übersichtlichkeit" weg gelassen. Rechts sind dann die 12 Servoanschlüsse, jeweils natürlich mit 3 Pins (GND,Vcc,Signal(Q1-Q12)). Und dann eben alles über den 5V-10A-Regler an die 9V Betriebsspannung angeschlossen. Also ohne Spannungsregler klappt das auf keinen Fall, weil durch das schnelle Schalten der Servos Selbstinduktion in der Leitung entsteht. Außerdem wird das Netzteil entlastet...8A sind schon viel. Könnte das so klappen? Ich möchte wenigstens einen groben Plan der Elektronik haben bevor ich den Prototyp baue. Die 100nF sind die klassichen Pufferkondensatoren für jedes IC. An den Regler müssen auch noch ein paar Kondensatoren und eine Schutzdiode.
:
Bearbeitet durch User
Sas M. schrieb: > Also ohne Spannungsregler klappt das auf keinen Fall, > weil durch das schnelle Schalten der Servos Selbstinduktion in der > Leitung entsteht. Wer erzählt dir denn sowas? Fernsteuerservos werden auch in Fernsteuermodellen benutzt, und da sind sogar noch HF Empfänger mit an Bord, die gegen Störungen besonders empfindlich sind. Alle üblichen Servos verseuchen ihre Betriebsspannung recht wenig. Wie gesagt, nimm den PC als 5V Lieferant, solange das Tier sowieso am Kabel hängt.
Alles klar. Erst mal mit Labornetzteil testen.
Mir kam noch eine Idee: Sollte ich die Spannungsversorung für ICs und Servomotoren trennen? Beispielsweise: -> Batterie für Puffer-Gatter und Netzteil für Servoteil oder umgekehrt Hier beispielsweise steht, dass man Steuerung und Leistungsteil trennen soll: http://rn-wissen.de/wiki/index.php/Servos
:
Bearbeitet durch User
Eine andere Frage: ich kam noch nicht dazu die Servos ausgiebig zu messen. Durch langes suchen habe ich gefunden, dass die Tower Pro Micro Servos 9g SG90 0,7A bei maximaler Belastung ziehen. Jetzt ist es so, dass je nach Gangart, die man wählt: Z.B. [2 Oben - 4 Unten - die 4 unteren Beine bewegen die Spinne] wohl nie 12*0,7A aufgenommen werden müssen. Außer man programmiert Liegestütze :D Außerdem liegt an den Schultergelenken ein geringes Drehmoment an -> wenig Stromaufnahme. Jetzt aber zum Knackpunkt: Ich möchte die Servos zeitlich versetzt ansteuern, sodass die maximale Stromaufnahme fällt, welche Zeitabstände brauche ich? Wisst ihr das zufällig? Einfach direkt nach der PWM-Flanke oder brauch ich da noch paar Milisekunden Pause wegen Nachschwingen, Induktion, etc... Grüße
Sas M. schrieb: > Einfach direkt nach der PWM-Flanke > oder brauch ich da noch paar Milisekunden Pause wegen Nachschwingen, > Induktion, etc... Servosignal und Motorstrom hängen nicht unbedingt direkt zusammen, es wird servointern mit einer eigenen Zeitbasis gearbeitet, die die Motorimpulse erzeugt. Wenns also wirklich auf den Strom ankommt, musst du solange nach einer Bewegungsänderung warten, bis die Servos wieder stillstehen. Je nach Winkelgeschwindigkeit dauert das länger oder kürzer. Die Stellzeiten sollten aus den Daten der Servos ersichtlich sein, sind aber auch selbst auszumessen.
Sas M. schrieb: > Jetzt aber zum Knackpunkt: Ich möchte die Servos zeitlich versetzt > ansteuern, sodass die maximale Stromaufnahme fällt Warum willst Du die unwichtigsten Sachen zuerst machen? Bring das Ding erstmal überhaupt zum Laufen. Erst wenn Du noch Zeit übrig hast, kannst Du Dich um Gimmicks kümmern.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.