Projektbericht. Münzsortiermaschine mit Falschgelderkennung. - MC-Labor im Sommersemester 2008 -



Ähnliche Dokumente
Dokumentation IBIS Monitor

Umwandelung einer Physikalischen Größe in eine Elektrische

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

ecaros2 - Accountmanager

Simulation LIF5000. Abbildung 1

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

easyident Türöffner easyident Türöffner Art. Nr. FS-0007 FS Fertigungsservice

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Nutzung von GiS BasePac 8 im Netzwerk

10.0 Quick Start mit AT89LP2052 Elliptecmotor Kit

AutoCAD Dienstprogramm zur Lizenzübertragung

Aufbau und Bestückung der UHU-Servocontrollerplatine

Erstellen von x-y-diagrammen in OpenOffice.calc

EasyWk DAS Schwimmwettkampfprogramm

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Datensicherung. Beschreibung der Datensicherung

1. Theorie: Kondensator:

Stammdatenanlage über den Einrichtungsassistenten

9 Multiplexer und Code-Umsetzer

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

Anleitung über den Umgang mit Schildern

3.14 Die Programmieroberfläche Programmierung

Versuch 3. Frequenzgang eines Verstärkers

Primzahlen und RSA-Verschlüsselung

Viele Bilder auf der FA-Homepage

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

Elektrische Logigsystem mit Rückführung

RS-Flip Flop, D-Flip Flop, J-K-Flip Flop, Zählschaltungen

Was unterscheidet Microcontroller von einem PC ( Laptop ) oder einem Handy

Anleitung. Lesezugriff auf die App CHARLY Termine unter Android Stand:

Dokument Lob erstellen

1 Mathematische Grundlagen

Technical Note Nr. 101

CNC-Fräse für die Schule BLL im Schuljahr 2008/2009

Ablaufsteuerung Sequenzer, als Schaltstufen für den Amateurfunk.

Anwahlprogramm. zur. Modem-Schnittstelle TH004

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

In der Combobox der Art der Übermittlung (steht derzeit auf 0 für keine Definition), können Sie folgende Einstellungen vornehmen:

Professionelle Seminare im Bereich MS-Office

Access [basics] Rechnen in Berichten. Beispieldatenbank. Datensatzweise berechnen. Berechnung im Textfeld. Reporting in Berichten Rechnen in Berichten

Projekt 2HEA 2005/06 Formelzettel Elektrotechnik

Wie Sie mit Mastern arbeiten

10. Elektrische Logiksysteme mit

Mind Mapping am PC. für Präsentationen, Vorträge, Selbstmanagement. von Isolde Kommer, Helmut Reinke. 1. Auflage. Hanser München 1999

1. Die Maße für ihren Vorbaurollladen müssen von außen genommen werden.

Datenbanken Kapitel 2

Arbeiten mit UMLed und Delphi

Grundlagen der Theoretischen Informatik, SoSe 2008

Konfiguration der Messkanäle. Konfiguration der Zeitachse. Abb. 3: Konfigurationsmenü des Sensoreingangs A. Abb. 4: Messparameter Konfigurationsmenü

Hilfedatei der Oden$-Börse Stand Juni 2014

Verfasser: M. Krokowski, R. Dietrich Einzelteilzeichnung CATIA-Praktikum. Ableitung einer. Einzelteilzeichnung. mit CATIA P2 V5 R11

2. Im Admin Bereich drücken Sie bitte auf den roten Button Webseite bearbeiten, sodass Sie in den Bearbeitungsbereich Ihrer Homepage gelangen.

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Technical Note 0201 Gateway

Zugriff auf die Modul-EEPROMs

Erweiterungen Webportal

Enigmail Konfiguration

Informationen zum neuen Studmail häufige Fragen

1 topologisches Sortieren

Microsoft Access 2010 Navigationsformular (Musterlösung)

Terminabgleich mit Mobiltelefonen

104 WebUntis -Dokumentation

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

2. Im Admin Bereich drücken Sie bitte auf den roten Button Webseite bearbeiten, sodass Sie in den Bearbeitungsbereich Ihrer Homepage gelangen.

Eigenbau UKW-Retro-Radio 02

Anleitung TempCW 2011

Objektorientierte Programmierung

Installationsanleitung für das KKL bzw. AGV4000 Interface

Barcodedatei importieren

Inbetriebnahme einer Fritzbox-Fon an einem DSLmobil Anschluss Konfiguration einer PPPOE-Einwahl (DSLmobil per Funk)

Stepperfocuser 2.0 mit Bootloader

Satzhilfen Publisher Seite Einrichten

Internationales Altkatholisches Laienforum

Programme im Griff Was bringt Ihnen dieses Kapitel?

Tag 2 Eingabe und Interrupts

Aufgaben Leiten Sie die Formeln (9) und (10) her! Vorbetrachtungen. Der High-Fall

Elektrischer Widerstand

Rückmeldungen werden zur Steuerung benötigt. Auf Grund einer Meldung erfolgt eine Reaktion.

Anbau- und Bedienungsanleitung

Info zum Zusammenhang von Auflösung und Genauigkeit

27. Oktober 2015 / Vertriebsteam (jz) - support@engadin.com - Tel. +41 (0) Anleitung: Optimiertes TBooking

Rohstoffanalyse - COT Daten - Gold, Fleischmärkte, Orangensaft, Crude Oil, US Zinsen, S&P500 - KW 07/2009

PTV VISWALK TIPPS UND TRICKS PTV VISWALK TIPPS UND TRICKS: VERWENDUNG DICHTEBASIERTER TEILROUTEN

Anwendungshinweise zur Anwendung der Soziometrie

Informationsblatt Induktionsbeweis

Technische Informatik Basispraktikum Sommersemester 2001

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Bekannte Effekte bei Soft- und Hardware der ESTEC Datenlogger sowie der PC Auswertesoftware

Fallbeispiel: Eintragen einer Behandlung

Sensorkit X36. KY-001 Temperatur Sensor Modul. KY-002 Erschütterungs-Schalter Modul. KY-003 Hall Magnetfeld-Sensor Modul. KY-004 Taster-Modul

IRF2000 Application Note Lösung von IP-Adresskonflikten bei zwei identischen Netzwerken

18. Magnetismus in Materie

iphone- und ipad-praxis: Kalender optimal synchronisieren

Übersicht und Dokumentation der Reset- Funktionen der IO CONNECT

1 Vom Problem zum Programm

Transkript:

Projektbericht Münzsortiermaschine mit Falschgelderkennung - MC-Labor im Sommersemester 2008 - Teilnehmer: Orhun Askin Jonas Dörr Denis Engelhardt Hermann Gebert Marios Tsakiris Abdulbaki Uzun Di Wang Boliang Zhang Xumin Zhang Betreuer: Dr. René Straßnick 15. September 2008

Inhaltsverzeichnis Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 4 2 Mechanik 5 2.1 Münztrennung................................. 5 2.2 Sensorschiene.................................. 6 2.3 Sortierarm.................................... 6 3 Das Hauptprogramm (main) 8 3.1 Grundsätzlicher Algorithmus......................... 8 3.2 Polling von Port D............................... 10 4 Der induktive Sensor 12 4.1 Einleitung.................................... 12 4.2 Aufbau und Funktionsprinzip eines induktiven Sensors........... 12 4.3 Der Contrinex DW-AS-613-M12....................... 13 4.4 Variante mit Interrupts............................ 16 5 Lichtschranken 17 5.1 Einleitung.................................... 17 5.2 Funktionsaufbau................................ 17 5.3 Elektronik.................................... 18 5.4 Softwaretechnische Realisierung........................ 19 5.4.1 Interruptprogrammierung über TPU-Kanäle............. 19 5.4.2 Zeitmessung über TPU-Kanäle mit ITC............... 20 5.4.3 Polling auf PORT E.......................... 21 6 Farbsensor 23 6.1 Auswahl..................................... 23 6.2 Hardware.................................... 24 6.2.1 Farbsensor - Breakout-Board..................... 24 6.2.2 Levelconverter-Board.......................... 24 6.3 Software..................................... 26 6.3.1 I 2 C Interface.............................. 26 6.3.2 Debugging................................ 27 6.3.3 Auswertung............................... 27 6.4 Résumé..................................... 28 7 Visualisierung 30 7.1 Einleitung.................................... 30 7.2 Schnittstellen.................................. 30 7.3 Die Benutzeroberfläche............................. 31 8 Kommunikationsfunktionen 33 8.1 Grundlegende Kommunikation........................ 33 8.1.1 SCI - Serial Communications Interface................ 33 8.1.2 Get & Put............................... 35 2

Abbildungsverzeichnis Tabellenverzeichnis 8.2 Erweiterte Kommunikation.......................... 36 9 Der Servo 38 9.1 Der Servomotor................................. 38 9.2 Anschlussbelegung............................... 38 9.3 Ansteuerung.................................. 39 Abbildungsverzeichnis 1 Münztrenner.................................. 6 2 Sortierarm.................................... 7 3 Querschnitt eines induktiven Sensors [5]................... 12 4 Contrinex DW-AS-613-M12 [6]........................ 13 5 Anschlussschema................................ 14 6 Schaltung um Pegel anzupassen........................ 15 7 Eingangs- und Ausgangsspannung...................... 16 8 Prinzipieller Aufbau der Lichtschranke.................... 17 9 Anordnung der Sensoren auf der Schiene................... 18 10 Testschaltung.................................. 19 11 Testschaltung erweitert für 12 Sensoren mit HCT14 Bausteinen...... 20 12 Breakout Board des Farbsensors ADJD-S371 (Schaltplan)......... 24 13 Breakout Board des Farbsensors ADJD-S371 (Board)............ 24 14 Breakout Board des Level-Converters LTC4300A (Schaltplan)....... 25 15 Breakout Board des Level-Converters LTC4300A (Board)......... 25 16 Ausschnitt aus der Kommunikation zwischen Farbsensor und Mikrocontroller...................................... 27 17 Die Benutzeroberfläche............................. 31 18 Servomotor................................... 38 19 Servo-Steckerbelegung............................. 39 20 Ein pulsweitenmoduliertes Signal....................... 40 Tabellenverzeichnis 1 Zuordnung der Münzen zu den Boxen.................... 10 2 Eigenschaften des Contrinex DW-AS-613-M12................ 14 3 Unterbrechungssequenzen........................... 18 4 Auswahl der verfügbaren Sensoren...................... 23 5 VISIO-Funktionsaufrufe............................ 30 6 Benötigte Register für die Konfiguration der QSM/SCI........... 33 7 Aufteilung des QILR Registers........................ 34 8 Benötigte Register für die Kommunikation.................. 35 9 Verfügbare Kommunikationsfunktionen.................... 37 3

1 EINLEITUNG 1 Einleitung Am Anfang des Semesters wurden verschiedene Projektvorschläge gesammelt. Unter anderem wurde vorgeschlagen eine Rubikwürfel-Lösemaschine zu bauen. Diese konnte sich jedoch aufgrund ihres hohen mechanischen Anteils und dem damit verbundenen Risiko nicht durchsetzen. Wir einigten uns schließlich auf den Bau einer Sortiermaschine. Diese Maschine sollte Euromünzen, die auf einer Metallschiene herabrollen, elektronisch erkennen und in entsprechende Behälter einsortieren können. Darüber hinaus sollte sie über eine Falschgelderkennung und über eine Schnittstelle zum PC verfügen, um den aktuellen Gesamtwert ausgeben zu können. In den darauffolgenden Terminen konkretisierten wir unser Projekt und teilten entsprechend die Gruppen ein. Wichtig war uns von Anfang an eine vollautomatische Sortierung, d. h. eine Ladung Münzen wird in die Maschine geschüttet und nach möglichst kurzer Zeit sollten diese in verschiedene Behälter einsortiert sein. Die Sortiermaschine lässt sich in vier Komponenten unterteilen, die erstmal weitgehend unabhängig voneinander entwickelt werden konnten: 1. Münztrenner 2. Münzerkennung 3. Münz-Zuordnung 4. Visualisierung Münztrenner und -Zuordnung sind größtenteils mechanisch gelöst. Die Visualiserung erfolgt über eine Schnittstelle zum PC. Es wurde eine.net-anwendnung entwickelt, die die aktuell vorbeirollende Münze anzeigt und das Geld zählt. Für die eindeutige Münzerkennung war eine Kombination aus folgenden drei Sensortypen vorgesehen: 1. Lichtschranken 2. Induktiver Sensor 3. Farbsensor Die Probleme, die dabei auftraten, werden in den entsprechenden Kapiteln erläutert. Auch wenn die Zuständigkeiten im Laufe des Projektes teilweise ineinander übergingen, teilten wir uns am Projektanfang in folgende Gruppen ein: Gruppe Jonas Marios, Xumin Denis, Orhun Di, Boliang Hermann, Abdulbaki Zuständig Aufbau / Mechanik Lichtschranken Induktiver Sensor, Hauptprogramm Servo Farbsensor, Visualisierung 4

2 MECHANIK 2 Mechanik Verantwortlich: Jonas 2.1 Münztrennung Wir entschieden uns während der Konzeption nicht nur einzelne Münzen nach Farbe und Form zu sortieren, sondern wollten auch die Trennung eines Münzhaufens in einen sortierbaren Zustand der Maschine überlassen. Dazu gab es eine Vielzahl von möglichen Vorgehensweisen, jedoch wurden alle Ideen die auf einem Trichter- oder Rüttelprinzip beruhten schnell verworfen, weil sie einzelne Münzen nicht in einem bestimmten zeitlichen Abstand selektieren können und die Gefahr der Verklemmung zu groß ist. Es wurde nach bekannten industriellen Lösungen gesucht und so wurde die Tay Chian TC-240 1 zur Grundlage unserer Münztrennung. Das Prinzip beruht auf einer schräg gelagerten, rotierenden Kunststoffscheibe, die bei unserer Ausführung mit einer Bohrung etwas großer als eine 2-Euro-Münze versehen wurde. Der Münzhaufen lagert, durch einen gebogenen Schirm gehalten, am unteren Ende der Scheibe. Im Idealfall fällt mit jeder Umdrehung eine Münze in die Bohrung und wird nach oben rotiert, wo sie herausfallen und weiterverarbeitet werden kann. Dieser Mechanismus brachte im Eigenbau einige Probleme mit sich. Die meisten Sorgen bereitete der Antrieb, der natürlich ein hohes Drehmoment und eine geringe Drehzahl aufweisen sollte. Der verwendete Getriebemotor Faulhaber 22E kam mit einer Untersetzung von 19:1 nicht in die gewünschten Größenordnungen. Abhilfe schaffte ein selbstgebautes, nachgeschaltetes Schneckengetriebe (10:1) mit fischertechnik-komponenten. Die Scheibe drehte sich nun langsamer und kraftvoller, aber insgesamt auch unruhiger. Ein weiteres Problem verursachten kleine Münzen, da sie oft zu zweit in die Bohrung fielen und die Erkennung somit unmöglich machten. Die Bohrung wurde von oben konisch gefräst, bis die obere der beiden Münzen ab einem bestimmten Drehwinkel wieder zurück zum Sammelschirm fiel. Die gesamte Konstruktion wurde aus 2mm und 4mm dicken Plexiglasscheiben gefertigt und wenn nötig unter einer Gasflamme gebogen. Lösbare Verbindungen wurden mit Maschinenschrauben verschraubt, alle anderen Verbindungen mit Epoxyd-Klebeharz geklebt. Der Übergang zur Sensorschiene wurde durch eine kleine Freifallstrecke und einen auf die Schiene gesetzten Schlitztricher, ebenfalls aus Plexiglas gefertigt, realisiert. Eine Kopplung des Motors an den Microcontroller erachteten wir als überflüssig, er wurde aus einer regelbaren Gleichspannungsquelle gespeist. 1 http://www.youtube.com/watch?v=d8ifl0arfk0 5

2.2 Sensorschiene 2 MECHANIK Abbildung 1: Münztrenner 2.2 Sensorschiene Eine Münze ist am einfachsten zu erkennen, wenn sie gleichmäßig geradlinig rollt. Dazu brauchten wir eine Schiene als Messstrecke, die alle Münzen störungsfrei rollen ließ. Die erste Lösung, eine 1,20m lange Holzlatte mit Längsfräsung, zeigte sich als zu störanfällig und unpräzise. Also wurden zwei Aluminium-L-Profile gegeneinander verschraubt, was mehrere Vorteile brachte. Hohe Laufruhe, Tageslichtunabhängigkeit bedingt durch die Höhe des Rollspaltes und die Breite des Rollspaltes ließ sich auch im Nachhinein problemlos variieren. Die Schiene wurde mit verschiedenen Bohrungen versehen, an die die Sensoren geschraubt oder geklebt und verkabelt wurden. 2.3 Sortierarm Da die Sensoren am oberen Ende der Sensorschiene befestigt waren, blieb eine relativ große Restlaufstrecke, in der die Einsortierung in die Becher vorbereitet werden konnte. An das Ende der Sensorschiene wurde eine weitere, ca. 30cm lange Schiene befestigt. Sie bestand aus einem Kunststoff-U-Profil und einem Kunststoff-T-Profil, die zur Stabilisierung gegeneinander verklebt wurden. Die Verbindung erfolgte durch einen Aluminiumwinkel und ein Schiffsruder aus dem Modellbaubereich, welches schon eine Vorrichtung für die Servoansteuerung vorgesehen hatte. Dadurch ließ sich schnell eine Gewindestan- 6

2.3 Sortierarm 2 MECHANIK ge zurechtbiegen und die Verbindung zum Servo über ein Gewindehaken herstellen. Die gesamte Konstruktion war sehr stabil und so konnte eine hohe Wiederholgenauigkeit erreicht werden und jeder Becher sicher angefahren werden. Abbildung 2: Sortierarm 7

3 DAS HAUPTPROGRAMM (MAIN) 3 Das Hauptprogramm (main) Verantwortlich: Denis, Orhun 3.1 Grundsätzlicher Algorithmus Das Hauptprogramm befindet sich in der Datei coin sorter main.c. Unsere Sortiermaschine ist in der Lage mit zwei Münzen auf der Schiene umzugehen. Dies gilt aber nur unter der Bedingung, dass die erste Münze bereits den letzten Lichtschranken-Sensor passiert hat und das entsprechende Servo-Kommando schon abgeschickt wurde. Das Programm funktioniert nur dann korrekt, wenn die Sensoren entlang der Schiene wie folgt angeordnet sind: 1. Lichtschranken 0 bis 7 2. Induktiver Sensor 3. Lichtschranke 8 Der grundsätzliche Programmaufbau sieht in Pseudo-C-Code folgendermaßen aus: 1 int main ( ) { 2 // I n i t i a l i s i e r e Ports und Variablen 3 4 while ( 1 ) { 5 // Hauptprogrammschleife 6 7 // Überwache PORTE und PORTD a u f Änderungen 8 i f (Änderung PORTE) { 9 // Welche Lichtschranke ( Pin ) i s t nun a k t i v? 10 i f ( L i c h t s c h r a n k e 0 ) 11 c o i n v a l u e = 1 ; // Mindestens 1 Cent Münze erkannt 12 i f ( L i c h t s c h r a n k e 1 ) 13 c o i n v a l u e = 2 ; // Mindestens 2 Cent Münze erkannt 14 15... 16 17 i f ( L i c h t s c h r a n k e 7 ) 18 c o i n v a l u e = 2 00; // Zwei Euro Münze s i c h e r erkannt! 19 } 20 21 i f (Änderung PORTD) { 22 i f ( L i c h t s c h r a n k e 8 ) 23 go = TRUE; // Letzte Lichtschranke p a s s i e r t. S i g n a l i s i e r e, dass d i e Servos j e t z t a n g e s t e u e r t werden können 24 i f ( i n d u k t i v e r S e n s o r ) 8

3.1 Grundsätzlicher Algorithmus 3 DAS HAUPTPROGRAMM (MAIN) 25 m e t a l c o i n = TRUE; // Es handelt s i c h um e i n e Metallmünze 26 } 27 28 i f ( go ) { 29 i f ( m e t a l c o i n ) 30 c o i n v a l u e = 0 ; 31 32 switch ( c o i n v a l u e ) { 33 case 0 : 34 VISIO DEBUG( F a l s c h g e l d ) ; 35 s e l e c t b o x ( 0 ) ; 36 break ; 37 case 1 : 38 VISIO DEBUG( 1 Cent ) ; 39 s e l e c t b o x ( 1 ) ; 40 break ; 41 42... 43 44 case 200: 45 VISIO DEBUG( 2 Euro ) ; 46 s e l e c t b o x ( 8 ) ; 47 break ; 48 } 49 50 // I n f o r m i e r e PC Anwendung über a k t u e l l e Münze 51 52 // Variablen zurücksetzen 53 go = FALSE; 54 m e t a l c o i n = FALSE; 55 56 // B e r e i t f ü r nächste Münze 57 } 58 } 59 } Der Programmablauf für die Bearbeitung einer Münze lässt sich grob in zwei Phasen einteilen: 1. Abfragephase (Zeilen 7 bis 26) 2. Auswertephase (Zeilen 28 bis 56) Die meiste Zeit über befindet sich das Programm in der Abfragephase. Die beiden Ports werden durch Polling kontinuierlich auf eine Änderung ihrer Pins überprüft (8 und 21). Die Lichtschranken sind an der Schiene so angeordnet, dass erst die zuletzt ausgelöste Lichtschranke den Durchmesser der Münze wiedergibt. Wann aber weiß das Programm, dass es in die Auswertephase übergehen soll? Um dies zu erkennen, verwenden wir eine zusätzliche Lichtschranke, die unabhängig vom Durchmesser auf jede Münze reagiert 9

3.2 Polling von Port D 3 DAS HAUPTPROGRAMM (MAIN) und die hinter allen anderen Sensoren angebracht ist. Passiert eine Münze diese letzte Lichtschranke, wird die Variable go auf TRUE gesetzt (23), womit signalisiert wird, dass das Programm in die Auswertephase übergehen soll. Genau genommen wurde der Münzwert bereits in der Abfragephase ermittelt. Er ist in der Variable coin_value als Angabe in Cent hinterlegt. Es muss nur noch ermittelt werden, ob es sich um echtes Geld oder um Falschgeld handelt. Dazu wird die boolesche Variable metal_coin (29) ausgewertet, die vom induktiven Sensor in der Abfragephase gesetzt wurde (25) oder nicht. Ist metal_coin gleich FALSE handelt es sich definitiv um Falschgeld und coin_value wird auf 0 gesetzt (30). Andernfalls wird der Wert von coin_value beibehalten. Anschließend wird in einem switch-block (32 bis 48) anhand von coin_value die entsprechende Box angesteuert. Es ergibt sich die in Tabelle 1 dargestellte Zuordnung. coin value Münze Box 0 Falschgeld 0 1 1 Cent 1 2 2 Cent 2 5 5 Cent 3 10 10 Cent 4 20 20 Cent 5 50 50 Cent 6 100 1 Euro 7 200 2 Euro 8 Tabelle 1: Zuordnung der Münzen zu den Boxen Am Ende der Auswertephase werden die Variablen go und metal_coin wieder auf FALSE gesetzt (53 und 54) und das Programm gelangt dadurch wieder in die Abfragephase und wartet auf eine neue Münze. Die Funktionsaufrufe, die mit VISIO_ (34, 38 und 45) beginnen, stellen die Schnittstelle zu der PC-Anwendung dar. Für nähere Informationen zu der Visualisierung sei an dieser Stelle auf das entsprechende Kapitel verwiesen. 3.2 Polling von Port D Im folgenden wird detaillierter erklärt wie das Polling von Port D, an dem die letzte Lichtschranke und der induktive Sensor angeschlossen sind, funktioniert. Für das Pollen der Lichtschranken an Port E sei auf das entsprechende Kapitel verwiesen. Wie dem Pseudo-Code leicht zu entnehmen ist, haben wir auf die Abfrage der Sensoren via Interrupts komplett verzichtet. Wir verwenden stattdessen die einfachere Variante des 10

3.2 Polling von Port D 3 DAS HAUPTPROGRAMM (MAIN) Pollings. Da wir keine weiteren, nebenläufigen Prozesse oder rechenintensive Operationen haben ist diese Variante in diesem Fall sicherlich gerechtfertigt. Der induktive Sensor hängt an Pin 5 von Port D, welches über die Adresse $FFFC15 angesprochen wird. In der Initialisierungsphase wird das Data Direction Register auf lesend gesetzt, d. h. das Register dient als Eingabeport. Um dieses Register kontinuierlich auf Änderungen zu überprüfen, wird folgender Code verwendet: 1 #define PORTD ( v o l a t i l e unsigned char ) 0x00FFFC15 2 #define L l a s t 16 // Bitmasken f ü r Pins 3 #define ind Sens 32 4 5 unsigned char portd1, portd2 ; // temporäre Variablen f ü r das P o l l i n g 6 7 while ( 1 ) { 8 //... 9 portd2 = PORTD; 10 11 i f ( portd1!= portd2 ) { 12 i f ( portd1 & L l a s t ) // l e t z t e Lichtschranke 13 go = TRUE; 14 i f ( portd1 & ind Sens ) // i n d u k t i v e r Sensor 15 m e t a l c o i n = TRUE; 16 } 17 18 portd2 = portd1 ; 19 //... 20 } Gibt der induktive Sensor für den Zeitraum in dem die Metallmünze vorbei rollt ein High- Signal aus, wird die Variable metal_coin auf TRUE gesetzt (15). In der Auswertephase wird dann anhand von metal_coin entschieden, ob es sich um Falschgeld oder um echtes Geld handelt. An Pin 4 ist die letzte Lichtschranke angeschlossen. Wie oben beschrieben dient diese nicht zur Bestimmung des Durchmessers einer Münze, sondern signalisiert lediglich, dass nun mit der Auswertephase begonnen werden kann. Dazu wird die globale Variable go auf TRUE gesetzt (13). Dies veranlasst dann das Programm in die Auswertephase überzugehen. 11

4 DER INDUKTIVE SENSOR 4 Der induktive Sensor Verantwortlich: Denis, Orhun 4.1 Einleitung Für die Falschgelderkennung verwenden wir einen induktiven Sensor. Induktive Sensoren 2 arbeiten nach dem Induktionsgesetz und reagieren daher berührunglos nur auf metallische Objekte. Der Einfachheit halber definieren wir als Falschgeld jede nichtmetallische Münze (z. B. einen Einkaufswagenchip aus Plastik). Dies gilt zwar nicht unbedingt für den Umkehrschluss, da wir aber kein vermarktungsfähiges Produkt entwickeln wollten, ist diese Einschränkung tolerierbar. Wir verwendeten den Sensor Contrinex DW-AS-613-M12 [4], der bei Conrad für knapp 25 Euro erhältlich ist. Dieser Sensor hat einen binären Ausgang ( Objekt erkannt/nicht erkannt ). Er signalisiert also nur, ob sich ein metallischer Gegenstand in seinem aktiven Bereich befindet oder nicht. Ursprünglich wollten wir einen induktiven Sensor mit analogem Ausgangssignal verwenden, um diesen auch noch zusätzlich für eine eindeutige Münzerkennung einzusetzen. Wir mussten aber enttäuscht feststellen, das analoge Ausführungen kaum erhältlich und sehr teuer sind. Bei Conrad kostet ein solcher Sensor mindestens 80 Euro. Dies hätte unser Budget gesprengt. 4.2 Aufbau und Funktionsprinzip eines induktiven Sensors Abbildung 3 zeigt den grundsätzlichen Aufbau eines induktiven Sensors mit einem digitalen Ausgangssignal. Abbildung 3: Querschnitt eines induktiven Sensors [5] Herz eines induktiven Sensors ist der Ferritkern, in dem sich eine Spule befindet. Zusammen mit einem parallel geschalteten Kondensator erhält man einen LC-Schwingkreis. 2 Auch induktiver Näherungsschalter genannt. 12

4.3 Der Contrinex DW-AS-613-M12 4 DER INDUKTIVE SENSOR Dieser wird von einem Oszillator zum Schwingen angeregt. Die Spule erzeugt ein elektromagnetisches Feld, das nach vorne zur aktiven Fläche gerichtet ist und dort austritt. Wird nun ein metallisches Objekt in diese Zone geführt, entsteht innerhalb dieses Objekts eine Induktionsspannung, welches dem Schwingkreis Energie entzieht. Das Magnetfeld wird bedämpft, wodurch die Spule eine Impedanzänderung erfährt und die Oszillatorspannung kleiner wird. Unterschreitet die Oszillatorspannung einen gewissen Wert, spricht der nachgeschaltete Komparator an und gibt über die Endstufe ein aktives Ausgangssignal aus. Das Objekt ist erkannt. 4.3 Der Contrinex DW-AS-613-M12 Im Rahmen unserer Münzsortiermaschine haben wir den induktiven Sensor DW-AS-613- M12 der Firma Contrinex verwendet (siehe Abbildung 4). Abbildung 4: Contrinex DW-AS-613-M12 [6] Der Sensor befindet sich in einem zylindrischen Gehäuse aus verchromtem Messing. Er ist etwa 5cm lang Die zwei Schrauben dienen zur Befestigung. Oberhalb des blauen Bereiches befindet sich die aktive Zone. Die vier Anschluss-Pins sind im Sensor versenkt und befinden sich unterhalb der Leuchtdioden. 13

4.3 Der Contrinex DW-AS-613-M12 4 DER INDUKTIVE SENSOR Dem Datenblatt des Sensors [4] können unter anderem die in Tabelle 2 aufgeführten Eigenschaften entnommen werden. Bemessungsschaltabstand 4 mm Hysterese max. 10% Wiederholgenauigkeit 0,2 mm Betriebsspannungsbereich 10.. 30 VDC Ausgangsstrom max. 200 ma Spannungsabfall an Ausgängen max. 2,0 V bei 200 ma Schaltfrequenz max. 2 khz Oszillatorfrequenz 270 khz Bereitschaftsverzögerung max. 10 ms Umgebungstemperaturbereich -25.. +70 C Kurzschluss-, Verpolungs-, Induktionsschutz eingebaut Tabelle 2: Eigenschaften des Contrinex DW-AS-613-M12 Mit diesem Sensor können also metallische Objekte bis zu einem Abstand von 4 mm sicher erkannt werden. Wir haben den Sensor an der Schiene so positioniert, dass die gegenüberliegende metallische Münzschiene außerhalb des Detektionsbereichs liegt und somit nicht als Metall erkannt wird. Als sehr praktisch hat sich die eingebaute Hysterese erwiesen. Die Hysterese ist die Differenz zwischen dem Einschaltpunkt bei Annäherung eines metallischen Objekts und dem Abschaltpunkt bei dessen Entfernung [7]. Dadurch wird ein Flattern des Ausganges verhindert und eine zusätzliche Entprellung überflüssig. Abbildung 5 aus dem Datenblatt [4] zeigt das Anschlussschema des Sensors. Abbildung 5: Anschlussschema 14

4.3 Der Contrinex DW-AS-613-M12 4 DER INDUKTIVE SENSOR Befindet sich ein metallisches Objekt in der aktiven Zone des Sensors, fällt die Betriebsspannung U B über dem Lastwiderstand R L ab. Andernfalls wird die Masse auf den Ausgang durchgeschaltet. Wir haben für den Sensor eine Betriebsspannung von 10 V vorgesehen. Für den Port- Eingang des M68332 wird ein High-Pegel von 5 V vorgeschrieben. Die Schaltung in Abbildung 6 muss daher zwischen den Sensor und den Mikrocontroller geschaltet werden. Abbildung 6: Schaltung um Pegel anzupassen Die Verbindung zwischen dem Sensor und der Platine erfolgt über ein selbst gefertigtes, 8-adriges Flachbandkabel, von dem nur jede zweite Ader eine Funktion (= eine elektrische Verbindung) hat. Der Grund dafür ist, dass uns nur ein 8-poliger Pfostenstecker (JP1) zur Verfügung stand, der wie im Schaltplan in Abbildung 6 gezeigt angeschlossen ist. Wie der Beschaltung des Sensors zu entnehmen ist, müssen die Pins 1 und 5 zusammen geschaltet werden. Über dem Widerstand R L fallen 10 V ab. Die gleichgroßen Widerstände R1 und R2 bilden einen Spannungsteiler, der die Spannung halbiert, so dass an Pin 1 von JP2 genau die benötigten 5 V abfallen. Der Sensor wird durch Polling abgefragt (siehe Das Hauptprogramm (main), Kapitel 3). 15

4.4 Variante mit Interrupts 4 DER INDUKTIVE SENSOR 4.4 Variante mit Interrupts In der ursprünglichen Variante haben wir zusätzlich einen Inverter zwischen den Ausgang des Spannungsteilers und JP2 geschaltet. Es hätte sich dann der in Abbildung 7 dargestellte Zusammenhang zwischen Eingangs- und Ausgangsspannung ergeben. Abbildung 7: Eingangs- und Ausgangsspannung Dies war notwendig, da wir ursprünglich den induktiven Sensor per Interrupt auslesen wollten. Der Interrupt des M68332 ist low-aktiv, d. h. ein Interrupt wird mit der fallenden Flanke ausgelöst. Aufgrund der Tatsache, dass wir die Lichtschranken per Polling auslesen mussten und eine der Lichtschranken direkt mit dem AVEC-Pin verbunden war, waren die Interrupts deaktiviert. Deshalb mussten wir leider auf die effizientere Methode der Interrupt-Verarbeitung verzichten (was aber in unserer Anwendung keinen Unterschied gemacht hat). Der Vollständigkeit halber sei hier nochmal der Code für die Einbindung des induktiven Sensors via Interrupt-Behandlungsroutine dargestellt: INT ANDI.B #%11110111,PFPAR IRQ_PIN sperren JSR _ISR_inductive_sensor In high-level C-Routine springen ORI.B #%00001000,PFPAR Freigabe von IRQ_PIN 3 RTE In der Datei coin sorter.c befindet sich dann die eigentliche Funktionalität der Interrupt- Behandlungsroutine, die für den Fall des induktiven Sensors ziemlich simpel ist: 1 void I S R i n d u c t i v e s e n s o r ( void ) { 2 int j ; 3 m e t a l c o i n = TRUE; 4 go = TRUE; 5 for ( j = 0 ; j < delay ; j++) { } ; / Verzögerung / 6 } 16

5 LICHTSCHRANKEN 5 Lichtschranken Verantwortlich: Marios, Xumin 5.1 Einleitung Für die Detektion passierender Münzen und für die Ermittlung der verschiedenen Münzenarten wurden Miniaturlichtschranken eingesetzt. Das Funktionsprinzip einer Lichtschranke besteht darin, die durch ein Objekt hervorgerufene Unterbrechung des Lichtweges zwischen Emitter und Detektor des Sensors zu registrieren und in elektrische Schaltsignale umzuwandeln, die zur weiteren Verarbeitung geeignet sind. Im einfachsten Fall wird der Emitter durch eine Leuchtdiode und der Detektor durch einen Fototransistor realisiert. Der Fototransistor schaltet solange durch bis die Lichtstrecke zwischen ihm und der Leuchtdiode unterbrochen wird. Die dabei sich verändernde Ausgangsspannung wird zwischen Transistoremitter und Masse abgegriffen. In Abbildung 8 wird der prinzipielle Aufbau der Lichtschranke dargestellt. Abbildung 8: Prinzipieller Aufbau der Lichtschranke 5.2 Funktionsaufbau Für die Realisierung des Mechanismus wurden auf der von den Münzen zu passierende Metallschiene acht Lichtschranken (jeweils eine pro Münzentyp) auf verschiedene Höhen montiert, so dass die Lichtstrecken senkrecht durch die Rollstrecke verlaufen. Die Lichtschranken wurden bezüglich der verschiedenen Durchmesser der einzelnen Münzentypen, in Rollrichtung mit aufsteigender Größe angeordnet (siehe Abbildung 9). Beim Passieren der Münzen durch die Schiene werden dadurch auf Grund ihrer verschiedenen Durchmesser unterschiedliche Unterbrechungssequenzen durch die Sensoren ausgelöst (siehe Tabelle 3). Der letzte unterbrochene Sensor indiziert die Münzenart. Eine weitere Lichtschranke (S 08) wurde an niedrigster Stelle am Ende der Schiene montiert um eine Unterbrechungssequenz zu beenden und um den Start einer neuen Sequenz für eine neue Münze zu signalisieren. 17

5.3 Elektronik 5 LICHTSCHRANKEN Abbildung 9: Anordnung der Sensoren auf der Schiene (Sen- Münze (sortiert aufsteigend Unterbrechungssequenz nach Durchmesser) soren S 0 - S 7) 1 Cent S 0 2 Cent S 0 bis S 1 10 Cent S 0 bis S 2 5 Cent S 0 bis S 3 20 Cent S 0 bis S 4 1 Euro S 0 bis S 5 50 Cent S 0 bis S 6 2 Euro S 0 bis S 7 Tabelle 3: Unterbrechungssequenzen 5.3 Elektronik Eingesetzt wurden auf Grund des geringen Stückpreises von 1,55 Euro bei Conrad Electronics, die CNY-37 Einweg-Miniatur-Gabellichtschranken von VISHAY TELE- FUNKEN [17]. Für die Anbindung der Sensoren an den Mikrocontoller musste die Testschaltung (siehe Abbildung 10) von uns erweitert werden. Für die Erweiterung der Schaltung wurden die HCT14 -HEX Inverting Schmitttrigger- Bausteine [18] benutzt, um einerseits durch die Hystereseeigenschaft Prellungseffekte an den Sensorausgängen zu unterbinden und andererseits um die Ausgangssignale auf konstanten TTL bzw. CMOS-Logik Pegeln für die Eingangskanäle des Mikrocontroller 18

5.4 Softwaretechnische Realisierung 5 LICHTSCHRANKEN Abbildung 10: Testschaltung vorzubereiten. Für die erweiterte Schaltung (siehe Abbildung 11) wurde mit Hilfe von EAGLE eine kleine Platine mit 12 belegbaren Kanälen entworfen. 5.4 Softwaretechnische Realisierung Für die Auswertung der Sensordaten und für die Kommunikation zwischen Sensorik und dem Mikrocontroller wurden mehrere softwaretechnische Ansätze, abhängig von den für die Anbindung gewählten Kanälen des EVK-Entwicklungboards, implementiert. 5.4.1 Interruptprogrammierung über TPU-Kanäle In der ursprünglichen Variante erfolgte die Anbindung der Sensoren an den Mikrocontroller über das auf dem EVK-Entwicklungsboard zur Verfügung stehende TPU(Time Processing Unit)-Modul [19]. Das TPU-Modul verfügt bis zu 16 verschiedene Kanäle für Ein- und Ausgabe und bietet ausserdem die Möglichkeit der Ausnutzung von vordefinierten Funktionen wie DIO (Discrete Input-Output) und ITC(Input Capture/Output Transition). Weiterhin bietet es die Möglichkeit der flankengesteuerten Interruptprogrammierung (im Gegensatz zu den pegelgesteuerten IRQ (Interrupt Request)-Kanälen. In dieser Lösung wurde jeder Sensorausgang mit einem TPU-Kanal (TPU0-TPU8) verbunden. Die Kanal-Kontroll-Register (CHCRx) wurden konfiguriert um steigende Flanken zu detektieren (durch die invertierenden Schmitttrigger wird bei einer Lichtwegunterbrechung des Sensors das Signal am Ausgang invertiert und löst dadurch eine steigende Flanke aus). Für jeden Kanal wurde eine entsprechende Interruptbehandlungsroutine 19

5.4 Softwaretechnische Realisierung 5 LICHTSCHRANKEN Abbildung 11: Testschaltung erweitert für 12 Sensoren mit HCT14 Bausteinen. geschrieben, die einer übergeordneten C-Prozedur einen Parameter übergibt und am Ende einer Sensorsequenz die korrekte Münzart ermittelt. Der Vorteil dieses Lösungansatzes ist vor allem die Realisierung von Nebenläufigkeit, die allgemein in eingebetteten Echtzeitsystemen von wichtiger Bedeutung ist. Leider erwies sich dieser Ansatz aus nicht bekannten hardwaretechnischen Gründen als fehleranfällig (einige TPU-Kanäle konnten keine Flanken erkennen) und konnte somit für die finale Version nicht eingesetzt werden. 5.4.2 Zeitmessung über TPU-Kanäle mit ITC Eine weitere Lösung für die Bestimmung der Münzarten bzw. für die genauere Falschgelderkennung wurde unter Ausnutzung der ITC-Funktion des TPU-Moduls ansatzweise implementiert. Dabei wurde messtechnisch versucht die Rollzeiten verschiedener Münzen zwischen zwei Sensoren zu ermitteln. In Abhängigkeit der Schienenneigung und der verschiedenen Trägheitsmomente (abhängig von den Durchmessern) der Münzen sollten somit verschiedene Zeiten die Münzenart eindeutig bestimmen können. Diese Lösung konnte leider nicht für die finale Version rechtzeitig fertig implementiert und eingesetzt werden. 20

5.4 Softwaretechnische Realisierung 5 LICHTSCHRANKEN 5.4.3 Polling auf PORT E Für die finale Version wurde letztendlich die einfachere softwaretechnische Lösung mittels Polling realisiert. Die Anbindung der Sensorausgänge erfolgt in dieser Variante über die acht zu Verfügung stehende Kanäle von PORT E. Die Kanäle werden innerhalb einer Schleife im Main-Programm abgefragt. Der Programmfluß ist folgendem Quelltext zu entnehmen: 1 #define PORTE ( v o l a t i l e unsigned char ) 0x00FFFA11 2 / Memory mapping von PORTE / 3 l i c h t s c h r a n k e 2 = PORTE; 4 //... 5 int main ( ) { 6 //... 7 unsigned char l i c h t s c h r a n k e 1, l i c h t s c h r a n k e 2 ; 8 l i c h t s c h r a n k e 1 = PORTE; 9 unsigned char c o i n v a l u e = 0 ; 10 //... 11 while ( 1 ) { 12 i f ( l i c h t s c h r a n k e 1!= l i c h t s c h r a n k e 2 ) {/ P o l l i n g auf PORTE / 13 i f ( l i c h t s c h r a n k e 1 & L 1cent ) 14 c o i n v a l u e = 1 ; 15 i f ( l i c h t s c h r a n k e 1 & L 2cent ) 16 c o i n v a l u e = 2 ; 17 i f ( l i c h t s c h r a n k e 1 & L 5cent ) 18 c o i n v a l u e = 5 ; 19 i f ( l i c h t s c h r a n k e 1 & L 10cent ) 20 c o i n v a l u e = 1 0 ; 21 i f ( l i c h t s c h r a n k e 1 & L 20cent ) 22 c o i n v a l u e = 2 0 ; 23 i f ( l i c h t s c h r a n k e 1 & L 50cent ) 24 c o i n v a l u e = 5 0 ; 25 i f ( l i c h t s c h r a n k e 1 & L 1euro ) 26 c o i n v a l u e = 100; 27 i f ( l i c h t s c h r a n k e 1 & L 2euro ) 28 c o i n v a l u e = 200; 29 } 30 31 i f ( i n d s e n s 1!= i n d s e n s 2 ) { 32 i f ( i n d s e n s 1 & b i t 4 ) { 33 / l e t z t e Lichtschranke p a s s i e r t, Ende e i n e r Sensorsequenz / 34 go = TRUE; 35 } 36 //... 37 } 38 39 l i c h t s c h r a n k e 2 = l i c h t s c h r a n k e 1 ; 40 i n d s e n s 2 = i n d s e n s 1 ; 21

5.4 Softwaretechnische Realisierung 5 LICHTSCHRANKEN 41 42 i f ( go == TRUE) { 43 / Wert von c o i n v a l u e wird an s e r i e l l e S c h n i t t s t e l l e g e s c h r i e b e n und an das Servomodul w e i t e r g e l e i t e t / 44 } 45 } 46 } Die Kanalwerte von PORTE werden in der Variablen lichtschranke1 ausgelesen. In jeder Iteration wird der Wert von lichtschranke1 mit dem vorherigen Wert, gespeichert in der Variablen lichtschranke2, verglichen. Bei einer Veränderung der Kanalwerte wird der den Kanalwerten entsprechende Münzentyp (Einheit in Cent) in der Variablen coin_value gesetzt. Sobald die letzte Schranke passiert wird wird die Variable go auf TRUE gesetzt und der Wert von coin_value wird weitergeleitet an die serielle Schnittstelle und an das Servomodul. 22

6 FARBSENSOR 6 Farbsensor Verantwortlich: Hermann 6.1 Auswahl Bei der Auswahl des Farbsensors wurden folgende Kriterien beachtet Interface Sensorik Verfügbarkeit Preis In die nähere Auswahl sind die Sensoren aus Tabelle 4 gekommen. Firma Name Interface Verfügbarkeit Preis MAZeT GmbH MCS3 Analog (Strom) gering unbekannt TAOS TCS230 Digital (PWM) gut 8 EUR Avago ADJD-S371-999 Digital (I 2 C) USA US$ 10 Tabelle 4: Auswahl der verfügbaren Sensoren Die Nachteile der ersten beiden Sensoren liegen in der benötigten Zusatzbeschaltung. Der MCS3 von MAZeT liefert drei nach Farben getrennte Stromwerte, welche z.b. über einen Transimpedanzverstärker in Spannungen und danach über einen AD-Wandler digitalisiert werden müssten. Der TCS230 von TAOS liefert eine Frequenz proportional zur Lichtstärke des jeweiligen Farb-Kanals, hier müsste die Frequenz für jeden einzelnen Kanal seperat gemessen werden. Der ADJD-S371 [8] von Avago liefert alle Messwerte über ein digitales I 2 C-Interface und lässt sich über verschiedene Register weitreichend konfigurieren. Neben der Empfindlichkeit für jeden Kanal kann ein Offset eingestellt werden und es kann bestimmt werden, wieviele Werte integriert werden sollen. Die digitale Ausgabe der Daten hat eine Auflösung von 10 Bit. Der Sensor hat einen weiten Empfindlichkeitsbereich von 100 lux - 100.000 lux und eine integrierte LED, welche zur Reflexionsmessung unabdingbar ist. Auf Grund der minimal notwendigen Zusatzbeschaltung und der prinzipiell einfachen Ansteuerung [9] haben wir uns für den Sensor ADJD-S371 von Avago entschieden. Ein Sample des Chips wurde uns freundlicherweise von der Firma Avago Technologies zuer Verfügung gestellt. 23

6.2 Hardware 6 FARBSENSOR 6.2 Hardware 6.2.1 Farbsensor - Breakout-Board Der Sensor liegt als ein 3,9 x 4,5 x 1,8 mm großes 12 Pin Modul vor, welches den Sensor, einen Separator und die LED enthält. Ein Anbringen auf einer Lochrasterplatine erschien daher sehr ungeeignet und es wurde ein PCB entworfen, welches die komplette Sensorbeschaltung enthalten sollte. Abbildung 12: Breakout Board des Farbsensors ADJD-S371 (Schaltplan) Abbildung 13: Breakout Board des Farbsensors ADJD-S371 (Board) 6.2.2 Levelconverter-Board Da der Sensor einen Eingangsspannungsbereich von 2,5V - 3,6V hat und die IO-Pins nicht 5V-Tollerant sind, mussten die Pegel der Busleitungen angepasst werden. Die Spannungsversorgungen (DVDD & AVDD) wurden über einen linearen Spannungsregler (LP3990MF-2.8) [10] der Firma National Semiconductor realisiert, welcher aus den 24

6.2 Hardware 6 FARBSENSOR gegebenen 5V eine Ausgangsspannung von 2,8V generiert. Da es sich bei dem I 2 C Bus um einen bidirektionalen Bus handelt, konnte die Pegelanpassung nicht einfach mit Widerständen erfolgen. Wir entschieden uns für den LTC4300A - Hot Swappable 2-Wire Bus Buffer [11] der Firma Linear Technology, welcher die Bus-Leitungen SDA und SCL automatisch von 5V auf 3,3V bzw. von 3,3V auf 5V anpasst. Die 3,3V kommen von einem weiteren linearen Spannungsregler (LP3990MF-3.3) [10] der Firma National Semiconductor welcher auf dem Level-Converter-Board untergebracht wurde. Die zwei ungerouteten Leiterbahnen des Level-Converter-Boards (Abbildung 15) wurden durch Drahtbrücken realisiert um ein doppelseitiges Platinenlayout zu verhindern. Abbildung 14: Breakout Board des Level-Converters LTC4300A (Schaltplan) Abbildung 15: Breakout Board des Level-Converters LTC4300A (Board) 25

6.3 Software 6 FARBSENSOR 6.3 Software 6.3.1 I 2 C Interface Der MC68332 hat keinen integrierten I 2 C-Bus. Dieser Umstand führte dazu, dass die I 2 C Implementierung in Software durchgeführt wurde. Eine Integration über einen I 2 C- Controller, wie z.b. den PCA 9564 wurde abgelehnt, da es sich bei den I 2 C-Routinen nicht um zeitkrittische Bereiche handelte und noch genügend Ressourcen auf dem Host zur Verfügung standen. Die I 2 C-Software besteht hauptsächlich aus folgenden Funktionen: void i2cinit(void); Initialisierung der PortD-Pins, PCS1 = SCL & PCS2 = SDA, mit Hilfe der Register QDDR und QPAR void adjdinit(void); Initialisierung des Farbsensors (Interne Register werden mit Default- Werten beschrieben) void write register(char DestReg, char Data); Sequentieller Aufruf der Funktionen move register(..), gefolgt von firstwritereg() void move register(char DestReg, char Data); ASM-Funktion - Schreibt die an die C- Funktion übergebenen Parameter in die Register d1 & d2, wo sie von der Funktion firstwritereg() genutzt werden. void firstwritereg(void); ASM-Funktion; Stellt die minimale I 2 C-Schreib-Kommunikation dar: Start-Signal, Adressierung des Chips mit schreibendem Zugriff, Register-Adresse, Datenbyte schreiben, Stop-Signal char read register(char DestReg); Sequentieller Aufruf der Funktionen move read param(..), gefolgt von readreg() void move read param(char Reg); ASM-Funktion - Schreibt den an die C-Funktion übergebenen Parameter in das Register d1, wo er von der Funktion readreg() genutzt wird. char readreg(void); ASM-Funktion; Stellt die minimale I 2 C-Lese-Kommunikation dar: Start-Signal, Adressierung des Chips mit schreibendem Zugriff, Register-Adresse, Repeated-Start, Adressierung des Chips mit lesendem Zugriff, Datenbyte lesen, Stop-Signal Für eine genauere Erläuterung des I 2 C-Protokolls kann die I 2 C Spezifikation [12] herangezogen werden. Die I 2 C Routinen wurden aus einem alten Projekt übernommen, und waren zu 100% in Assembler geschrieben worden. Da der Code auf einen Videochip zugeschnitten war, wurden vorerst Adressänderungen vorgenommen und der Quellcode in allgemein nutzbare Funktionen umgeschrieben. Da diese Assembler-Funktionen von C aus aufgerufen werden sollten und direkt auf interne Register des Mikrocontrollers zugegriffen haben, 26

6.3 Software 6 FARBSENSOR war es nötig sogenannte Wrapper-Funktionen zu entwerfen, welche sich um die Parameterübergabe und den Aufruf der eigentlichen Assembler-Funktionen kümmern. Die ersten Versuche mit dem Chip zu kommunizieren blieben leider erfolglos - da die korrekte Funktion der Schaltung jedoch im Vorfeld mit einem 8-Bit Mikrocontroller mit integrierter I 2 C-Schnittstelle getestet und sichergestellt wurde, musste es sich demnach um einen Software-Fehler handeln. 6.3.2 Debugging Die Kommunikation zwischen dem Mikrocontroller und dem Farbsensor wurde mittels eines sich im Labor befindlichen digitalen Speicheroszilloskopes beobachtet. Hierzu wurde ein Trigger auf der SCL-Leitung eingerichtet um den kurzen Zeitraum der Kommunikation vollständig aufzeichnen zu können. Die Signale der SDA & SCL Leitung wurden auf dem Oszilloskop dargstellt und per Hand analysiert. Als erstes wurde sichergestellt, dass die Konvertierung der Spannung vom Level-Converter korrekt vorgenommen wird. Da dies der Fall war, wurden die übertragenen Signale auf ihren Inhalt analysiert. Hierbei zeigten sich etliche Fehler in der Adressierung, der Dauer und dem Zustand der angelegten Signale. Die Analyse und Bereinigung der Fehler nahm eine nicht zu unterschätzende Zeit in Anspruch. Abbildung 16: Ausschnitt aus der Kommunikation zwischen Farbsensor und Mikrocontroller 6.3.3 Auswertung Die Auswertung der Sensor-Signale erwies sich schwieriger als erwartet. Der Sensor liefert jeweils zwei Werte DATA xx LO (8Bit) und DATA xx HI (2Bit) für insgesamt vier 27

6.4 Résumé 6 FARBSENSOR Kanäle (Rot, Grün, Blau, Klar). Nach dem Zusammenfügen der beiden Register erhält man also einen Wert zwischen 0 und 1023, welcher die Stärke der Farbreflexion, in Bezug auf den jeweiligen Kanal, darstellen soll; je größer der Wert, desto stärker ist der jeweilige Farbkanal in der Reflexion vertreten. Als erstes Problem stellte sich das Umgebungslicht heraus, es reichten bereits Bewegungen im Raum aus um die vom Sensor erkannte Farbe zu verfälschen - Schatten und einfallendes Sonnenlicht machten sogar eine grobe Farberkennung unmöglich. Nach einer starken Abdunklung des Sensorbereichs konnten diese Einflüsse ausgeschlossen werden. Dennoch waren die Werte des Sensors nicht konstant; die ausgegebenen Registerwerte wanderten anscheinend beliebig hoch und runter - die Größenordnung der Veränderungen war bei manchen Kanälen sogar so groß, wie beim Durchrollen einer Münze. Ein weiteres Problem liegt in der Begebenheit der Münzen; sind diese alt und matt, reflektiert die Farbe nicht so, wie wenn sie neu und glänzend sind. Der Farbsensor alleine kann in diesem Fall keine einfache Analyse ermöglichen. Leider ist der Sensor am Abend vor der Präsentation kaputt gegangen, d.h. er ließ sich nicht mehr ansprechen. Da die Maschine zu diesem Zeitpunkt bereits funktionierte und der Farbsensor an sich nicht zwingend für die Auswertung der Münzen notwendig war, wurde auf eine detaillierte Analyse des Defektes verzichtet. 6.4 Résumé Wenn man die ganzen Probleme bei der Entwicklung des Farbsensors nach Relevanz sortieren wollen würde, wäre die anfänglich nicht funktionierende I 2 C-Implementierung auf Platz eins. Hier hätte es sich in unserem Fall sicherlich gelohnt die Funktionen über Timer in C zu implementieren und sich korrekt an die I 2 C-Spezifikation [12] zu halten. Die Nutzung eines Hardware-I 2 C-Controllers wäre sicherlich auch eine Alternative gewesen. Für uns machte ein späteres Umsteigen keinen Sinn, da bereits relativ viel Arbeit in die Umstrukturierung und Analyse gesteckt wurde. Auf Platz zwei würde sich die Auswertung des Farbsensors befinden. Wenn man von dem defekten Sensor absieht, wäre es vermutlich mit etwas mehr Zeit und Aufwand möglich gewesen den Sensor so zu konfigurieren und mechanisch einzustellen, dass mit einer ausgeklügelten Software eine ziemlich eindeutige Erkennung der Münzen möglich gewesen wäre. Die Platzierung auf dem zweiten Platz erfolgt hauptsächlich aus dem Grund, dass man aus der Beschreibung des Sensors den Eindruck erhält, dass sich die Farberkennung mit einem einfachen Auslesen der Register erledigen lässt. Gewissermaßen stimmt dies natürlich auch, jedoch darf man die oben bereits genannten Einschränkungen nicht vernachlässigen. Die Auswahl der geeigneten Bauteile und die Anfertigung der Platinen waren sicherlich nicht leicht und auch recht zeitaufwendig, jedoch ist dies auf geringe Erfahrung zurückzuführen und kein konkretes Problem. Das Löten der SMD Platinen war hingegen relativ unproblematisch. Positiv zu erwähnen ist, dass sämtliche Hardware und die Basisfunktionen umgehend 28

6.4 Résumé 6 FARBSENSOR funktioniert haben und es diesbezüglich keine nennenswerten Probleme gab - das Zusammenspiel der einzelnen Komponenten schien sehr gut zu funktionieren. So aufwendig die Analyse der I 2 C-Software auch war, hatte sie den Vorteil, dass man sich wärend dessen mit der Bedienung des digitalen Speicher-Oszilloskopes auseinander setzen musste und die Bedienung erlernen konnte. Des weiteren viel sehr positiv auf, dass alle ICs von den jeweiligen Firmen als Sample zu erhalten waren und sich die Kosten in diesem Bereich auf einen Euro für Kondensatoren beschränkten. 29

7 VISUALISIERUNG 7 Visualisierung Verantwortlich: Abdulbaki 7.1 Einleitung Die Sensor- und Münzwerte, die anhand des Mikrocontrollers und der Sensoren ermittelt wurden, mussten für den Benutzer auf eine geeignete Art und Weise visualisiert werden. Nach anfänglichen Überlegungen, die die Nutzung eines Grafikdisplays oder MATLAB beinhalteten, hat sich die Kombination C und Visual C# als praktische Lösung erwiesen. Dabei kam C zur Programmierung von Schnittstellen zum Einsatz und die Benutzeroberfläche wurde mittels Visual C# entworfen und implementiert. 7.2 Schnittstellen Durch Programmierung einer Header-Datei in C wurden zwei verschiedene Typen von Ausgabeschnittstellen für alle Gruppenmitglieder zur Verfügung gestellt: Der erste Typ gibt auf dem Terminal Error- und Debug-Meldungen aus, der zweite Typ dient zur Ausgabe von Sensor- und Münzwerten. Die Error- und Debug-Meldungen ermöglichen es Programmierern Fehler im Programmcode zu entdecken und zu verbessern, wobei die Sensor- und Münzwerte zur späteren Visualisierung auf der Benutzeroberfläche benötigt werden. Die zur Verfügung gestellten Funktionen sind Tabelle 5 zu entnehmen. VISIO DEBUG VISIO ERROR VISIO INDUCTIVITY VISIO SIZE VISIO MUENZE Dient zur Ausgabe von Debug-Meldungen. Ermöglicht die Ausgabe von Error-Meldungen. Gibt den Wert des Induktivsensors aus, entweder Metal oder No Metal. Gibt die Größe einer Münze an, die durch die Lichtschranken ermittelt wurde. Gibt den finalen Wert einer Münze in Cent zurück, d.h. einen Wert zwischen 1 und 200. Tabelle 5: VISIO-Funktionsaufrufe Jede Gruppe hatte nun die Möglichkeit, die Funktionen zu benutzen, die für ihre Aufgaben in Frage kamen. So konnte eine einheitliche Ausgabe geschaffen werden und die Werte, die vom Mikrocontroller geliefert wurden, leichter in die Benutzeroberfläche eingebettet werden. 30

7.3 Die Benutzeroberfläche 7 VISUALISIERUNG 7.3 Die Benutzeroberfläche Da Visual C# die Möglichkeit bietet, Daten über einen seriellen Port zu lesen und auszugeben und die Implementierung der Benutzeroberfläche nicht sehr kompliziert ist, bot es sich an Visual C# für die Visualisierung der Ergebnisse zu benutzen. Die Benutzeroberfläche ist in Abbildung 17 dargestellt. Abbildung 17: Die Benutzeroberfläche Das Interface ist in zwei große Abschnitte geteilt. Im unteren Bereich befinden sich die allgemeinen Einstellungen, die man für den ordentlichen Betrieb der Benutzeroberfläche benötigt. Ganz rechts befindet sich der Connect / Disconnect -Button. Durch Klick auf diesen kann man sich mit dem MC68332 verbinden. Dabei muss man darauf achten, dass man den richtigen COM-Port ausgewählt hat. Diese Auswahl trifft man im Dropdown- Menü Port, welcher automatisch alle COM-Ports auf dem Rechner listet. Das Textfeld Serial zeigt mit On oder Off an, ob die Verbindung zum Mikrocontroller hergestellt werden konnte, wobei das Buffer -Feld die Größe des Buffers angibt. Den Geldzähler kann man mit dem Reset -Button jederzeit zurücksetzen. Über den Buttons befinden 31

7.3 Die Benutzeroberfläche 7 VISUALISIERUNG sich zwei größere Felder, in denen alle Debug- und Error-Meldungen ausgegeben werden, um Bugfixes am Programmcode vornehmen zu können. Der obere Bereich besteht aus drei Teilen, dem Coins -, Money Counter - und Sensor Values -Bereich. Im Coins - Abschnitt wird ein Bild der Münze angezeigt, die gerade durch die Schiene rollt und von den Sensoren erkannt wurde. Oben links werden die einzelnen Sensorwerte ausgegeben und oben rechts wird gezählt, wie viel Geld mittlerweile sortiert wurde. Die ausführbare Datei der Benutzeroberfläche ermöglicht es, diesen auf jedem beliebigen Rechner mit COM-Port einzusetzen. Außerdem ist das Interface leicht erweiterbar, um eventuell neue Features einzubauen. Das User Interface hat bei der Demonstration der Sortiermaschine ihre Aufgabe erfüllt. Sie hat sowohl die Münzen als auch die Sensorwerte richtig visualisiert, auch Falschgeld wurde richtig dargestellt. Der Geldzähler hat auch die richtige Summe der Münzen gebildet, was wir öfters mit manuellem Zählen getestet haben. Sicherlich ist ein Grafikdisplay als Alternative eine Überlegung wert, um die Sortiermaschine portabel zu gestalten. Allerdings macht es bei der Größe der Sortiermaschine eher weniger Sinn auf ein Grafikdisplay umzusteigen. 32

8 KOMMUNIKATIONSFUNKTIONEN 8 Kommunikationsfunktionen Verantwortlich: Hermann, Abdulbaki 8.1 Grundlegende Kommunikation 8.1.1 SCI - Serial Communications Interface Um eine grundlegende Kommunikation aufzubauen ist es nötig die SCI des MC68332 entsprechend der benötigten Parameter zu konfigurieren. In unserem Fall wurde eine 9600/8-N-1 Konfiguration gewählt: 9600 Baud, 8 Datenbits, 1 Stopbit, keine Parität. Um diese Parameter der SCI mitzuteilen werden verschiedene Register beschrieben, welche jetzt im Einzelnen in Tabelle 6 vorgestellt werden sollen. Die angegebenen Adressen beziehen sich dabei auf das genutzte Entwicklungsboard. Register Adresse Name Wert SCCR0 0x00FFFC08 SCI Control Register 0 0x0037 SCCR1 0x00FFFC0A SCI Control Register 1 0x002C QSMCR 0x00FFFC00 QSM Configuration Register 0x0081 Tabelle 6: Benötigte Register für die Konfiguration der QSM/SCI Die Bekanntmachung der Register wurde durch die Header-Datei com.h realisiert; die einzelnen Funktionen wurden in der Datei com.c hinterlegt. Beide Dateien werden hier nur in Auszügen dargestellt, da sie in voller Länge dem Anhang entnommen werden können. 1 void I n i t S C I ( void ) 2 { 3 int S C I I R v e c t o r ; 4 QSMCR = 0 x0081 ; 5 SCCR0 = 0 x0037 ; 6 SCCR1 = 0x002C ; 7 8 asm ( move.w #$2700, SR ) ; 9 asm ( move. l #$0, D0 ) ; 10 asm ( movec D0,VBR ) ; 11 12 QILR >i l q s p i = 0 ; 13 QILR > i l s c i = 5 ; 14 QILR >q i v r = 6 6 ; 15 16 S C I I R v e c t o r = ( ( int ) (0 x108 ) ) ; 17 S C I I R v e c t o r = ( ( int ) getcharint ) ; 18 19 asm ( move.w #$2300, SR ) ; 20 } 33

8.1 Grundlegende Kommunikation 8 KOMMUNIKATIONSFUNKTIONEN Während der obigen Initialisierung der QSM wird das Supervisor access -Flag gesetzt und die Interrupt Arbitration Identification Number auf eins gesetzt (Dies bestimmt die Reihenfolge beim Auftreten von gleich priorisierten Interrupt-Anfragen). Die Initialisierung der SCI wurde den bereits genannten Parametern entsprechend vorgenommen: 9600 Baud, 8N1, Empfänger und Sender an, Empfänger Interrupt aktiviert. Die oben angegebene Initialisierung der SCI beinhaltet das Einrichten des Interrupt- Vektors an Adresse 0x66. Bevor die Interrupt relevanten Parameter gesetzt werden können, müssen jedoch alle Interrupts gesperrt und das Basis-Vektor-Register initialisiert werden. Die Interrupt-Vektor-Adresse wird vervierfacht und zur Vektorbasisadresse addiert. Im obigen Fall ergibt sich hieraus die Adresse 0x108. An diese Adresse wird ein Verweis auf die aufzurufende Funktion gelegt. Der Interrupt-Level der SCI wird vorher noch auf die Priorität fünf gesetzt. Anschließend werden die Interrupts wieder aktiviert. Die aufgerufene Funktion getcharint empfängt das eingegebene Zeichen und wandelt es in einen Integer-Wert um, bevor es diesen als Parameter an die Funktion setstatus weiterleitet. Ein direkter Aufruf dieser Funktion aus der Interrupt-Behandlungs-Routine heraus ist nicht problematisch, da es sich um eine sehr kurze Funktion handelt und wir kein Zeit krittisches System haben. Auf die Funktion setstatus soll in diesem Zusammenhang nicht weiter eingegangen werden, da sie keine direkte Kommunikationsfunktion darstellt. 1 i n t e r r u p t void getcharint ( void ) { 2 char tmp ; 3 4 tmp = getchar ( ) ; 5 s e t S t a t u s ( ( ( int )tmp) 48) ; 6 } Nur am Rande sei noch erwähnt, dass das QILR-Register aus den in Tabelle 7 angegebenen Unterregistern besteht: Register Name Kommentar ILQSPI Interrupt Level for QSPI 0 Interrupts disabled ILSCI Interrupt Level of SCI 0 bis 7 QIVR QSM Interrupt Vector Register 0x40-0xFF Tabelle 7: Aufteilung des QILR Registers Um diese Eigenschaft einfach abbilden zu können wurde hierfür eigens eine Typ-Definition angelegt. 1 typedef struct 2 { 3 unsigned short : 2 ; / not used / 34