昨日同様プログラムの簡単な説明です。
詳しく説明すると長くなるし、実は私もよくわからないので・・・
前回はオープニングデモ~エンジンスタートの待機まで、今回はいよいよエンジンスタート&低回転(945rpm以下)の制御です。
エンジン始動直後のため、ドエル制御は前の点火20ms後通電とおおざっぱな制御となります。
太文字がプログラムソースです。
;**************************
;低回転用;
;**************************
LOW50
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;10100010;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00100001' ;プリスケーラ4倍 2us;
MOVWF T1CON ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
BCF INTCON,5 ;TMR0割り込み禁止;
BCF OV_F,1
CLRWDT
BCF CMCON0,3 ;GP1選択;
ここまではPICの設定、ピックアップ信号のON-OFFの基準電圧の設定(2.03V)&タイマー1のカウンター速度を遅くして262ms(229rpm)まで制御&タイマー0の割り込みを禁止してドエル制御の停止。
LOW1
BTFSS PIR1,3
GOTO LOW1
BSF GPIO,2
BSF GPIO,5
CLRWDT
BTFSS PIR1,3
GOTO LOW1
BSF GPIO,2
BSF GPIO,5
CLRWDT
Aシリンダー用のピックアップ信号の入力待ち。
信号が入力される(ONになる)まで待つ。
信号が入力される(ONになる)まで待つ。
LOW2
BTFSS PIR1,3
GOTO LOW3
BCF PIR1,3
GOTO LOW2
Aシリンダー用のピックアップ信号がOFFになるまで待つ。
LOW3
BCF GPIO,2
BCF GPIO,5
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BCF GPIO,2
BCF GPIO,5
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
Aシリンダー点火、タイマー1LOWとHIの値を変数に記録。
BTFSC OV_F,1
GOTO LOW4
MOVLW D'62' ;62*512us*2=63.488ms 945rpm
BCF STATUS,C
SUBWF TH,0
BTFSS STATUS,C
GOTO MAINST200
GOTO LOW4
MOVLW D'62' ;62*512us*2=63.488ms 945rpm
BCF STATUS,C
SUBWF TH,0
BTFSS STATUS,C
GOTO MAINST200
タイマー1(HI)の値が63ms(945rpm)以上なら通常制御へ飛ぶ、以下なら低回転制御を続行。
LOW4
BCF OV_F,1
CALL T50mS ;20ms待つ
BSF GPIO,4
BSF CMCON0,3 ;GP0選択;
GOTO LOW100
20ms待ってBシリンダー用コイル通電。
LOW100ラベルへ飛ぶ。
LOW100ラベルへ飛ぶ。
LOW500
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
BSF CMCON0,3 ;GP0選択;
ここは通常点火制御から回転が落ち込んだ時にPICの設定を変更。
LOW100
BTFSS PIR1,3
GOTO LOW100
BSF GPIO,4
CLRWDT
BTFSS PIR1,3
GOTO LOW100
BSF GPIO,4
CLRWDT
Bシリンダー用のピックアップ信号の入力待ち。
信号が入力される(ONになる)まで待つ
LOW200
BTFSS PIR1,3
GOTO LOW300
BCF PIR1,3
GOTO LOW200
Bシリンダー用のピックアップ信号がOFFになるまで待つ。
LOW300
BCF GPIO,4
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BCF GPIO,4
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
Bシリンダー点火、タイマー1LOWとHIの値を変数に記録。
BTFSC OV_F,1
GOTO LOW400
MOVLW D'62' ;62*512us*2=63.488ms 945rpm
BCF STATUS,C
SUBWF TH,0
BTFSS STATUS,C
GOTO MAINST
タイマー1(HI)の値が63ms(945rpm)以上なら通常制御へ飛ぶ、以下なら低回転制御を続行。
LOW400
BCF OV_F,1
CALL T50mS ;20ms待つ
BSF GPIO,2
BSF GPIO,5
BCF CMCON0,3 ;GP1選択;
GOTO LOW1
20ms待ってAシリンダー用コイル通電。
最初に(LOW1ラベル)戻る。