Hallo Mikrocontroller.net Forum!
Vorweg: Ich bin im Bereich Mikrocontroller und Schaltungen ein Anfänger.
Mein Vater fährt Motorrad und wollte für "Rallyes" eine Schaltung um per
Tastendruck ein Roadbook (Papierrolle mit der Route) Vorwärts- und
Rückwärts spulen zu können. Leichtsinnigerweise habe ich Unterstützung
zugesagt und nun hat sich das Projekt um verschiedene Features
erweitert, z.B. zwei Tripzähler und dass einzelne Stationen des
Roadbooks über einen Sensor erkannt werden.
Der Zählerstand der Tripzähler wird mit jeweils vier 7-Segment Anzeigen
ausgegeben. Zum weiterzählen der Tripanzeige wird das Tachosignal des
Motorrads genutzt. Pro Radumdrehung werden sechs Impulse übertragen bei
denen die Spannung von ~4,9V auf ~0,95V fällt. Logischerweise nutze ich
also einen Interrupt der bei fallender Flanke auslöst.
Damit die Zählerstände erhalten bleiben, habe ich - nach Empfehlung
eures EEPROM-Artikels - versucht eine Pufferschaltung zu nutzen. Auch
hier wird wieder ein Interrupt bei fallender Flanke auslöst.
Zum Testen/Programmieren nutze ich einen Arduino UNO, der
Mikrocontroller wird dann entnommen und auf der von mir angefertigen
Platine eingesetzt.
Schaltplan und Platine sind angehangen. Momentan ist die Schaltung am
Motorrad über Dauerplus angeschlossen.
Problem 1: Je nach Betriebszustand des Motorrads inkrementieren sich
die Zähler, obwohl sich das Rad nicht dreht.
Motor aus, Zündung aus: langsames [Geister]inkrementieren.
Motor aus, Zündung an: kein sichtbares [Geister]inkrementieren.
Motor an, Zündung an: schnelles [Geister]inkrementieren.
Ich bin mir sicher, dass das an meiner Schaltung liegt. Ich habe bereits
nach Lösungen gesucht, aber finde nur Artikel/Hinweise fürs Entprellen.
Das hilft mir meiner Meinung nach nicht weiter. Kann sein das ich falsch
liege oder zu doof zum richtigen Suchen bin, daher die...
Frage : Wie bekomme ich das Signal entstört?
Problem 2: Die Zählerstände nicht erfolgreich gespeichert.
Bei einem Test auf dem Breadboard hat alles ohne Probleme funktioniert -
auf der Platine aber nicht. Auf dem Breadboard hatte ich aber auch nur
die Minimalbeschaltung am Mikrocontroller. Am Quellcode habe ich nichts
geändert.
Frage : Seht ihr einen Fehler, der das erklärt?
Nebenfrage : Wie kann ich den ATMega328 auf der Platine am besten
"debuggen"?
Die beiden Pins die vom Arduino zur Seriellen Kommunikation genutzt
werden sind belegt - aber ich habe etwas über SoftwareSerial gelesen.
Würde das funktionieren? Wenn ja, wie kann ich am Besten die Signale
abgreifen (Lackdraht an die Pins?)?
TL; DR : Wie entstört man ein Tachosignal von einem Motorrad?
Entschuldigung für den langen Text - ich hoffe ihr habt alle Infos die
ihr braucht um zu helfen.
Danke schonmal.
Zu Problem 2: es sollte auch nicht die 5V-Betriebsspannung sondern eher
die Eingangsspannung des Spannungsreglers oder KL15 (Zündung) zum
detektieren des Spannungsausfalls verwendet werden (mit geeigneter
Schutzbeschaltung)
Danke schon mal für die Rückmeldung.
Zu Problem 1: Der Sensor ist halt der vom Motorrad (KTM 990 EFI) -
soweit ich weiß ein Hall-Sensor. Ich greife ja aber nicht direkt den
Sensor ab, sondern erst später. Ich nehme also an, dass das
ursprüngliche Signal bereits durch ein Steuergerät "aufbereitet" wurde.
(siehe
http://s142.photobucket.com/user/srad600/media/990/ABS%20wiring/KTM_990_ABSRouting1_zpsaab03e0f.jpg.html)
Zu Problem 2: Nicht die Betriebsspannung als Eingang zu nehmen ist eine
gute Idee. Ist diese Annahme richtig: C1 verlangsamt den schnellen
Abfall der Spannung am Interrupt-Pin und verzögert somit das auslösen
des Interrupts?
Was ist als Schutzschaltung zu empfehlen? Ein Linearspannungsregler?
Mit der Abkürzung BOD kann ich nichts anfangen, sorry - was meinst du
also mit "BOD aktiviert?"
Google "BOD mikrocontroller"
Erstes echtes Sucheregbnis nach Werbung zeigt, was es ausgeschrieben
heißt und dann einfach obige Webseite nutzen, um entsprechend weiter zu
suchen...
OK, danke Michael.
Ich hatte gestern natürlich nach BOD gesucht, aber ohne Mikrocontroller
als Zusatz - da hab ich nichts relevantes gefunden. Mein Fehler -
Entschuldigung.
"Der Arduino" (und damit der ATMega328P) hat BOD per default aktiviert
(Level1 = 2,7 V).
Spielt das überhaupt eine Rolle? Ich nutze ja das externe Signal zum
Auslösen eines Interrupts und - zumindest so gedacht - dann die
Pufferschaltung um noch lange genug die Spannung für das schreiben
aufrecht zu erhalten.
Du solltest den Tacho-Eingang mit einem Reihenwiderstand von ca. 10k
gegen Überspannung und einem Kondensator von ca. 10n gegen Störungen
sichern.
Weiterhin solltest du herausfinden, ob und wie sich das Nutzsignal vom
und Störsignal unterscheidet.
Dein Interrupt zum Schreiben wird erst dann ausgelöst, wenn bereits die
Controller-Versorgung zusammenbricht.
Du solltest also besser das Zusammenbrechen der Eingangsspannung
auswerten - wieder über Reihenwiderstand und Kondensator als
Mindestschutzbeschaltung.
Danke otto.
Ich werde die Schaltung wie von dir empfohlen anpassen.
Die Eingangsspannung (deren Wegfall ich erkennen möchte) beträgt 12V.
Das kann ich natürlich nicht direkt anschließen. Was kann ich dafür dann
nehmen? Spannungsteiler? Spannungsteiler mit Zenerdiode?
Linearspannungsregler?
Vom Mess-Eingang über einen 10k-Widerstand auf den Portpin. Von diesem
auf einen 10n-Kondensator gegen Masse. Ängstliche setzen hierzu
antiparallel noch gerne eine 4V7-Zenerdiode.
Ich habe bezüglich Problem 1 ein bisschen "experimentiert".
Wie empfohlen habe ich einen Widerstand und einen Kondensator verbaut.
Resultat: Weniger falsche Tachosignale, aber leider noch immer im
inakzeptablen Bereich. Ich konnte es auf die Schnelle nicht an der
Platine löten und habe es daher als externe Minischaltung vor den
Pinanschluss geklemmt. Wie groß ist der Einfluss dadurch?
Des weiteren ist mir aufgefallen, dass wegen dem Spannungsabfall an D7
der ATMega nur mit ~4,2V betrieben wird (auch AREF). Ich bin mir nicht
sicher, inwiefern das einen Beitrag zum Problem leistet/leisten kann.
Ich das ganze noch einmal mit einer Minimalschaltung probiert
(Versorgung über einen L7805; ATMega; eine 7-Segment-Anzeige direkt am
MC und das Tachosignal über 10kOhm an den Interrupt-Pin, dort dann noch
einen 10n Kondensator auf Masse).
Resultat: Alles funktioniert wie gewünscht - keinerlei Störungen, auch
nicht wenn der Motorrad-Motor läuft.
Es muss also an meiner Platine/Schaltung liegen. Habe ich die sehr
empfindlich für Störungen designt?
Das Problem der zu geringen Vcc könntest du versuchsweise durch das
überbrücken der Diode eliminieren.
Die korrekte Funktion von Schaltreglern ist stark layoutabhängig - evtl.
werden die Störungen durch diesen verursacht.
Um dies auszuschließen könntest du deine Platine versuchsweise mit einem
Linearregler versorgen.
Sollten die Störungen dann nicht mehr vorhanden sein, solltest du die
Kapazität des ausgangsseitigen Elko mal verkleinern.
Bringt dues nichts, versuche die Masseführung zu optimieren.
Noch einmal eine Rückmeldung: Ich habe die beiden Probleme "gelöst".
Problem 2 so wie otto es beschrieben hat: Eingangsspannung statt der
Spannungswandler-Spannung zur Erkennung des Ausfalls nutzen.
Problem 1 konnte ich nur indirekt lösen: Ich habe einen eigenen
Reed-Sensor verbaut und bin somit vom Tachosignal unabhängig.
Vielen Dank für die Hilfe an otto.
Ich hatte mir ein bisschen mehr Input von diesem Forum erwartet und weiß
bis jetzt noch nicht, was ich falsch gemacht habe, dass hier niemand
außer otto was geschrieben hat. War es zu einfach, eine Frage die schon
1000 Mal geklärt wurde oder...?!
Nun ja - noch einmal Dank an otto.
Schönen Tag noch an alle.
Hast du dir mal die Lösungen anderer, etablierter, selbst entwickelter
Kettenöler angesehen? Natürlich meine ich solche, die die Ölung der
gefahrenen Strecke anpassen. Ich kenne da zwei Systeme:
1. Per montiertem Magnet + Reedkontakt
2. Abgreifen des Tachosignals
Vermutlich kannst du dir da was für dein Projekt abgucken ;-)
Gruß Max
Ja, mein Vater hat einen McCoi, dessen PCB/Schaltung habe ich mal
angeschaut und versucht es nachzuvollziehen. (siehe
http://www.mccoi-forum.de//files/schandplan_761.gif)
Ich habe es aber offensichtlich nicht verstanden, denn meinem
Verständnis nach dürfte nie ein Signal durch die Schottky-Diode an den
MC gelangen...mir ist unklar, wie die Schaltung funktioniert.