如何用51单片机驱动2相4线步进电机

2019-07-15 16:04发布

电机驱动芯片用的是ULN2003,输入的4个线接单片机,输出多一个线怎么接,求接线方法及C程序、、、、、、、、、、、
QQ图片20150921193838.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
vivatakethat
2019-07-15 18:05
我很早前玩的,你可以看看好了
  1. ENA   EQU   P1.0      ENB   EQU   P1.1      IN1   EQU   P1.2      IN2   EQU   P1.3      IN3   EQU   P1.4      IN4   EQU   P1.5      SWITCH  EQU   P3.3      FAST  EQU   P3.6      SLOW  EQU   P3.5




  2.          









  3.      CYCLENUM  EQU  50H     ;存放对应定时循环次数
  4.      TEMP   EQU  53H        ;存放按键次数。初值为5,每按加速叠加1,按减速递减      MARK   EQU  56H        ;启动停止标识      LEDBUF EQU  57H  

  5.      ORG    0      AJMP  START  

  6. ;*****************检测是否开启启动电机键*************************** START:
  7.      MOV   P0,#0             ;清显示
  8.      SETB  MARK           ;预启动电机工作,标识为1      MOV   TEMP,#5        ;开始工作于5Hz      MOV   CYCLENUM,#01H   ;循环1次      JNB   SWITCH,NEXT     ;按键按下?      SJMP  START           ;没有返回继续检测 NEXT:
  9.      CALL  DELAY          ;消抖确认
  10.      JNB   SWITCH,MAIN    ;再次确认按键,不为1说明按键按下      SJMP  START          ;没有按下,继续检测  

  11. ;*****************开始运行电机*************************************** MAIN:
  12.      MOV   A,TEMP      MOV   DPTR,#TAB4      MOVC  A,@A+DPTR      MOV   LEDBUF,A       ;送显示      CALL  DISPLAY LOOP:
  13.      JB    MARK,WORK      ;检测运行标识是否为1,为1则继续运行,为0则停止运行 NOTWORK:      CLR   ENA      CLR   ENB      SJMP  START WORK:
  14.      MOV    P1,#000010111B          ;步进电机运行方式为两相四拍      CALL  TIMER      CALL  TESTSTOP  















  15.      MOV    P1,#000011011B          ;第二拍      CALL  TIMER      CALL  TESTSTOP  

  16.      MOV    P1,#000101011B          ;第三拍      CALL  TIMER      CALL  TESTSTOP  

  17.      MOV    P1,#000100111B          ;第四拍      CALL  TIMER      CALL  TESTSTOP      CALL  TESTKEY      SJMP  MAIN
  18. ;***************************检测是否有按键按下************************ TESTKEY:      SETB  FAST      SETB  SLOW  

  19. NEXT1:
  20.      JNB   FAST,YES2 NEXT2:
  21.      JNB   SLOW,YES3
  22.      SJMP  RETURN                      ;都没有键按下,则返回  

  23. YES2:
  24.      MOV   A,TEMP             ;FAST按下,若此时temp等于9,则保持速度不变,若小于则加1      CJNE  A,#9,CANFAST      DEC   A  

  25. CANFAST:      INC   A      MOV   TEMP,A      SJMP  RETURN  

  26. YES3:
  27.      MOV   A,TEMP      CJNE  A,#1,CANSLOW      INC   A













  28. CANSLOW:      DEC   A      MOV   TEMP,A  

  29. RETURN:      RET  

  30. TESTSTOP:      SETB   SWITCH      JNB    SWITCH,GO      SJMP   ENND GO:
  31.      CALL   DELAY
  32.      JNB    SWITCH,YESSTOP      SJMP   ENND YESSTOP:       CPL   MARK  

  33. ENND:      RET
  34. ;***********************定时器设置******************* TIMER:
  35.      MOV   TMOD,#10H      ;T1工作于定时方式1      CALL  TIMERSET      SETB  TR1      SETB  EA
  36.      SETB  ET1            ;启动定时器工作 WAIT:
  37.      JBC   TF1,HERE
  38.      SJMP  WAIT            ;定时未到继续等待 HERE:
  39.      DJNZ  CYCLENUM,TIMER    ;循环次数未满继续定时      MOV  A,TEMP      MOV  DPTR,#TAB3      MOVC  A,@A+DPTR      MOV  CYCLENUM,A      RET  

  40. TIMERSET:      MOV  A,TEMP











  41.      MOV  DPTR,#TAB1       ;获取定时器高位      MOVC  A,@A+DPTR
  42.      MOV  TH1,A            ;存放至定时器高位  

  43.      MOV  A,TEMP      MOV  DPTR,#TAB2
  44.      MOVC  A,@A+DPTR       ;获取定时器定位      MOV  TL1,A            ;存放至定时器低位  

  45.       RET
  46. ;***********************50ms延时********************** DELAY:
  47.      MOV  R0,#100  DL1:
  48.      MOV  R1,#10      DJNZ R1,$      DJNZ R0,DL1      RET  


  49. ;************显示子程序**************************** DISPLAY:      CLR   P2.7      CLR   P2.6      CLR   P2.5
  50.      SETB  P2.4            ;关闭高三位,保留个位      MOV   P0,LEDBUF      RET  

  51.     TAB1:  DB  15H,0AH,07H,05H,04H,03H,03H,02H,02H        ;定时器高位TH1     TAB2:  DB   0B3H,0D9H,3BH,6CH,57H,0A5H,19H,0B6H,69H      ;定时器地位TL1     TAB3:  DB   01H,01H,01H,01H,01H,01H,01H,01H,01H        ;循环次数CYCLENUM     TAB4:  DB   3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH     ;数码显示0~9
复制代码 最佳答案

一周热门 更多>