Die Dokumentation zu meinem jugend forscht Projekt
1.Einführung | 2.Ein intelligentes Fahrzeug | 3.- 3.4 Hauptteil | 3.5 Hauptteil | 3.6 - 3.8 Hauptteil | 4.Ergebnisse


Fahrerlos zum Ziel
Mikrocontrollergesteuertes Fahrzeug mit Ultraschall-Sensorik
1993 von Holger Buß
2.Platz Bundesausscheidung Technik


3.
Hauptteil

3.1
Der Mikrocomputer

Das Herz des Fahrzeugs ist das Controllerboard. Es bildet die Rechnereinheit, die die Motoren steuert, die
Werte des Ultraschall Abstandmessers auswertet und mittels Display, Infrarotempfänger und Piezo-Beeper mit
dem Menschen kommuniziert.
Meine ersten Modelle des Sonarfahrzeugs hatte ich ohne Controller oder sonstige Recheneinheiten realisiert. Sie
waren über eine Flachbandleitung mit einem PC verbunden, der so nur die Motoren steuerte. Es stellte sich aber
bald heraus, daß die Leitung aufgrund der relativ großen Adernzahl zu sperrig war. Außerdem sollte es ein
selbständiges Gefährt werden, und das war es so ja nicht.
Die einzige Lösung ist, daß das Fahrzeug seinen Rechner selbst mitführt. Nun mußte ich mich also in die
Mikrocontroller-Technik einarbeiten. Ich habe mich für ein Controllerboard von Elektor entschieden, da sich
das System in Basic programmieren läßt und eine serielle Schnittstelle beinhaltet, bei der sich sogar die
Übertragungsrate automatisch anpaßt. Die Platine selbst ist einseitig und mit 0,4 mm breiten Leiterbahnen
ausgestattet, so daß ich sie selbst ätzen konnte. Bei Einsatz des 80c32-Controller-Chips ist das Board sehr
preisgünstig.

3.1.1
Die Schaltung

Das Herzstück ist die CPU 80c32, ein Controller von Intel, bei dem die Beschaltung recht einfach ist. Da die
unteren acht Bit der Adresse gemultiplext sind, müssen sie zuerst wieder getrennt werden. Dazu werden sie in
D-Flipflops bei High Pegel des Signals ALE übernommen. Um RAM; ROM und I/O Adressen zu
verschachteln, sind drei NAND-ICs auf dem Compuboard untergebracht.

Die Schnittstelle ist durch eine 64-polige Messerleiste realisiert, an ihr können Steuerleitungen, die
Adressleitungen AO bis A7, TxD und RxD, die acht Datenleitungen und der Port 1 abgegriffen werden. Diese
Aus- und Eingänge sind mittels bidirektionalen und anderen Busleistungstreibern geschützt. Über einen 9-
poligen Sub-D Stecker wird der Rechner und das gesamte Fahrzeug mit einer Spannung von 14V versorgt und
kann zur Programmierung mit dem PC verbunden werden. RxD und TxD sind serielle Übertragungsleitungen,
die man problemlos an eine V24-Schnittstelle anschließen kann. Mittels eines Terminalprogramms kann man
nun in Verbindung mit dem Controller treten.
Die Mikrocontroller-Karte verfügt über 32 KByte RAM und 32 KByte ROM. Zu den ROM (EPROM) gehört
der Basicinterpreter und das selbst geschriebene Programm. Der Rechner arbeitet das Programm ab, indem er
sich immer einen Basic-Befehl aus dem oberen Teil des ROMs holt, ihn dann im unteren Teil interpretiert und
entsprechend handelt. Basicprogramme sind dadurch zwar im allgemeinen recht langsam, doch ich betreibe das
Board mit 36 MHz und das macht die Abarbeitung so schnell, daß ich sogar teilweise mittels Warteschleifen das
Programm drosseln muß, da sonst die Motoren durchdrehen.
Da dieser Einplatinencomputer über eine Programmierhardware verfügt, kann bei Verwendung des 8052-
Controllers das fertige Programm direkt ins EPROM gebrannt werden.

3.2
Der Adreßdecoder

Der Mikrocontroller selbst hat nur einen Port mit acht Bits zum Schreiben und Lesen frei. Da dies nicht
ausreicht, die Motoren zu steuern, die Abstandsdaten zu lesen, das Display zu betreiben und die Infrarotimpulse
zu messen, mußte ich neue Aus- und Eingänge schaffen (s. Abb. 2).
An der 64 poligen Schnittstelle kann man Steuer-, Adreß- und Datenleitungen abgreifen. Wenn der Controller
Daten schreibt, legt er zunächst die Zieladresse an den Adreßbus und die Daten auf den Datenbus. Wenn beides
anliegt, gibt er ein kurzes High auf den WR-Pin. Dasselbe geschieht beim Lesen, nur daß dann die Daten nicht
auf den Bus gelegt, sondern von ihm gelesen werden und daß dann das RD-Signal kommt.
Mittels des TTI-ICs 74138 werden aus drei Adreßleitungen acht gemacht (BCD zu Dezimalcode), von denen je
immer nur eine aktiv (hier Low) ist. Der Chip wird auch nur dann freigegeben, wenn die Bedingung für Enable
(El und E2 Low, E3 High) gegeben ist. An E3 ist jetzt das WR angeschlossen. Der entsprechende Ausgang wird
folglich nur dann aktiv, wenn WR High ist.
Die Ausgänge des 74138 werden nun negiert und dann auf den flankengetriggerten Clock-Eingang des D-
Zwischenspeichers (74574) gegeben, der bei einer Flanke die Daten vom Datenbus auf seine Ausgänge kopiert
und dort solange hält, bis sie überschrieben werden. Dasselbe geschieht ähnlich beim Lesen, nur daß die
Tristate-Ausgänge immer hochohmig auf dem Datenbus liegen und bei Ansteuerung auf OE niederohmig
werden.
Der Basic-Befehl zum Schreiben und Lesen lautet: XBY( Adresse)
Wenn der Befehl vor dem Gleichheitszeichen steht, wird geschrieben. Steht er dahinter, so wird gelesen.

Zum Lesen des Ultraschallabstandes zählt ein Binärzähler, genau wie bei den Sieben-Segment-Anzeigen, hoch.
Dieser Wert wird beim Empfang des Schalls in das D-Register des Eingangsbausteins übernommen, wo er
jederzeit gelesen werden kann. Der Piezo-Beeper wird direkt über einen Kondensator an die Schnittstelle, Port 1
Bit2, angeschlossen. Er kann im Programm mittels des PWM(Pulse-Weiten-Modulation)-Befehls zum Beepen
gebracht werden. Dabei muß die Pulszeit, die Pulspause und die Periodenanzahl angegeben werden.
Man braucht zum Ansteuern zehn Leitungen, acht Datenbits und zwei Steuerleitungen (Enable und WS). Die
Information wird zuerst an die Datenleitungen gelegt und dann bei einer positiven Flanke am Enable-Pin
übernommen. Durch den Pegel am WS Bit wird zwischen Daten und Kommandos unterschieden.
Das Display ist an der Adreßdecoderplatine angeschlossen. Die Daten werden mit der Adresse C000 und die
Steuerleitungen mit der Adresse C001 gesteuert.
In der Anzeige werden je nach Bedarf Aufforderungen, wie z.B. ,,Bitte Zielkoordinate senden", oder
momentane Position und gedachte Himmelsrichtung eingeblendet. Im Programm kann man den Text in einen
String schreiben, wobei man obere oder untere Zeile des Displays als Ziel angeben muß. Dann wird der Text
durch Aufrufen des Unterprogramms ab Zeile 60 in die Anzeige übernommen. In dem Unterprogramm wird der
Text in die einzelnen Buchstaben zerlegt, der Cursor gesetzt und die Daten ans Display gesendet.
Die Zahlen, z.B. Koordinaten, müssen erst durch Dezimalteilung in einzelne Ziffern umgewandelt werden.

3.3
Das Display

Auf dem Fahrzeug, über der Controllerplatine, ist ein alphanumerisches LC-Display angebracht. Es umfaßt 2 *
20 Zeichen, wobei jedes Zeichen aus 5*8 einzelnen Matrixpunkten zusammengesetzt ist. Das Modul besteht aus
einem LC-Display und einer Platine, auf der sich zwei ICs und einige weitere Bauteile befinden; Display und
Platine bilden eine mechanische Einheit. Das Display ist CMOS und TTL kompatibel, seine Ausgänge sind
durch Dioden geschützt, und der Energiebedarf beträgt ca. 7mW. Es zeichnet sich durch folgende Eigenschaften
aus:

- integrierter Zeichengenerator
- integrierter Controller für die Datenübertragung
- Betriebsspannung von 5V Kontrastregelung
- 200 verschiedene Zeichen sind ohne großen Aufwand darstellbar
- geringes Eigengewicht und kleine Abmaße.

Außer den Zeichencodes gibt es eine Reihe von Kommandos, zum Beispiel zum Löschen der Anzeige, zum
Positionieren der Schreibmarke und zum Verschieben des Textes.

3.4
Der Ultraschall-Abstandmesser

Das wohl wichtigste Element der ,,Sonarmaus" ist der Abstandsmesser, mit dem der Controller berührungslos
die Abstände zu festen Gegenständen, also Hindernissen, messen kann.
Wichtig dabei ist, daß sich der Controller auf den gemessenen Wert verlassen kann. Die
Oberflächenbeschaffenheit und das Material dürfen hier selbstverständlich keine Beeinflussung des Ergebnisses
hervorrufen. Außerdem muß eine möglichst feine Einteilung der Entfernung gewährleistet sein.
Als ich den Abstandsmesser entwickelte, dachte ich zuerst daran, Licht oder Schall auszusenden und die
Intensität des reflektierten Mediums zu messen. Eine relativ starke Reflektion hätte z.B. eine kurze Entfernung
bedeuten können. Versuche ergaben jedoch einen sehr unzuverlässigen Wert. Hier war die Oberfläche des
reflektierenden Gegenstandes mehr ausschlaggebend als die Entfernung.
Es gibt praktisch nur eine Alternative: Man macht es im Prinzip wie die Fledermäuse.

Man muß die Entfernung durch die Zeit vom Senden bis zum Empfangen ermitteln. Je länger die Zeit, desto
größer der Abstand (s. Abb. 3). Wichtig dabei ist, daß die Geschwindigkeit des Schalls von der Intensität
unabhängig ist. Der Schall verbreitet sich mit einer Geschwindigkeit von ca. 340 Meter pro Sekunde. Da der
Schall bei einer Reflektion Hin- und Rückweg zurücklegen muß, braucht er die doppelte Zeit. Eine Sekunde
entspricht also einer Entfernung zum Reflektor von ca. 170m. Pro hinterlegten Zentimeter braucht er also
eine Zeit von ls/l7OOOcm = 58,8 s/cm. Dies erklärt das Verwenden des 17 kHz Zähltaktes in der Schaltung.
Nach einigem Entwickeln und Messen kam ich dann schließlich hinter die Tricks, die es ermöglichen,
Entfernungen unterhalb von fünf Metern in cm-Schritten absolut linear zu messen. Die kurzen Zeiten machten
mir etwas zu schaffen, außerdem darf sich das System auf keinen Fall durch Fremdgeräusche stören lassen, was
eine sehr schmalbandige Empfängerschaltung voraussetzt. Als Empfangsverstärker und Bandpaß verwende ich
in dieser Schaltung das IC TDA 4050 B, was eigentlich ein Infrarotvorverstärker für Fenbedienungen ist.
Anstelle einer IR-Fotodiode setzte ich das Ultraschallmikrofon ein.

3.4.1
Die Funktion des Ultraschall-Abstandsmessers

Mittels des Blockschaltbilds (s. Abb. 4) läßt sich die Funktion leicht verständlich erklären.

Der Oszillator gibt eine feste, genau berechnete Frequenz von 17,2 kHz ab, die jeweils an den Blockeingängen
des Dezimalzählers und der Zähleinheit anliegt. Wenn der Dezimalzähler zählt, wird jeweils eine seiner zehn
Ausgangsleitungen logisch High. Der Ultraschallsender sendet mit 44kHz nur so lange, wie der Dezimalzähler
auf ,,1" steht, also genau 58 Mikrosekunden. Das abgegebene Impulspaket besteht jetzt aus nur zwei bis drei
Schwingungen, das Schallsignal ist jedoch durch das Nachschwingen des Wandlers etwas länger (s. Abb. 5).

Der Dezimalzähler zählt jetzt weiter. Während der Schritte 2 - 5 passiert nichts. Das soll ein direktes
Beeinflussen von Sender und Empfänger verhindern. Bei Schritt 6 wird der interne Zähler der Zähleinheit
zurückgesetzt. Das wirkt sich jedoch nicht auf den angezeigten Wert aus, da ,,Latch" (Übernehmen) Low ist.
Solange kein Signal vom Empfänger kommt, und der Dezimalzähler auf Schritt 7 steht, legt das UND-Glied
High an den ,,Halt"-Eingang des Zählers, der jetzt anhält. Der Zähler der Zähleinheit läuft solange weiter.
Meldet der Empfänger das Empfangen des 44kHz-Impulses, ist die UND-Funktion nicht mehr erfüllt, und der
Dezimalzähler wird wieder freigegeben.
Sobald Ausgang 8 High wird, wird der Zählwert der Zähleinheit zum Anzeigenspeicher übernommen (Latch).
Der Wert erscheint jetzt auf den 7-Segmentan-zeigen und bleibt dort, bis er wieder überschrieben wird. Durch
die Auswahl der Taktfrequenz ist die Anzeige gleich in ,,cm" geeicht.
Der Ultraschall, der zum Teil am ersten Gegenstand vorbeifällt, würde von einem anderen Gegenstand
reflektiert werden und verspätet eintreffen. Der später eintreffende Schall könnte die nächste Messung
beeinflussen. Abhilfe schafft die monostabile Kippstufe, die bei Schritt 9 getriggert wird und für ca. 0,3 sek
durch High an Reset den Dezimalzähler auf Schritt 0 hält.
Sollte der Schall einmal nicht reflektiert werden, wird der Zähler beim Überlaufen der Zähleinheit
zurückgesetzt.