Klopfsensormessgerät

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Hier entsteht eine Seite zum Klopfsensormessgerät für Verbrennungsmotoren siehe: http://www.mikrocontroller.net/topic/190088#new

Ein Projekt von Peter Diener (pdiener) und Stefan Mandl (metaworld).

Einführung

Als "Klopfen" bezeichnet man bei Verbrennungsmotoren eine explosionsartige Verbrennung des Gemischs, verursacht durch druckbedingte Selbstzündung. Klopfen tritt vor allem bei Benzinmotoren auf, die bei hoher Verdichtung zu früh zünden. Die frühzeitige Zündung führt zu einem Druckanstieg im Brennraum, wodurch sich auch Volumenteile, die noch nicht von der von der Zündkerze ausgehenden Flammenfront erfasst worden sind, alleine durch den druckbedingten Temperaturanstieg explosionsartig entzünden. Man spricht in diesem Zusammenhang auch von einer Detonation des Gemischs. Dabei brennt das Benzin-Luft-Gemisch nicht kontinuierlich von der Zündkerze ausgehend ab, sondern zündet im gesamten Brennraum nahezu gleichzeitig. Dadurch entsteht eine hochfrequente Druckwelle, die beim Auftreffen auf den Kolben auf den gesamten Antriebsstrang wirkt.

Der Druck, ab dem ein Brennstoff-Luft-Gemisch von selbst zündet, hängt unter anderem von der Oktanzahl des eingesetzten Brennstoffes ab. Brennstoffe mit niedriger Oktanzahl zünden bei niedrigerem Druck als Brennstoffe mit hoher Oktanzahl.

Die Oktanzahl (ROZ) ist ein Maß für die Klopffestigkeit. Der Einsatz von minderwertigem Brennstoff (ROZ < 91) in modernen Benzinmotoren kann zu klopfender Verbrennung führen.

Der besonders hohe Druck und die hochfrequenten Kräfte, die bei klopfender Verbrennung wirken, können einen Motor schädigen und auch (in Extremfällen) sehr schnell zerstören.

Um Brennstoff einzusparen und Motoren möglichst leistungsfähig zu machen, ist eine früh gezündete, jedoch noch nicht klopfende Verbrennung notwendig. Dennoch ist es erwünscht, dass solche Motoren auch mit minderwertigem Brennstoff betrieben werden können. Weiterhin muss beachtet werden, dass ein zu früh gewählter Zündzeitpunkt sich aber auch wieder negativ auf die Leistung auswirkt. Ideal sollte der höchste Verbrennungsdruck bei etwa 20° Kurbelwelle nach OT liegen. Auch müssen hierbei bauliche Eigenschaften des Motors beachtet werden, wie etwa das Verhältnis von Pleuel zu Hub.

Die Motorsteuerung kann durch Auswertung eines Klopfsensors auf klopfende Verbrennung reagieren und üblicherweise durch späteres Zünden eine klopfende Verbrennung unterbinden und damit eine Schädigung des Motors vermeiden.

Der Klopfsensor besteht oft aus einem piezoelektrischen Schallwandler, der den hochfrequenten Körperschall am Motor in ein elektrisches Signal wandelt.

Im Rahmen dieses Projekts soll eine Auswerteschaltung für einen solchen Klopfsensor entwickelt werden.

Dieses Messgerät kann beispeilsweise für eigene Motorsteuerungen im Rennsport, im Bereich der Forschung und Entwicklung oder als Kontrollmessgerät an Prüfständen und in Werkstätten eingesetzt werden.

Ein besonders interessantes Einsatzgebiet ergibt sich bei methanolbetriebenen Modellverbrennungsmotoren, deren Zündung mittels Glühkerzen erfolgt. Hier ist eine Abstimmung der Glühkerzentemperatur auf Verdichtung und Nitromethananteil im Brennstoff in Bezug auf das Auftreten klopfender Verbrennung notwendig. Dabei kann ein Klopfmessgerät sehr hilfreich sein.

Der Autor übernimmt keinerlei Verantwortung für eventuell auftretende Schäden, die durch den Nachbau oder Einsatz bzw. eventuelle Fehlfunktion, mangelnde Zuverlässigkeit oder ähnliche Fehler der Schaltung eintreten. Jeder, der dieses Projekt nachbaut oder einsetzt, handelt auf eigene Gefahr und sollte wissen, dass ein Verbrennungsmotor eine leistungsstarke Maschine ist, die bei falscher Betriebsweise schwere Schäden an Sachen und Personen verursachen kann. Weiterhin sei an dieser Stelle darauf hingewiesen, dass bei einer Modifikation eines Kraftfahrzeugs oder einer anderen Maschine mit Verbrennungsmotor eventuell die Zulassung erlischt und ein Betrieb unzulässig ist.

Hardware

Ein TPIC8101 digitalisiert, filtert, und verstärkt das Signal vom Klopfsensor. Nach dieser Vorverarbeitung erfolgt eine digitale Gleichrichtung und Integration. Nach der Integration steht quasi eine über einen bestimmten Zeitraum aufakkumulierte Lautstärke des Klopfgeräusches im Messwertregister des TPIC8101. Der Integrator muss regelmäßig nach dem Auslesen auf 0 zurückgesetzt werden. Ein ATmega8 ist über SPI mit dem TPIC8101 verbunden und konfiguriert das Filter, die programmierbare Verstärkung, den Integrator und den Eingangskanal. Die Messdaten werden digital als 10 bit Wert über SPI ausgelesen und über die serielle Schnittstelle ausgegeben. Nach dem Auslesen erfolgt das Rücksetzen des Integrators über das Signal "Int_hold". Eine Analogausgabe über RC-gefilterte PWM sowie eine Digitalausgabe eines Binärwertes (klopft / klopft nicht) ist geplant. Wahlweise kann eines der beiden analogen Klopfsensorsignale mit dem LM386 verstärkt und über einen Kopfhörer direkt abgehört werden. Die Lautstärke ist über ein Poti einstellbar.

Leiterplattenlayout (KiCAD 3D Simulation)

Die Schaltung beinhaltet weiterhin einen 5V-Spannungsregler zur Versorgung des ATmega8, des TPIC8101 und des MAX232. Der 12V-Spannungseingang ist über eine bidirektionale 24V TVS-Diode vor transienten Überspannungen eines KFZ-Bordnetzes geschützt. Der Spannungseingang ist verpolgeschützt und mittels Feinsicherung gegen Überstrom geschützt. Der Analogausgang sowie der Digitalausgang sind über unidirektionale 5,6V TVS-Dioden gegen leitungsgekoppelte Transienten geschützt.

Es gibt einen Taster zum Start eines Bootloaders. Darüber soll ein Firmwareupdate über die serielle Schnittstelle ohne spezielles Programmiergerät möglich sein.

Die Schaltung ist mit KiCAD gezeichnet, es gibt einen (ungetesteten) Schaltplan sowie ein Leiterplattenlayout. Die Leiterplatte ist noch nie gefertigt worden, es kann sein, dass noch Fehler drin sind. Die Platine kann einseitig geätzt werden, die wenigen Leiterbahnen auf der Oberseite können dann als Draht eingelötet werden. Es wurde bewusst auf intensive Benutzung von SMD-Bauformen verzichtet.

Erste Version siehe

Aktuelle Version:


Software

Die Software ist zur besseren Übersicht in mehrere Module geteilt:

  • SPI.c: Hardware SPI Treiber für ATmega8
  • TPIC8101.c: Treiber für TPIC8101
  • UART.c: UART mit FIFO
  • Klopfsensor.c: Hauptprogramm

Die Kommunikation mit einem PC erfolgt über ein gewöhnliches Terminalprogramm. Einstellungen:

  • Baudrate: 115200
  • Format: 8n1
  • Flow Control: None

Momentan wird nur alle 10 Millisekunden der Messwert als ASCII String ausgegeben und der Cursor wieder an den Zeilenanfang geschoben, z.B. so:

   Klopfwert: 42  \r

Man sieht also immer nur eine Zeile mit dem aktuellen Wert.

Verwendete Module anderer Programmierer: UART mit FIFO von Peter Dannegger

Die Software läuft, man bekommt plausible Werte. Mit einem echten Klopfsensor ist der Aufbau allerdings noch nicht getestet.

Programmieren des Mikrocontrollers

Es sind prinzipiell zwei Möglichkeiten vorgesehen, wie die Firmware in den Flashspeicher des ATmega8 programmiert werden kann:

  • über ein ISP Programmiergerät
  • über einen Bootloader

Natürlich kann statt der ISP Programmierung auch eine HV-Programmierung verwendet werden. Die Fuseeinstellungen sind dabei identisch zu wählen, damit eine ISP Programmierung auch später noch möglich ist.

Direktes Programmieren mit ISP

Dafür wird für jeden Programmiervorgang ein ISP Programmiergerät benötigt. Es eignet sich beispielsweise das AVRISP MKII von Atmel. Nachdem das Projekt "Klopfsensor.aps" in AVR Studio geöffnet worden ist, erstellt man den Maschinencode mit F7. Wenn das Programmiergerät richtig mit der Schaltung und dem PC verbunden ist, wählt man im Menu

Tools → Program AVR → Connect...

Dann AVRISP MKII und USB auswählen und "Connect" drücken. Daturch öffnet sich ein neues Fenster mit den Einstellungen zum Programmieren des ATmega.

Als erstes wählt man den Reiter "HW Settings" und drückt "Read". VTarget muss jetzt etwa 5 Volt anzeigen. Ist das nicht der Fall, liegt keine Versorgungsspannung an.

Die Fuses müssen nur einmal programmiert werden, die Einstellungen gehen bei weiteren Programmiervorgängen nicht verloren. Wenn das also nicht der erste Programmiervorgang ist, kann man diesen Abschnitt überspringen. Jetzt wählt man den Reiter "Fuses". Dann stellt man im unteren Fensterteil folgende Fuseeinstellunegn ein:

 FUSE HIGH  0xC7
 FUSE LOW   0x3F
  • Return drücken, damit werden die Einstellungen in die Detailansicht geladen.
  • "Program" drücken, um die Fuseeinstellungen in den Flashspeicher zu programmieren.

Um die eigentliche Firmware zu programmieren, wählt man den Reiter "Program". Es muss nur das Flash programmiert werden, nicht das EEPROM. Als Input hex file wählt man im Projektverzeichnis \default\Klopfsensor.hex aus und startet den Vorgang mit "Program".

Die Firmware ist jetzt programmiert.

Programmieren per Bootloader

Bevor man einen Bootloader verwenden kann, muss auch dieser per ISP in das Flash programmiert werden. Ist der Bootloader einmal programmiert, kann die eigentliche Firmware über die serielle Schnittstelle programmiert werden.

Einmaliges Programmieren des Bootloaders

Dieser Programmiervorgang ist ein direktes Programmieren über SPI, siehe oben. Es wird jedoch das Projekt des Bootloaders geöffnet (der Autor hat noch keinen Bootloader ausgewählt, es wird hier später stehen, welcher sich am besten eignet).

Zur Auswahl steht boofa von Roland Riegel

Die Fuseeinstellungen unterscheiden sich jedoch vom oben gezeigten Vorgang, denn der Mikrocontroller muss meim Start die Bootsection anspringen. Das wird durch folgende Fuseeinstellungen erreicht:

 FUSE HIGH  0xC2
 FUSE LOW   0x3F

Programmieren der Firmware mit dem Bootloader

Ist der Bootloader erfolgreich im ATmega, kann die Firmware des Klopfsensormessgeräts über die serielle Schnittstelle programmiert werden. Dafür wird kein separates Programmiergerät benötigt und die Schaltung muss nicht zugänglich sein, eine Verbindung über die Schnittstelle genügt.

Hier wird später stehen, wie man den Bootloader verwendet.

Wunschliste

  • Eingang für Kurbelwellenpositionsgeber (z.B. 60 Ticks pro Umdrehung und Nullmarke)
  • Konfigurations- und Auswertesoftware für den PC mit grafischer Oberfläche

Umgesetzte Wünsche

  • Kopfhörerausgang zum Abhören des Sensorausgangs

Bekannte Fehler

Jeder, der dieses Projekt nachbaut und Fehler findet, möge diese bitte hier eintragen.
Wenn die Fehler behoben sind, werden sie von hier nach "Behobene Fehler" verschoben.

Hardware

  • Der Kopfhörerverstärker arbeitet nicht im linearen Bereich, er wird durch den Gleichspannungsanteil übersteuert. Vor dem Poti (praktisch statt dem Jumper) ein 10 nF Kerko entkoppelt geeignet. Schaltplanänderung folgt.

Software

Keine.

Behobene Fehler

Hardware

  • TPIC8101 hatte keinen Anschluss an Vcc

Software

  • sei(); fehlt im Hauptprogramm
  • UART uputchar0 und ugetchar0 können nicht mit streams umgehen, das erzeugt 2 Warnings beim Compilieren
  • Fehler in TPIC8101.c: in TPIC_get_knock_value siehe http://www.mikrocontroller.net/topic/190088#1889419
  • Fehler in TPIC8101.c: in #define TPIC_hold hat "~" gefehlt
  • Fehler in SPI Initialisierung behoben: Es muss mode 1 statt mode 0 sein
  • Fehler in TPIC_set_integration_time_constant behoben: "if (time < 31) time = 31;" muss heißen: "if (time > 31) time = 31;"
  • Plausiblere Initialisierungswerte und Auswertezeitfenster eingestellt

Wo wird das Projekt eingesetzt

Es wäre schön, wenn jeder, der das Projekt oder Teile davon einsetzt, hier kurz was dazu schreiben könnte. z.B. so:

  • Projektbezeichnung [Link] [Name], gebaute Stückzahl (Hobby / Prototyp / Serie), Kommentar