找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17093|回复: 13
收起左侧

51单片机控制42步进电机不知道接线,程序已经写好!求救50黑币

[复制链接]
ID:107207 发表于 2016-3-3 22:58 | 显示全部楼层 |阅读模式
50黑币
本帖最后由 1492548699 于 2016-3-4 20:46 编辑

QQ图片20160303225623.jpg QQ图片20160303225637.jpg QQ图片20160303225643.jpg QQ图片20160303225649.jpg 51单片机控制42步进电机不知道接线,程序有!求救50黑币。。,现在想要电机转起来,希望有人能够帮我,51芯片的脚怎么接我才可以控制电机。谢谢  qq1492548699










#include <AT89X52.h>       //调用51单片机的头文件
//---------------------------------------
//定义一个数据表格
unsigned char code TAB[8]=
{                          //定义表格一定要使用code,这样会做到程序存储区中
    0x7F,                  //表格第1步数据0b01111111
    0x3F,                  //表格第2步数据0b00111111
    0xBF,                  //表格第3步数据0b10111111
    0x9F,                  //表格第4步数据0b10011111
    0xDF,                  //表格第5步数据0b11011111
    0xCF,                  //表格第6步数据0b11001111
    0xEF,                  //表格第7步数据0b11101111
    0x6F,                  //表格第8步数据0b01101111
};
//---------------------------------------
//8独立按键相关I/O设置
sbit P1key=P2^0;           //按键P1接在P2.0口上
sbit P2key=P2^1;           //按键P2接在P2.1口上
sbit P3key=P2^2;           //按键P3接在P2.2口上
sbit P4key=P2^3;           //按键P4接在P2.3口上
sbit P5key=P2^4;           //按键P5接在P2.4口上
sbit P6key=P2^5;           //按键P6接在P2.5口上
sbit P7key=P2^6;           //按键P7接在P2.6口上
sbit P8key=P2^7;           //按键P8接在P2.7口上
//---------------------------------------
//---------------------------------------
//按键部分用寄存器设置
unsigned char KEYbuf;      //设置8位的寄存器用来暂存按键键值数据
unsigned char KEYcon;
bit KEYbit;
//---------------------------------------
unsigned char STEPspeed;
//---------------------------------------
//名称: 主函数
//适用:给力者GL9单片机开发学习系统
//公司:宁波芯动电子有限公司
//网址:www.MovingChip.com
//日期:20120914
//---------------------------------------
void main(void)            //主函数,单片机开机后就是从这个函数开始运行
{
    unsigned int a=0;      //定义一个int型变量,做延时用
    unsigned char b=0;    //定义一个char型变量,显示内容用
    while(1)               //死循环,单片机初始化后,将一直运行这个死循环
    {
  //***8独立按键扫描部分***
    //按P1-P8键,KEYbuf赋值1-8
        if(P1key==0) KEYbuf=1;     //如果P1键按下,KEYbuf赋值写1
        else if(P2key==0) KEYbuf=2; //如果P2键按下,KEYbuf赋值写2
        else if(P3key==0) KEYbuf=3; //如果P3键按下,KEYbuf赋值写3
        else if(P4key==0) KEYbuf=4; //如果P4键按下,KEYbuf赋值写4
        else if(P5key==0) KEYbuf=5; //如果P5键按下,KEYbuf赋值写5
        else if(P6key==0) KEYbuf=6; //如果P6键按下,KEYbuf赋值写6
        else if(P7key==0) KEYbuf=7; //如果P7键按下,KEYbuf赋值写7
        else if(P8key==0) KEYbuf=8; //如果P8键按下,KEYbuf赋值写8
    else
    {
   KEYbuf=0;
     if(KEYbit==0)
   {
    if(++KEYcon>20)
    {
     KEYcon=0;
       KEYbit=1;              //无按键按下,KEYbit赋值为1
    }
   }
  }
    //*********************      
  if(KEYbuf==1)               //P1键控制步进电机方向
  {
   if(KEYbit==1)
   {
    KEYbit=0;
    if(++STEPspeed>3) STEPspeed=0;     //速度加1,并限制在0-3间         
   }
  }
  if(STEPspeed==0)
  {
   for(a=0;a<1700;a++);   //速度1延时
  }
  else if(STEPspeed==1)
  {
   for(a=0;a<1300;a++);   //速度2延时
  }
  else if(STEPspeed==2)
  {
   for(a=0;a<900;a++);    //速度3延时  
  }
  else  
  {
   for(a=0;a<500;a++);    //速度4延时
  }
  if(++b>7) b=0;         //b做+1操作,并限制在0-7以内      
  P1=TAB;      //将TAB的值送入P1口输出
   }
}

 

回复

使用道具 举报

ID:71508 发表于 2016-3-4 14:04 | 显示全部楼层
估计楼主的程序也不行吧  
回复

使用道具 举报

ID:104472 发表于 2016-3-4 15:40 | 显示全部楼层
一般三根线,cp,drive,GND 端,
程序可能要用pwm,但是没见你程序里面有,
回复

使用道具 举报

ID:94991 发表于 2016-3-4 16:46 | 显示全部楼层
楼主土豪,买一百多的驱动器,方向和脉冲只需要接在+上面就行了,然后就是四线结对,分为两相,分不出来的话看括号(那一根线把四线其中的两根短接,然后转动电机轴,发现有种锁死的感觉那就是一对的,然后就是使能端接。
回复

使用道具 举报

ID:107207 发表于 2016-3-4 18:44 | 显示全部楼层
俠歌无畏 发表于 2016-3-4 16:46
楼主土豪,买一百多的驱动器,方向和脉冲只需要接在+上面就行了,然后就是四线结对,分为两相,分不出来的 ...

驱动28块钱买的。我现在单片机的脚怎么接驱动上面来 就是搞不清楚,比如说P1.2接哪里 P1.3接哪里
回复

使用道具 举报

ID:94991 发表于 2016-3-4 19:03 | 显示全部楼层
1492548699 发表于 2016-3-4 18:44
驱动28块钱买的。我现在单片机的脚怎么接驱动上面来 就是搞不清楚,比如说P1.2接哪里 P1.3接哪里

看完你的程序,突然发现你的程序是写给直流电机的。
回复

使用道具 举报

ID:94991 发表于 2016-3-4 19:06 | 显示全部楼层
俠歌无畏 发表于 2016-3-4 19:03
看完你的程序,突然发现你的程序是写给直流电机的。

这是两相四线的驱动方式,就按照这写程序就好了
QQ图片20160304190530.png
回复

使用道具 举报

ID:94991 发表于 2016-3-4 19:09 | 显示全部楼层
俠歌无畏 发表于 2016-3-4 19:06
这是两相四线的驱动方式,就按照这写程序就好了

这是我写的1相/两相/1,2相励磁的程序

/*
1相励磁法延迟较2相励磁法延迟时间长,一般来说,1相励磁法延迟为5~10毫秒,2相励磁法延迟时间为2毫秒左右,

但一般使用1-2相励磁法
*/


#include<reg52.h>
sbit a1=P1^0;
sbit b1=P1^1;
sbit c1=P1^2;
sbit d1=P1^3;


bit flag;

unsigned char speed;

#define coil_ab1 {a1=1;b1=1;c1=0;d1=0;}

#define coil_bc1 {a1=0;b1=1;c1=1;d1=0;}

#define coil_cd1 {a1=0;b1=0;c1=1;d1=1;}

#define coil_da1 {a1=1;b1=0;c1=0;d1=1;}

#define coil_a1 {a1=1;b1=0;c1=0;d1=0;}

#define coil_b1 {a1=0;b1=1;c1=0;d1=0;}

#define coil_c1 {a1=0;b1=0;c1=1;d1=0;}

#define coil_d1 {a1=0;b1=0;c1=0;d1=1;}


#define coil_off {a1=0;b1=0;c1=0;d1=0;}

void delay(unsigned char t);




void main()
{
        EA=1;
        EX0=1;
        IT0=1;

        speed=1;
while(1)
{


        while(flag)
        {
                coil_off;
                delay(speed);
               
                coil_a1;
                delay(speed);               

                coil_ab1;
                delay(speed);

                coil_b1;
                delay(speed);               


                coil_bc1;
                delay(speed);

                coil_c1;
                delay(speed);               


                coil_cd1;
                delay(speed);

                coil_d1;
                delay(speed);               


                coil_da1;
                delay(speed);


        }





        while(!flag)
        {
                coil_off;
                delay(speed);

                coil_da1;
                delay(speed);               

                coil_d1;
                delay(speed);

                coil_cd1;
                delay(speed);               


                coil_c1;
                delay(speed);

                coil_bc1;
                delay(speed);               


                coil_b1;
                delay(speed);

                coil_ab1;
                delay(speed);               


                coil_a1;
                delay(speed);


        }
}
}


void delay(unsigned char t)
{
        unsigned int x,y;
        for(x=0;x<t;x++)
                for(y=0;y<123;y++);
}

void ISR_INT0(void) interrupt 0
{

if(!INT0)
   {
   delay(10);//在此处可以添加去抖动程序,防止按键抖动造成错误
   if(!INT0)
   //while(!INT1);//等待按键释放
     {
     flag=!flag;   
     }
   }
}
回复

使用道具 举报

ID:107207 发表于 2016-3-4 19:42 | 显示全部楼层
俠歌无畏 发表于 2016-3-4 19:09
这是我写的1相/两相/1,2相励磁的程序

/*

可以加我QQ1492548699吗
回复

使用道具 举报

ID:107207 发表于 2016-3-4 19:45 | 显示全部楼层
俠歌无畏 发表于 2016-3-4 19:09
这是我写的1相/两相/1,2相励磁的程序

/*

我现在不晓得接线 哎。我的控制线该接的单片机的哪几脚
回复

使用道具 举报

ID:96682 发表于 2016-3-5 01:38 | 显示全部楼层
买这货时没有说明书之类附件的教你如何操作?
回复

使用道具 举报

ID:107207 发表于 2016-3-8 21:11 | 显示全部楼层
wc86110 发表于 2016-3-5 01:38
买这货时没有说明书之类附件的教你如何操作?

有关键是我接上线后电机一秒估计只转了1毫米的距离。而且电机发热严重
回复

使用道具 举报

ID:79544 发表于 2016-3-8 21:44 | 显示全部楼层
你这个驱动器好像还要设置吧。你这个程序不能用。
回复

使用道具 举报

ID:296880 发表于 2018-3-25 19:27 | 显示全部楼层
楼主整明白没,我是新手,刚接触单片机,同问
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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