- LiFePO4 Speicher Test         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 33

Thema: Unruhige Anzeige bei Drehzahlmesser für Zweitaktmotor

  1. #21
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Anzeige

    E-Bike
    Uff, ich hoffte, der Kelch wird an mir vorbeigehen. Ich wollte doch nur die Zweitakter einstellen.
    ... na ja, wenn dann aber mit der Qualität der Messergebnisse nicht zufieden ist muss man da halt eben doch ran!

    Und wie Du in deiner Signatur schreibst:
    Hoffentlich liegt das Ziel auch am Weg

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von wkrug Beitrag anzeigen
    Oder aber Du versuchst mal eine Induktive Abnahme ( Mehrere Wicklungen über das Zündkabel - Ein Anschluss auf Masse, der andere an den Eingang Deiner Schaltung.
    Das funktioniert dann wie ein Trafo. Der Stromfluss im Zündkabel bewirkt einen Spannungsstoß in der Wicklung.
    Das funktioniert so nicht. Der Strom im Zündkabel erzeugt ein Magnetfeld, dessen Feldlinien das Kabel umschließen. Die Windungen einer Spule, die um das Kabel gewickelt wird, sind parallel zu den Feldlinien, da wird also nichts induziert. Alles was man da misst, geht über die kapazitive Kopplung zwischen dem dem Leiter im Zündkabel und dem (beliebig geformten) Leiter außen. Da die Fläche eines aufgewickelten Draht größer und dichter am Innenleiter ist, ist die Kapazität dieses Kondensators größer als die einer Krokodilklemme. Das Signal wird also ebenfalls größer, bleibt aber kapazitiv abgenommen.

    Für einen induktiven Abnehmer bräuchte man eine Rogowsky-Spule. Da gehen die Feldlinien durch die Sensorspule. Oder einen Kern, der das Zündkabel umschließt und auf den die Sekundärwicklung gewickelt ist. Das wird für den praktischen Einsatz gern als Klappkern ausgeführt. Man kann aber das Zündkabel auch durch den Ringkern einer Drossel stecken oder einen fertigen Stromtrafo mit Loch zum Durchstecken nehmen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von wkrug Beitrag anzeigen
    Und wie Du in deiner Signatur schreibst:
    Hoffentlich liegt das Ziel auch am Weg
    ______________________________________



    Jetzt habe ich schon mal einen Simulator gebastelt um die Zündimpulse nachzubilden. Ist ein ATmega88pa auf dem folgendes Programm läuft.
    Code:
    $regfile = "m88pdef.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 38
    $crystal = 8000000
    $baud = 57600
    
    
    Const Sample_count = 256                                    'number of samples to take
    
    Dim Icr_old As Word
    Dim Icr_new As Word
    
    Dim Ignition_seq As Word
    Dim Ignition_seq_old As Word
    Dim Ocr1a_calc As Word
    
    Dim Idx As Word
    Dim Firing_interval(sample_count) As Word
    Dim Intervals(sample_count) As Eram Word                    'EEPROM variable
    
    Dim Flag_rec_complete As Byte
    Dim Flag_playback_running As Byte
    Dim Flag_icp_dead As Byte                                   'indicates no pulses at ICP1 pin while recording
    
    Config Portb.pb1 = Output                                   'OC1A pulse output
    Config Portc.pc5 = Output                                   'green playback led
    Config Portc.pc4 = Output                                   'red record led
    
    Config Portd.pd5 = Output                                   'red led for playback
    
    Portd.pd6 = 1                                               'pullup for "playback" button
    Portd.pd7 = 1                                               'pullup for "start record" button
    Portb.pb0 = 1                                               'pullup icp1 pin - stable level
    
    On Timer1 Check_icp_alive
    On Icp1 Isr_get_icr                                         'icp interrupt vector
    On Compare1a Isr_send_pulses
    
    Enable Interrupts
    
    Print "Simulator start"
    
    
    
    Do
      Debounce Pind.pd7 , 0 , Start_record , Sub                'record ignition intervals
      Debounce Pind.pd6 , 0 , Play_intervals , Sub              'start - stop playback
      If Flag_rec_complete = 1 Then
          For Idx = 1 To Sample_count
            Intervals(idx) = Firing_interval(idx)               'copy sram variable to eeprom variable
          Next
          Print "samples copied to eram"
          Flag_rec_complete = 0
          Portc.pc4 = 0
          Tccr1b = 0
      End If
      If Flag_icp_dead = 1 Then Gosub No_record
    Loop
    
    Start_record:
      Tccr1a = 0                                                'init timer1
      Tcnt1 = 0
      Ignition_seq = 0
      Flag_rec_complete = 0
      Tifr1.tov1 = 1
      Enable Timer1                                             'enable timer1 overflow interrupt
      Icr_old = Icr1
      Enable Icp1
      Tccr1b = Bits(cs11 , Ices1)                               'prescaler=8 timer1 clocked with 1MHz
      Portc.pc4 = 1                                             'rec LED on
    Return
    
    
    No_record:
      Disable Icp1
      Tccr1b = 0                                                'stop timer1
      Print "No pulses on ICP pin"
      Portc.pc4 = 0
      Flag_icp_dead = 0
    Return
    
    
    Play_intervals:
      If Flag_playback_running = 1 Then                         'button operated and playback running -> stop playback
          Disable Compare1a
          Tccr1b = 0                                            'stop timer1
          Flag_playback_running = 0
          Portc.pc5 = 0
        Else
          For Idx = 1 To Sample_count
            Firing_interval(idx) = Intervals(idx)               'copy eeprom variable to sram variable
          Next
          Ignition_seq = 1
          Ocr1a = Firing_interval(ignition_seq)
          Print Ignition_seq ; "   " ; Firing_interval(ignition_seq)
          Tccr1a = Bits(com1a0)                                 'toggle oc1a on ocr1a compare match
          Tcnt1 = 0
          Tifr1.ocf1a = 1                                       'clear eventually set compare1a flag
          Enable Compare1a
          Tccr1b = Bits(cs11)                                   'start timer1, presacaler = 8
          Flag_playback_running = 1                             'green playback led on
          Portc.pc5 = 1
      End If
    Return
    
    Isr_send_pulses:
      If Pinb.pb1 = 1 Then                                      'if pin is high make pulse length
          Ocr1a = Ocr1a + 4000                                  'pulse length 4ms
        Else                                                    'else make time until next ignition
          Incr Ignition_seq
          Ocr1a_calc = Firing_interval(ignition_seq) - 4000
          Ocr1a = Ocr1a + Ocr1a_calc
          Print Ignition_seq ; "   " ; Firing_interval(ignition_seq)       'visualise time in termial
      End If
      If Ignition_seq >= Sample_count Then Ignition_seq = Rnd(sample_count)       'continue playback with random start    '
    Return
    
    Isr_get_icr:
      Incr Ignition_seq
      Icr_new = Icr1
      If Icr_old = 0 And Ignition_seq = 1 Then
          Ignition_seq = 0
        Else
          Firing_interval(ignition_seq) = Icr_new - Icr_old
      End If
      Icr_old = Icr_new
      If Ignition_seq >= Sample_count Then
        Disable Icp1
        Tccr1b = 0                                              'init, stop timer1
        Flag_rec_complete = 1
        Ignition_seq = 0
      End If
    Return
    
    Check_icp_alive:
      If Ignition_seq_old = Ignition_seq Then
          Flag_icp_dead = 1
        Else
          Ignition_seq_old = Ignition_seq
      End If
    Return
    Das Programm kann 256 Zündimpulsabstände (limitiert durch die Größe des internen EEROMs mit 512Byte), die von der CD4093B Schaltung kommen können, aufzeichnen. Gemessen wie gehabt mit der Input Capture Funktion in µs Auflösung.

    Abspielen der Impulse geschieht über den OC1A Pin. Die Impulslänge ist auf 4ms eingestellt, ähnlich wie in der CD4093B Schaltung.

    Es gibt eine "Record" Taste, die die Aufzeichnung der 256 Werte startet und die rote Rec-LED einschaltet. Die ICR Daten werden erst in einem Array im RAM abgelegt. Ist das Array voll, wird es in den internen EEPROM geschrieben. Das Ende der Aufzeichnung wird durch das Erlöschen der Rec-LED angezeigt.

    Über die "Playback" Taste werden die Impulse über den OC1A Pin elektrisch nachgebildet und der Impulsabstand in µs als Zahl auch über RS232 ausgegeben. Eine grüne LED leuchtet während des Abspielens. Nachdem der letzte Wert aus dem Speicherarray abgespielt wurde, wird eine Zufallszahl erzeugt, die als Index für ein Element aus dem Array als Startelement dient um wieder die restlichen Werte der Reihe nach aus dem Array auszugeben. Nochmaliges Drücken der Playback stoppt das Abspielen.

    Im Anhang noch 256 Zündimpulsabstände (Einheit = µs) mit Ordnungsnummer, die bei noch kalter Maschine über etwa 5 Sekunden aufgezeichnet wurden. In einem Graph dargestellt ergab sich ein echt unerwartet interessantes Bild

    Gruß
    Searcher
    Angehängte Dateien Angehängte Dateien
    Geändert von Searcher (11.06.2019 um 11:46 Uhr) Grund: PRG berichtigt: 4ms Pulslänge verrechnet
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #24
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Searcher Beitrag anzeigen
    Im Anhang noch 256 Zündimpulsabstände (Einheit = µs) mit Ordnungsnummer, die bei noch kalter Maschine über etwa 5 Sekunden aufgezeichnet wurden. In einem Graph dargestellt ergab sich ein echt unerwartet interessantes Bild
    Das ist tatsächlich interessant. Das könnte sowohl aus der Messung kommen als auch einen Effekt des Motors (läuft unrund) darstellen.

    Leider sind in der Tabelle die schon verrechneten Werte. Schöner wäre es gewesen, wenn du einfach die Werte des Capture Register aufgezeichnet hättest. Die Differenz, die Zeit kann man auf dem PC leicht daraus berechnen und man könnte sehen, wann ein Overflow auftritt und ob er einen Einluß hat (ich vermute mal nicht, aber sicher ist sicher). Man könnte dann auch die Messwerte über der Zeitachse zeigen. Alle Rechnungen eingeschlossen den Tiefpass kann an dann am PC z.B. mit Excel machen ohne den Motor anzuwerfen. Da kann man auch alle Berechnungen in float machen und Probleme mit Overflow oder Underflow vermeiden. Dann kann man später entscheiden, ob man für den µC auf Integer umsteigt und wie man dafür die Formeln aufbaut, um das zu vermeiden.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #25
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Also wenn ich mir die Daten ansehe, wäre ein Extremwertfilter eine bessere Lösung!

    Außerdem sollte man Timerüberläufe mit aufzeichnen um mehr Konsistenz in die Daten zu bekommen!

    Ich komme im Schnitt auf 800 Digits wenn ich die Extremwerte ignoriere

    Das Bild das mir der Graph in Excel über deine Daten zeigt, sagt mir dass du einen systematischen Fehler bei der Messung hast, alle ~10 Samples hast du einen systematischen Ausreißer + ein paar zufällige, welche aber auch das Problem hindeuten!

    Ich vermute dein Problem immernoch beim Messaufnehmer oder eventuell im "debounce"

    Wenn du nochmal Daten sammeln kannst und zusätzlich eine Info ob und wieviel Überläufe zwischen den Samples liegen? (eventuell einfach den Zeitwert nehmen und die unteren beiden Bits maskieren und überschreiben, Bit 1 für timer einmal übergelaufen und Bit 0 für Timer mehr als einmal übergelaufen)

    Dann kann man zumindest schonmal einschränken dass wir ganze dekaden an signalen verpassen (das vermute ich nämlich aktuell)

    Ungewöhnlich ist auch dass der Timerwert immer relativ stabil um die 20k herum eiert und es sprünge gibt sobald man <13k oder >27k im timer hat, eventuell haben wir eine Schwebung!?

    auch wenn ich jetzt 2700 rpm nehme machen 5 Sekunden eher 225 Samples .. bei 3000rpm mit 250 schon eher wahrscheinlich (aber wäre auch logisch wenn er kalt ist)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  6. #26
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Ceos Beitrag anzeigen
    Ich vermute dein Problem immernoch beim Messaufnehmer oder eventuell im "debounce"
    ACK

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  7. #27
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Klebwax Beitrag anzeigen
    Leider sind in der Tabelle die schon verrechneten Werte. Schöner wäre es gewesen, wenn du einfach die Werte des Capture Register aufgezeichnet hättest
    Hab ich jetzt gemacht. Die ISR "Isr_get_icr" zum Sichern des ICR-Werte verändert, so daß jetzt der echte Inhalt aufgezeichnet wird. siehe Code. Der Rest des Simulatorprogramms von weiter oben im thread ist unverändert. Samples wieder im Anhang.
    Code:
    Isr_get_icr:
      Incr Ignition_seq
      Firing_interval(ignition_seq) = Icr1
      If Ignition_seq >= Sample_count Then                      'array full, stop recording
        Disable Icp1                                            'disable ICP1
        Tccr1b = 0                                              'init, stop timer1
        Flag_rec_complete = 1
        Ignition_seq = 0
      End If
    Return
    Zitat Zitat von Ceos Beitrag anzeigen
    Ich vermute dein Problem immernoch beim Messaufnehmer oder eventuell im "debounce"
    Wenn du nochmal Daten sammeln kannst und zusätzlich eine Info ob und wieviel Überläufe zwischen den Samples liegen? (eventuell einfach den Zeitwert nehmen und die unteren beiden Bits maskieren und überschreiben, Bit 1 für timer einmal übergelaufen und Bit 0 für Timer mehr als einmal übergelaufen)
    Es sollten eigentlich kein Meßfehler vorliegen. Der Debounce Befehl in Bascom nutzt keinen Interrupt. Wenn die Hauptschleife dort vorbeikommt, wird erst nur der Pin auf gedrückte Taste, in diesem Fall nur einmal auf LOW-Pegel getestet. Wenn kein Tastendruck, also kein Low-Pegel erkannt wird, wird sofort in der Haupschleife weitergemacht. Während der Aufzeichnung ist keine Taste gedrückt. Wenn auf gedrückte Taste erkannt wurde, kann die Hauptschleife, wenn nichts anderes konfiguriert wurde, bis zu 25ms aufgehalten werden. Sprung zu Interrupts würden dadurch aber nicht behindert werden. Im Dateianhang "icr_werte.txt" sind die ICR Werte abgelegt. Man kann dort die Überläufe erkennen wenn nach einem hohen Wert ein kleinerer auftaucht. Falls noch mehr Daten gebraucht werden - kein Problem ...

    An der Impulsaufnahme zweifle ich auch nicht, da mehrfach direkt am Abnahmedraht und mehreren Stellen in der CD4093 Schaltung mit Oszi überprüft. Halte meine Augen aber trotzdem auch in der Richtung noch offen.

    Ich denke, der Motor läuft wirklich so wie die Daten es zeigen. Das Laufgeräusch im Leerlauf bei Standgas ist alles andere als rund und "schnurrend". Typisches Zweitaktergeräusch; scheint normal zu sein. Ganz am Anfang vom Video https://youtu.be/d9_J9TI6dx8 läuft auch eine im Standgas. Anwerfen und Laufgeräusch meiner Säge als MP3 mit 7zip in der zip Datei im Anhang.

    Gruß
    Searcher
    Angehängte Dateien Angehängte Dateien
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  8. #28
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    mhhh ... ändert leider nicht viel am ergebnis

    kannst du mal ein paar bits opfern um den timerüberlauf mit zu erfassen wie ich es oben beschrieben habe?!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  9. #29
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Ceos Beitrag anzeigen
    mhhh ... ändert leider nicht viel am ergebnis

    kannst du mal ein paar bits opfern um den timerüberlauf mit zu erfassen wie ich es oben beschrieben habe?!
    Die kann man doch aus den Werten rauslesen. Wenn der neue Wert kleiner als der vorherige Wert ist, ist der Timer übergelaufen. Anders kann das der Interupthandler auch nicht rausfinden.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  10. #30
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Anders kann das der Interupthandler auch nicht rausfinden
    Overflow sollte einen eigenen interrupt haben

    nur vom vorherigen wert auszugehen birgt das risiko einen vollen durchlauf zu verpassen

    (ich bin nicht firm in Bascom und versteh den code nur ansatzweise!!!)

    Worum es mir geht ist eine inkonsistenz deiner werte alle ~10 messungen, irgendwas passiert da dass das timing durcheinanderbringt!

    Kannst du mir mal aufschlüsseln wie dein capture timer konfiguriert hast?! 8Mhz F_CPU sehe ich ja aber bei der timer init komm ich ins schleudern
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. Drehzahlmesser
    Von -Hurricane- im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 18.08.2014, 23:33
  2. Drehzahlmesser
    Von highcom im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 05.05.2010, 11:58
  3. Drehzahlmesser
    Von vohopri im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 24
    Letzter Beitrag: 14.03.2010, 09:08
  4. Drehzahlmesser
    Von derdaswar im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 10
    Letzter Beitrag: 17.07.2009, 17:45
  5. Drehzahlmesser
    Von TheHawk im Forum Elektronik
    Antworten: 13
    Letzter Beitrag: 14.12.2007, 21:04

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen