Forum: Analoge Elektronik und Schaltungstechnik Parallele Ansteuerung mehrerer Servomotoren mittels RS232


von Sas M. (saesch)


Angehängte Dateien:

Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> 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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Stromverdichter (Gast)


Lesenswert?

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

von Bernhard R. (bernhard_r28)


Lesenswert?

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.

von Sas M. (saesch)


Lesenswert?

@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
von Falk B. (falk)


Lesenswert?

@  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.

von Falk B. (falk)


Lesenswert?

@  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?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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

von Bernhard R. (bernhard_r28)


Lesenswert?

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. ;-)

von Sas M. (saesch)


Lesenswert?

@ 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.

von Stefan F. (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@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!!!

von Sas M. (saesch)


Angehängte Dateien:

Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Peterle (Gast)


Lesenswert?

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)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Sas M. (saesch)


Lesenswert?

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
von Sas M. (saesch)


Angehängte Dateien:

Lesenswert?

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
von Stefan F. (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Dieter F. (Gast)


Lesenswert?

Ist etwa schon wieder Freitag?

Da gab es schon bessere "Verarsche" :-)

von W.A. (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von nemesis... (Gast)


Lesenswert?

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. :(

von Sas M. (saesch)


Lesenswert?

@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
von Dieter F. (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von nemesis... (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Wolfgang (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von sas mol (Gast)


Angehängte Dateien:

Lesenswert?

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

von Sas M. (saesch)


Lesenswert?

12*0,7=8,4 ... sorry
Verlustleistung über dem Regler im Worst Case: 4V*8,4A=33,6Watt

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Sas M. (saesch)


Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Sas M. (saesch)


Lesenswert?

Alles klar. Erst mal mit Labornetzteil testen.

von Sas M. (saesch)


Lesenswert?

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
von Sas M. (saesch)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.