2918|8

10

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

小白白,求大神教导步进电机 [复制链接]

我有一个ULN2003A控制的四相步进电机,现在我打算用驱动器控制一个24V的两相步进电机,程序应该怎么改
此帖出自51单片机论坛

最新回复

走慢点验证一下1c2c3c4c点电平的顺序  详情 回复 发表于 2014-5-4 21:44
点赞 关注
 

回复
举报

5304

帖子

454

TA的资源

五彩晶圆(高级)

沙发
 
两相  是不是要用双桥来驱动,A,B绕组好些呢?
此帖出自51单片机论坛

点评

我已经按照电路图做了PCB板了,不想改了,我自己也改了下程序,但是只是不停震动不转,究竟是怎么回事,P0.0-P0.3哪两个口是输出方向的啊??求教  详情 回复 发表于 2014-5-4 16:55
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\448031894\QQ\WinTemp\RichOle\BV`9EYMV8Z4I7G~1}(GNRUT.jpgfile:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\448031894\QQ\WinTemp\RichOle\BV`9EYMV8Z4I7G~1}(GNRUT.jpg

BV`9EYMV8Z4I7G~1}(GNRUT.jpg (127.09 KB, 下载次数: 0)

原理图

原理图
此帖出自51单片机论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

4
 
#include
#include
#include
#define uc unsigned char
#define ui unsigned int                                                  
void chkbusy(void);
void wcode(uc cd) ;
void wdata(uc dat);
void disrow(uc page,uc col,uc *temp);
void display( uc page,uc col,uc *temp);
void ground(step);                                     //转步
void run1();                                     //正转
void run2();
void stop();
void delay(ui time);
uc scan_key1,scan_key2;                        //按键功能选择,00 停止,01 正转 10 反转
uc step1;step2;
static  step_index;
ui count1,count2;                                   //定时
uc butter;                                                        //按键
static  speed;                                                //速度参数
void main(void)
{  
   P2=0xff;
   step2=0;
   step1=0;
   P1=0xff;
   P0=0;
   EX1=1;
   EA=1;                                               //开中断
   speed=1500;
   while(1)
  {  
     if((scan_key1==1)&(scan_key2==0))             // 正转
         {  

            ground(step_index);
            delay(speed);
               step_index++;                                                   //大于7,从头再来
            if(step_index>7)
                   step_index=0;
          }
         if((scan_key1==0)&(scan_key2==1))                   //反转
         {                                                                    
           ground(step_index);
           delay(speed);
              step_index--;
           if(step_index<0)                                                        //小于0,从头再来。
                   step_index=7;
          }
         if(scan_key1==0&scan_key2==0)
          {
           P0=0xff;
          }
         if(step1==1&step2==0)
          {
            speed=speed-100;
                if(speed<1000|speed==1000)                                  
                { speed=1000;                                                          

                }
          }
          if(step1==0&step2==1)
          {
            speed=speed+100;                              
                if(speed>2500|speed==2500)                          
                 { speed=2500;                                                  

                 }
                  }
          }
}

//***************************************************
//*************************        延时子程序**************
//**************************************************
void delay(ui time)                                    ///延时程序
{ for (count1=0;count1   for(count2=0;count2<3;count2++);
}
//*********************************************************
//******************按键处理程序****************************
//************************************************************
void key(void) interrupt 2
{
  uc i;
  for(i=0;i<200;i++);                                                   //延时防抖
  if(P3_3==0)                                                       
   {
    butter=~P1;
    switch(butter)
         {case 0x01:    scan_key1=1;scan_key2=0; break;        //正常运行 ,用两个数字进行选择,是不错的办法
          case 0x02:    scan_key1=0;scan_key2=0;break;        //停止
          case 0x04:    scan_key1=0 ;scan_key2=1; break;      // 正转
          case 0x08:    step1=1;step2=0;break;               //减速
          case 0x10:    step1=0;step2=1;break;              // 加速
          default :                     ;                             //其它值返回
         }
   }
   P1=0XFF;
}
//**************************************************
//**********************转步************************
//**************************************************
void ground(step_index)         //转步
{
switch(step_index)
   {
     case 0://0            //
      P0_0 = 1;                   //
      P0_1 = 0;                   //
      P0_2 = 0;
      P0_3 = 0;
      break;
          case 1://0,1  
      P0_0 = 1;
      P0_1 = 1;
      P0_2 = 0;
      P0_3 = 0;
      break;
          case 2://1
      P0_0 = 0;
      P0_1 = 1;
      P0_2 = 0;
      P0_3 = 0;
      break;
          case 3://1,2
      P0_0 = 0;
      P0_1 = 1;
      P0_2 = 1;
      P0_3 = 0;
      break;
          case 4://2
      P0_0 = 0;
      P0_1 = 0;
      P0_2 = 1;
      P0_3 = 0;
      break;
          case 5://2,3
      P0_0 = 0;
      P0_1 = 0;
      P0_2 = 1;
      P0_3 = 1;
      break;
          case 6://3
      P0_0 = 0;
      P0_1 = 0;
      P0_2 = 0;
      P0_3 = 1;
      break;
          case 7://3,0
      P0_0 = 0;
      P0_1 = 0;
      P0_2 = 0;
      P0_3 = 1;
  }       
}
源程序
此帖出自51单片机论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

5
 
蓝雨夜 发表于 2014-5-4 16:47
两相  是不是要用双桥来驱动,A,B绕组好些呢?

我已经按照电路图做了PCB板了,不想改了,我自己也改了下程序,但是只是不停震动不转,究竟是怎么回事,P0.0-P0.3哪两个口是输出方向的啊??求教
此帖出自51单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

6
 
震动可能是相位顺序不对
此帖出自51单片机论坛

点评

是对的~。~两相是黑绿红蓝,不过只是轴轻微震动,而电机里面转子好像也在转,但轴爱上保持初始力矩不动,请问程序上要怎么改?最后转步的程序貌似是根据相位来的,是直接删掉然后就可以了吗??小白求教导  详情 回复 发表于 2014-5-4 19:48
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

7
 
huo_hu 发表于 2014-5-4 17:04
震动可能是相位顺序不对

是对的~。~两相是黑绿红蓝,不过只是轴轻微震动,而电机里面转子好像也在转,但轴爱上保持初始力矩不动,请问程序上要怎么改?最后转步的程序貌似是根据相位来的,是直接删掉然后就可以了吗??小白求教导
此帖出自51单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

8
 
走慢点验证一下1c2c3c4c点电平的顺序
此帖出自51单片机论坛

点评

...我知道为什么转不到了,因为我是驱动24V的电机用驱动器,如果用共阳极接法,1.3连VCC,两口常1,当按下反转键时,1-3变0反转,可是程序应该怎么改呢??  详情 回复 发表于 2014-5-5 01:13
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

9
 
huo_hu 发表于 2014-5-4 21:44
走慢点验证一下1c2c3c4c点电平的顺序

...我知道为什么转不到了,因为我是驱动24V的电机用驱动器,如果用共阳极接法,1.3连VCC,两口常1,当按下反转键时,1-3变0反转,可是程序应该怎么改呢??
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表