×
嵌入式 > 技术百科 > 详情

四相步进电机控制程序(可随时控制转动角度)

发布时间:2020-06-08 发布时间:
|
  1. /************************************************
  2. 文件:四相步进电机控制程序
  3. [ ]: 
  4. 描述:驱动方式彩用一相劢磁
  5.       moto_maichong_time 一个脉冲信号时间,单位1MS
  6.       moto_qu_one     转动角度64(45度)
  7.      调用函数 moto_dispose(char moto_NU) 形参值为1至8
  8.      P1口与电机相连
  9. 时间:2011年1月11日
  10. *************************************************/
  11.  
  12. #define uchar unsigned char 
  13.  
  14. #define moto_maichong_time 10 //一个脉冲信号时间单位1MS(224ms)
  15.  
  16. #define    moto_qu_one    64*8 //转动45度值
  17.  
  18.  
  19. /* 一相励磁,电机正转I/O高低电平对应表*/
  20. uchar moto_table1[]={0x01,0x02,0x04,0x08,0x08,0x04,0x2,0x01};
  21.  
  22. /* 二相励磁,电机正转I/O高低电平对应表*/
  23. uchar moto_table2[]={0x0c,0x06,0x03,0x09,0x09,0x03,0x6,0x0c};
  24.  
  25.  
  26. uchar moto_begin=0;    //正反转标志位
  27.  
  28.  
  29. int moto_qu_k=0;        //转动的初使值
  30.  
  31. int moto_qu_kk=1;        //转动的最大值    
  32.  
  33.  
  34. int moto_qu_j=0;     //劢磁信号的初始值
  35.  
  36.  
  37.  
  38. void moto_delay(int moto_i)     //延时1MS函数
  39.  
  40. {
  41.     uchar moto_j,moto_k;
  42.     for(moto_j=moto_i;moto_j>0;moto_j--)
  43.         for(moto_k=125;moto_k>0;moto_k--);
  44. }
  45.  
  46. /*电机速度,正反转控制。正反转由moto_begin取0正转、4反转*/
  47. void qudong(uchar moto_num)
  48. {    
  49.      moto_qu_kk = moto_qu_one*moto_num;
  50.     /*电机转动一圈*/
  51.     for(moto_qu_k=0;moto_qu_k
  52.     {
  53.         /*四个励磁脉冲信号*/
  54.         for(moto_qu_j=moto_begin;moto_qu_j<4+moto_begin;moto_qu_j++) 
  55.         {
  56.             P1 = moto_table2[moto_qu_j];     //选择劢磁方式                
  57.  
  58.             moto_delay( moto_maichong_time );    //1个励磁脉冲信号时间
  59.  
  60.         }
  61.     }
  62. }
  63.  
  64. /*控制步进电机转动圈数、正反转。正数为正转、负数反转*/
  65. void moto_dispose(char moto_NU)     
  66. {
  67.     /*根据传入值,控制电机正反转*/
  68.     if(moto_NU<0)
  69.     {
  70.         moto_begin=4; //控制电机反转
  71.  
  72.         moto_NU *= -1; //取转动圈数
  73.  
  74.     }
  75.     else
  76.         moto_begin=0;    //控制电机正转        
  77.  
  78.         
  79.     /*根据传入值,控制电机转动圈数*/    
  80.     qudong(moto_NU);        
  81. }
 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
德州仪器推出稳压误差仅为1%的无电容LDO产品