MOS-FET増設で調子よく走れるようになったオリジナルイグナイター。
先日、島チャンのCB750Fourとツーリングに行ってきました。
島チャンのFourは慣らしも終わり、私のCB-Fはキャブのリセッティングとオリジナルイグナイターで調子は上々、
二人とも調子ノリノリでした。
すっかり寒くなったので天草方面に出かけてきました。
海へのツーリングもいいですね~~!
課題は、このイグナイタはMOS-FETを4個も使ってもったいないので、もう一度見直す予定です!
さて、前回案内したオリジナルイグナイターのプログラムです。
数回に分けて内容を少し説明したいと思います(^^)
解りづらいですが太文字がプログラムソースです。
ここからプログラム↓
errorlevel -302 ; Suppress message 302
errorlevel -305 ; Suppress message 305
errorlevel -305 ; Suppress message 305
LIST P=12f683
#INCLUDE <p12f683.inc>
#INCLUDE <p12f683.inc>
__CONFIG _CP_OFF & _CPD_OFF & _WDT_ON & _BOD_ON & _IESO_OFF& _PWRTE_ON & _INTOSCIO & _MCLRE_OFF
CBLOCK 020h
W_TEMP ;割り込み時Wレジスタセーブ用;
STATUS_TEMP ;ステータスセーブ用;
PCLATH_TEMP ;PCLATHセーブ用;
T05mCNT ;1mSループカウンタ;
T1mCNT ;100msループカウンタ;
T50mCNT ;20msループカウンタ;
TH ;TIM1HIカウンター;
TL ;TIM1LOWカウンター;
LMHI ;リミッターHIカウンター;
LMLO ;リミッターLOカウンター;
OV_F ;タイマー1オーバーフロー用;
DETIM ;ドエルタイム設定用;
DETIM2 ;ドエルタイム計算用;
DETIM4 ;気等判別フラグ;
OPNF ;オープニングデモフラグ;
OPN ;オープニングデモカウンタ1;
OPN2 ;オープニングデモカウンタ2
ENDC
W_TEMP ;割り込み時Wレジスタセーブ用;
STATUS_TEMP ;ステータスセーブ用;
PCLATH_TEMP ;PCLATHセーブ用;
T05mCNT ;1mSループカウンタ;
T1mCNT ;100msループカウンタ;
T50mCNT ;20msループカウンタ;
TH ;TIM1HIカウンター;
TL ;TIM1LOWカウンター;
LMHI ;リミッターHIカウンター;
LMLO ;リミッターLOカウンター;
OV_F ;タイマー1オーバーフロー用;
DETIM ;ドエルタイム設定用;
DETIM2 ;ドエルタイム計算用;
DETIM4 ;気等判別フラグ;
OPNF ;オープニングデモフラグ;
OPN ;オープニングデモカウンタ1;
OPN2 ;オープニングデモカウンタ2
ENDC
ここ↑では使用するPICの指定とCONFIG、変数の設定。
PICはP12F683を使用。CONFIGの設定はよくわからないから他のサイトをご覧下さい(^^)
ORG 0 ;Reset Start
GOTO INIT
ORG 0X4
MOVWF W_TEMP ;Wレジスタセーブ
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
MOVFW PCLATH
MOVWF PCLATH_TEMP ;
CLRF PCLATH
BTFSC PIR1,0
GOTO T1
GOTO T0
T1
BCF PIR1,0 ;TMR1割り込みフラグリセット;
BSF OV_F,1
GOTO WA
T0
BCF INTCON,2 ;TMR0割り込みフラグリセット;
BTFSC DETIM4,0
GOTO TT100
BSF GPIO,2
BSF GPIO,5
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSC DETIM4,7
GOTO TTT1
GOTO WA
TT100
BSF GPIO,4
BCF DETIM4,0
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSC DETIM4,7
GOTO TTT1
GOTO WA
BSF GPIO,5
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSC DETIM4,7
GOTO TTT1
GOTO WA
TT100
BSF GPIO,4
BCF DETIM4,0
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSC DETIM4,7
GOTO TTT1
GOTO WA
TTT1
BCF GPIO,2
BCF GPIO,4
BCF DETIM4,7
GOTO WA
BCF GPIO,2
BCF GPIO,4
BCF DETIM4,7
GOTO WA
WA
MOVFW PCLATH_TEMP
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
MOVFW PCLATH_TEMP
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
ここ↑では割込み処理、TMR0でドエルタイムの設定とTMR1で回転数カウンターのオーバーフロー処理を実施。
; PICの初期化
INIT
; GPIO(GP2-5)をデジタルI/Oに設定
MOVLW B'00011110'
MOVWF CMCON0 ;GP0,1コンパレーター入力;
BSF STATUS,RP0 ;バンク1;
MOVLW B'01110000' ;内部クロックを8MHzに設定;
MOVWF OSCCON ;CLOCK=8MHz;
MOVLW B'10000101' ;10100010;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
MOVLW B'00000001' ;
MOVWF PIE1 ;TMR1割り込み許可;
MOVLW B'11100000' ;
MOVWF INTCON ;割り込み許可;
MOVLW B'11010111' ;
MOVWF OPTION_REG ;;
INIT
; GPIO(GP2-5)をデジタルI/Oに設定
MOVLW B'00011110'
MOVWF CMCON0 ;GP0,1コンパレーター入力;
BSF STATUS,RP0 ;バンク1;
MOVLW B'01110000' ;内部クロックを8MHzに設定;
MOVWF OSCCON ;CLOCK=8MHz;
MOVLW B'10000101' ;10100010;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
MOVLW B'00000001' ;
MOVWF PIE1 ;TMR1割り込み許可;
MOVLW B'11100000' ;
MOVWF INTCON ;割り込み許可;
MOVLW B'11010111' ;
MOVWF OPTION_REG ;;
CLRF ANSEL
MOVLW B'00000011' ;1=入力;
MOVWF TRISIO ;GP0,1は入力、その他は出力;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00010100' ;;
MOVWF WDTCON ;ウォッチドッグON 1024ms;
MOVLW B'00000011' ;1=入力;
MOVWF TRISIO ;GP0,1は入力、その他は出力;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00010100' ;;
MOVWF WDTCON ;ウォッチドッグON 1024ms;
ここ↑ではPICの初期化。端子の入出力、コンパレーターの基準電圧、ウォッチドッグの設定等々。
MOVLW D'23' ;1us*256=256us*23=5888us;
MOVWF LMHI ;リミッター設定HI;
MOVLW D'112' ;112us+5888=6000us=10000rpm;
MOVWF LMLO ;リミッター設定LOW;
MOVWF LMHI ;リミッター設定HI;
MOVLW D'112' ;112us+5888=6000us=10000rpm;
MOVWF LMLO ;リミッター設定LOW;
MOVLW D'54' ;128*54=6912us;
MOVWF DETIM ;ドエルタイム設定;
MOVWF DETIM ;ドエルタイム設定;
ここ↑ではリミッター、ドエルタイムの指定。
リミッターはLMHIはHIカウンタなので1カウント=256usとなり、LMLOはLOカウンタで1カウント=1us。
上記では10000rpmに設定なので23*256=5888us+112us=6000us=6ms-10000rpm。
例えば12000rpmに設定の場合はLMHI=19、LMLO=136。19*256=4864us+136=5000us=5ms=12000rpm。
ドエルタイムは変数DETIMに54を設定。TMR0で制御して1カウントあたり0.5us間隔なので0.5*256=128us*54=6912us=6.9msがドエルタイム(通電時間)
BCF PIR1,3
BCF GPIO,2
BCF GPIO,4
BCF GPIO,5
BCF GPIO,2
BCF GPIO,4
BCF GPIO,5
LOWST
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00100001' ;B'00110001' ;プリスケーラ4倍 2us;
MOVWF T1CON ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
BCF INTCON,5 ;TMR0割り込み禁止;
BCF OV_F,1
CLRWDT
BCF CMCON0,3 ;GP1選択;
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00100001' ;B'00110001' ;プリスケーラ4倍 2us;
MOVWF T1CON ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
BCF INTCON,5 ;TMR0割り込み禁止;
BCF OV_F,1
CLRWDT
BCF CMCON0,3 ;GP1選択;
ここ↑ではイグナイタの初期作動設定(通電させない)と、始動時作動設定。
上記4サイクルでIGコイルの通電をストップ等。
VRCONでコンパレータの基準電圧設定。ここでは2.03V、車両からの信号に合わせて設定可能。
TMR1のプリスケーラを4倍にして最大230rpmまで制御。
スタート時等の極低回転ではTMR0の割り込みを禁止してドエル制御はしない。