Choisissez votre langue | Select your language |Bitte Sprache wählen



16F84 basierte digitale Zündung

- Version PCM5.4 -



übersicht



Prinzip.


Der Teil der CDI (Capacitive Discharge Ignition) ist auf der Seite " fixed ignition" beschrieben. Der PIC empfängt die Impulse aus dem 36 Grad-Sensor und:

Lassen Sie uns dies sehen im Detail ...

Die Impulse des 12°-Pickup lösen direkt über D7 R7 C10 die Zündung(SCR) aus.
(Wenn der Motor nur ein Pickup hat, schließen Sie den 36 Grad-Eingang an, und lassen Sie den 12 Grad-Eingang offen)

Gleichzeitig werden die Impulse aus dem 36°-Pickup auf 5 Volt durch die Zenerdiode D9 begrenzt und steuern dann dem PIC-Eingang (Pin 10).
( Die PIC-Eingänge erkennen eine Spannung die höher ist als 1,8 V.Das bedeutet,dass die Spannung des Pickup-Signal mind.2 Volt betragen muss)

Bei jedem guten Impuls vom 36° Sensor, blinkt die grüne LED D1.
Einen verzögerten Impuls, nach der Kurve voraus programmiert, finden Sie am Pin8 und am Schalter der Zündspule ,T1 über D2, R7, C10.

Ein +5 V-Ausgang ist verfügbar unter RA2 (zum Beispiel zum Betrieb einer LED), wenn die maximale Drehzahl erreicht ist. Der Ausgang RA3 ist ein invertiertes (Zünd)Signal (revcoil)

Wege der 12 und 36 Grad Signale:
Zoom.

Es werden 2 Zündfunken erzeugt:
ein vor dem TDC (oberen Totpunkt)(vom 36 Grad Pickup)
und einen weiteren am TDC (vom 12 Grad Pickup - wenn angeschlossen)
Dieser zweite Zündfunke ist überzählig.




Max. Zündungs Frequenz 730Hz.

 

Warnung, bei zwei Zündungen ist max.Drehzahl geteilt durch 2!!

z.B.: 88000rpm mit EINER Zündung pro Rotation und 44000rpm mit 2 Zündungen pro Rotation (wie bei der XT)



Kompatibilität mit 2 stufigen Pickup(s).

Wenn das Signal wie folgend aussieht wie in Fall A,können Sie diese CDI benutzen,und alle bereiche damit Steuern

This ignition need either
2 pickups:
or only one pickup
1st pickup at 36° BTDC:


and 2nd pickup at 12° BTDC:
Positive than negative:
But not negative than positive!

Funktionsprinzip des Programms


Einfacher Programmstart


Zu Beginn des Programms, der minimal Bereich wird festelegt:
movlw 0xff ; rpmhi = FF initially
movwf rpmhi

Schutz der Zündspule


Nach 0,5 Sekunde ohne Impulse, ist der PIC der Auffassung, dass der Motor gestoppt ist, und reinitialisiert die Zündung. ; if rpm count > 1400h, 5120 x 100us=0.5 Sec, then it is assumed that the
; motor has stopped. Reinitialize system.
movlw 0x14
subwf rpmhi,W
btfsc STATUS,Z ; rpmhi - 14 = 0 ?
goto start ; yes

Drehzahlbegrenzung:


bei mehr als 8000 RPM, ist die Verzögerung zwischen dem Pickup-Signal und dem Zündfunke auf 0ms festgelegt.

maxadv clrf rtdset ; > 8000RPM retard value = 0ms
bsf rpmmax ; turn led on

Unter 1000 rpm, ist die Verzögerung zwischen dem Pickup-Signal und dem Zündfunke auf 5ms festgelegt.

maxret movlw 31h ; < 1000RPM
movwf rtdset ; retard value = 31h (~4.9ms)
bsf rpmmax ; turn led on

(Sie können eine andere RPM-Fix Begrenzung innerhalb der 131 Kurven-Werte verwenden)

Erweiterte Berechnung:


Zwischen dem höchsten und dem niedrigsten RPM-Wert,der PIC führt eine Messung der Dauer zwischen 2 Pickup Impulse [die Anzahl an 100us (hundert microsecondes) der Zeitspanne zwischen zwei Impulsen],um Rückschlüsse auf die Geschwindigkeit Motors zu ziehen.
Nach Ermittelung der Geschwindigkeit, berechnet der PIC die Position im Diagramm bzw.Tabelle.

caladv movlw d'74' ; rpmhi/lo - 74
subwf rpmlo,F ; rpmlo = rpmlo - 74
btfss STATUS,C
decf rpmhi,F

; divide result by 4

bcf STATUS,C
rrf rpmhi,F
rrf rpmlo,F ; / 2
;
bcf STATUS,C
rrf rpmhi,F
rrf rpmlo,F ; / 4


Der Wert der Verzögerung (Variable retlw) wird aus einer Tabelle der 131 Werte ermittelt. 

map org h'200' ; store map at 200h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************
retlw 31h ;4,9ms 1000rpm
retlw 30h ;4,8ms 1016rpm
retlw 2Fh ;4,7ms 1023rpm

Die Wahl zwischen 2 Tabellen erfolgt durch einen Jumper.
kein Jumper = Tabelle #1 in h200
mit Jumper = Tabelle #2 in h300
btfss table ; is table select low?
bsf PCLATH,0 ; yes,then select table N°2 at h'300'

Der PIC empfängt den Impuls vom Sensor auf 36°.
Er wartet, bis eine Zeit = retlw * 100us, dann nach dieser Verzögerung, wird ein Impuls(Dauer 2ms) an den Thyristor gesendet.

;****************** YOU CAN MODIFY THE DWELL VALUE BELLOW ********
movlw .20 ; 20 X 100uS = 2mS
movwf dwell ; set dwell time



Dauer des Zündfunkes:


Die Dauer des Zündfunkes kann nicht durch die CDI gesteuert werden, Sie ist abhängig von den Werten des Kondensators und der Zündspule. Aber wir können die Impulsdauer, die den Thyristor schaltet beeinflussen. Diese Impulsdauer (genannt: Verweilzeit,Dwell Time) kann für einige langsame Thyristoren verändert werden, aber ohne Auswirkungen auf die Dauer des Zündfunkens:

Ein Reverse-Ausgang ist verfügbar an pin8 zum Ansteuern eines Drehzahlmessers:


beispiel:

Der PIC misst die Dauer zwischen 2 Pickup-Impulsen. Also er ist in der Lage die Motordrehzahl zu berechnen.
Ist die Geschwindigkeit 1000RPM, der PIC sucht in den 131 Zeilen die ERSTE Zeile.

Warum?
Bei 1000RPM, die Dauer zwischen 2 Impulsen ist mit 60ms ein Funken überzählig.
(Ohne den überzähligen Funke wäre die Dauer 120ms
Umgerechnet in Mikrosekunden: 60ms = 60.000µs

Wie gesagt (siehe höher), der PIC zählt in 100µs Schritten. 
Bei 1000rpm,der PIC zählt 600 Schleifen von 100µs dauer zwischen 2 Pickup-Impulsen.
Dann der PIC unter Verwendung folgender Formel berechnet :

;     rpmhi/lo count - 74
; 131 - -------------------
;          4

Die Formel wird daher:
;     600 - 74
; 131 - -------- = 0
;       4

Die Formel gibt Null, so dass der PIC die erste Zeile aus der Tabelle nimmt (Der PIC addiert immer 1 höher),
die erste Zeile zurück:   retlw 31h   ;4,9ms   1000rpm
(Wie Sie wissen : Semikolon Präfix einen Kommentar und h bedeuten, Hexadezimal)
31 (hexadezimal) = 49 (dezimal)

Also wird der PIC 49 Schleifen von 100 microsekunden warten.
49 x 100µsek = 4900µsek = 4,9 Millisekunden
dann wird der PIC 4,9 ms nachdem Pickup-Impuls warten, bevor ein Zündfunke erzeugt wird.


Ist die Geschwindigkeit 1015rpm, der PIC sucht in den 131 Zeilen nun die ZWEITE Zeile.
Warum wieder ?!
Bei 1015rpm, die Dauer zwischen 2 Impulsen (mit einem überzähligen Funke) 59,1 ms
Umgewandelt in Mikrosekunden: 59.1ms = 59100µs

Wir wissen, dass der PIC in 100us schritten zählt.
Auf 1015rpm, dem PIC zählt 591 Schleifen von 100us zwischen 2 Impulsen
Also der PIC verwendet nun die Formel mit diesen Werten:

;       591 - 74
; 131 - --------
;          4

;       517
; 131 - ---
;        4

;
; 131 - 129,25 = 1,75 = 1 (wir benutzen den Integerwert)
;
Die Formel gibt eine EINS, damit verwender der PIC die zweite Zeile der Tabelle (1 +1)
dort steht der Wert:   retlw 30h
30 (hexa) = 48 (dezimal)

Der PIC wartet nun 48 Schleifen von 100mikroseconden.
48 x 100µsek = 4,8 milliseconds
so dass der PIC 4,8 ms nachdem Pickup-Impuls wartet, bevor ein Zündfunke erzeugt wird.

Und so weiter, bis 8000RPM und die LETZTE Zeile, wo der PIC den Befehl retlw 0h bekommen wird.
Was bedeutet, dass er wie folgend warten muss: 100µs x 0 = keine Verzögerung
so dass der PIC sofort einen Funken auslöst. ((Einschränkung: Selbst wenn Sie schreiben "retlw 0h" der untere Wert ist 100us (0.1ms) .Das bedeutet, dass Sie keinen Zündfunken zum EXAKT genau gleichen Zeitpunkt haben können, wie der Pickup-Impuls erfolgt.)

Sie denken nicht wirklich so ?
Bei 8000rpm, die Dauer zwischen 2 Impulsen (mit einem überzähligen Funken) ist 7,5 ms
Umgewandelt in Mikrosekunden: 7,5 ms 7500µs
Bei 8000rpm, der PIC zählt 75 Schleifen von 100µs zwischen 2 Impulsen
Mit Hilfe der Formel:

;       75 - 74
; 131 - -------
;         4

;        1
; 131 - ---
;        4

;
; 131 - 0,25 = 130,75 = 130 (Integer-Wert)
;
Der PIC holt die Zahl der Zeile (130 +1) = 131 ,also die letzte Zeile.
Die Kurve ist also definiert durch die 131 Punkte, und erlaubt ein gewisses Tuning.Aber die Genauigkeit ist recht grob:
+ / - 1 ° bei 1660rpm
+ / - 5 ° bei 8330rpm
Das kommt nur von der verwendeten "Maßeinheit" für die Messung der Dauer zwischen 2 Impulsen, um die Zündverzögerung zu berechnen. Diese Laufzeiten sind gezählt, in 100µs Einheiten.
100µs Einheiten sind bei niedriger Drehzahl klein genug,aber nicht für hohe Drehzahlen geeignet!
(Eine 10µs Einheit wäre präziser, aber auf der anderen Seite wäre die Tabelle zehn Mal größer,
und ein 8MHz Quartz verbessert die Genauigkeit nicht.)


Wie man die Kurve ändert?


2Es gibt 2 Möglichkeiten: Manuell oder mit Hilfe eines Excel-Arbeitsblattes.

So ändern Sie die Wert der Zündverzögerung ,Sie können die Hexadezimal-Werte direkt in der Tabelle eingeben.

Beispiel:

Angenommen, Sie wollen eine Verzögerung von 7.9ms zwischen den Pickup-Impuls und der Zündung bei 1000 rpm:


map org h'200' ; store map at 200h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************
retlw 31h ;4,9ms 1000rpm
retlw 30h ;4,8ms 1016rpm
retlw 2Fh ;4,7ms 1023rpm
retlw 2Fh ;4,7ms 1030rpm

Die Tabelle ist jetzt:

map org h'200' ; store map at 200h
addwf PCL,1 ; add W + PCL
; *********** INSERT YOUR OWN VALUES HERE *******************
retlw 4Fh ;7,9ms 1000rpm
retlw 30h ;4,8ms 1016rpm


Mit Hilfe eines Excel-Arbeitsblattes:



Schauen Sie bitte in das Tutorial


Erstellen Sie Ihre eigene Kurve mit diesem Excel-Arbeitsblatt :

Dieses Blatt verwendet DECHEX (fr)
oder DEC2HEX (uk)
oder DEC.N.HEX (nl)
oder DEC.TILL.HEX (sw) function enthalten im Analysis-Toolpak.

Installieren Sie das Analysis ToolPak und Solver, indem Sie auf das Menu Tools klicken und wählen Sie Add-Ins. Wenn die Analysefunktionen im Add-Ins Dialogfeld nicht aufgelistet sind, klicken Sie auf Durchsuchen und suchen Sie auf dem Laufwerk den Ordner-Namen und Dateinamen für die Analysefunktionen-Add-In, Analys32.xll - diese ist in der Regel im MicrosoftOffice\Office\Library\Analysis Ordner enthalten - oder starten Sie das Setup-Programm, wenn es nicht installiert ist (Sie werden wahrscheinlich Ihre Microsoft Office CD-ROM benötigen). Wählen Sie die Analysefunktionen und Solver im Kontrollkästchen und klicken Sie auf OK.

Sollte dies nicht funktionieren,  können Sie die Funktion DEC2HEX auszuprobieren. In einer neuen Zelle schreiben Sie:   =DEC2HEX(24)   funktioniert es?


Wenn ja, "Refresh" der Zelle F17 erzwingen, 
(kopieren Sie die Formel aus F17, löschen , fügen Sie diese in F17 ein)
damit Excel die Formel erneut berechnet.

 (Es scheint, dass, wenn Excel auf einen Fehler stösst, die Berechnung nicht mehr erneut erfolgt)

excel file
  1. Geben Sie die Pickup-Position in Zelle D6 (z.B.: 32 BTDC)
  2. Geben Sie die RPM-Beschränkung in Zelle D8 (z. B.: 6200)
  3. Geben Sie die 131 Werte vor, dass Sie in Spalte C (z.B. 8 für 500RPM     8,7 für 625RPM aund so weiter ...)
  4. Bearbeiten Sie die Kurve mit dem "Grafik-Tabelle"-Reiter: Punkt und wählen Sie dann einen Wert, bewegen sie ihn nach oben oder unten
  5. Sie können die gesamte Kurve nach oben oder unten verschieben, indem Sie ein "shift"-Wert in die Zelle D10 ändern
  6. Sobald die Kurve fertig gezeichnet ist, wählen Sie und kopieren Sie die 131 blau-Werte vom Anfang retlw ..... (Spalte E)
  7. Bearbeiten Sie die Quelldatei (*. ASM) mit einem guten Editor wie ConTEXT (Freeware) 
  8. Fügen Sie diese 131 Zeilen vom Anfang retlw, in die Tabelle ein.

  9. map org h'200' ; store map at 200h
    addwf PCL,1 ; add W + PCL
    ; *********** INSERT YOUR OWN VALUES HERE *******************
    retlw 31h ;4,9ms 1000rpm
    retlw 30h ;4,8ms 1016rpm
    retlw 2Fh ;4,7ms 1023rpm
    . . . . . . . . . .
    retlw 0h ;0ms
    ; *********** END OF YOUR OWN VALUES *******************
    retlw 31h ;in case of overlap

  10. Speichern Sie die Datei *.ASM

    Extra erweitert:


    Es ist auch eine grössere Vorzündung möglich,als es die Pickup-Position erlaubt.

    Was ist "Extra erweitert" ?



    PIC Programmierung.




    1. Kompilieren Sie die ASM-Datei mit MPASMWIN:

    2. Installieren und starten Sie mpasmwin.exe.
      • Wählen Sie den PIC
      • Navigieren und wählen Sie die *.ASM-Datei (zB: C:\cdi\bikeign.asm)
      • Assemblieren Sie die Datei (= transformieren nach *.HEX je nach Prozessor-Typ).
      • Die kompilierte Datei ist verfügbar in C:\cdi\bikeign.hex
  11. Stecken Sie den PICr 16F84/16F628 in den PIC-Programmierer-Sockel.
    Den einen den Ich benutze
  12. Transferiere *.HEX-Datei in den PIC mit ICPROG
  13. Der PIC 16F84/16F628 Baustein kann nun in die Zündung eingebaut werden.



In der Animation unten, kann man sehen (in weiß), das Signal vom Pick-up (Anschluss an PIC-Eingang pin10)
und das Signal für die Zündspule (SCR) (PIC-Ausgang, zwischen D2 und R9) bei verschiedenen Geschwindigkeiten zwischen 1300rpm zu 6000rpm:


scale (5ms/div 2v/div)


Wir sehen:
bei hoher Drehzahl (U/min), ist das Ausgangssignal ist in der gleichen Zeit wie das Pickup-Signal, also vor dem oberen Totpunkt (TDC).
bei niedriger Drehzahl (U/min), ist das Ausgangssignal dem Eingangssignal zeitverzögert, also am oberen Totpunkt (TDC).


Software.



PCM5.4 .HEX
PIC16f84 CDI
for XT400-550

(2600-6500rpm)

sotware
PIC16f84 CDI
for XT600

(1920-7320rpm)

PIC16f84 CDI
for SR500

(1920-7320rpm)

PIC16f84 CDI
for 2 strokes

(3170-10900rpm)

PIC16f84 CDI
for 2 strokes

(3446-13020rpm)



Sources



PCM5.4 .ASM
PIC16f84 + quartz

(1000-8000rpm)

Source 16f84
PIC16f84 + quartz

(1500-16000rpm)

Source 16f84
PIC16f628 no quartz

(1000-8000rpm)

Source 16f628

Download: right click / Save link as...

Schaltpläne & Layouts.

PCM5.4 Schema PCB Componants Part list Eagle Files
CDI for
XT400-550-600
Schema.PDF circuit.PDF componants.PDF liste.TXT SCH+BRD


Platine (PCB).


Zoom



realisierung.

Zoom
Zoom


pin 3 +12Vcc (battery) brown
pin 2 spark coil orange
pin 1 Alternator red
pin 4 Kill switch white/black
pin 8 12° pickup white/green
pin 7 36° pickup white/red
pin 5 pickup common ground green
pin 5 CDI ground black
pin 6 alternator ground brown

Revue Technique





Tests.





Versionen.