矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 14299|回复: 77

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

[复制链接]
     
发表于 2018-4-6 23:27:06 | 显示全部楼层 |阅读模式
本帖最后由 yjmwxwx 于 2018-4-7 00:53 编辑

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

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

网上找的电路图

LEDtiming.gif

高压线上绕13圈



电路放到小药瓶里




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



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




两个火花塞对这看跳火



新的测试平台




点火器正面


点火器反面



小电机和霍尔传感器



电路图
1.png

程序



用STM32F030F4单片机控制,程序所有文件
dianhuoqi6.zip (21.57 KB, 下载次数: 234)

程序代码

  1.                 @ stm32f030f4p6 asm
  2.          .thumb
  3.                  .syntax unified
  4.         .section .data
  5. zhuansulianbiao:                                @1000到16000转,每150转一个点
  6.         .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
  7. dianhuotiqianjiaobiao:                        @点火提前角表
  8.         .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

  9. lcdshuju:
  10.         .ascii  "yjmwxwx-20180317"
  11. dianhua:       
  12.         .ascii        "      15552208295"
  13. qq:
  14.         .ascii        "   QQ:3341656346"
  15.         .equ STACKINIT,                        0x20001000
  16.         .equ asciimabiao,                0x20000000
  17.         .equ quanshu,                        0x20000010
  18.         .equ zhuansu,                        0x20000014
  19.         .equ meizhuanshijian,                0x20000018
  20.         .equ diyicibudianhuo,                0x2000001c
  21.         .equ dianhuotiqianjiao,                0x20000020
  22.         .equ tqjbzhizhen,                0x20000024        @提前角表指针
  23. .section .text
  24. vectors:
  25.         .word STACKINIT
  26.         .word _start + 1
  27.         .word _nmi_handler + 1
  28.         .word _hard_fault  + 1
  29.         .word 0
  30.         .word 0
  31.         .word 0
  32.         .word 0
  33.         .word 0
  34.         .word 0
  35.         .word 0
  36.         .word _svc_handler +1
  37.         .word 0
  38.         .word 0
  39.         .word _pendsv_handler +1
  40.         .word aaa +1        @ _systickzhongduan +1               @ 15
  41.         .word aaa +1     @ _wwdg +1          @ 0
  42.         .word aaa +1     @_pvd +1            @ 1
  43.         .word aaa +1     @_rtc +1            @ 2
  44.         .word aaa +1     @_flash +1          @ 3
  45.         .word aaa +1        @ _rcc + 1          @ 4
  46.         .word aaa +1        @_exti0_1  +1      @ 5
  47.         .word aaa +1      @ _exti2_3 +1      @ 6
  48.         .word aaa +1       @_exti4_15 +1     @ 7
  49.         .word aaa +1                         @ 8
  50.         .word aaa +1         @_dma1_1  +1    @ 9
  51.         .word aaa +1    @_dma1_2_3 +1        @ 10
  52.         .word aaa +1       @_dma1_4_5 +1     @ 11
  53.         .word aaa +1         @_adc1 +1          @ 12
  54.         .word aaa +1        @_tim1_brk_up +1  @ 13
  55.         .word _tim1_buhuo +1    @ 14
  56.         .word aaa +1         @_tim2 +1       @ 15
  57.         .word aaa +1          @_tim3 +1      @ 16
  58.         .word aaa +1                         @ 17
  59.         .word aaa +1                                @ 18
  60.         .word aaa +1                @_tim14 +1    @ 19
  61.         .word aaa +1                         @ 20
  62.         .word _tim16 +1      @ 21
  63.         .word aaa +1         @_tim17 +1      @ 22
  64.         .word aaa +1          @_i2c   +1     @ 23
  65.         .word aaa +1                         @ 24
  66.         .word aaa +1           @_spi   +1    @ 25
  67.         .word aaa +1                         @ 26
  68.         .word aaa +1         @_usart1 +1     @ 27
  69. _start:
  70. neicunqingling:
  71.         ldr r0, = 0x20000000
  72.         movs r1, # 0
  73.         ldr r3, = 0x1000
  74. neicunqinglingxunhuan:
  75.         subs r3, # 4
  76.         str r1, [r0, r3]
  77.         bne neicunqinglingxunhuan

  78. _waisheshizhong:                         @ 外设时钟
  79.         @+0x14=RCC_AHBENR
  80.         @0=DMA @2=SRAM @4=FLITF@6=CRC @17=PA @18=PB @19=PC @20=PD @22=PF
  81.         ldr r0, = 0x40021000
  82.         ldr r1, = 0x460005
  83.         str r1, [r0, # 0x14]


  84.         @+0x18外设时钟使能寄存器 (RCC_APB2ENR)
  85.         @0=SYSCFG @5=USART6EN @9=ADC @11=TIM1 @12=SPI1 @14=USART1 @16=TIM15 @17=TIM16 @18=TIM17 @22=DBGMCU
  86.         ldr r1, = 0x20801
  87.         str r1, [r0, # 0x18]
  88.         @+0X1C=RCC_APB1ENR
  89.         @1=TIM3 @4=TIM6 @5=TIM7 @8=TIM14 @11=WWDG @14=SPI @17=USRT2 @18=USART3 @20=USART5 @21=I2C1
  90.         @22=I2C2 @23=USB @28=PWR
  91.         ldr r1, = 0x102
  92.         str r1, [r0, # 0x1c]
  93.        
  94. _tim1chushihua:                                @8M
  95.         ldr r0, = 0x40012c00
  96.         ldr r1, = 79
  97.         str r1, [r0, # 0x28]        @psc
  98.         ldr r1, = 0xffff
  99.         str r1, [r0, # 0x2c]        @arr
  100.         ldr r1, = 0x100
  101.         str r1, [r0, # 0x18]        @ccmr1
  102.         movs r1, # 0x10
  103.         str r1, [r0, # 0x20]        @ccer
  104.         movs r1, # 0x04
  105.         str r1, [r0, # 0x0c]
  106.         movs r1, # 0x01
  107.         str r1, [r0]
  108. _tim3chushiha:                                @8M
  109.         ldr r0, = 0x40000400 @ tim3_cr1
  110.         ldr r1, = 79
  111.         str r1, [r0, # 0x28] @ psc
  112.         ldr r1, = 600
  113.         str r1, [r0, # 0x2c] @ ARR
  114.         ldr r1, = 0x6800
  115.         str r1, [r0, # 0x1c] @ ccmr2
  116.         ldr r1, = 0x1000
  117.         str r1, [r0, # 0x20] @ ccer
  118.         ldr r1, = 100
  119.         str r1, [r0, # 0x40]
  120.         movs r1, # 0x99
  121.         str r1, [r0]

  122. _tim16chushihua:                @8M
  123.         ldr r0, = 0x40014400
  124.         ldr r1, = 79
  125.         str r1, [r0, # 0x28]
  126.         ldr r1, = 0xffff
  127.         str r1, [r0, # 0x2c]
  128.         movs r1, # 0X01
  129.         str r1, [r0, # 0x0c]
  130. io_she_zhi:
  131.         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  132.         @a(0x48000000)b(0x48000400)c(0x48000800)d(0x48000c00)f(0x48001400)
  133.         @ 输入(00),通用输出(01),复用功能(10),模拟(11)
  134.         @偏移0x4 = 端口输出类型 @ (0 推挽),( 1 开漏)
  135.         @偏移0x8 = 输出速度  00低速, 01中速, 11高速
  136.         @偏移0xC = 上拉下拉 (00无上下拉,  01 上拉, 10下拉)
  137.         @偏移0x10 = 输入数据寄存器
  138.         @偏移0x14 = 输出数据寄存器
  139.         @偏移0x18 = 端口开  0-15置位
  140.         @偏移0x28 = 端口关
  141.         @0X20 = 复用低
  142.         @GPIO口0(0-3位)每个IO口占用4位
  143.         @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
  144.         @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
  145.         @0x24 = 复用高
  146.         @GPIO口8 (0-3位)每个IO口占用4位
  147.         @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
  148.         @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
  149.         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  150.         ldr r0, = 0x48000000
  151.         ldr r1, = 0x28085550
  152.         str r1, [r0]
  153.         movs r1, # 0xfc  @ pa2-pa7开漏输出
  154.         str r1, [r0, # 0x04]
  155.         ldr r1, = 0x20
  156.         str r1, [r0, # 0x24]
  157.        
  158.         ldr r0, = 0x48000400
  159.         movs r1, # 0x08 @ pb1
  160.         str r1, [r0]
  161.         movs r1, # 0x10  @ tim3_4到PB1
  162.         str r1, [r0, # 0x20] @ ARRL
  163.        
  164. _waishezhongduan:       
  165.         @0xE000E100    0-31  写1开,写0没效
  166.         @0XE000E180    0-31 写1关,写0没效
  167.         @0XE000E200    0-31 挂起,写0没效
  168.         @0XE000E280    0-31 清除, 写0没效
  169.         ldr r0, = 0xe000e100
  170.         ldr r1, = 0x204000        @14号 19
  171.         str r1, [r0]

  172. _lcdchushihua:
  173.         movs r0, # 0x33
  174.         movs r1, # 0
  175.         bl _xielcd
  176.         bl _lcdyanshi
  177.         movs r0, # 0x32
  178.         movs r1, # 0
  179.         bl _xielcd
  180.         bl _lcdyanshi
  181.         movs r0, # 0x28
  182.         movs r1, # 0
  183.         bl _xielcd
  184.         bl _lcdyanshi
  185.         movs r0, # 0x0c
  186.         movs r1, # 0
  187.         bl _xielcd
  188.         bl _lcdyanshi
  189.         movs r0, # 0x01
  190.         movs r1, # 0
  191.         bl _xielcd
  192.         bl _lcdyanshi

  193. tingting:

  194.         ldr r3, = meizhuanshijian                                       
  195.         ldr r0, [r3]
  196.         movs r1, # 6
  197.         ldr r2, = asciimabiao
  198.         movs r3, # 0xff
  199.         bl _zhuanascii

  200.         movs r0, # 0x80
  201.         ldr r1, = asciimabiao
  202.         movs r2, # 6
  203.         bl _lcdxianshi

  204.         ldr r1, = tqjbzhizhen
  205.         ldr r0, [r1]
  206.         movs r1, # 6
  207.         ldr r2, = asciimabiao
  208.         movs r3, # 0xff
  209.         bl _zhuanascii

  210.         movs r0, # 0x88
  211.         ldr r1, = asciimabiao
  212.         movs r2, # 6
  213.         bl _lcdxianshi
  214.        
  215.         ldr r3, = dianhuotiqianjiao
  216.         ldr r0, [r3]
  217.         movs r1, # 6
  218.         ldr r2, = asciimabiao
  219.         movs r3, # 0xff
  220.         bl _zhuanascii
  221.        
  222.         movs r0, # 0xc0
  223.         ldr r1, = asciimabiao
  224.         movs r2, # 6
  225.         bl _lcdxianshi

  226.         bl _jisuandianhuotiqianjiao
  227.        
  228.         ldr r1, = zhuansu
  229.         ldr r0, [r1]
  230.         movs r1, # 6
  231.         ldr r2, = asciimabiao
  232.         movs r3, # 0xff
  233.         bl _zhuanascii

  234.         movs r0, # 0xc8
  235.         ldr r1, = asciimabiao
  236.         movs r2, # 6
  237.         bl _lcdxianshi

  238.        
  239.        
  240.         b tingting


  241. _jisuandianhuotiqianjiao:
  242.         push {r0-r5,lr}
  243.         ldr r2, = zhuansu
  244.         ldr r1, = meizhuanshijian
  245.         ldr r0, = 6000000
  246.         ldr r1, [r1]
  247.         mov r5, r1
  248.         bl _chufa
  249.         str r0, [r2]
  250.         ldr r1, = 1000
  251.         cmp r0, r1
  252.         bls _buyongtiqian
  253.         ldr r1, = zhuansulianbiao
  254.         movs r2, # 100
  255.         lsls r2, r2, # 2
  256.         movs r3, # 0
  257. _zhaozhuansuhaoxunhuan:
  258.         ldr r4, [r1, r3]
  259.         cmp r4, r0
  260.         bhi _zhuansudayu
  261.         adds r3, r3, # 4
  262.         cmp r3, r2
  263.         bne _zhaozhuansuhaoxunhuan
  264.         movs r3, # 0
  265. _zhuansudayu:
  266.         ldr r1, = dianhuotiqianjiaobiao
  267.         ldr r2, = dianhuotiqianjiao
  268.         ldr r4, [r1, r3]
  269.         lsls r0, r5, # 8
  270.         ldr r1, = 360
  271.         bl _chufa
  272.         muls r0, r0, r4
  273.         asrs r0, r0, # 16
  274.         str r0, [r2]
  275.         ldr r0, = tqjbzhizhen
  276.         str r3, [r0]
  277.         pop {r0-r5,pc}
  278. _buyongtiqian:
  279.         ldr r2, = dianhuotiqianjiao
  280.         movs r1, # 0
  281.         str r1, [r2]
  282.         pop {r0-r5,pc}
  283.        
  284.        
  285.        
  286. _lcdxianshi:                          @r0=LCD位置,r1=数据地址,r2=长度
  287.         push {r0-r4,lr}
  288.         mov r4, r1

  289.         movs r1, # 0
  290.         bl _xielcd

  291.         movs r1, # 1
  292.         movs r3, # 0
  293. _lcdxianshixunhuan:
  294.         ldrb r0, [r4,r3]
  295.         bl _xielcd
  296.         adds r3, r3, # 1
  297.         cmp r3, r2
  298.         bne _lcdxianshixunhuan
  299.         pop {r0-r4,pc}

  300. _lcdyanshi:
  301.         push {r5,lr}
  302.         ldr r5, = 0x2000
  303. _lcdyanshixunhuan:
  304.         subs r5, r5, # 1
  305.         bne _lcdyanshixunhuan
  306.         pop {r5,pc}

  307. _xielcd:                        @入R0=8位,r1=0命令,r1=1数据
  308.         push {r0-r7,lr}
  309.         lsrs r6, r0, # 4
  310.         lsls r0, r0, # 28
  311.         lsrs r0, r0, # 28
  312.         movs r2, # 0x80                @ RS
  313.         movs r3, # 0x40                @ E
  314.         movs r5, # 0x3c
  315.         ldr r4, = 0x48000000
  316.         cmp r1, # 0
  317.         beq _lcdmingling
  318.         str r2, [r4, # 0x18]        @RS=1
  319.         b _lcdshuju
  320. _lcdmingling:
  321.         str r2, [r4, # 0x28]        @RS=0
  322. _lcdshuju:
  323.         str r3, [r4, # 0x18]        @E=1
  324.         str r5, [r4, # 0x28]

  325.         lsls r7, r6, # 31
  326.         lsrs r7, r7, # 26
  327.         str r7, [r4, # 0x18]

  328.         lsrs r7, r6, # 1
  329.         lsls r7, r7, # 31
  330.         lsrs r7, r7, # 27
  331.         str r7, [r4, # 0x18]

  332.         lsrs r7, r6, # 2
  333.         lsls r7, r7, # 31
  334.         lsrs r7, r7, # 28
  335.         str r7, [r4, # 0x18]

  336.         lsrs r7, r6, # 3
  337.         lsls r7, r7, # 31
  338.         lsrs r7, r7, # 29
  339.         str r7, [r4, # 0x18]

  340.         bl _lcdyanshi
  341.         str r3, [r4, # 0x28]        @E=0


  342.         str r3, [r4, # 0x18]    @E=1
  343.         str r5, [r4, # 0x28]

  344.         lsls r7, r0, # 31
  345.         lsrs r7, r7, # 26
  346.         str r7, [r4, # 0x18]

  347.         lsrs r7, r0, # 1
  348.         lsls r7, r7, # 31
  349.         lsrs r7, r7, # 27
  350.         str r7, [r4, # 0x18]

  351.         lsrs r7, r0, # 2
  352.         lsls r7, r7, # 31
  353.         lsrs r7, r7, # 28
  354.         str r7, [r4, # 0x18]

  355.         lsrs r7, r0, # 3
  356.         lsls r7, r7, # 31
  357.         lsrs r7, r7, # 29
  358.         str r7, [r4, # 0x18]

  359.         bl _lcdyanshi
  360.         str r3, [r4, # 0x28]    @E=0

  361.         pop {r0-r7,pc}


  362. _zhuanascii:                                        @ 16进制转数码管码
  363.                 @ R0要转的数据, R1长度,R2结果表首地址, r3=小数点位置
  364.         push {r0-r7,lr}
  365.         mov r7, r3
  366.         mov r5, r0
  367.         mov r6, r1
  368.         movs r1, # 10
  369. _xunhuanqiuma:
  370.         bl _chufa
  371.         mov r4, r0
  372.         muls r4, r1
  373.         subs r3, r5, r4
  374.         adds r3, r3, # 0x30
  375.         mov r5, r0
  376.         subs r6, r6, # 1
  377.         beq _qiumafanhui
  378.         cmp r6, r7
  379.         bne _meidaoxiaoshudian
  380.         movs r4, # 0x2e                @小数点
  381.         strb r4, [r2,r6]        @插入小数点
  382.         subs r6, r6, # 1
  383. _meidaoxiaoshudian:
  384.         strb r3, [r2,r6]
  385.         movs r6, r6
  386.         bne _xunhuanqiuma
  387.         pop {r0-r7,pc}
  388. _qiumafanhui:
  389.         strb r3, [r2, r6]
  390.         pop {r0-r7,pc}

  391.        
  392. _chufa:                                @软件除法
  393.         @ r0 除以 r1 等于 商(r0)余数R1
  394.         push {r1-r4,lr}
  395.         cmp r0, # 0
  396.         beq _chufafanhui
  397.         cmp r1, # 0
  398.         beq _chufafanhui
  399.         mov r2, r0
  400.         movs r3, # 1
  401.         lsls r3, r3, # 31
  402.         movs r0, # 0
  403.         mov r4, r0
  404. _chufaxunhuan:
  405.         lsls r2, r2, # 1
  406.         adcs r4, r4, r4
  407.         cmp r4, r1
  408.         bcc _chufaweishubudao0
  409.         adds r0, r0, r3
  410.         subs r4, r4, r1
  411. _chufaweishubudao0:
  412.         lsrs r3, r3, # 1
  413.         bne _chufaxunhuan
  414. _chufafanhui:
  415.         pop {r1-r4,pc}
  416.         .ltorg

  417. _nmi_handler:
  418.         bx lr
  419. _hard_fault:
  420.         bx lr
  421. _svc_handler:
  422.         bx lr
  423. _pendsv_handler:
  424.         bx lr
  425. aaa:
  426.         bx lr
  427. _tim16:
  428.         ldr r0, = 0x40000400
  429.         movs r1, # 0x99
  430.         str r1, [r0]
  431.        
  432.         ldr r0, = zhuansu
  433.         ldr r1, [r0]
  434.         adds r1, r1, # 1
  435.         str r1, [r0]
  436.        
  437.         ldr r0, = 0x40014400
  438.         movs r1, # 0
  439.         str r1, [r0, # 0x10]
  440.         str r1, [r0, # 0x24]
  441.         str r1, [r0]
  442.         bx lr
  443. _tim1_buhuo:
  444.         push {r4,r5}
  445.         ldr r0, = diyicibudianhuo
  446.         ldr r1, [r0]
  447.         adds r1, r1, # 1
  448.         str r1, [r0]
  449.         cmp r1, # 2
  450.         beq _dianhuoshijian
  451.         ldr r0, = 0x40014400
  452.         movs r1, # 0
  453.         str r1, [r0, # 0x2c]
  454.         ldr r0, = 0x40012c10
  455.         str r1, [r0]
  456.         pop {r4,r5}
  457.         bx lr
  458. _dianhuoshijian:
  459.         movs r1, # 1
  460.         str r1, [r0]

  461.         ldr r0, = dianhuotiqianjiao
  462.         ldr r5, [r0]
  463.         ldr r4, = 500
  464.        
  465.         cpsid i
  466.         ldr r0, = quanshu
  467.         ldr r1, [r0]
  468.         adds r1, r1, # 1
  469.         str r1, [r0]
  470.         movs r3, r1
  471.         ldr r0, = 0x40012c00
  472.         ldr r2, [r0, # 0x38]
  473.         movs r1, # 0
  474.         str r1, [r0, # 0x10]
  475.         str r1, [r0, # 0x24]
  476.         ldr r0, = meizhuanshijian
  477.         str r2, [r0]
  478.         subs r2, r2, r4
  479.         subs r2, r2, r5
  480.         ldr r0, = 0x40014400
  481.         cmp r3, # 1
  482.         bne _bushidiyiquan
  483.         movs r2, # 1
  484. _bushidiyiquan:
  485.         str r2, [r0, # 0x2c]
  486.         ldr r4, = 0xe000e180
  487.         ldr r1, = 0x200000      @
  488.         str r1, [r4]

  489.         movs r1, # 0x81
  490.         str r1, [r0]
  491.         movs r1, # 0
  492.         str r1, [r0, # 0x10]
  493.         ldr r4, = 0xe000e100
  494.         ldr r1, = 0x200000      @
  495.         str r1, [r4]
  496.         cpsie i
  497.         pop {r4,r5}
  498.         bx lr
复制代码

     
 楼主| 发表于 2018-4-7 20:04:07 | 显示全部楼层
本帖最后由 yjmwxwx 于 2018-4-7 20:06 编辑
我的电脑! 发表于 2018-4-7 19:26
很久很久前保留的一篇文章,给楼主参考。


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

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

使用道具 举报

     
发表于 2021-7-8 17:02:15 来自手机 | 显示全部楼层
yjmwxwx 发表于 2021-7-8 09:23
靠学技术找工作是不可能的了,只能自己玩玩了。

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

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

使用道具 举报

     
发表于 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
回复 支持 1 反对 0

使用道具 举报

     
发表于 2018-4-7 01:04:12 | 显示全部楼层
本帖最后由 vkjmmy 于 2018-4-7 01:13 编辑

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

使用道具 举报

     
 楼主| 发表于 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里面,点火时间应该是根据曲轴位置传感器和爆振传感器提供的信息确定。
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

     
发表于 2018-4-7 01:36:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-4-7 01:51:03 | 显示全部楼层
jiandandiy 发表于 2018-4-7 01:36
一个点火不用这么麻烦吧,弄个电子点火摩托车配件改比这简单多了

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

使用道具 举报

     
发表于 2018-4-7 02:27:08 | 显示全部楼层
本帖最后由 壹法拉 于 2018-4-7 02:28 编辑

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

使用道具 举报

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

不明白学习一下,点亮灯干啥用
回复 支持 反对

使用道具 举报

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

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

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

使用道具 举报

     
 楼主| 发表于 2018-4-7 07:18:35 | 显示全部楼层
vkjmmy 发表于 2018-4-7 03:31
不明白学习一下,点亮灯干啥用

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

使用道具 举报

     
发表于 2018-4-7 08:45:52 | 显示全部楼层
和电喷头有啥区别吗?
回复 支持 反对

使用道具 举报

     
发表于 2018-4-7 09:50:45 | 显示全部楼层
卧草,汇编啊,大神!
回复 支持 反对

使用道具 举报

     
发表于 2018-4-7 10:11:06 | 显示全部楼层
本帖最后由 壹法拉 于 2018-4-7 10:34 编辑
yjmwxwx 发表于 2018-4-7 07:12
汽车肯定用不到,只能用到有化油器没有电喷的发动机上,要装到发动机上程序还得改改。

我想知道点火曲 ...


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

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

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

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

使用道具 举报

     
 楼主| 发表于 2018-4-7 10:22:03 | 显示全部楼层
简燕 发表于 2018-4-7 09:13
汽油机点火提前角,依靠两个环路来控制:内环,外环.

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

学习了,看了您的回答知道了发动机点火计算也很复杂,要粗略实现功能不难,要做精不容易。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-27 02:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表