Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7679495
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2011-01-15 14:11:33

  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. #define uchar unsigned char

  12. #define moto_maichong_time 10 //一个脉冲信号时间单位1MS(224ms)

  13. #define    moto_qu_one    64*8 //转动45度值


  14. /* 一相励磁,电机正转I/O高低电平对应表*/
  15. uchar moto_table1[]={0x01,0x02,0x04,0x08,0x08,0x04,0x2,0x01};

  16. /* 二相励磁,电机正转I/O高低电平对应表*/
  17. uchar moto_table2[]={0x0c,0x06,0x03,0x09,0x09,0x03,0x6,0x0c};


  18. uchar moto_begin=0;    //正反转标志位


  19. int moto_qu_k=0;        //转动的初使值

  20. int moto_qu_kk=1;        //转动的最大值    


  21. int moto_qu_j=0;     //劢磁信号的初始值



  22. void moto_delay(int moto_i)     //延时1MS函数

  23. {
  24.     uchar moto_j,moto_k;
  25.     for(moto_j=moto_i;moto_j>0;moto_j--)
  26.         for(moto_k=125;moto_k>0;moto_k--);
  27. }

  28. /*电机速度,正反转控制。正反转由moto_begin取0正转、4反转*/
  29. void qudong(uchar moto_num)
  30. {    
  31.      moto_qu_kk = moto_qu_one*moto_num;
  32.     /*电机转动一圈*/
  33.     for(moto_qu_k=0;moto_qu_k<moto_qu_kk;moto_qu_k++)
  34.     {
  35.         /*四个励磁脉冲信号*/
  36.         for(moto_qu_j=moto_begin;moto_qu_j<4+moto_begin;moto_qu_j++)
  37.         {
  38.             P1 = moto_table2[moto_qu_j];     //选择劢磁方式                

  39.             moto_delay( moto_maichong_time );    //1个励磁脉冲信号时间

  40.         }
  41.     }
  42. }

  43. /*控制步进电机转动圈数、正反转。正数为正转、负数反转*/
  44. void moto_dispose(char moto_NU)     
  45. {
  46.     /*根据传入值,控制电机正反转*/
  47.     if(moto_NU<0)
  48.     {
  49.         moto_begin=4; //控制电机反转

  50.         moto_NU *= -1; //取转动圈数

  51.     }
  52.     else
  53.         moto_begin=0;    //控制电机正转        

  54.         
  55.     /*根据传入值,控制电机转动圈数*/    
  56.     qudong(moto_NU);        
  57. }
阅读(6363) | 评论(0) | 转发(2) |
0

上一篇:oops错误分析

下一篇:智能控制电机

给主人留下些什么吧!~~