TU Berlin Fachgebiet Elektronik und medizinische Signalverarbeitung Projekt Elektronik im Wintersemester 2007/2008 Abschlussbericht der Gruppe ele51 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Inhaltsverzeichnis 1 Einleitung 4 1.1 Projektthema 1.2 Spezifikation 1.3 Arbeitsaufteilung 4 4 5 2 Sensormodule 5 2.1 Temperaturmodul 2.1.1 Ziel 2.1.2 Auswahl des geeigneten Temperaturfühlers 2.1.3 Blockschaltbild und Übersicht 2.1.4 Sensorstufe 2.1.5 Spannungsfolger und Verstärker 2.1.6 AD-Umsetzer 2.1.7 Bauteileliste 2.1.8 Gesamtschaltbild 2.1.9 Platinenlayout 2.1.10 Simulation und praktische Durchführung 2.2 Druckmodul 2.2.1 Wahl des Sensors 2.2.2 Schaltung 2.2.3 Bauteileliste 2.2.4 Gesamtschaltbild 2.2.5 Platinenlayout 2.2.6 Simulation und praktische Durchführung 2.3 Lichtschranke 2.3.1 Schaltung 2.3.2 Vor- und Nachteile 2.3.3 Bauteileliste 2.3.4 Schaltbild 2.3.5 Patinenlayout 3 Basisstation 4 5 6 7 8 9 11 13 13 14 14 15 15 16 18 18 19 20 21 21 22 23 24 24 26 3.1 Der Mikrocontroller 3.2 Kommunikation 3.2.1 Kommunikation mit dem Druck- und mit dem Temperatursensor 3.2.2 Kommunikation mit der Lichtschranke 3.3 Datenverarbeitung 3.3.1 Time-Overflow-Interrupt 3.3.2 Datenverarbeitung für die Ausgabe 3.4 Warnsystem 3.4.1 LED, Piepser 3.4.2 LCD-Anzeige 3.5 Die Platine 3.5.1 Schaltbild 3.5.2 Platinenlayout 3.6 C-Code 2 26 28 28 29 29 29 29 29 29 30 32 32 32 33 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 4 Funkmodul 5 6 7 8 34 4.1 Empfänger 4.1.1 Takterzeugung 4.1.2 Taktauswahl 4.1.3 Block Takterzeugung und Synchronisation 4.1.4 Serielle Daten in parallele umwandeln 4.1.5 VHDL Beschreibung der Gesamtschaltung 4.1.6 Bauteileliste 4.1.7 Schaltbild 4.1.8 Platinenlayout 4.2 Sender 4.2.1 Entwicklung der Finite State Machine 4.2.2 VHDL Beschreibung der Finite State Machine 4.2.3 Bauteileliste 4.2.4 Schaltbild 4.2.5 Platinenlayout 4.3 Schnittstellen der Module 35 35 37 38 39 40 41 42 42 43 44 46 46 46 47 48 Zusammenfassung Literaturverzeichnis Abbildungsverzeichnis Tabellenverzeichnis 49 49 50 51 3 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 1 Einleitung 1.1 Projektthema Ziel unseres Projekts ist der Aufbau einer Alarmanlage. Verschiedene Sensormodule melden einer Basisstation die Überschreitung kritischer Schwellenwerte oder eingetretene Ereignisse. Die Basisstation löst daraufhin Alarm aus. Abbildung 1 zeigt ein einfaches Blockschaltbild des Alarmsystems. Der modulare Aufbau und die einheitlichen Schnittstellen gewährleisten die Erweiterbarkeit der Anlage: Sensoren können ohne hohen Aufwand zu einem späteren Zeitpunkt hinzugefügt/entfernt werden. Basisstation Sensormodul Abb. 1 Einfaches Blockschaltbild der Alarmanlage 1.2 Spezifikation Gemäß dem Pflichtenheft sind im ersten Release unseres Systems Sensormodule für Temperatur und Druck und eine Lichtschranke vorgesehen. In weiteren Releases können Rauch- /Gas-Sensoren, Sensoren für die Luftfeuchtigkeitsmessung und für die Geräuscherkennung berücksichtigt werden. Das Druckmodul soll erkennen, ob jemand/etwas auf den Drucksensor tritt. Das Temperaturmodul dient dazu die Temperatur zu überwachen und einen möglichen Brand zu detektieren. Die Lichtschranke meldet bei der Unterbrechung des Lichtstrahls das Vorhandensein eines potentiell unerwünschten Gastes. 4 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Die Signalanpassung beinhaltet, je nach Bedarf, die Verstärkung, die A/D-Wandlung und die Linearisierung der Sensorsignale. Sobald ein Schwellenwert überschritten ist, sendet das Sensormodul ein Signal an die Basisstation, das mit der Kennung des jeweiligen Moduls versehen ist. Alarmsignal und Modulkennung werden parallel übertragen (siehe Mikrocontroller). Das Temperaturmodul sendet zusätzlich in kurzen Abständen die aktuelle Temperatur an die Basisstation. Die Kommunikation zwischen den Sensormodulen und der Basisstation erfolgt primär per Kabel. Es soll zusätzlich eine Funkübertragung angeboten werden, sowie die Möglichkeit, zwischen der Kabel- und der Funkübertragung flexibel zu wechseln. Die Basisstation verarbeitet die Signale, die sie von den Sensormodulen empfängt, als Interrupts. Daraufhin löst sie optische und akustische Signale aus und zeigt auf einem LCD an, welches Modul den Alarm ausgelöst hat. Die aktuelle Temperatur und die aktuelle Uhrzeit werden ebenfalls angezeigt. Die Basisstation soll ein- und ausgeschaltet werden können. Bei Bedarf soll ein Reset durchgeführt werden können. Weiterhin soll die Basisstation in der Lage sein, die Bereitschaft der Module abzufragen. Die Energieversorgung erfolgt per Batterie für einige Sensormodule und per Netzteil für die Basisstation. 1.3. Arbeitsaufteilung Basisstation (Mikrocontroller), Sensormodule (Lichtschranke, Temperatur- und Drucksensor) und Funkmodul werden in Gruppen von 1-3 Studenten entwickelt. Im Folgenden stellt jede Gruppe ihre bisherige Arbeit vor. 2 Sensormodule 2.1 Temperaturmodul 2.1.1 Ziel Unser Ziel ist es, ein System zu bauen, mit dem man die Raum- oder die Wassertemperatur messen kann. Die zu messende Temperatur soll im Bereich von 0°C bis 100° C liegen. Ein Widerstandsthermometer, dessen W iderstand sich mit der Temperatur ändert, ist das Kernstück unseres Moduls. Damit kann die zu messende Größe Temperatur in ein elektrisches Signal umgewandelt werden. Das Messergebnis wird analog-digital umgesetzt. D.h. die analoge Spannung wird durch analog-digitale Umsetzung in ein Digitalsignal umgewandelt. Hier wird ein 8-Bit AD Umsetzer benutzt. Ein nachfolgendender Mikroprozessor, z.B. FPGA oder Mikrocontroller, erkennt und verarbeitet das digitalisierte Signal. Im Allgemeinen soll das System die Temperatur im Bereich von 0°C bis 100° C messen, in ein digitales Signal umsetzen und ein 8 Bit Digitalsignal an den Mikroprozessor weitergeben. Mit einer ähnlichen Schaltung, aber einem Drucksensor anstelle von dem Temperatursensor wird das Druckmodul unseres Projekts realisiert. Die Anforderungen an das Druckmodul sind relativ gering, im Vergleich zu dem Temperaturmodul. Bei dem Druckmodul wird nur eine qualitative Messung durchgeführt. 5 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Die folgenden Kapitel erläutern hauptsächlich das Temperaturmodul. Das Druckmodul wird nur am Rande beschrieben. Wie bereits erwähnt, ist das Widerstandsthermometer für unser System von großer Bedeutung. Ob das System gut funktioniert, ist hauptsächlich vom Temperatursensor abhängig. Im folgenden Kapitel werden verschiedene Sensoren vorgestellt und miteinander verglichen. 2.1.2 Auswahl des richtigen Temperaturfühlers Widerstandthermometer: z.B. Pt100 Funktionsweise: Eine Temperaturänderung führt zur Widerstandsänderung des Bauelementes. Vorteile: sehr hohe Genauigkeit, ausgezeichnete Stabilität über längere Zeit Nachteile: lange Antwortzeiten Thermoelemente: z.B. Typ K, Typ N Funktionsweise: Ein Material erzeugt eine Spannung, wenn es erwärmt wird. Vorteile: großer Messbereich bis zu 1000° C, kurze Antwortzeiten Nachteile: Die erzeugte Spannung ist relativ klein und deshalb schwer zu messen, außerdem ist dieses Verfahren relativ ungenau. Für unsere Anwendung ist ein Widerstandsthermometer mit höherer Genauigkeit besser geeignet. Konkret haben wir uns für das Widerstandsthermometer Pt100 entschieden, das auf der Widerstandsänderung von Platin unter Temperatureinfluss basiert. Abb. 2 Kennlinie des Pt100 [1] Abbildung 3 zeigt die Kennlinie des Pt100. Es ist zu beachten, dass sich der Widerstandswert fast linear mit der Temperatur ändert. Diese quasi Linearität ist für unser System ganz wichtig, weil sie die Messung der Temperatur erleichtert. 6 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Im Bereich 0°C bis 100°C liegt der Widerstandbereic h von Pt100 im Bereich 100 Ω bis 139 Ω. Unser Modul wird überwiegend in diesem Bereich arbeiten. Ein Foto der fertigen Schaltung ist in Abbildung 2 zu sehen. Abb. 3 Platine Temperaturmodul 2.1.3 Blockschaltbild und Übersicht Das Blockschaltbild des Temperaturmoduls ist in Abbildung 4 zu dargestellt. 7 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 4 Blockschaltbild des Temperaturmoduls Das Modul besteht aus 3 Komponenten: 1) Umwandlung Temperatur in Elektrosignal bzw. Sensorstufe; 2) Spannungsanpassung, Schaltung für Spannungsfolger und Verstärker; 3) AD Umsetzung. In der Sensorstufe wird mit Hilfe des Pt100, die im Bereich 0°C bis 100°C variierende Temperatur, in eine Änderung eines elektrischen Signals umgewandelt, hierbei handelt es sich nun um eine Spannungsänderung,. Nachfolgend kommt eine Spannungsanpassung. Die Ausgangsspannung der ersten Stufe liegt nicht im geeigneten Bereich. D.h. diese Spannung ist z.B. zu klein, um gemessen zu werden. Es gibt auch die Möglichkeit, dass bei einer direkten Messung die Sensorstufe von einer anderen Stufe beeinflusst wird. Die Spannungsanpassung dient dazu, die Ausgangspannung in einen für die Messung geeigneten Bereich zu bringen und eine Isolierung zwischen Vor- und Nachstufe zu erzwingen. Der letzte Schritt ist die AD Umsetzung, damit das analoge Spannungssignal digitalisiert werden kann. Der Ausgang dieser Stufe soll ein binäres Digitalsignal sein. 2.1.4 Sensorstufe Als Temperatursensor wird ein PT100 benutzt (siehe Abbildung 5). Sein Widerstandswert verändert sich von ungefähr 100 Ω bis 138.5 Ω, wenn die Temperatur von 0° C auf 100° C ansteigt. Abb. 5 Typ PT 100 M 222 1/3B 20NIPt 10 [2] Hersteller Heraeus Sensor Technology 8 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Die Vorteile des Pt100 sind: 1) der Widerstandwert steht in einer lineare Beziehung zur Temperatur 2) große Genauigkeit Mit einer Brückenschaltung (siehe Abb. 6) kann die Änderung des Widerstands in die Änderung der Spannung umsetzt werden. Abb. 6 Brückenschaltung für die Sensorstufe (PSpice) Vcc ist die Versorgungsspannung. Sie beträgt 5V. Es ist wichtig, dass R3 viel größer als der Widerstand des Pt100 ist. Aus der obigen Schaltung bekommen wir folgende Gleichungen: Rt Vcc R 3 + Rt R2 U1 = Vcc R1 + R 2 U2 = Um zu garantieren, dass U 2 eine lineare Beziehung zu Rt besitzt, muss R 3 viel größer, als Rt sein. Wir wählen R 3 = 4700 Ω. U 1 ist die Offset-Spannung. Sie sorgt dafür, dass die Ausgangsspannung dieser Stufe bei T = 0°C bzw. Rt = 100 Ω, bei 0V liegen kann. Deshalb setzen wir R1 = 47000 Ω. Außerdem benutzen wir für R 2 ein Potentiometer, damit eine genaue NullAusgangsspannung bei 0°C erreicht werden kann. 2.1.5 Spannungsfolger und Verstärker Die Ausgangsspannung der ersten Stufe wird als analoge Eingangsspannung für den AD Umsetzer benutzt. Um eine rückwirkende Beeinflussung aus den nachfolgenden Stufen 9 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 zu vermeiden, ist ein Spannungsfolger nötig. Damit kann der Sensor und der AD Umsetzer voneinander isoliert werden. Abb. 7 Spannungsfolger mit OPV (PSpice) Die in Abbildung 7 dargestellte Schaltung ist eine typische Anwendung von Operationsverstärkern (OPV): eine direkte Verbindung zwischen negativen Eingang und Ausgang des Verstärkers. Aus der Eigenschaft der „virtuellen Masse“ ist die Ausgangsspannung identisch mit der positiven Eingangspannung. Nach der Berechnung ist die Ausgangsspannung nach dem Spannungsfolger bei 100°C mit Vcc gleich 5V, nur ungefähr 0,039 V. Desw egen brauchen wir einen Verstärker (siehe Abbildung 8). Ziel des Bauteiles ist, die Ausgangsspannung im Bereich 0 bis 5V zu verstärken. Hier ist ein Verstärkungsfaktor von 120 passend für unsere Anforderung. Abb. 8 Verstärkerschaltung (PSpice) Die entsprechenden Gleichungen sind: 10 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 U 1'−U − U − −Ue R 4 = R5 U 2'−U + = U + R6 R7 U − = U +, R 4 = R 6 = R, R5 = R 7 = R' und die Ausgangsspanung ist: Ue = R' R' (U 2'−U 1' ) = Ud R R Um einen Verstärkungsfaktor von 120 zu erreichen, benutzen wir R 4 und R 6 von 1 kΩ, R 5 und R 7 von 120 kΩ. Dann wird die theoretische Ausgangsspanung des ganzen analogen Systems im Bereich von 0 V bis 4,7 V liegen. 2.1.6 AD Umsetzer Das Ausgangssignal des analogen Teils ist eine Spannung, die im Bereich 0 V bis 4,7 V liegt. Vor der Verarbeitung dieser Information durch den Prozessor muss die analoge Spannung zuerst in ein digitales Signal umgewandelt werden. Wir verwenden ADC0804 als AD Umsetzer. Die Vorteile des Bauteiles sind: 1) 8 Bit paralleler Umsetzer, schnell; 2) kann von internem oder externem Takt gesteuert werden; 3) differentielle Ausgangsspanung, robust und rauschtolerant. Abb. 9 Schaltung für AD Umsetzung [3] 11 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abbildung 9 zeigt die Schaltung des AD Umsetzers ADC0804. Es ist zu beachten, dass „Chip Select“ auf Null gesetzt werden muss, weil in unserem Fall eine kontinuierliche, also stetige Umsetzung durchgeführt wird. Außerdem ist es vorteilhaft, wenn der Umsetzer eine identische Versorgungsspannung mit dem analogen Teil besitzt. Damit kann man eine Beeinflussung durch Versorgungsdrift vermeiden. Für die Kommunikation des ADUs mit einem Mikroprozessor sind 11 Pins verantwortlich: - DB7 bis DB0 als Daten, davon DB7 als MSB; - „/INTR“ als Ausgangspin des ADUs; - „/WR“ und „/RD“ als Eingangspin des ADUs wird durch den Mikroprozessor gesteuert. Initial sind „/WR“ und „/RD“ „1“. Schreiben des ADUs: Abb. 10 Zeitdiagramm des ADUs für das Schreiben [3] 1) das Pin „/WR“ auf „0“ setzen und nach tW (mindestens 30ns) wieder auf „1“ setzen; 2) die Umsetzung fängt automatisch nach 1 bis 8 Takten des Wiederaufstiegs des Pin „/WR“ an. Dann wird der Umsetzer belegt. Ein weiterer Schreibbefehl bzw. negative Impulse am „/WR“ funktionieren nicht mehr. 3) wenn die Umsetzung fertig ist, entsteht am Pin „/INTR“ ein Interruptsignal bzw. ein Abstieg damit der Mikroprozessor informiert werden kann. Das Zeitdiagramm ist in Abbildung 10 dargestellt. 12 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Lesen des ADUs: Abb. 11 Zeitdiagramm des ADU für Lesen [3] 1) ein negativer Impuls soll am Pin „/RD“ nach Abstieg des „/INTR“ vom Mikroprozessor abgegeben werden 2) nach tACC (typischer Wert 75 ns und maximaler Wert 100 ns) stehen die Daten an den Ausgangspins, d.h. von DB7 bis DB0, zur Verfügung. Dann kann der Mikroprozessor diese binären Daten lesen. 3) ein neuer Anstieg des „/RD“ löscht die Daten und setzt den ADU in den ursprünglichen Zustand zurück. Das Zeitdiagramm ist in Abbildung 11 dargestellt. 2.1.7 Bauteileliste R1 - 47 kΩ Widerstand R2 - 0~1 kΩ Potentiometer R3 - 4,7 kΩ Widerstand Pt100 - Widerstandthermometer R4 - 1 kΩ Widerstand R5 - 120 kΩ Widerstand R6 - 1 kΩ Widerstand R7 - 120 kΩ Widerstand R8 - 10 kΩ Widerstand C1 - 56 pF Kondensator C2 - 1 µF Kondensator IC1A, IC1B, IC1C - LM324 - Integrierte Quard Operationsverstärker A/D - ADC 0804 - Analog-Digital-Umsetzer 2.1.8 Gesamtschaltbild In Abbildung 12 ist das Gesamtschaltbild des Temperaturmoduls dargestellt. 13 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 12 Gesamtschaltbild des Temperaturmoduls (PSpice) 2.1.9 Platinenlayout Das Layout der Temperaturplatine kann dem Bild 13 entnommen werden. Abb. 13 Platinenlayout für das Temperaturmodul (Eagle) 14 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 2.1.10 Simulation und praktische Durchführung Die Simulationsergebnisse vom Analogteil sind in Tabelle 1 zusammengefasst. Tabelle 1 Simulationsergebnisse für das Temperaturmodul Temperatur in °C 0 20 (Raumtemperatur) 40 60 100 Widerstand des Sensors in Ω 100 107,9 Ausgangsspannung in V 0,40 1,46 115,8 123,6 138,5 2,44 3,36 4,89 (Sättigung) Die Tabelle 2 stellt einige Messergebnisse dar. Tabelle 2 Messergebnisse für das Temperaturmodul Temperatur in °C Ausgangsspannung in V 0,40 1,46 0 20 (Raumtemperatur) 40 60 100 2,44 3,36 3,82 (Sättigung) Aus der obigen Tabelle wird deutlich, dass die praktischen Ergebnisse bei niedriger und mittlerer Temperatur mit den Simulationsergebnissen gut übereinstimmen. Bei hoher Temperatur kommt die Ausgangsspannung in den Sättigungsbereich. Das Problem besteht darin, dass wir den integrierten OPV IC LM324 benutzen. Im Vergleich zum nicht-integrierten Operationsverstärker µA741, besteht LM324 aus 4 OPVs. Die Verteilung der Versorgungsspannung auf 4 OPVs führt leicht zur Sättigung. Für unsere Anwendung sind diese Ergebnisse akzeptabel, es wird mehr als 70% des ganzen Wertebereichs der ADUs verwendet. Die Performance des Systems wird trotzdem beeinflusst. Eine mögliche Verbesserung ist LM324 zu verwenden, dieser stammt von einem anderen Hersteller. Als Alternative kann auch eine höhere Versorgungsspannung verwendet werden. Beide Module, Druck und Temperatur, wurden mit der Basisstation getestet. Das Ergebnis der AD Umsetzung ist sehr gut. An den Ausgangspins kann man ein 8-Bit Signal lesen und verarbeiten. 15 Projekt Elektronik - Abschlussbericht 2.2 WS 07/08 - ele51 Druckmodul 2.2.1 Wahl des Sensors Bei dem Druckmodul ist fast alles ähnlich aufgebaut, wie beim Temperaturmodul. Der einzige Unterschied ist der verwendete Sensor. Ziel des Druckmoduls ist es, eine Druckveränderung zu erkennen. Es handelt sich um eine qualitative Aussage. D.h. wir messen den Druck nicht genau, wir treffen nur eine Entscheidung, ob der Druck eine definierte Schwelle überschritten hat oder nicht. Abb. 14 Drucksensor-FSR-149NS [2] Deswegen reicht ein ganz grober Sensor für unsere Anwendung aus. Abbildung 14 zeigt den ausgewählten Sensor. Der Druckbereich liegt im Bereich von ca. 10 g bis 10 kg und entspricht einer Widerstandsveränderung von 3 kΩ bis 2 MΩ. Es ist zu beachten, dass im Vergleich zum Temperatursensor, dessen Widerstand sich mit aufsteigender Temperatur erhöht, der Widerstand des Drucksensors sich mit ansteigendem Druck verringert. Der Sensor besitzt bestimmte Anforderungen, muss man z.B. eine drückbare Umgebung für den Sensor brnutzen, damit der Druck von dem Sensor erkannt werden kann. 2.2.2 Schaltung Es werden die drei beim Temperaturmodul gezeigten Stufen verwendet. Der einzige Unterschied liegt bei der Sensorstufe. Das Bild der fertigen Schaltung ist in Abbildung 15 zu sehen. 16 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 15 Fertige Platine des Drucksensors Da sich der Widerstand des Sensors mit ansteigender Temperatur verringert, muss man die Position des Sensors in der Brückeschaltung ändern (siehe Abb. 16). Abb. 16 Brückenschaltung beim Druckmodul (PSpice) 17 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Rdruck ist der Drucksensor. Wenn kein Druck darauf ausgeübt wird, beträgt der Widerstand ungefähr 40 kΩ. Mit einem stärkeren Druck ist ein Widerstand von 15 kΩ erreichbar. D.h. die Ausgangsspannung dieser Stufe verändert sich von Null im Ruhezustand bis 1 V beim stärksten Druck. Der Verstärkungsfaktor wird in der nachfolgenden Schaltung entsprechend verändert. Statt R 5 und R 7 gleich 120 kΩ benutzen wir hier zwei 5,6 kΩ Widerstände. Wir behalten R 4 und R 6 , mit einem Wert von 1 kΩ. In Abbildung 17 ist die Verstärkungsstufe des Druckmoduls dargestellt. Abb. 17 Verstärkungsstufe des Druckmoduls (PSpice) 2.2.3 Bauteileliste R1 – 3,9 kΩ Widerstand R2 – 0~1 kΩ Potentiometer R3 – 10 kΩ Widerstand Rdruck –Drucksensor R4 – 1 kΩ Widerstand R5 – 5,6 kΩ Widerstand R6 – 1 kΩ Widerstand R7 – 5,6 kΩ Widerstand R8 – 10 kΩ Widerstand C1 – 56 pF Kondensator C2 – 1 µF Kondensator IC1A, IC1B, IC1C – LM324 – Integrierte Quard Operationsverstärker A/D – ADC 0804 – Analog-Digital-Umsetzer 2.2.4 Gesamtschaltbild Das Gesamtschaltbild des Druckmoduls ist in Abbildung 18 dargestellt. 18 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 18 Gesamtschaltbild des Druckmoduls (PSpice) 2.2.5 Platinenlayout Das mit Eagle angefertigte Platinenlayout ist in Abbildung 19 zu sehen. Abb. 19 Platinenlayout für das Druckmodul (Eagle) 19 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 2.2.2 Simulation und praktische Durchführung Die Simulationsergebnisse für das Druckmodul sind in der Tabelle 3 dargestellt. Tabelle 3 Simulationsergebnisse für das Druckmodul Druck Ruhezustand kleiner Druck mittlerer Druck (Schwelle) großer Druck Widerstand des Sensors in kΩ 37,5 30 20 Ausgangsspannung in V 0,41 1,52 3,85 10 4,89 (Sättigung) In der Tabelle 4 sind einige Messergebnisse zusammengefasst. Tabelle 4 Messergebnisse für das Druckmodul Außendruck Ruhezustand kleiner Druck mittlerer Druck (Schwelle) großer Druck Widerstand des Sensors in kΩ 37,5 30 20 Ausgangsspannung in V 0,41 1,52 3,82 (Sättigung) 10 3,82 (Sättigung) Da sich die Schaltungen von Temperaturmodul und Druckmodul sehr ähneln, ist die Auswertung für das Druckmodul mit der Auswertung des Temperaturmoduls gleich. 2.3 Lichtschranke Das Ziel unseres Moduls besteht darin, die durch ein Objekt (z.B. Einbrecher) hervorgerufene Unterbrechung des Lichtstrahls zu erkennen und der Basisstation zu melden. Wir haben verschiedene Ansätze der Realisierung analysiert und uns letztlich für eine vergleichsweise einfache, jedoch störungssichere Schaltung entschieden. Das Blockschaltbild ist in Abbildung 20 dargestellt. 20 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 20 Blockschaltbild der Lichtschranke Anforderungen an diese Schaltung sind eine geringe Fehlauslösung, hohe Sicherheit gegen Manipulation so z.B. direktes Durchtrennen von Kabeln und erhöhte Unempfindlichkeit gegen störendes Tageslicht und andere Lichtquellen, mit denen einige Lichtschranken getäuscht werden können. Falls ein Einbrecher den IR-Strahl unterbricht, wird dies von dem Detektor registriert und ein Signal ausgegeben. Das Signal von der Lichtschranke muss nun weiter verarbeitet und an einen µC weitergegeben werden. Da dieser µC spezifische Zeiten zum Abfragen der einzelnen Module verwendet, muss das Alarm auslösende Signal so lange gespeichert werden, bis der µC dieses erhält, auch wenn der IR-Strahl inzwischen schon wieder den Detektor erreicht und jetzt kein neues Alarmsignal mehr ausgelöst werden würde. Zudem muss das Ausgangssignal an den Spannungsbereich des µC angepasst werden. Eine LED soll zusätzlich das Ausgangssignal anzeigen, um die Wirksamkeit der Lichtschranke einfach zu demonstrieren. Da anfänglich die Möglichkeit in Betracht gezogen wurde, alle Module über Funk mit der Hauptstation kommunizieren zu lassen sollte eine Batterieversorgung vorgesehen werden und somit möglichst energiesparend gearbeitet werden. Da eine kompakte 9V Blockbatterie als Energielieferant vorgesehen ist, die benutzen Bauteile jedoch bei 5V arbeiten und die Ausgangsspannung des Ausgangssignals nicht den µC beschädigen darf, muss die Schaltung auch mit einem Spannungsregler betrieben werden. Dieser besitzt nun die Aufgabe die anliegende Spannung von 9V auf 5V zu reduzieren. 2.3.1 Schaltung Die Einweg-Lichtschranke besteht aus einem Sender und aus einem Empfänger, die sich gegenüber stehen. Sie sind im Abstand von 8 cm zueinander ausgerichtet. Bei Tests bis zu einem Abstand von 15 cm zwischen IR-Diode und Empfänger hat die Schaltung gut funktioniert. Als Sender haben wir eine Infrarotdiode mit einer Wellenlänge von 940nm und einem kleinen Abstrahlwinkel von 24° ausgesucht (LI 520C). Der Empfänger, IS471F von Sharp, ist ein Infrarotdetektor. Er verfügt über ein integriertes Modulationssystem, welches die IR-Diode moduliert. Durch dieses Verfahren wird die Lichtschranke unempfindlich gegenüber Fremdlichteinstrahlung gemacht, die zu Messwertverfälschungen führen könnten. Wird die Lichtschranke unterbrochen, gibt die Schaltung ein Signal an die dahinterliegende Schaltung weiter, wo das Signal per Kabel an die Basisstation weitergegeben wird. Schnelle Schwankungen des Ausgangssignals können vom Mikrocontroller als Störung interpretiert werden. Deswegen wird das Ausgangssignal über den Kondensator C2 gehalten. Die Dimensionierung von C2 haben wir durch Testen verschiedener Kapazitäten vorgenommen. 21 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Um die Funktionstüchtigkeit der Lichtschranke auch bei möglichen Fehlern von Sende- oder Empfangsmodulen, µC etc. zu erkennen, wurde zudem eine LED eingefügt, die den Status der Lichtschranke anzeigt. Die Schaltung erhielt, wegen der bereits genannten Gründe, weiterhin einen Spannungsregler, der das anschließen an eine transportable 9V Spannungsquelle ermöglicht. Da eine LED angesteuert und auch ein Signal mit einer Amplitude von 0-5V gefordert wird, haben wir uns entschieden zwei Transistoren zur Verstärkung des Signals, vom IR-Detektor, zu nutzen. Ein funktionsfähiger Prototyp ist in Abbildung 21 dargestellt. Abb. 21 Funktionsfähiges Prototyp der Lichtschranke Da die Schaltung ein Alarm auslösen soll, wenn die Signalleitung von der Lichtschranke zu dem µC unterbrochen wird, haben wir uns entschieden das Signal 5V mit Lichtstrahl nicht unterbrochen und ~0V mit Lichtstrahl unterbrochen, oder Sabotageversuch kodiert, was der µC auch dementsprechend verarbeiten muss und gegebenenfalls ein Alarm auslösen soll! Um die Schaltung eindrucksvoll zu präsentieren, werden alle nicht optischen Elemente auf die Unterseite der Platine gebracht (siehe Abbildung 22). Somit erleichtert sich auch die Positionierung der optischen Elemente, da nun keine Bauteile aus dem optischen Bereich entfernt werden müssen, oder der freie Weg zwischen der IR-Diode und dem Detektor nicht unnötig verkleinert werden muss. Weiterhin ist es nun nicht mehr so einfach diese Schaltung als Teil einer Alarmanlage zu erkennen, und es wäre möglich die optischen Komponenten mit geeigneten Mitteln zu tarnen. 22 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 22 Fertiges Modul Lichtschranke 2.3.2 Vor- und Nachteile Die Einweg-Lichtschranke bietet den Vorteil, dass alle Objekte, die sich zwischen dem Sensor und dem Empfänger befinden, den Lichtstrahl unterbrechen. Das gilt auch für spiegelnde Objekte, die sonst, bei geschickter Handhabung einem Eindringling erlauben, die Lichtschranke zu passieren, ohne einen Alarm auszulösen. Der Detektor und die IR-Diode werden auf der gleichen Platine untergebracht, um mögliche Probleme mit der Ausrichtung der IR-Diode zu dem Empfänger, z.B. bei Positionsänderung zu vermeiden. Somit erhöht sich die Handhabbarkeit enorm, jedoch kann so nicht die maximale Reichweite genutzt werden und der Eindringling kann den Sinn der Schaltung erahnen. Die Vorteile dieser störungsunempfindlichen Schaltung wiegen aber die Nachteile deutlich auf. Die anderen Lichtschranken weisen einfachere Bauteile auf, die jedoch die genannten Schwächen in Bezug auf Tageslicht, o.ä. besitzen. 2.3.3 Bauteileliste Folgende Bauteile wurden verwendet. Es wurden die Bezeichnungen aus dem Schaltplan Abbildung. 23 verwendet. R1 - 10kOhm/0,25 W - Metallschichtwiderstand R2 - 560Ohm/0,25 W - Kohleschichtwiderstand R3 - 21,8kOhm/0,25 W - Kohleschichtwiderstand R4 - 145Ohm/0,25 W - Kohleschichtwiderstand R7 - 1,2kOhm/0,25 W - Kohleschichtwiderstand R8 - 12kOhm/0,25 W - Kohleschichtwiderstand C1 - 330nF Elektrolytkondensator C2 - 0,1nF Elektrolytkondensator C3 - 0,33nF Elektrolytkondensator C4 - 10µF Elektrolytkondensator 23 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 T2 und T3 - BF199 NPN Transistor US1 - IS471F Infrarot Lichtdetektor mit Modulation LED1 - LED gelb LED2 - IR LED LAMP 5MM LI520C D2 Diode - 1N4148 IC2 - Spannungsregler TS7805 2.3.4 Schaltbild Das Schaltbild der Lichtschranke wurde in Eagle gezeichnet und ist in Abbildung 23 dargestellt. Abb. 23 Vollständiger Schaltplan der Lichtschranke (Eagle) 2.3.5 Platinenlayout Das Layout der Lichtschranke, ebenfalls in Eagle realisiert ist in den Abbildung 24 a-c dargestellt. 24 Projekt Elektronik - Abschlussbericht Abb. 24 a Finales Platinenlayout (Eagle) Abb. 24 b Bottom layer (Eagle) Abb. 24 c Top layer (Eagle) 25 WS 07/08 - ele51 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 3 Basisstation Die Basisstation ist verantwortlich für die Interpretation der Sensordaten und deren Ausgabe. Von einem Timer-Interrupt gesteuert, werden regelmäßig jede Viertelsekunde die Daten abgefragt. Wurde die Lichtschranke durchbrochen, hat sich der Druck über einen Grenzwert vergrößert oder erreicht die Temperatur einen kritischen Wert, dann wird ein Alarm ausgelöst. Dieser äußert sich in einem Piepton und dem Umspringen der grünen „Alles OK“-LED auf die rote „Alarm“-LED. Des Weiteren wird auf dem Display ausgegeben, welcher Sensor den Alarm ausgelöst hat. Die Abbildung 25 zeigt das Zusammenspiel zwischen Basisstation und Temperaturmodul. Abb. 25 Temperaturmodul an Basisstation angeschlossen 3.1 Der Mikrocontroller Wir benutzen einen Atmega32 von Atmel (Abb. 26) zusammen mit einem Entwicklungsboard und dem AVR-Studio für die Programmierung des µC. 26 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 26 Pinbelegung des Atmega32 [4] Der Atmega32 besitzt 4 Ports (A, B, C, D) mit je 8 Bits (PA0..7, PB0..7, PC0..7, PD0..7). Diese können als Ein- oder Ausgänge benutzt werden. Die Pinbelegung der Einund Ausgänge ist in Tabelle 5 dargestellt. Tabelle 5 Pinbelegung der Ein- und Ausgänge des Atmega32 Pin 1 2 3 4 5 6 7 8 14 Bezeichnung PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PD0 15 16 17 PD1 PD2 PD3 18 PD4 19 20 21 22 23 24 25 26 27 PD5 PD6 PD7 PC0 PC1 PC2 PC3 PC4 PC5 Anschluss Piezo-Schallwandler Lichtschranke n.c. LED grün LED rot JTAG JTAG JTAG Kennung2 von Funkempfänger Reset für Funkempfänger Interrupt von Funkempfänger Kennung1 von Funkempfänger Kennung0 von Funkempfänger Taster Taster Taster LCD Data0 LCD Data1 LCD Data2 LCD Data3 LCD Reset LCD Enable 27 Projekt Elektronik - Abschlussbericht 28 29 33 34 35 36 37 38 39 40 3.2 PC6 PC7 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 WS 07/08 - ele51 n.c. n.c. Sensordata 7 Sensordata 6 Sensordata 5 Sensordata 4 Sensordata 3 Sensordata 2 Sensordata 1 Sensordata 0 Kommunikation 3.2.1 Kommunikation mit dem Druck- und mit dem Temperaturmodul Da Drucksensor- und Temperatursensorplatine analog zueinander aufgebaut sind, verhält sich auch die Kommunikation mit der Basisstation analog. Der Datenaustausch erfolgt per Kabel und per Funk. Direkte Kommunikation per Kabel Bei direkter Kommunikation (Kabel) mit Druck- bzw. Temperaturmodul werden elf Leitungen benötigt. Dabei sind acht Datenleitungen vorgesehen, die den AD-gewandelten Druck- bzw. Temperaturwert übertragen, und drei Steuerleitungen. Von den drei Steuerleitungen werden zwei vom Mikrokontroller gesetzt (RD, WR) und eine (INTR) vom AD-Wandler der Sensorplatine, wenn dieser mit der Konvertierung fertig ist. Die Steuerleitungen RD und WR dienen dem Auslesen der Daten und dem Starten der nächsten Konvertierung. Kommunikation per Funk Bei der Kommunikation per Funk ist die Basisstation mit dem Funkempfänger verbunden. In diesem Fall gibt es 13 Leitungen. Wie zuvor, übertragen acht Leitungen die Daten und fünf Leitungen dienen als Steuerleitungen bzw. Kennungsleitungen. Die zwei Steuerleitungen setzen sich aus einer Interrupt- und einer Reset-Leitung zusammen. Die Interrupt-Leitung kommt vom Funkempfänger und gibt an, wenn die Daten bereit sind und vom Mikrokontroller gelesen werden können. Dieser gibt mit der ResetLeitung bekannt, dass die Daten fertig ausgelesen wurden und der nächste Datensatz übertragen werden kann. Die Sensormodule haben verschiedene Kennungen, damit man den ausgelösten Alarm der Gefahrenquelle zuordnen kann. Diese Kennung wird über die restlichen drei Leitungen übertragen, so dass der Mikrokontroller auf dem Display ausgeben kann, welcher Sensor einen Alarm ausgelöst hat. Durch die 3Bit Kennungsleitung ist es also möglich bis zu 6 Sensormodule zu unterscheiden. Eine schematische Darstellung der Schnittstelle von Funkempfänger und Basisstation ist in Tabelle 6 abgebildet. 28 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Tabelle 6 Schematische Darstellung der Schnittstelle von Funkempfänger und Basisstation 12 RE S 11 INT 10 Kenn 2 9 Kenn 1 8 Kenn 0 7 Data 7 6 Data 6 5 Data 5 4 Data 4 3 Data 3 2 Data 2 1 Data 1 0 Data 0 3.2.2 Kommunikation mit der Lichtschranke Die Lichtschranke ist mit einer Datenleitung an den Mikrokontroller angeschlossen. Diese Datenleitung ist konstant auf logisch „high“ gesetzt (ca. 5V). Wenn die Lichtschranke durchbrochen oder die Datenleitung abgetrennt wird, interpretiert der Mikrokontroller das als Alarmauslöser. 3.3 Datenverarbeitung 3.3.1 Time-Overflow-Interrupt Das Kernstück des Mikrokontroller-Programms ist der Timer-Overflow-Interrupt. Der Timer-Overflow-Interrupt wird benutzt um eine Uhr zu steuern. In regelmäßigen Abständen (wenn die Uhr wieder eine Viertelsekunde verstreichen sehen hat) werden die entscheidenden Eingangs-Pins abgefragt. Sind in der Zwischenzeit bestimmte Interrupts gesetzt worden, Taster gedrückt oder andere entscheidende Pins gesetzt, dann werden flags gesetzt, die in der main-Routine die Abarbeitung der Ereignisse steuern. 3.3.2 Datenverarbeitung für die Ausgabe Die Daten des Druck- bzw. Temperatursensors liegen als binäre 8Bit Zahl an. Diese muss zunächst in eine Dezimalzahl gewandelt werden. Eine Skalierung führt dazu, dass die 256 Werte auf den entsprechenden Druck bzw. Temperaturen konvertiert werden. Dabei werden auch zwei Nachkommastellen berücksichtigt und auf dem Display ausgegeben. 3.4 Warnsystem 3.4.1 LED, Piepser Zwei LEDs und ein piezoelektrischer Schallwandler zeigen an, ob ein Alarm ausgelöst wurde oder nicht. Leuchtet die grüne Status-LED, so ist die Alarmanlage in Betrieb und alles in Ordnung. Leuchtet die rote LED auf und ertönt das Piepsen des Schallwandlers, weiß der Benutzer, dass ein Alarm ausgelöst wurde. Der Schallwandler erzeugt einen Schalldruck von ca. 85dB bei einer Frequenz von 2048Hz. 29 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 3.4.2 LCD-Anzeige Das benutzte LCD-Display (Abbildung 27) ist das folgende: LCD Display 162C-BC-BC Abb. 27 LCD Display 162C-BC-BC Die Angabe auf dem LCD-Display sieht wie in Abbildung 28 aus. T° 45 Dr OK Li AL S4 OK Abb. 28 Information auf dem LCD-Display Dabei steht T° für die Temperatur, Dr für den Druck sensor, Li für die Lichtschranke, S4 für einen optionalen vierten Sensor, AL falls ein Alarm ausgelöst wurde, OK, wenn kein Alarm ausgelöst wurde. Zur Ansteuerung des Displays stehen 16 Bits zur Verfügung, deren Bedeutung ist in Tabelle 7 vorgestellt. Tabelle 7 Bits zur Ansteuerung des Displays Pin # 1 2 3 4 Bezeichnung Vss Vcc Vee RS 5 6 R/W E Funktion GND 5V Kontrastspannung (0V bis 5V) Register Select (Befehle/Daten) Read/Write Enable 7 8 9 10 11 DB0 DB1 DB2 DB3 DB4 Datenbit 0 Datenbit 1 Datenbit 2 Datenbit 3 Datenbit 4 12 DB5 Datenbit 5 30 Anschluss 0V (ground) 5V 0V (ground) Steuerleitung (PD4) 0V (ground) Steuerleitung (PD5) n.c. n.c. n.c. n.c. Steuerleitung (PD0) Steuerleitung Atmega32 Atmega32 Atmega32 Atmega32 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 13 DB6 Datenbit 6 14 DB7 Datenbit 7 15 16 A K LED-Beleuchtung, Anode LED-Beleuchtung, Kathode (PD1) Steuerleitung (PD2) Steuerleitung (PD3) n.c. n.c. Atmega32 Atmega32 Pin1 wird an das Masse-Potential angeschlossen, Pin2 an die 5V Betriebsspannung. Vee wird konstant auf Masse-Potential gehalten. Das reicht vorerst als Kontrastspannung. RS wird an eine Steuerleitung des Atmega32 gelegt. Über diese wird entschieden, ob Daten zur Ausgabe auf dem Display oder aber Befehle (wie z.B. das Setzen des Cursors) gesendet werden. R/W wird ebenfalls auf Masse gelegt, da wir nur Daten an das Display senden, aber keine auslesen. Pin6, das Enable (E), wird wie Pin4 an eine Steuerleitung des Atmega32 gelegt. Damit wird dem LCD-Display signalisiert, dass die Pegel korrekt anliegen. Mit DB4…7 werden die Daten an das Display geschickt. Die Datenbits DB0…3 bleiben offen. Es reichen 4Bits für unsere Darstellung. Auch die Hintergrundbeleuchtung des Displays wird zunächst weggelassen. Die Programmierung des LCD-Displays wird durch Einbinden der vorhandenen „lcdroutines.h“ bewerkstelligt. Damit sind fertige Funktionen eingebunden, mit denen direkt auf das Display geschrieben werden kann. Diese Funktionen berücksichtigen bereits Wartezeiten, die das Display für die Ausgabe benötigt und sind auch sonst bereits optimiert. Einige Funktionsaufrufe sollen hiermit beispielhaft aufgeführt werden: lcd_init(); lcd_data('T'); set_cursor(0,2); lcd_string("Hello World!"); // zum Initialisieren des Displays // um einzelne Zeichen auf das Display zu schreiben // um den Cursor an eine gewünschte Stelle zu setzen // um einen ganzen String auszugeben Einige Funktionen wurden zusätzlich für die Darstellung implementiert. lcd_menu(); lcd_refresh(LS2, AL); //Für das Menü //um den Zustand eines Sensor auf dem Display zu aktualisieren ohne das gesamte Display zu löschen lcd_temp_refresh(LS1, temp); //um die Temperatur auszugeben, ohne das restliche Display zu löschen 31 Projekt Elektronik - Abschlussbericht 3.4 WS 07/08 - ele51 Die Platine Die Platine der Basisstation wurde mit dem Layout-Programm Eagle erstellt. 3.4.1 Schaltbild In der Abbildung 29 ist das das Gesamtschaltbild der Platine dargestellt. Abb. 29 Schaltbild der Basisstation (Eagle) 3.4.2 Platinenlayout In Abbildung 30 ist das Eagle-Board der Basisstation dargestellt. 32 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 30 Eagle-Board der Basisstation 3.5 C-Code Der ausführlich kommentierte C-Code steht als Datei zur Verfügung. 33 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 4 Funkmodul Wir haben uns für den 433 MHz Standard entschieden, für den recht günstige Sendeund Empfangsmodule erhältlich sind. Das Sendemodul ist ein SAW RF Transmitter Modul (mit integrierter Antenne) und das Empfangsmodul ein Standard (OOK) Receiver. Beide Module sind von der Firma AUREL und eignen sich für eine serielle Digitalübertragung (5 V Technik). Da diese Module die Modulation und Demodulation der Digitaldaten vollständig übernehmen, kann der Sender als einfache reelle Last und der Empfänger als Generator angesehen werden, bei dem die gesendeten Daten um einen Zeitraum ∆t verschoben ankommen (siehe Abbildung 31). Abb. 31 Äquivalente Schaltungen für den Sender und den Empfänger 4.1 Empfänger Da der Takt nicht mit übertragen wird, handelt es sich um eine asynchrone serielle Datenübertragung, bei dem der Empfänger sich erst auf den Sendetakt synchronisieren muss. Dies soll mit Hilfe eines CLPD der Firma Altera und der Entwicklungsumgebung Quartus II geschehen. Der CLPD soll die Synchronisation vornehmen und die seriellen Daten parallel ausgeben. Die Beschreibung der Digitalschaltung erfolgt in VHDL. Die Abbildung 32 zeigt die fertige Empfängerplatine. 34 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 32 Empfänger – fertige Platine Das Blockschaltbild ist in Abbildung 33 dargestellt. Die einzelnen Komponenten werden in den folgenden Abschnitten näher beschrieben. Abb. 33 Blockschaltbild der Digitalschaltung 4.1.1 Takterzeugung Die Takterzeugung soll aus dem Signal „Takt“ (Abb. 33) 10 phasenverschobene Takte mit der Frequenz 2kHz erzeugen. Die Takterzeugung kann in VHDL wie folgt beschrieben werden: 35 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 library ieee; use ieee.std_logic_1164.all; entity takt_teiler is port(clk : in std_logic; c : buffer std_logic_vector(9 downto 0)); end takt_teiler; architecture behaviour of takt_teiler is begin process(clk) -- Phasenverschiebung Realisierung variable i : integer range 0 to 4; begin if (clk = '1' and clk'event) then if (i=4) then case i is when 0 => c(0)<= not c(0); when 1 => c(1)<= not c(1); when 2 => c(2)<= not c(2); when 3 => c(3)<= not c(3); when 4 => c(4)<= not c(4); end case; i:=0; else case i is when 0 => c(0)<= not c(0); when 1 => c(1)<= not c(1); when 2 => c(2)<= not c(2); when 3 => c(3)<= not c(3); when 4 => c(4)<= not c(4); end case; i:= i+1; end if; end if; c(5) <= not c(0); c(6) <= not c(1); c(7) <= not c(2); c(8) <= not c(3); c(9) <= not c(4); end process; process(clk) --Taktteiler Realisierung variable l: integer range 0 to 24:=0; begin if (clk = '1' and clk'event) then if (l=24) then clk_s <= not clk_s; l:=0; else l:=l+1; end if; end if; end process; 36 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 end behaviour; Das Ergebnis der Simulation ist in Abbildung 34 dargestellt. Aus Gründen der Anschaulichkeit wurde hier nur clk_s (clk im Bild) dargestellt. Die Zeitachsen sind im Folgenden immer skaliert. Abb. 34 Simulationsergebnis der Takterzeugung (Quartus II) 4.1.2 Taktauswahl Die Taktauswahl erfolgt in Abhängigkeit des syn-Signals. Bei der asynchronen seriellen Datenübertragung soll hier als erstes Signal immer ein High-Pegel übertragen werden, auf das sich dann der Empfänger innerhalb eines viertel Taktes synchronisieren soll. Die Taktauswahl wurde in VHDL wie folgt beschrieben: library ieee; use ieee.std_logic_1164.all; entity waehle_takt is port( clk : in std_logic; syn : in std_logic; reset : in std_logic; c : in std_logic_vector(9 downto 0); o_clk : out std_logic); end waehle_takt; architecture behaviour of waehle_takt is begin process(clk, reset) variable lock : integer range 0 to 1 := 0; variable i : integer range 0 to 9 := 0; begin if (reset ='1') then lock:=0; elsif(clk'event and clk='1') then 37 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 if(lock=0 and syn ='1') then if (c(9)='1' and c(0) ='0') then i:=0; elsif (c(0)='1' and c(1) ='0') then i:=1; elsif (c(1)='1' and c(2) ='0') then i:=2; elsif (c(2)='1' and c(3) ='0') then i:=3; elsif (c(3)='1' and c(4) ='0') then i:=4; elsif (c(4)='1' and c(5) ='0') then i:=5; elsif (c(5)='1' and c(6) ='0') then i:=6; elsif (c(6)='1' and c(7) ='0') then i:=7; elsif (c(7)='1' and c(8) ='0') then i:=8; elsif (c(8)='1' and c(9) ='0') then i:=9; end if; lock:=1; end if; end if; if (lock=0) then o_clk <= '0'; else o_clk <= c(i); end if; end process; end behaviour; Das Ergebnis der Simulation ist in Abbildung 35 dargestellt. Abb. 35 Simulationsergebnis der Taktauswahl (Quartus II) 4.1.3 Block Takterzeugung und Synchronisation Der Block Takterzeugung und Synchronisation ist einfach die Zusammenschaltung der beiden oberen Schaltungen. Er wird in VHDL wie folgt beschrieben: library ieee; 38 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 use ieee.std_logic_1164.all; entity generate_and_syn_clk is port ( clk : in std_logic; syn : in std_logic; reset : in std_logic; o_clk : out std_logic); end generate_and_syn_clk; architecture structural of generate_and_syn_clk is signal s : std_logic_vector(9 downto 0); component takt_teiler port( clk : in std_logic; c : buffer std_logic_vector(9 downto 0)); end component; component waehle_takt port( clk : in std_logic; syn : in std_logic; reset : in std_logic; c : in std_logic_vector(9 downto 0); o_clk : out std_logic); end component; begin t_t : takt_teiler port map(clk, s); w_t : waehle_takt port map(clk, syn, reset, s, o_clk); end structural; Das Ergebnis der Simulation ist in Abbildung 36 zu sehen. Abb. 36 Simulation der Takterzeugung und Synchronisation (Quartus II) 4.1.4 Serielle Daten in parallele umwandeln Dieser Baustein bekommt die seriellen Daten des Funkempfängers und liefert sie parallel nach außen. Er kann in VHDL wie folgt beschrieben werden: library ieee; use ieee.std_logic_1164.all; 39 Projekt Elektronik - Abschlussbericht entity serial_to_parallel is generic (w : positive); port( clk_s : in std_logic; s : std_logic; reset : in std_logic; int : out std_logic; p : buffer std_logic_vector(w-1 downto 0)); end serial_to_parallel; architecture behaviour of serial_to_parallel is begin process(clk_s, reset) variable i: integer range 0 to w :=0; variable v_int : std_logic :='0'; begin if(reset = '1') then i:=0; v_int := '0'; elsif(clk_s'event and clk_s = '1') then if(v_int = '0') then if (i/=w) then if (i/=0) then p(i-1) <= s; end if; i:=i+1; else p(i-1) <= s; v_int := '1'; end if; end if; int <= v_int; end if; end process; end behaviour; 4.1.5 VHDL Beschreibung der Gesamtschaltung Die VHDL Beschreibung der Gesamtschaltung sieht wie folgt aus: library ieee; use ieee.std_logic_1164.all; entity asyn_serial is port ( clk : in std_logic; s : in std_logic; -- serieller Eingang reset : in std_logic; -- asynchroner reset-Eingang p : out std_logic_vector(width-1 downto 0); --parallele Ausgabe int : out std_logic); -- Interrupt (out) für gültige Daten end asyn_serial; 40 WS 07/08 - ele51 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 architecture structural of asyn_serial is component generate_and_syn_clk port ( clk : in std_logic; syn : in std_logic; reset : in std_logic; o_clk : out std_logic); end component; component serial_to_parallel generic (w : positive := 8); port( clk_s : in std_logic; s : std_logic; reset : in std_logic; int : out std_logic; p : buffer std_logic_vector(w-1 downto 0)); end component; signal s_o_clk : std_logic; begin g : generate_and_syn_clk port map(clk, s, s_o_clk); s_p : serial_to_parallel port map(s_o_clk, s, '0', int, p); end structural; Das Ergebnis der Simulation der Gesamtschaltung ist in Abbildung 37 zu sehen. Takt – clk, serielle Daten – s, paralleler Ausgang – p und Interrupt – int Abb. 37 Simulationsergebnis der Gesamtschaltung (Quartus II) 4.1.6 Bauteileliste EPM7064SCL84 10 pF Kondensator 1MHz Oszillator 41 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 4.1.7 Schaltbild In Abbildung 38 ist das Gesamtschaltbild des Empfängers abgebildet. Abb. 38 Gesamtschaltbild des Empfängers (Eagle) 4.1.8 Platinenlayout Abbildung 39 stellt das Platinenlayout des Empfängers dar. 42 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 39 Layout des Empfängers (Eagle) 4.2 Sender Der Sender interagiert mit dem A/D-Wandler ADC0803, dessen Digitalwerte entweder die Temperatur oder den Druck darstellen. Für die Kommunikation mit diesem A/D-Wandler wurde eine Finite State Machine (FSM) gemäß der Timing-Diagramme des Datenblatts in VHDL entworfen. Diese FSM übernimmt das gesamte „Handshake“ mit dem Baustein bis hin zur parallelen Übernahme der Digitaldaten. Diese parallelen Daten werden noch um ein 3Bit Code, welcher eine Unterscheidung zwischen Temperatur- und Druckmodul ermöglichen soll und um ein gesetztes Bit, welches dem Empfänger zur Synchronisation dient, ergänzt. Diese Bitreihe wird dann seriell an das Sendemodul von der Firma Aurel mit einer Geschwindigkeit von 2kBit/s herausgeshiftet. Ein Foto der fertigen Senderplatine ist in Abbildung 40 zu sehen. 43 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 40 Senderplatine 4.2.1 Entwicklung der Finite State Machine Um die Entwicklung der FSM transparenter zu machen, soll hier auszugsweise das Timing-Verhalten des A/D Wandlers aus dem Datenblatt ADC0801 [5] abgebildet werden (Abb. 41 a und Abb. 41 b). Das Signal CS ist immer auf 0V, da pro Modul nur ein A/D-Wandler verwendet wird und daher ein Ausschalten unnötig ist. Ein gültiger Zyklus zum Abrufen der Daten sieht dann wie folgt aus: Um den Chip zu initialisieren, muss das WR-Signal einen negativen Puls erfahren. Wenn das Signal INTR auf null geht und CS auf null ist, können mit einem negativen Puls an dem Eingang RD die Daten abgerufen werden. Der INTR wird getilgt und nach einem Anstieg des RD Signals von null auf eins, kann ein neuer Konvertierungszyklus beginnen. Die abgeleitete FSM ist in Abbildung 42 dargestellt. 44 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 41 a Timing-Verhalten des A/D Wandlers [5] Abb. 41 b Timing-Verhalten des A/D-Wandlers [5] 45 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 42 Finite State Machine für den A/D-Wandler An den Zuständen 0 bis 4 wurden nur die Änderungen der Signale RD und WR angegeben. Die Standardwerte sind RD = 1 und WR = 1.Das Signal „abrtime“ wurde hier noch zusätzlich aufgenommen und stellt ein intern erzeugtes Signal des CPLD dar. Dieses Signal toggelt zweimal pro Sekunde und sorgt dafür, dass die Digitaldaten eben nur zweimal in der Sekunde über die Funkschnittstelle übertragen werden. 4.2.2 VHDL Beschreibung der Finite State Machine Die VHDL Beschreibung weist zwei Prozesse auf. Ein Prozess dient der kombinatorischen Logik und der andere dem Setzen der Register, welche den aktuellen Zustand speichern. 4.2.3 Bauteileliste EPM7064SLC44 10pF Kondensator 1MHz Oszillator 4.2.4 Schaltbild In Abbildung 43 ist das Gesamtschaltbild des Senders dargestellt. 46 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 43 Gesamtschaltbild des Senders (Eagle) 4.2.5 Platinenlayout Das Platinenlayout des Senders ist in den Abbildungen 44 a-c dargestellt. Abb. 44 a Platinenlayout für den Sender (Eagle) 47 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abb. 44 b Bottom layer (Eagle) Abb. 44 c Top layer (Eagle) 4.3 Schnittstellen der Module Der Sender weißt eine dem Funkmodul bzw. Temperaturmodul völlig analoge Schnittstelle auf, sodass eine Steckverbindung mittels Flachbandkabel problemlos möglich ist. Der Empfänger weißt eine der MC-Platine gleiche Schnittstelle auf, sodass auch hier eine Übertragung der Daten über ein Flachbandkabel erfolgt. 48 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 5 Zusammenfassung Das Zusammenspielen der einzelnen Module mit der Hauptstation hat einen sehr großen Teil der Zeit benötigt, da Schnittstellen sich während des Projektes geändert haben und so z.B. die anfangs in Erwägung gezogene Funkverbindung aller Module mit der Basisstation leider sehr starke Probleme bei der Realisierung brachte. Daher änderten sich teilweise auch die Anforderungen an die einzelnen Schaltungen. So wurde das Modul Lichtschranke nur noch für eine Kabelanbindung mit der Basisstation ausgelegt. Probleme ergaben sich auch bei den fertig geätzten Platinen, da diese teilweise lange geprüft und einige nachgearbeitet werden mussten, da Fehler auf diesen Platinen vorlagen. Teilweise ergaben sich hieraus auch sehr lange und intensive Fehlersuchen, nach der Bestückung, da bei einigen Leiterbahnen noch Verbindungen zur Masse vorlag, aber auch einige Lötaugen keine leitende Verbindung zu der entsprechenden Leiterbahn hatten. Diese Probleme konnten aber alle gelöst werden. Die Kommunikation über die Funkverbindung erwies sich letztlich als sehr kompliziert, anders als anfänglich gedacht. Die Fehlersuche bei diesem Übertragungsweg ist sehr komplex und erfordert daher eine sehr aufwendige Fehlersuche. Unser Betreuer gab immer sehr gute Hilfestellung, wenn wir nicht weiter wussten und ein Problem nicht selbst lösen konnten. Das Realisieren der von uns selbst ausgewählten neuartigen Schaltung, über die Zwischenschritte der Berechnung, Simulation, Erstellen der Layouts und Bestücken der Platinen hat uns sehr viel Freude bereitet und uns viel Erfahrung für das spätere Berufsleben sammeln lassen. Das erlernte Wissen über die Vorgehensweise bei der Fehlersuche ist für uns alle sehr nützlich. Das Zusammenarbeiten in dieser Gruppe hat uns allen sehr viel Spaß gemacht und unsere Teamkompetenz verbessert. 6 Literaturverzeichnis [1] http://ife.et.tu-dresden.de/de/lehre/sensorik/TSensoren.PDF [2] Conrad Electronic [3] Datenblatt ADC0803LCD http://www.ortodoxism.ro/datasheets/philips/ADC0803LCD.pdf [4] Datenblatt Atmega32 http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf [5] Datenblatt ADC0801, http://www.datasheetcatalog.com/datasheets_pdf/A/D/C/0/ADC0801.shm weitere Quellen: www.mikrocontroller.net www.pollin.de www.conrad.de www.google.de http://de.wikipedia.org/wiki/Pt100 www.home.snafu.de/sicpaul/midi/hexbin.htm www.roboternetz.de www.nongnu.org/avr-libc/user-manual/modules.html http://www.1zu160.net/elektrik/lichtschranke2.php Burkhard Mann: C für Mikrocontroller, 2.Auflage Franzis’ 49 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 7 Abbildungsverzeichnis Abbildung 1 Einfaches Blockschaltbild der Alarmanlage Abbildung 2 Kennlinie des Pt100 [1] Abbildung 3 Platine Temperaturmodul Abbildung 4 Blockschaltbild des Temperaturmoduls Abbildung 5 Typ PT 100 M 222 1/3B 20NIPt 10 [2] Abbildung 6 Brückenschaltung für die Sensorstufe (PSpice) Abbildung 7 Spannungsfolger mit OPV (PSpice) Abbildung 8 Verstärkerschaltung (PSpice) Abbildung 9 Schaltung für AD Umsetzung [3] Abbildung 10 Zeitdiagramm des ADUs für das Schreiben [3] Abbildung 11 Zeitdiagramm des ADU für Lesen [3] Abbildung 12 Gesamtschaltbild des Temperaturmoduls (PSpice) Abbildung 13 Platinenlayout für das Temperaturmodul (Eagle) Abbildung 14 Drucksensor-FSR-149NS [2] Abbildung 15 Fertige Platine des Drucksensors Abbildung 16 Brückenschaltung beim Druckmodul (PSpice) Abbildung 17 Verstärkungsstufe des Druckmoduls (PSpice) Abbildung 18 Gesamtschaltbild des Druckmoduls (PSpice) Abbildung 19 Platinenlayout für das Druckmodul (Eagle) Abbildung 20 Blockschaltbild der Lichtschranke Abbildung 21 Funktionsfähiger Prototyp der Lichtschranke Abbildung 22 Vollständiges Modul Lichtschranke Abbildung 23 Vollständiger Schaltplan der Lichtschranke (Eagle) Abbildung 24 a Finales Platinenlayout (Eagle) Abbildung 24 b Bottom layer (Eagle) Abbildung 24 c Top layer (Eagle) Abbildung 25 Temperaturmodul an Basisstation angeschlossen Abbildung 26 Pinbelegung des Atmega32 [4] Abbildung 27 LCD Display 162C-BC-BC Abbildung 28 Information auf dem LCD-Display Abbildung 29 Schaltbild der Basisstation (Eagle) Abbildung 30 Layout der Basisstation (Eagle) Abbildung 31 Äquivalente Schaltungen für den Sender und den Empfänger Abbildung 32 Empfänger – fertige Platine Abbildung 33 Blockschaltbild der Digitalschaltung Abbildung 34 Simulationsergebnis der Takterzeugung (Quartus II) Abbildung 35 Simulationsergebnis der Taktauswahl (Quartus II) Abbildung 36 Simulation der Takterzeugung und Synchronisation (Quartus II) Abbildung 37 Simulationsergebnis der Gesamtschaltung (Quartus II) Abbildung 38 Gesamtschaltbild des Empfängers (Eagle) Abbildung 39 Layout des Empfängers (Eagle) Abbildung 40 Senderplatine Abbildung 41 a Timing-Verhalten des A/D Wandlers [5] Abbildung 41 b Timing-Verhalten des A/D-Wandlers [5] Abbildung 42 Finite State Machine für den A/D-Wandler Abbildung 43 Gesamtschaltbild des Senders (Eagle) Abbildung 44 a Platinenlayout für den Sender (Eagle) 50 2 6 7 7 8 9 10 10 11 12 12 13 14 16 17 17 18 19 19 21 22 23 24 25 25 25 26 27 30 30 32 33 34 35 35 37 38 39 41 42 43 44 45 45 46 47 47 Projekt Elektronik - Abschlussbericht WS 07/08 - ele51 Abbildung 44 b Bottom layer (Eagle) Abbildung 44 c Top layer (Eagle) 48 48 8 Tabellenverzeichnis Tabelle 1 Simulationsergebnisse für das Temperaturmodul 14 Tabelle 2 Messergebnisse für das Temperaturmodul 15 Tabelle 3 Simulationsergebnisse für das Druckmodul 20 Tabelle 4 Messergebnisse für das Druckmodul 20 Tabelle 5 Pinbelegung der Ein- und Ausgänge des Atmega32 27/28 Tabelle 6 Schematische Darstellung der Schnittstelle von Funkempfänger und Basisstation 29 Tabelle 7 Bits zur Ansteuerung des Displays 30/31 51