INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Digitales Eingangssignal zu schwach
15.06.2014, 17:27
Beitrag #9
RE: Digitales Eingangssignal zu schwach
Hallo Ralf,

tolle Maschine die du da hast. Wir hatten in den 70er Jahren bei uns aufm Dorf eine nicht ganz so alte RT-Version zu stehen. Die hatte allerdings schon eine Sitzbank für 2 Personen, war also sicher etliche 10 Jahre jünger.
Okay, zu deinen Fragen:
Wenn ich dich richtig verstehe möchtest du zumindest ein digitales Signal (Zündung) und mehrere verschiedene analoge Signale messen, und das ganze im "TimeSharing"- Modus. Dabei sind selbst die 10 ms zwischen zwei Zündimpulsen noch eine recht lange Zeit, also nicht kritisch
Aus meiner Sicht sind 2 Sachen zu beachten:
1. Die Nutzung von Interrupts scheint erstmal sinnvoll, bedeutet aber, dass während des Laufs der InterruptServiceRoutine (ISR) alle ausserhalb dieser Routine laufenden millis(),delay() etc. fehlerbehaftet sind. delayMicroseconds() kann jedoch genutzt werden. Weiterhin ist der Input/Output über serielle Anbindungen während des Laufes der ISR fehlerbehaftet. Generell können während des Laufs einer ISR keine anderen ISR laufen und der allermeiste Teil von Code ausserhalb der ISR wird gestoppt.
2. Analoge Sensoren haben immer eine gewisse Anlaufphase, nicht nur beim Initialisieren der entsprechenden Sensorinstanzen, sondern bei jedem Abruf von Daten. Meist werden in dieser Phase interne Register auf definierte Werte gesetzt oder es wird geprüft ob der Sensor überhaupt Daten liefern kann etc. Wenn also gerade ein Sensor in dieser Phase ist und parallel dazu eine ISR anläuft, kann die Anlaufphase des Sensors evtl. nicht komplett durchlaufen werden und in Folge wird der Sensor keine Daten liefern, obwohl die ISR dann bereits beendet ist.

MSTimer2 ist letztlich eine "Verpackung" für den TimerInterrupt2. Also einfacher zu handhaben, aber eben auch mehr zu verarbeitender Code.
pulseIn() macht prinzipiell nix anderes wie ein millis() - vergleich, nur eben auf Basis von Mikrosekunden.
Das im Link genannte Beispiel halte ich persönlich für die beste Methode. Allerdings Frage ich mich, warum da gleich wieder Fehler drin sein müssen (Deklaration / Nutzung der variablen duration).

Wenn im Loop() ordentliche millis()-Vergleiche zur Steuerung der einzelnen Sensorabfragen geschrieben werden behält man den Überblick, hat keinen Streß mit ISR. Wichtiger scheint mir den Code möglichst schnell zu "machen", Variablen richtig zu deklarieren, unnütze Jumps in Subroutinen zu vermeiden.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.06.2014, 19:08
Beitrag #10
RE: Digitales Eingangssignal zu schwach
Hallo Ricardo,

meine RT ist auch eine...sagen wir mal junge Version aus dem Jahr 1959:

http://itm6.com/IMAG0180.jpg

Die Wetterfühligkeit des Motors und der Spass an Technik hat mich veranlasst, dem Motor mal mittels Arduino auf die Finger zu schauen. Arduino erschien mir als besonders preiswerte Methode, die aber nur begrenzt mit der Elektronik und Sensorik eines modernen Fahrzeugs mithalten kann. Aber ich will das Ergebnis nicht noch zusätzlich durch Fehler bei der Programmgestaltung verfälschen.

Die Grundidee war, einen Mega ADK für alle Aufgaben zu nehmen und ein Handy als Anzeigeinstrument. Die Drehzahl ist dabei der Wert, der in kleinen Zeiträumen gemessen und ausgewertet werde muss, damit die Anzeige keine großen Delay hat. Die 250 ms hatte ich gewählt, weil selbst in dieser Zeit noch 4 Impulse bei 1.000 Umdrehungen pro Minute anfallen. Ich glaube, da sollte ich etwas kürzer messen und die Leerlaufdrehzahl einfach nicht so genau nehmen. Der relevante Messbereich beginnt bei ca 2.000 Umdrehungen.

Du hattest geschrieben, dass die serielle Kommunikation bei Interrupts nicht verlässlich ist. Könntest Du mir ein Stichwort für die Suche geben, damit ich das Problem verstehen kann. Ich habe mehrer Arduinos gekauft (Mega ADK, Micro und Adafruit Trinket) und wollte mir mal die Möglichkeit der Koppelung anschauen. Programme können ja zu groß oder zu Rechenlastig für einen Arduino werden. Aber paralleles Arbeiten braucht ein verlässliches Bussystem.

Die verschiedenen Aufbauten der Sensoren habe ich mir noch nicht angeschaut. Zum Glück gibt es brauchbare Datenblätter, die den Aufbau und die Eigenschaften beschreiben. Die richtige Wahl kann da wohl einiges an Geschwindigkeit und Zuverlässigkeit bringen.

Ich habe im Moment das Bauchgefühl, dass ich erst mal ohne Interrupts experimentieren sollte. Das mit dem "schnell machen" ist auch noch so eine Sache. Manche Befehle sind, wie Du es ja beschrieben hattest, nur Kombinationen und Verschachtelungen anderer Befehle. Da sollte ich mal einen genauen Blick auf die verwendeten Befehle werfen. Muss mir auch mal die Libraries, die ich einbinde, mal ansehen. Nicht dass da irgend etwas in das Ergebnis compiliert wird, das ich nicht brauche.

Gruß Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.06.2014, 20:52
Beitrag #11
RE: Digitales Eingangssignal zu schwach
Hallo Ralf,

Zitat:Du hattest geschrieben, dass die serielle Kommunikation bei Interrupts nicht verlässlich ist
Ja, wir reden ja in diesem Fall von sogenannten external Interrupts, also Änderungen eines Pegels an den Interruptpins, die dann eine ISR anstoßen.Nun während der Laufzeit der ISR gelten bestimmte Regeln. Einiges gibts hier zu lesen:
http://arduino.cc/de/Reference/AttachInterrupt
Wichtig dabei:
Zitat:Bezeichnet eine Funktion, die dann aufgerufen wird, wenn ein externer Interrupt auftritt. Ersetzt jede bis zum Eintreffen des Interrupts ausgeführte Funktion.
...
Serielle Daten, die während der Funktion eintreffen, werden nicht berücksichtigt und gehen verloren.
Das erste bedeutet: läuft eine ISR bleibt alles andere stehen bis die ISR beendet ist. Das zweite spricht für sich. Dies sind einfach Fakten die man beachten muß.
Zitat:Ich habe im Moment das Bauchgefühl, dass ich erst mal ohne Interrupts experimentieren sollte.
Wie gesagt, bei den auftretenden Signalhäufigkeiten kommt man sicher ohne Interrupts aus und kann getrost mit millis() - Vergleich und Zählvariablen oder auch pulseIn() arbeiten, da man ja recht kurze zeiträume betrachtet.
Zitat:Das mit dem "schnell machen" ist auch noch so eine Sache
Ne, nicht wirklich. Ein paar Stichworte sind zB
- überlegen welche Werte in Variablen wirklich auftreten und passende Datentypen wählen
- wenn nur positive Werte zu erwarten sind ruhig unsigned nutzen
- keine verschachtelten If Blöcke, lieber einfache If-Blöcke hintereinander
- anstatt Switch/Case lieber mehrere If-Abfragen
- for - Schleifen rückwärts laufen lassen
- anstatt digitalWrite / digitalRead lieber direkt die Port-Konstanten mit bitWrite/bitRead ansprechen Siehe hier:http://jeelabs.org/2010/01/06/pin-io-performance/
Wenn nicht auf Grund mangelnder Pins, wirst du nachdem was du geschrieben hast, für diese Aufgabe nicht mehrere Arduino brauchen. Von daher würde ich mir über die Kopplung (erstmal) keine gedankn machen.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.06.2014, 21:18
Beitrag #12
RE: Digitales Eingangssignal zu schwach
(15.06.2014 15:39)Ralf schrieb:  ....
Der "Drehzahlsensor" ist diese Schaltung:



Vom Zündkerzenkabel wird der Impuls induktiv abgegriffen und verstärkt. Ich füttere die Schaltung mit 5V und lasse den Spannungsteiler am Ausgang weg, so dass ich eine passables Rechtecksignal von 5V bekommen, dass ich "zählen" kann. Eine galvanische Trennung ist bei dem Aufbau nicht notwendig (bitte berichtigen, wenn ich mich irre)

Das Motorrad ist ein Einzylinder, und es findet ein Zündimpuls pro Umdrehung statt.
....

Hallo,
da rk sich bereits um die Software kümmert beschränke ich mich mal auf die Eingangsschaltung der Drehzahl.

An der Eingangsschaltung ist mir aufgefallen das an dem Eingang der vom Zündunterbrecherkontakt wohl kommt eine Schutzschaltung für den Eingang von dem HEF4093 NAND-Schmitt-Trigger Baustein fehlt. Hier würde ich dir empfehlen an Pin 8 eine Z-Diode mit 4,7V gegen GND zu schalten um Überspannungen hier abzufangen, also Kathode an Pin 8, Anode nach GND. Da du die Schaltung dann eh schon mit den 5V aus dem Arduino versorgen willst kannst du die Dioden D1, D2 sowie die Widerstände R4, R5 komplett entfernen und den Arduino Port direkt an Pin 11 anschließen.
Bei der Umbauarbeit nicht vergessen die Pins 1 + 2 wieder mit GND oder VCC zu verbinden das die nicht floaten. Warum die Pins auf das Ausgangssignal aufgeschaltet waren ist mir schleierhaft da der zugehörige Ausgang Pin 3 eh offen ist. Aber der Schaltungsersteller hatte wohl auch nur Bastlerkenntnise von dem Baustein sonst hätte er nicht als Versorgungsspannung 5 - 27V angegeben da die maximale Versorgungsspannung 15V ist und die absolut maximale Spannung an VCC mit 18V im Datenblatt angegeben ist.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 15:45
Beitrag #13
RE: Digitales Eingangssignal zu schwach
Hallo,

das Signal wird nicht direkt an der Zündung abgegriffen, sondern über ein Kabel, das um das Zündkerzenkabel gewickelt wird. Wie auf diesem Bild:

   

Was die Änderungen der Schaltung angeht. Ich bin noch etwas wackelig beim Umgang mit dem Layoutprogrammen. Hab trotzdem mal was zusammengebastelt. Ist noch sehr roh und ich muss noch etwas Zeit investieren, um die Schaltung wirklich sauber hinzubekommen. Die Werte der Bauteile stimmen noch nicht. Manche fehlen in der Library.

In Rot sind die Änderungen eingezeichnet:

   

In der ursprünglichen Schaltung war noch ein "Testpunkt" vorhanden, den ich nicht brauche. Also hab ich ihn weggelassen. Ausserdem habe ich einen NE555 CMOS verwendet, weil in der Library kein HEF4093 zu finden war.

Sind die vorgeschlagenen Änderungen an der Stelle, wo sie sein sollten? Den Spannungsregler (oben rechts) wollte ich verwenden, weil ich die 5V auch noch für das Laden des Handys brauche.

Das mit der viel zu hohen möglichen Eingangsspannung war mir nicht aufgefallen. Der Regler des Motorrads erzeugt zum Glück nicht mehr als 14V.

Gruß Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 21:16
Beitrag #14
RE: Digitales Eingangssignal zu schwach
(16.06.2014 15:45)Ralf schrieb:  Hallo,

das Signal wird nicht direkt an der Zündung abgegriffen, sondern über ein Kabel, das um das Zündkerzenkabel gewickelt wird. Wie auf diesem Bild:



Was die Änderungen der Schaltung angeht. Ich bin noch etwas wackelig beim Umgang mit dem Layoutprogrammen. Hab trotzdem mal was zusammengebastelt. Ist noch sehr roh und ich muss noch etwas Zeit investieren, um die Schaltung wirklich sauber hinzubekommen. Die Werte der Bauteile stimmen noch nicht. Manche fehlen in der Library.

In Rot sind die Änderungen eingezeichnet:



In der ursprünglichen Schaltung war noch ein "Testpunkt" vorhanden, den ich nicht brauche. Also hab ich ihn weggelassen. Ausserdem habe ich einen NE555 CMOS verwendet, weil in der Library kein HEF4093 zu finden war.

Sind die vorgeschlagenen Änderungen an der Stelle, wo sie sein sollten? Den Spannungsregler (oben rechts) wollte ich verwenden, weil ich die 5V auch noch für das Laden des Handys brauche.

Das mit der viel zu hohen möglichen Eingangsspannung war mir nicht aufgefallen. Der Regler des Motorrads erzeugt zum Glück nicht mehr als 14V.

Gruß Ralf
Hallo Ralf,
ahja...verstehe....NE556 als Stellvertreter.... das mit der Z-Diode passt. Und ich hoffe mal das du die Pins 1+2 nur mit GND verbindest und die Schwarze Leitung hoch zum Pin 8 und dem Ausgang dann wegläßt. btw. hast du es mal mit der Freewareversion von Eagle versucht ein Schaltbild zu zeichnen ? Damit sind alle mir bislang bekannten Arduino Boards gezeichnet worden und da kannst du dann auch die Sourcedateien von den Arduino Boards laden und bearbeiten was ich schon mit Erfolg gemacht habe. Schau doch mal bei Cadsoft vorbei.
Aber Real hast du einen 4093 IC bei dir vorliegen weil da nützt der NE556 nix Rolleyes ?
Nun ich dachte der Drehzahlabgriff erfolgt am Unterbrecherkontakt....ob das mit dem um das Zündkabel gewickelten Draht funzt Huh
Also bevor du da die Software quälst würde ich dann mal am 4093 Ausgang ein Oszilloguck anschließen...Shy

14V ?...oha...hat das alte Moped schon eine 12V Batterie ?...ich staune...dann 5V Regler nehmen und alles ist gut...
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2014, 11:40
Beitrag #15
RE: Digitales Eingangssignal zu schwach
Danke für den Tip bezüglich Eagle. Ich wusste nicht, dass es eine kostenlose Version gibt. Die Einschränkung der Platinengröße ist bei mir kein Problem.

Ich hab die vorgeschlagenen Änderungen vorgenommen und das Ganze in Eagle konstruiert. Der Einstieg in die Software ist nicht ohne und ich muss noch einiges verändern (Breite der Leiterbahnen, Dimensionierung der Kondensatoren). Den Spannungsregler werde ich auch gegen einen LM2576T-5.0 austauschen, weil ich das Handy mit anhängen will. Da würde der 7805 wohl zu warm.

Mit dem Routing in Eagle komme ich auch noch nicht so recht klar:

   

Da werden noch ein paar Abende draufgehen, weil noch Anschlussklemmen für die Sensoren, eine Sicherung und ein Sockel für den Arduino Micro drauf sollen.

Gruß Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2014, 21:03
Beitrag #16
RE: Digitales Eingangssignal zu schwach
(18.06.2014 11:40)Ralf schrieb:  Danke für den Tip bezüglich Eagle. Ich wusste nicht, dass es eine kostenlose Version gibt. Die Einschränkung der Platinengröße ist bei mir kein Problem.

Ich hab die vorgeschlagenen Änderungen vorgenommen und das Ganze in Eagle konstruiert. Der Einstieg in die Software ist nicht ohne und ich muss noch einiges verändern (Breite der Leiterbahnen, Dimensionierung der Kondensatoren). Den Spannungsregler werde ich auch gegen einen LM2576T-5.0 austauschen, weil ich das Handy mit anhängen will. Da würde der 7805 wohl zu warm.

Mit dem Routing in Eagle komme ich auch noch nicht so recht klar:



Da werden noch ein paar Abende draufgehen, weil noch Anschlussklemmen für die Sensoren, eine Sicherung und ein Sockel für den Arduino Micro drauf sollen.

Gruß Ralf
...keine Ursache, aber ähm wo hast denn den C4 plötzlich aufgetrieben ?...den gabs bisher gar nicht und der schließt auch nur deinen Eingangsimpuls kurz. Die Z-Diode soll eine 4,7V sein....keine 2,7V sonst setzt die Begrenzung evtl. zu früh ein.
Und im Schaltbild bezeichnet man Mikrofarad-Kondensatoren mit uF nicht mF wobei letzteres dann auch richtige Klötze sind... 33mF wären dann 33000 uF und das sind richtige Brummer...
Also da solltest dein Schaltbild nochmal überarbeiten das es auch das zeigt was der Ursprung war...

Also wenn du dein Schaltbild in Eagle gezeichnet hast und deine Bauteile platziert hast dann kannst die Leitungen mit dem Autorouter ziehen lassen. Ist halt wie bei allem das man sich da erst mal einfuchsen muß....nach kurzer Zeit generierst deine Bauteilelibrary auch selber....geht alles....gewußt wie...hier gilt es vor allem auf den Fang vom Raster zu achten.

Apropos Leiterbahnbreiten, da kannste Klassen zuweisen, wie z.B. VCC, GND, Signal und dann die mit den gewünschten Breiten deklarieren. Gib mal in der KOmmandozeile die über dem Arbeitsblatt vom Layouteditor "class" ein...dann siehst es... geht übrigens auch im Schematic.... rein zum Schaltbilder zeichnen habe ich Eagle schon viel verwendet, Layout und eine Platine davon machen lassen erst einmal...aber die hat gleich gefunzt.....

lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Eingangssignal ermitteln Nimmo Gogh 3 1.483 16.05.2015 18:10
Letzter Beitrag: Nimmo Gogh
  Digitales Poti gesucht itsy 14 4.156 07.01.2014 19:51
Letzter Beitrag: itsy

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste