yjmwxwx 发表于 2018-4-6 23:27:06

求老师指导单片机汽油发动机点火器

本帖最后由 yjmwxwx 于 2018-4-7 00:53 编辑

上次去汽车板块那里没人,一个出来指导的都没有,加上自己视频比较黑正时灯是氖泡标记不清晰。

今天做了个亮的正时灯,又录了个视频,所以重新发帖求有经验的老师出来指导下,就这个帖子到汽车版没人回复,到摩托论坛发直接被删帖,程序虽然简单但是当初点火器卡过脖子,制作一个东西就算简单也花了不少时间,哪怕来个人拍砖也比0回复强。

网上找的电路图



高压线上绕13圈

https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-29.jpg

电路放到小药瓶里


https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-27.jpg

没有高亮LED,从坏的灯里拆出两个。

https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-28.jpg

测试视频,开着灯小电机带动的圆盘上标记清晰可见,1602右下角是转速,左上角是每转时间(1000代表10毫秒)。

http://player.youku.com/player.php/sid/XMzUxOTAzODA4NA==/v.swf


两个火花塞对这看跳火
https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-31.jpg


新的测试平台

https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-33.jpg


点火器正面
https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-17.jpg

点火器反面

https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-25.jpg

小电机和霍尔传感器
https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-19.jpg
https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-18.jpg

电路图


程序

https://content.foto.my.mail.ru/mail/yjmwxwx/dianhuoqi/h-26.jpg

用STM32F030F4单片机控制,程序所有文件


程序代码

                @ stm32f030f4p6 asm
       .thumb
                 .syntax unified
        .section .data
zhuansulianbiao:                                @1000到16000转,每150转一个点
        .int 1000,1150,1300,1450,1600,1750,1900,2050,2200,2350,2500,2650,2800,2950,3100,3250,3400,3550,3700,3850,4000,4150,4300,4450,4600,4750,4900,5050,5200,5350,5500,5650,5800,5950,6100,6250,6400,6550,6700,6850,7000,7150,7300,7450,7600,7750,7900,8050,8200,8350,8500,8650,8800,8950,9100,9250,9400,9550,9700,9850,10000,10150,10300,10450,10600,10750,10900,11050,11200,11350,11500,11650,11800,11950,12100,12250,12400,12550,12700,12850,13000,13150,13300,13450,13600,13750,13900,14050,14200,14350,14500,14650,14800,14950,15100,15250,15400,15550,15700,15850,16000,0xffff
dianhuotiqianjiaobiao:                        @点火提前角表
        .int 0,512,1024,1536,2048,2560,3072,3584,4096,4608,5120,5632,6144,6656,7168,7680,8192,8704,9216,9728,10240,10752,11264,11776,12288,12800,13312,13824,14336,14848,15360,15872,16384,16896,17408,17920,18432,18944,19456,19968,20480,20992,21504,22016,22528,23040,23552,24064,24576,25088,25600,26112,26624,27136,27648,28160,28672,29184,29696,30208,30720,31232,31744,32256,32768,33280,33792,34304,34816,35328,35840,36352,36864,37376,37888,38400,38912,39424,39936,40448,40960,41472,41984,42496,43008,43520,44032,44544,45056,45568,46080,46592,47104,47616,48128,48640,49152,49664,50176,50688,51200

lcdshuju:
        .ascii"yjmwxwx-20180317"
dianhua:       
        .ascii        "      15552208295"
qq:
        .ascii        "   QQ:3341656346"
        .equ STACKINIT,                      0x20001000
        .equ asciimabiao,                0x20000000
        .equ quanshu,                        0x20000010
        .equ zhuansu,                        0x20000014
        .equ meizhuanshijian,                0x20000018
        .equ diyicibudianhuo,                0x2000001c
        .equ dianhuotiqianjiao,                0x20000020
        .equ tqjbzhizhen,                0x20000024        @提前角表指针
.section .text
vectors:
        .word STACKINIT
        .word _start + 1
        .word _nmi_handler + 1
        .word _hard_fault+ 1
        .word 0
        .word 0
        .word 0
        .word 0
        .word 0
        .word 0
        .word 0
        .word _svc_handler +1
        .word 0
        .word 0
        .word _pendsv_handler +1
        .word aaa +1        @ _systickzhongduan +1               @ 15
        .word aaa +1   @ _wwdg +1          @ 0
        .word aaa +1   @_pvd +1            @ 1
        .word aaa +1   @_rtc +1            @ 2
        .word aaa +1   @_flash +1          @ 3
        .word aaa +1        @ _rcc + 1          @ 4
        .word aaa +1        @_exti0_1+1      @ 5
        .word aaa +1      @ _exti2_3 +1      @ 6
        .word aaa +1       @_exti4_15 +1   @ 7
        .word aaa +1                         @ 8
        .word aaa +1         @_dma1_1+1    @ 9
        .word aaa +1    @_dma1_2_3 +1      @ 10
        .word aaa +1       @_dma1_4_5 +1   @ 11
        .word aaa +1       @_adc1 +1          @ 12
        .word aaa +1        @_tim1_brk_up +1@ 13
        .word _tim1_buhuo +1    @ 14
        .word aaa +1         @_tim2 +1       @ 15
        .word aaa +1          @_tim3 +1      @ 16
        .word aaa +1                         @ 17
        .word aaa +1                              @ 18
        .word aaa +1                @_tim14 +1    @ 19
        .word aaa +1                         @ 20
        .word _tim16 +1      @ 21
        .word aaa +1         @_tim17 +1      @ 22
        .word aaa +1          @_i2c   +1   @ 23
        .word aaa +1                         @ 24
        .word aaa +1         @_spi   +1    @ 25
        .word aaa +1                         @ 26
        .word aaa +1         @_usart1 +1   @ 27
_start:
neicunqingling:
        ldr r0, = 0x20000000
        movs r1, # 0
        ldr r3, = 0x1000
neicunqinglingxunhuan:
        subs r3, # 4
        str r1,
        bne neicunqinglingxunhuan

_waisheshizhong:                       @ 外设时钟
        @+0x14=RCC_AHBENR
        @0=DMA @2=SRAM @4=FLITF@6=CRC @17=PA @18=PB @19=PC @20=PD @22=PF
        ldr r0, = 0x40021000
        ldr r1, = 0x460005
        str r1,


        @+0x18外设时钟使能寄存器 (RCC_APB2ENR)
        @0=SYSCFG @5=USART6EN @9=ADC @11=TIM1 @12=SPI1 @14=USART1 @16=TIM15 @17=TIM16 @18=TIM17 @22=DBGMCU
        ldr r1, = 0x20801
        str r1,
        @+0X1C=RCC_APB1ENR
        @1=TIM3 @4=TIM6 @5=TIM7 @8=TIM14 @11=WWDG @14=SPI @17=USRT2 @18=USART3 @20=USART5 @21=I2C1
        @22=I2C2 @23=USB @28=PWR
        ldr r1, = 0x102
        str r1,
       
_tim1chushihua:                                @8M
        ldr r0, = 0x40012c00
        ldr r1, = 79
        str r1,         @psc
        ldr r1, = 0xffff
        str r1,         @arr
        ldr r1, = 0x100
        str r1,         @ccmr1
        movs r1, # 0x10
        str r1,         @ccer
        movs r1, # 0x04
        str r1,
        movs r1, # 0x01
        str r1,
_tim3chushiha:                                @8M
        ldr r0, = 0x40000400 @ tim3_cr1
        ldr r1, = 79
        str r1, @ psc
        ldr r1, = 600
        str r1, @ ARR
        ldr r1, = 0x6800
        str r1, @ ccmr2
        ldr r1, = 0x1000
        str r1, @ ccer
        ldr r1, = 100
        str r1,
        movs r1, # 0x99
        str r1,

_tim16chushihua:                @8M
        ldr r0, = 0x40014400
        ldr r1, = 79
        str r1,
        ldr r1, = 0xffff
        str r1,
        movs r1, # 0X01
        str r1,
io_she_zhi:
        @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        @a(0x48000000)b(0x48000400)c(0x48000800)d(0x48000c00)f(0x48001400)
        @ 输入(00),通用输出(01),复用功能(10),模拟(11)
        @偏移0x4 = 端口输出类型 @ (0 推挽),( 1 开漏)
        @偏移0x8 = 输出速度00低速, 01中速, 11高速
        @偏移0xC = 上拉下拉 (00无上下拉,01 上拉, 10下拉)
        @偏移0x10 = 输入数据寄存器
        @偏移0x14 = 输出数据寄存器
        @偏移0x18 = 端口开0-15置位
        @偏移0x28 = 端口关
        @0X20 = 复用低
        @GPIO口0(0-3位)每个IO口占用4位
        @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
        @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
        @0x24 = 复用高
        @GPIO口8 (0-3位)每个IO口占用4位
        @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
        @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
        @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

        ldr r0, = 0x48000000
        ldr r1, = 0x28085550
        str r1,
        movs r1, # 0xfc@ pa2-pa7开漏输出
        str r1,
        ldr r1, = 0x20
        str r1,
       
        ldr r0, = 0x48000400
        movs r1, # 0x08 @ pb1
        str r1,
        movs r1, # 0x10@ tim3_4到PB1
        str r1, @ ARRL
       
_waishezhongduan:       
        @0xE000E100    0-31写1开,写0没效
        @0XE000E180    0-31 写1关,写0没效
        @0XE000E200    0-31 挂起,写0没效
        @0XE000E280    0-31 清除, 写0没效
        ldr r0, = 0xe000e100
        ldr r1, = 0x204000        @14号 19
        str r1,

_lcdchushihua:
        movs r0, # 0x33
        movs r1, # 0
        bl _xielcd
        bl _lcdyanshi
        movs r0, # 0x32
        movs r1, # 0
        bl _xielcd
        bl _lcdyanshi
        movs r0, # 0x28
        movs r1, # 0
        bl _xielcd
        bl _lcdyanshi
        movs r0, # 0x0c
        movs r1, # 0
        bl _xielcd
        bl _lcdyanshi
        movs r0, # 0x01
        movs r1, # 0
        bl _xielcd
        bl _lcdyanshi

tingting:

        ldr r3, = meizhuanshijian                                       
      ldr r0,
      movs r1, # 6
      ldr r2, = asciimabiao
      movs r3, # 0xff
      bl _zhuanascii

      movs r0, # 0x80
      ldr r1, = asciimabiao
      movs r2, # 6
      bl _lcdxianshi

        ldr r1, = tqjbzhizhen
      ldr r0,
      movs r1, # 6
      ldr r2, = asciimabiao
      movs r3, # 0xff
      bl _zhuanascii

      movs r0, # 0x88
      ldr r1, = asciimabiao
      movs r2, # 6
      bl _lcdxianshi
       
        ldr r3, = dianhuotiqianjiao
        ldr r0,
        movs r1, # 6
        ldr r2, = asciimabiao
        movs r3, # 0xff
        bl _zhuanascii
       
      movs r0, # 0xc0
      ldr r1, = asciimabiao
      movs r2, # 6
      bl _lcdxianshi

        bl _jisuandianhuotiqianjiao
       
        ldr r1, = zhuansu
        ldr r0,
      movs r1, # 6
      ldr r2, = asciimabiao
      movs r3, # 0xff
      bl _zhuanascii

      movs r0, # 0xc8
      ldr r1, = asciimabiao
      movs r2, # 6
      bl _lcdxianshi

       
       
      b tingting


_jisuandianhuotiqianjiao:
        push {r0-r5,lr}
        ldr r2, = zhuansu
        ldr r1, = meizhuanshijian
        ldr r0, = 6000000
        ldr r1,
        mov r5, r1
        bl _chufa
        str r0,
        ldr r1, = 1000
        cmp r0, r1
        bls _buyongtiqian
        ldr r1, = zhuansulianbiao
        movs r2, # 100
        lsls r2, r2, # 2
        movs r3, # 0
_zhaozhuansuhaoxunhuan:
        ldr r4,
        cmp r4, r0
        bhi _zhuansudayu
        adds r3, r3, # 4
        cmp r3, r2
        bne _zhaozhuansuhaoxunhuan
        movs r3, # 0
_zhuansudayu:
        ldr r1, = dianhuotiqianjiaobiao
        ldr r2, = dianhuotiqianjiao
        ldr r4,
        lsls r0, r5, # 8
        ldr r1, = 360
        bl _chufa
        muls r0, r0, r4
        asrs r0, r0, # 16
        str r0,
        ldr r0, = tqjbzhizhen
        str r3,
        pop {r0-r5,pc}
_buyongtiqian:
        ldr r2, = dianhuotiqianjiao
        movs r1, # 0
        str r1,
        pop {r0-r5,pc}
       
       
       
_lcdxianshi:                          @r0=LCD位置,r1=数据地址,r2=长度
        push {r0-r4,lr}
        mov r4, r1

        movs r1, # 0
        bl _xielcd

        movs r1, # 1
        movs r3, # 0
_lcdxianshixunhuan:
        ldrb r0,
        bl _xielcd
        adds r3, r3, # 1
        cmp r3, r2
        bne _lcdxianshixunhuan
        pop {r0-r4,pc}

_lcdyanshi:
        push {r5,lr}
        ldr r5, = 0x2000
_lcdyanshixunhuan:
        subs r5, r5, # 1
        bne _lcdyanshixunhuan
        pop {r5,pc}

_xielcd:                        @入R0=8位,r1=0命令,r1=1数据
        push {r0-r7,lr}
        lsrs r6, r0, # 4
        lsls r0, r0, # 28
        lsrs r0, r0, # 28
        movs r2, # 0x80                @ RS
        movs r3, # 0x40                @ E
        movs r5, # 0x3c
        ldr r4, = 0x48000000
        cmp r1, # 0
        beq _lcdmingling
        str r2,         @RS=1
        b _lcdshuju
_lcdmingling:
        str r2,         @RS=0
_lcdshuju:
        str r3,         @E=1
        str r5,

        lsls r7, r6, # 31
        lsrs r7, r7, # 26
        str r7,

        lsrs r7, r6, # 1
        lsls r7, r7, # 31
        lsrs r7, r7, # 27
        str r7,

        lsrs r7, r6, # 2
        lsls r7, r7, # 31
        lsrs r7, r7, # 28
        str r7,

        lsrs r7, r6, # 3
        lsls r7, r7, # 31
        lsrs r7, r7, # 29
        str r7,

        bl _lcdyanshi
        str r3,         @E=0


        str r3,     @E=1
        str r5,

        lsls r7, r0, # 31
        lsrs r7, r7, # 26
        str r7,

        lsrs r7, r0, # 1
        lsls r7, r7, # 31
        lsrs r7, r7, # 27
        str r7,

        lsrs r7, r0, # 2
        lsls r7, r7, # 31
        lsrs r7, r7, # 28
        str r7,

        lsrs r7, r0, # 3
        lsls r7, r7, # 31
        lsrs r7, r7, # 29
        str r7,

        bl _lcdyanshi
        str r3,     @E=0

        pop {r0-r7,pc}


_zhuanascii:                                        @ 16进制转数码管码
                @ R0要转的数据, R1长度,R2结果表首地址, r3=小数点位置
        push {r0-r7,lr}
        mov r7, r3
        mov r5, r0
        mov r6, r1
        movs r1, # 10
_xunhuanqiuma:
        bl _chufa
        mov r4, r0
        muls r4, r1
        subs r3, r5, r4
        adds r3, r3, # 0x30
        mov r5, r0
        subs r6, r6, # 1
        beq _qiumafanhui
        cmp r6, r7
        bne _meidaoxiaoshudian
        movs r4, # 0x2e                @小数点
        strb r4,         @插入小数点
        subs r6, r6, # 1
_meidaoxiaoshudian:
        strb r3,
        movs r6, r6
        bne _xunhuanqiuma
        pop {r0-r7,pc}
_qiumafanhui:
        strb r3,
        pop {r0-r7,pc}

       
_chufa:                                @软件除法
        @ r0 除以 r1 等于 商(r0)余数R1
        push {r1-r4,lr}
        cmp r0, # 0
        beq _chufafanhui
        cmp r1, # 0
        beq _chufafanhui
        mov r2, r0
        movs r3, # 1
        lsls r3, r3, # 31
        movs r0, # 0
        mov r4, r0
_chufaxunhuan:
        lsls r2, r2, # 1
        adcs r4, r4, r4
        cmp r4, r1
        bcc _chufaweishubudao0
        adds r0, r0, r3
        subs r4, r4, r1
_chufaweishubudao0:
        lsrs r3, r3, # 1
        bne _chufaxunhuan
_chufafanhui:
        pop {r1-r4,pc}
        .ltorg

_nmi_handler:
        bx lr
_hard_fault:
        bx lr
_svc_handler:
        bx lr
_pendsv_handler:
        bx lr
aaa:
        bx lr
_tim16:
        ldr r0, = 0x40000400
        movs r1, # 0x99
        str r1,
       
        ldr r0, = zhuansu
        ldr r1,
        adds r1, r1, # 1
        str r1,
       
        ldr r0, = 0x40014400
        movs r1, # 0
        str r1,
        str r1,
        str r1,
        bx lr
_tim1_buhuo:
        push {r4,r5}
        ldr r0, = diyicibudianhuo
        ldr r1,
        adds r1, r1, # 1
        str r1,
        cmp r1, # 2
        beq _dianhuoshijian
        ldr r0, = 0x40014400
        movs r1, # 0
        str r1,
        ldr r0, = 0x40012c10
        str r1,
        pop {r4,r5}
        bx lr
_dianhuoshijian:
        movs r1, # 1
        str r1,

        ldr r0, = dianhuotiqianjiao
        ldr r5,
        ldr r4, = 500
       
        cpsid i
        ldr r0, = quanshu
        ldr r1,
        adds r1, r1, # 1
        str r1,
        movs r3, r1
        ldr r0, = 0x40012c00
        ldr r2,
        movs r1, # 0
        str r1,
        str r1,
        ldr r0, = meizhuanshijian
        str r2,
        subs r2, r2, r4
        subs r2, r2, r5
        ldr r0, = 0x40014400
        cmp r3, # 1
        bne _bushidiyiquan
        movs r2, # 1
_bushidiyiquan:
        str r2,
        ldr r4, = 0xe000e180
      ldr r1, = 0x200000      @
      str r1,

        movs r1, # 0x81
        str r1,
        movs r1, # 0
        str r1,
        ldr r4, = 0xe000e100
      ldr r1, = 0x200000      @
      str r1,
        cpsie i
        pop {r4,r5}
        bx lr

yjmwxwx 发表于 2018-4-7 20:04:07

本帖最后由 yjmwxwx 于 2018-4-7 20:06 编辑

我的电脑! 发表于 2018-4-7 19:26
很久很久前保留的一篇文章,给楼主参考。




谢谢 您提供的资料,很有参考价值,我这发动机也是磁钢朝外的,装上发动机侧面盖子就只有一个小孔不方便看位置,位置传感器在边盖上,需要做个支架才不用装边盖。

我十年前想做个但是那时候就是做不出来,后来自学的电子和单片机,当年这个文章我可能也看过但是那时候一点看不懂,后来网上也找过其他国家DIY点火器的资料,这东西专业搞电子设计的看不在眼里觉得太简单所以没人做,而普通摩友又不懂电子技术所以做不出来,又有技术又做的基本都是卖高价的,最开始一个点火器他们卖上百元,那时候我没舍得买。

分立元件 发表于 2021-7-8 17:02:15

yjmwxwx 发表于 2021-7-8 09:23
靠学技术找工作是不可能的了,只能自己玩玩了。

我写的程序和做的电路都不正规,都是试错法一点一点试 ...

推荐你用计算机仿真学模拟电路和数字电路,不需要元件投入,效率又高,我用仿真学到不少东西,发现不少问题!

我的电脑! 发表于 2018-4-7 19:27:29

点火器程序
; 运行于51单片机
; By Bigtail 2005.9.25
; T1作为点火用定时器,溢出时马上点火
;
; 21h:T1 定时器预装载数的高8位
; 22h: 磁电机运行位置(状态),分别用 1,2,3,4 表示,
; 23h: 上上次状态
;
; 信号波形位置状态表示方法:
;
; 状态: 1 2 3 4
; ......____|------|_______|--|___________|-|___________|-|_______......
;
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG 0000H
ajmp INIT
ORG 0003H
ajmp INT_0
ORG 000bH
ajmp OFW0
ORG 0013H
ajmp INT_1
ORG 001bH
ajmp OFW1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;预置点火提前角数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

IGN_DATA_LOW:
DW 0ffffh,0ffe9h,0ffd2h,0ffbbh,0ffa4h,0ff8dh,0ff77h,0ff60h,0ff49h,0ff32h ;0---9
DW 0ff1bh,0ff05h,0feeeh,0fed7h,0fec0h,0fea9h,0fe93h,0fe7ch,0fe65h,0fe4eh ;10---19
DW 0fe37h,0fe21h,0fe0ah,0fdf3h,0fddch,0fdc5h,0fdafh,0fd98h,0fd81h,0fd6ah ;20---29
DW 0fd53h,0fd3dh,0fd26h,0fd0fh,0fcf8h,0fce1h,0fccbh,0fcb4h,0fc9dh,0fc86h ;30---39
DW 0fc6fh,0fc59h,0fc42h,0fc2bh,0fc14h,0fbfdh,0fbe7h,0fbd0h,0fbb9h,0fba2h ;40---49
DW 0fb8bh,0fb75h,0fb5eh,0fb47h,0fb30h,0fb19h,0fb03h,0faech,0fad5h,0fabeh ;50---59
DW 0faa7h,0fa91h,0fa7ah,0fa63h,0fa4ch,0fa35h,0fa1fh,0fa08h,0f9f1h,0f9dah ;60---69
DW 0f9c3h,0f9adh,0f996h,0f97fh,0f968h,0f951h,0f93bh,0f924h,0f90dh,0f8f6h ;70---79
DW 0f8dfh,0f8c9h,0f8b2h,0f89bh,0f884h,0f86dh,0f857h,0f840h,0f829h,0f812h ;80---89
DW 0f7fbh,0f7e5h,0f7ceh,0f7b7h,0f7a0h,0f789h,0f773h,0f75ch,0f745h,0f72eh ;90---99
DW 0f717h,0f701h,0f6eah,0f6d3h,0f6bch,0f6a5h,0f68fh,0f678h,0f661h,0f64ah ;100---109
DW 0f633h,0f61dh,0f606h,0f5efh,0f5d8h,0f5c1h,0f5abh,0f594h,0f57dh,0f566h ;110---119
DW 0f54fh,0f539h,0f522h,0f50bh,0f4f4h,0f4ddh,0f4c7h,0f4b0h ;120---127
IGN_DATA_HIGH:
DW 0f499h,0f482h ;128---129
DW 0f46bh,0f455h,0f43eh,0f427h,0f410h,0f3f9h,0f3e3h,0f3cch,0f3b5h,0f39eh ;130---139
DW 0f387h,0f371h,0f35ah,0f343h,0f32ch,0f315h,0f2ffh,0f2e8h,0f2d1h,0f2bah ;140---149
DW 0f2a3h,0f28dh,0f276h,0f25fh,0f248h,0f231h,0f21bh,0f204h,0f1edh,0f1d6h ;150---159
DW 0f1bfh,0f1a9h,0f192h,0f17bh,0f164h,0f14dh,0f137h,0f120h,0f109h,0f0f2h ;160---169
DW 0f0dbh,0f0c5h,0f0aeh,0f097h,0f080h,0f069h,0f053h,0f03ch,0f025h,0f00eh ;170---179
DW 0eff7h,0efe1h,0efcah,0efb3h,0ef9ch,0ef85h,0ef6fh,0ef58h,0ef41h,0ef2ah ;180---189
DW 0ef13h,0eefdh,0eee6h,0eecfh,0eeb8h,0eea1h,0ee8bh,0ee74h,0ee5dh,0ee46h ;190---199
DW 0ee2fh,0ee19h,0ee02h,0edebh,0edd4h,0edbdh,0eda7h,0ed90h,0ed79h,0ed62h ;200---209
DW 0ed4bh,0ed35h,0ed1eh,0ed07h,0ecf0h,0ecd9h,0ecc3h,0ecach,0ec95h,0ec7eh ;210---219
DW 0ec67h,0ec51h,0ec3ah,0ec23h,0ec0ch,0ebf5h,0ebdfh,0ebc8h,0ebb1h,0eb9ah ;220---229
DW 0eb83h,0eb6dh,0eb56h,0eb3fh,0eb28h,0eb11h,0eafbh,0eae4h,0eacdh,0eab6h ;230---239
DW 0ea9fh,0ea89h,0ea72h,0ea5bh,0ea44h,0ea2dh,0ea17h,0ea00h,0e9e9h,0e9d2h ;240---249
DW 0e9bbh,0e9a5h,0e98eh,0e977h,0e960h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;主程序
;完成初始化功能
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIT: nop
nop
nop
nop
clr p1.5
MOV TMOD,#19H ;置定时器方式,t0 模式1,t1 模式1
MOV TCON,#05H ;后沿触发
setb C
orl C,PSW.3
orl C,PSW.4
mov IE,#8fh ;总中断允许
clr tr0
clr TR1
MOV TL0,#0H
MOV TH0,#0H
mov tl1,#0h
mov th1,#0h
; setb tr1
setb tr0
; mov scon,#01000000b
MAIN:
clr p1.7
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
setb p1.7
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
setb p1.6
clr p1.6
sjmp MAIN ;主程序循环挂起


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;外部中断1响应程序
;即方波信号的上升沿触发,
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_1:
mov a,22h
cjne a,#1h,INT_1_EXIT ;前一状态是1否
mov a,23h
cjne a,#4h,INT_1_EXIT ;上上次状态是4否
mov a,21h
cjne a,#0ffh,INT_1_EXIT ;是ffh则在状态2的上升沿点一次火
call ign_long
INT_1_EXIT:
nop
nop
nop
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;外部中断0响应程序
;方波高电平脉宽测定完成,先保存原r0r1到r4r5,再保存记数到r0r1
;先检查是不是状态1,若不是则前一状态步进1作为当前状态,
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_0: clr tr0
mov A,r0
mov r4,A
mov A,r1
mov r5,A
mov r0,tl0
mov r1,th0
mov tl0,#0h
mov th0,#0h
setb tr0 ;T0继续记时
clr p1.5

mov psw,#0h ;比较r0r1 和r4r5大小
mov A,r4
subb A,r0
mov A,r5
subb A,r1
jnc is_234 ;r4r5>r0r1
mov a,r0
mov r2,a
mov a,r1
mov r3,a ;r0r1=>r2r3
if_1:
mov psw,#0h ;1,r2r3减r4r5看够不够减
mov a,r2
subb a,r4
mov r2,a
mov a,r3
subb A,r5
mov r3,a
jc is_234
mov psw,#0h ;2,r2r3减r4r5看够不够减
mov a,r2
subb a,r4
mov r2,a
mov a,r3
subb A,r5
mov r3,a
jc is_234
mov psw,#0h ;3,r2r3减r4r5看够不够减
mov a,r2
subb a,r4
mov r2,a
mov a,r3
subb A,r5
mov r3,a
jc is_234
mov psw,#0h ;4,r2r3减r4r5看够不够减
mov a,r2
subb a,r4
mov r2,a
mov a,r3
subb A,r5
mov r3,a
jnc is_pos_1 ;如差不多大不够减4次,则不是状态1

is_234:
nop
nop
clr c
mov 23h,#0h
mov a,22h
cjne a,#1h,if_pos_3 ;前一状态是1否
is_pos_2: ;是状态2
nop
mov 23h,#1h
mov 22h,#2h
nop
ajmp exit
if_pos_3:
cjne a,#2h,if_pos_4 ;前一状态是2否
is_pos_3:
mov 23h,#2h
mov 22h,#3h ;是状态3
nop
nop
ajmp exit

if_pos_4:
cjne a,#3h,err ;前一状态是3否
is_pos_4:
clr tr1
mov 23h,#3h
mov 22h,#4h ;是状态4
nop
nop
ajmp exit

is_pos_1:
mov a,22h
mov 23h,a
mov 22h,#1h ;是状态1
cjne a,#4h,err ;上次不是4,不点火,但记录本次状态为1作为开始状态
mov psw,#0h
mov a,r1
subb a,#15h
jc h_1200r ;转速低于1200提前角恒为0
mov 21h,#0ffh
ajmp exit ;直接返回,不点火,由状态2点火
h_1200r:
mov a,r1
mov r3,a
mov a,r0
mov r2,a
mov psw,#0h
mov a,r3
rrc a
mov r3,a
mov a,r2
rrc a
mov r2,a
mov psw,#0h
mov a,r3
rrc a
mov r3,a
mov a,r2
rrc a
mov r2,a
mov psw,#0h
mov a,r3
rrc a
mov r3,a
mov a,r2
rrc a
mov r2,a
mov psw,#0h
mov a,r3
rrc a
mov r3,a
mov a,r2
rrc a
mov r2,a

mov psw,#0h
subb a,#064h
mov r7,a
mov a,r3
subb a,#0h
jc h_4140r

mov a,r7
subb a,#80h
jc low_256
mov dptr,#IGN_DATA_HIGH
ajmp get_ign_data
low_256:
mov psw,#0h
mov a,r7
mov dptr,#IGN_DATA_LOW
get_ign_data:
mov b,#2h
mul ab
mov r7,a
movc a,@a+dptr
mov th1,a
mov a,r7
inc a
movc a,@a+dptr
mov tl1,a
setb tr1
ajmp exit
h_4140r:
nop
nop
call ign_2_loop
exit:
err: nop
nop
clr p1.5
reti

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;点火子程序,低转速下延长打火时间
ign_2_loop:
setb p1.5
mov a,#0ffh
ign_loop:
dec a
nop
jnz ign_loop
clr p1.5
nop
nop
ret

;点火子程序
ign_long:
setb p1.5
mov a,#0ffh
ign_long_loop:
dec a
nop
nop
nop
nop
nop
nop
nop
nop
jnz ign_long_loop
clr p1.5
nop
nop
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;定时器T0溢出中断响应程序
;正常情况T0不应溢出,否则说明磁电机转速太慢了,造成计数溢出
;这种情况下清空继续计数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OFW0: nop
nop
clr tr0
mov tl0,#0h
mov th0,#0h
setb tr0
clr p1.5
nop
nop
nop
reti

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;定时器T1溢出中断响应程序
;T1溢出,开始点火
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OFW1: clr tr1
mov a,22h
cjne a,#1h,ign_exit ;不是状态1不要点火,3-4之间还要记数测转速
; mov a,23h
; cjne a,#4h,ign_exit ;上上次不是状态4不要点火,
call ign_2_loop
ign_exit:
mov tl1,#0h
mov th1,#0h
clr p1.5
nop
nop
reti
;---------------------------------------------------------------------------
nop
nop
clr p1.5
END

vkjmmy 发表于 2018-4-7 01:04:12

本帖最后由 vkjmmy 于 2018-4-7 01:13 编辑

不明白为啥信号要从高压线获得,对汽油机也外行,应该是活塞到达指定位置开始点火,并根据转速调整提前角,你用点火脉冲做信号,好像死循环,因为脉冲不代表活塞物理位置,根据脉冲速度调整?还有,发动机原来的白金触点不就是点火用的吗?改单片机控制立意在哪呢?事情得有个由头吧。

yjmwxwx 发表于 2018-4-7 01:13:13

本帖最后由 yjmwxwx 于 2018-4-7 01:14 编辑

vkjmmy 发表于 2018-4-7 01:04
不明白为啥信号要从高压线获得,对汽油机也外行,应该是活塞到达指定位置开始点火,并根据转速调整提前角, ...

高压线获得的信号就是点亮灯的,和点火器是分开的。位置传感器是那个小电机带动的圆盘,圆盘上有个小磁铁,通过霍尔传感器检测位置,转速高了提前角会增加,可以看到圆盘上的标记缓慢移动,单片机就是控制自动提前角的。

水泥收音机 发表于 2018-4-7 01:14:56

楼主是要实现点火控制还是点火正时灯?如果是控制发动机点火,对于电控发动机,这个功能是集成在汽车的ECU里面,点火时间应该是根据曲轴位置传感器和爆振传感器提供的信息确定。

yjmwxwx 发表于 2018-4-7 01:19:15

水泥收音机 发表于 2018-4-7 01:14
楼主是要实现点火控制还是点火正时灯?如果是控制发动机点火,对于电控发动机,这个功能是集成在汽车的ECU ...

是实现点火控制的,现在汽车当然是用不到了,我以前有辆四缸的摩托车点火器坏了,由于比较老配件不好买还很贵,所以学着自己做。

jiandandiy 发表于 2018-4-7 01:36:52

yjmwxwx 发表于 2018-4-7 01:51:03

jiandandiy 发表于 2018-4-7 01:36
一个点火不用这么麻烦吧,弄个电子点火摩托车配件改比这简单多了

恩 买个改装比较简单,人家这个功能早就做出来了,我主要想自己做个玩玩,不是为了给摩托配个点火器,十年前被点火器难到了,但是现在已经不骑摩托了。

壹法拉 发表于 2018-4-7 02:27:08

本帖最后由 壹法拉 于 2018-4-7 02:28 编辑

没看懂楼主想用来干什么,也不明白楼主想求助什么?
如果你想用这个来代替汽车点火系统,可能不行;

vkjmmy 发表于 2018-4-7 03:31:30

yjmwxwx 发表于 2018-4-7 01:13
高压线获得的信号就是点亮灯的,和点火器是分开的。位置传感器是那个小电机带动的圆盘,圆盘上有个小磁 ...

不明白学习一下,点亮灯干啥用

yjmwxwx 发表于 2018-4-7 07:12:01

壹法拉 发表于 2018-4-7 02:27
没看懂楼主想用来干什么,也不明白楼主想求助什么?
如果你想用这个来代替汽车点火系统,可能不行;

汽车肯定用不到,只能用到有化油器没有电喷的发动机上,要装到发动机上程序还得改改。

我想知道点火曲线一般都是多少度怎么确定各转速的提前角,我语文差不太会表达。

yjmwxwx 发表于 2018-4-7 07:18:35

vkjmmy 发表于 2018-4-7 03:31
不明白学习一下,点亮灯干啥用

小圆盘旋转上千转的速度,每次点火亮一下才能看清在圆盘哪个位置点的火,没这灯就看不清标记。

glff9 发表于 2018-4-7 08:45:52

和电喷头有啥区别吗?

Kowalski 发表于 2018-4-7 09:50:45

卧草,汇编啊,大神!

壹法拉 发表于 2018-4-7 10:11:06

本帖最后由 壹法拉 于 2018-4-7 10:34 编辑

yjmwxwx 发表于 2018-4-7 07:12
汽车肯定用不到,只能用到有化油器没有电喷的发动机上,要装到发动机上程序还得改改。

我想知道点火曲 ...

你就是想把你这个“点火”的“设备”用来改普通发动机改为电子点火吧;我暂且把你这个设备叫做“点火器”吧;

这要考虑用到发动机的一根叫做“凸轮轴”的东西;这个凸轮轴是控制各个气缸的气门动作的,同时也带动老式点火机构的叫“分电器”的东西;这个分电器实际就是一个分别给各个气缸的火花塞分配点火用的高压电流的转换开关;其接点据说是白金的合金;
这个分电器就是控制各个气缸的点火时序的;而这个分电器是靠凸轮轴带动的;所以你的的“点火器‘要考虑利用凸轮轴来控制点火时间;如果把你那个控制霍尔元件的磁铁与凸轮轴联系起来,用软件就可以“分析调整”计算出“提前角”了,直到调整到最佳点火时序,理论上要比老式的分电器点火机构要准确,发动机会发挥最大效率;……

你也可以考虑利用那个分电器来控制你的点火器的时序;但你事先要把这个分电器要调整一下再利用;否则发动机的气缸会“感觉”到你的点火器之点火时间有点“晚了”;

如果在点火之前(几乎同时)你再用个电动的“喷雾器”代替化油器往气缸里喷油(油和空气的混合物),这个发动机就成“电喷”(发动机)了;

yjmwxwx 发表于 2018-4-7 10:22:03

简燕 发表于 2018-4-7 09:13
汽油机点火提前角,依靠两个环路来控制:内环,外环.

内环,快速粗调点火角.采集的信号量是是进气歧管的 ...

学习了,看了您的回答知道了发动机点火计算也很复杂,要粗略实现功能不难,要做精不容易。
页: [1] 2 3 4 5 6
查看完整版本: 求老师指导单片机汽油发动机点火器