找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7843|回复: 1
打印 上一主题 下一主题
收起左侧

stm32四相五线步进电机驱动程序

[复制链接]
跳转到指定楼层
楼主
ID:400503 发表于 2018-9-20 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
引脚A4-A7作为电机的四个控制信号。

单片机源程序如下:
  1. //头文件
  2. #include "stm32f10x.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "RTC_Time.h"
  6. #include <stdio.h>
  7. #include "delay.h"

  8. //=============================================================================
  9. //函数名称:Delay
  10. //功能概要:延时函数
  11. //参数说明:无
  12. //函数返回:无
  13. //=============================================================================

  14. //=============================================================================
  15. //函数名称:main
  16. //功能概要:主函数
  17. //参数说明:无
  18. //函数返回:int
  19. //=============================================================================
  20. #define uchar unsigned char
  21. #define uint unsigned int
  22.        
  23. void motor3(void);
  24. void motor4(void);



  25. u16 moto0_time=11000; //电机1的运行时间
  26. u16 moto1_time=2000; //电机2的运行时间

  27. void  Delay1 (uint32_t nCount)
  28. {
  29.   for(; nCount != 0; nCount--);
  30. }

  31. void delay1_ms(u16 time)
  32. {   
  33.    u16 i=0;  
  34.    while(time--)
  35.    {
  36.       i=12000;  
  37.       while(i--) ;   
  38.    }
  39. }




  40. int main(void)
  41. {
  42.                
  43.    u8 k=0;       

  44.                 //初始化LED
  45.     USART1_Config();
  46.    LED_GPIO_Config();
  47.    
  48.                        
  49.                
  50.     while (1)
  51.     {   
  52.        LED0_OFF;
  53.                 if(KEY0==0) //正转按钮
  54.                  {  
  55.                             Delay1(0x00FFFF);
  56.                             //motor1( );
  57.                 motor3( );
  58.                                          MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;         
  59.                             MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_OFF;         
  60.                             k=1;
  61.                  }
  62.                    if(KEY1==0) //反转按钮
  63.                  {
  64.                                    Delay1(0x00FFFF);
  65.                       //motor2( );
  66.                             motor4();
  67.                             MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;
  68.                             MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_OFF;
  69.                             k=0;
  70.                  }
  71.                        

  72.                        
  73.     }
  74. }





  75. //正转函数
  76. void motor3(void)
  77.        
  78. {
  79.          u8 j=0;
  80.          u16 i;       

  81.        
  82.         for(i=0;i<moto0_time;i++)
  83.                         {        
  84.    switch(j)
  85.     {
  86.                        
  87.                          
  88.     case 0:{

  89.                                          { MOTOR_A1_ON; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_ON;}
  90.                                                                       if(i<moto1_time)
  91.                                          { MOTOR_A_ON; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_ON;}
  92.                        else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  93.                
  94.                
  95.                     };break;
  96.     case 1:{
  97.                              
  98.                         {MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_ON;}
  99.                                                 if(i<moto1_time)
  100.                               {MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_ON;}
  101.                         else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  102.                      
  103.                      };break;
  104.     case 2:{
  105.                              
  106.                               { MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_ON; MOTOR_D1_ON;}
  107.                                                  if(i<moto1_time)
  108.                                                 { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_ON; MOTOR_D_ON;}
  109.                         else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  110.                
  111.                           
  112.                        };break;
  113.     case 3:{
  114.                              
  115.                         {MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_ON; MOTOR_D1_OFF;}
  116.                                                                   if(i<moto1_time)
  117.                         {MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_ON; MOTOR_D_OFF;}
  118.                         else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  119.                        };break;
  120.                
  121.                 case 4:{
  122.                              
  123.                                                  {MOTOR_A1_OFF; MOTOR_B1_ON; MOTOR_C1_ON; MOTOR_D1_OFF;}
  124.      if(i<moto1_time)  
  125.                                                 {MOTOR_A_OFF; MOTOR_B_ON; MOTOR_C_ON; MOTOR_D_OFF;}
  126.                         else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  127.                
  128.                        };break;
  129.     case 5:{
  130.                                
  131.                                                  { MOTOR_A1_OFF; MOTOR_B1_ON; MOTOR_C1_OFF; MOTOR_D1_OFF;}
  132.                 if(i<moto1_time)  
  133.                                                  { MOTOR_A_OFF; MOTOR_B_ON; MOTOR_C_OFF; MOTOR_D_OFF;}
  134.                          else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  135.                
  136.                       };break;
  137.     case 6:{
  138.                                
  139.                          { MOTOR_A1_ON; MOTOR_B1_ON; MOTOR_C1_OFF; MOTOR_D1_OFF;}
  140.                                                         if(i<moto1_time)  
  141.                                                  { MOTOR_A_ON; MOTOR_B_ON; MOTOR_C_OFF; MOTOR_D_OFF;}
  142.                          else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  143.                         };break;
  144.     case 7:{
  145.                                 
  146.                                 { MOTOR_A1_ON; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_OFF;}
  147.                                                                          if(i<moto1_time)  
  148.                                                         { MOTOR_A_ON; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  149.                           else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  150.                          };break;                               
  151.                                                

  152.                                                  
  153.                                                  

  154.                                                  
  155.                                                  
  156.                                                
  157.                                                
  158.                                                
  159.      }
  160.                 j++;
  161.                 if(j>=8) j=0;

  162.                 Delay1(0x01222);
  163.                  //delay1_ms(1);                 
  164.                         }
  165. }








  166. //反转函数

  167. void motor4(void)
  168. {
  169.                 u8 j;
  170.           u16 i;
  171.                 j=0;
  172.                         for(i=0;i<moto0_time;i++)
  173.                         {        
  174.    switch(j)
  175.     {
  176.     case 0:{
  177.                              { MOTOR_A1_ON; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_OFF;}
  178.                          if(i<moto1_time)
  179.                               { MOTOR_A_ON; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  180.                                           else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  181.                                
  182.                        };break;
  183.     case 1:{   
  184.                                 
  185.                                                         { MOTOR_A1_ON; MOTOR_B1_ON; MOTOR_C1_OFF; MOTOR_D1_OFF;}
  186.                                    if(i<moto1_time)
  187.                                                          {MOTOR_A_ON; MOTOR_B_ON; MOTOR_C_OFF; MOTOR_D_OFF;}
  188.                                                          else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}                     
  189.                        };break;
  190.     case 2:{  
  191.                        
  192.                       {  MOTOR_A1_OFF; MOTOR_B1_ON; MOTOR_C1_OFF; MOTOR_D1_OFF;}
  193.                                                         if(i<moto1_time)
  194.                                                 {MOTOR_A_OFF; MOTOR_B_ON; MOTOR_C_OFF; MOTOR_D_OFF;}
  195.                                                 else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  196.                                        
  197.                      
  198.                        };break;
  199.     case 3:{
  200.                                      
  201.                          { MOTOR_A1_OFF; MOTOR_B1_ON; MOTOR_C1_ON; MOTOR_D1_OFF;}
  202.                          if(i<moto1_time)
  203.                                                         {MOTOR_A_OFF; MOTOR_B_ON; MOTOR_C_ON; MOTOR_D_OFF;}
  204.                           else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  205.                                                  
  206.                
  207.                
  208.                        };break;
  209.                
  210.                 case 4:{
  211.                                                
  212.                                                 {  MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_ON; MOTOR_D1_OFF;}
  213.                                                   if(i<moto1_time)
  214.                                                   {  MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_ON; MOTOR_D_OFF;  }
  215.                                 else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  216.                                
  217.                        
  218.                        };break;
  219.     case 5:{
  220.                        
  221.                                                 {        MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_ON; MOTOR_D1_ON;}
  222.                           if(i<moto1_time)
  223.                        
  224.                                 { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_ON; MOTOR_D_ON;}
  225.                                                   else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  226.                        };break;
  227.     case 6:{
  228.                        
  229.                             
  230.                      {  MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_ON;}
  231.                                  if(i<moto1_time)
  232.                              { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_ON;}
  233.                        else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  234.                                
  235.                       };break;
  236.     case 7:{
  237.                              
  238.                                           {MOTOR_A1_ON; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_ON;}
  239.                                                                                   if(i<moto1_time)
  240.                               { MOTOR_A_ON; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_ON;}
  241.                                           else { MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_OFF;}
  242.                        };break;                       

  243.                                          
  244.                                          
  245.                                  
  246.                                          
  247.          

  248.        
  249.      }
  250.                 j++;
  251.                 if(j>=8) j=0;

  252.                 Delay1(0x01222);
  253.                 // delay1_ms(2);
  254.                         }
  255.                        
  256.    LED0_ON;

  257. }











  258. /*
  259. 四拍
  260. void motor1(void)  反转
  261. {
  262.                 u8 j;
  263.          u16 i;
  264.                 j=0;
  265.                         for(i=0;i<1000;i++)
  266.                         {        
  267.    switch(j)
  268.     {
  269.     case 0:{MOTOR_A_ON; MOTOR_B_ON; MOTOR_C_OFF; MOTOR_D_OFF;
  270.                        MOTOR2_A_ON; MOTOR2_B_ON; MOTOR2_C_OFF; MOTOR2_D_OFF;};break;
  271.     case 1:{MOTOR_A_OFF; MOTOR_B_ON; MOTOR_C_ON; MOTOR_D_OFF;
  272.                         MOTOR2_A_OFF; MOTOR2_B_ON; MOTOR2_C_ON; MOTOR2_D_OFF;};break;
  273.     case 2:{MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_ON; MOTOR_D_ON;
  274.                         MOTOR2_A_OFF; MOTOR2_B_OFF; MOTOR2_C_ON; MOTOR2_D_ON;};break;
  275.     case 3:{MOTOR_A_ON; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_ON;
  276.                         MOTOR2_A_ON; MOTOR2_B_OFF; MOTOR2_C_OFF; MOTOR2_D_ON;};break;
  277.      }
  278.                 j++;
  279.                 if(j>=4) j=0;
  280.                 //delay_ms(10);
  281.                 Delay1(0x003FFF);
  282.                         }
  283.                        
  284.    LED0_ON;

  285. }

  286. void motor2(void)  正转
  287.        
  288. {
  289.         u8 j;
  290.          u16 i;
  291.         j=0;
  292.         for(i=0;i<1000;i++)
  293.                         {        
  294.    switch(j)
  295.     {
  296.     case 0:{MOTOR_A_ON; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_ON;
  297.                         MOTOR2_A_ON; MOTOR2_B_OFF; MOTOR2_C_OFF; MOTOR2_D_ON;};break;
  298.     case 1:{MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_ON; MOTOR_D_ON;
  299.                         MOTOR2_A_OFF; MOTOR2_B_OFF; MOTOR2_C_ON; MOTOR2_D_ON;};break;
  300.     case 2:{MOTOR_A_OFF; MOTOR_B_ON; MOTOR_C_ON; MOTOR_D_OFF;
  301.                         MOTOR2_A_OFF; MOTOR2_B_ON; MOTOR2_C_ON; MOTOR2_D_OFF;};break;
  302.     case 3:{MOTOR_A_ON; MOTOR_B_ON; MOTOR_C_OFF; MOTOR_D_OFF;
  303.                         MOTOR2_A_ON; MOTOR2_B_ON; MOTOR2_C_OFF; MOTOR2_D_OFF;};break;
  304.      }
  305.                 j++;
  306.                 if(j>=4) j=0;
  307.                 //delay_ms(5);
  308.                 Delay1(0x003FFF);
  309.                         }
  310. }


  311. */

















  312. /*
  313. 八拍加四拍混合

  314. void motor5(void)   反转
  315. {
  316.                 u8 j;
  317.          u16 i;
  318.                 j=0;
  319.                         for(i=0;i<2000;i++)
  320.                         {        
  321.    switch(j)
  322.     {
  323.     case 0:{MOTOR_A1_ON; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_OFF;};break;       
  324.     case 1:{MOTOR_A1_ON; MOTOR_B1_ON; MOTOR_C1_OFF; MOTOR_D1_OFF;};break;
  325.                 case 2:{MOTOR_A1_OFF; MOTOR_B1_ON; MOTOR_C1_OFF; MOTOR_D1_OFF;};break;
  326.                 case 3:{MOTOR_A1_OFF; MOTOR_B1_ON; MOTOR_C1_ON; MOTOR_D1_OFF;};break;
  327.                
  328.                 case 4:{MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_ON; MOTOR_D1_OFF;};break;
  329.     case 5:{MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_ON; MOTOR_D1_ON;};break;
  330.     case 6:{MOTOR_A1_OFF; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_ON;};break;
  331.     case 7:{MOTOR_A1_ON; MOTOR_B1_OFF; MOTOR_C1_OFF; MOTOR_D1_ON;};break;                       


  332.                                
  333.           case 8:{MOTOR_A_ON; MOTOR_B_ON; MOTOR_C_OFF; MOTOR_D_OFF;
  334.                        MOTOR2_A_ON; MOTOR2_B_ON; MOTOR2_C_OFF; MOTOR2_D_OFF;};break;
  335.     case 9:{MOTOR_A_OFF; MOTOR_B_ON; MOTOR_C_ON; MOTOR_D_OFF;
  336.                         MOTOR2_A_OFF; MOTOR2_B_ON; MOTOR2_C_ON; MOTOR2_D_OFF;};break;
  337.     case 10:{MOTOR_A_OFF; MOTOR_B_OFF; MOTOR_C_ON; MOTOR_D_ON;
  338.                         MOTOR2_A_OFF; MOTOR2_B_OFF; MOTOR2_C_ON; MOTOR2_D_ON;};break;
  339.     case 11:{MOTOR_A_ON; MOTOR_B_OFF; MOTOR_C_OFF; MOTOR_D_ON;
  340.                         MOTOR2_A_ON; MOTOR2_B_OFF; MOTOR2_C_OFF; MOTOR2_D_ON;};break;                       
  341.                                                
  342.                                        
  343.      }
  344.                 j++;
  345.                 if(j>=8) j=0;

  346.                 Delay1(0x002FEE);
  347.                 // delay1_ms(2);
  348.                         }
  349.                        
  350. ……………………

  351. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
2.四相五线 步进电机 两个小电机同步转90度.rar (402.96 KB, 下载次数: 76)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-9-20 16:49 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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