小步进电机的驱动程序

[复制链接]
2281|17
 楼主| 林志财 发表于 2013-9-5 23:37 | 显示全部楼层 |阅读模式
#include <reg52.h>



sbit A1=P1^0; //定义步进电机连接端口
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;


#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

unsigned char Speed;
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
while(t--)
{
     //大致延时1mS
     DelayUs2x(245);
         DelayUs2x(245);
}
}
/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
//unsigned int i=64*16; //转2周停止
Speed=1; //调整速度
while(1)  
  {         
     Coil_A1                 //遇到Coil_A1  用{A1=1;B1=0;C1=0;D1=0;}代替
     DelayMs(Speed);         //改变这个参数可以调整电机转速 ,
                                 //数字越小,转速越大,力矩越小
     Coil_B1
     DelayMs(Speed);
     Coil_C1
     DelayMs(Speed);
     Coil_D1
     DelayMs(Speed);
  }
}
此程序驱动不了
 楼主| 林志财 发表于 2013-9-5 23:59 | 显示全部楼层
驱动是2003和反向器

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
bboybl 发表于 2013-9-6 01:33 | 显示全部楼层
这货我用过 扭矩小的可怜!
bboybl 发表于 2013-9-6 01:47 | 显示全部楼层
SPEED=1时 有一毫秒的延时吗?????
 楼主| 林志财 发表于 2013-9-6 07:08 | 显示全部楼层
时间我调过,没用
 楼主| 林志财 发表于 2013-9-6 17:25 | 显示全部楼层
这货我用过 扭矩小的可怜!
你可有程序,发给我。我现在不确定是电机坏,还是程序问题。此电机用手怎么扭都没轴都没动。
草民 发表于 2013-9-6 22:44 | 显示全部楼层
可能是输出频率不合适,步进电机启动时频率直接加大了的话会堵转。
bboybl 发表于 2013-9-7 00:29 | 显示全部楼层
不好意思 我看错了 的确是一毫秒左右的延时!程序我找找 !!你这个我觉得是SPEED 延时不够 起码要30以上!!
bboybl 发表于 2013-9-7 00:29 | 显示全部楼层
林志财 发表于 2013-9-6 17:25
你可有程序,发给我。我现在不确定是电机坏,还是程序问题。此电机用手怎么扭都没轴都没动。 ...

你用手是不可能拧动它的!
bboybl 发表于 2013-9-7 00:41 | 显示全部楼层
#include <reg52.h>
#define  uchar unsigned char
#define uint unsigned int
uchar code step90s[]={0x01,0x02,0x04,0x08};
void delay( uint t)
{                           
  while(t--);
}

//////////////////////////////////////////////魔方机械部分///////////////////////////
void ping90s()//水平顺时针90度翻转
{
        uint a,i=512;//电机内部转512圈 等于外面转360度;
            while(i--)
                {
                        for(a=0;a<4;a++)
                        {
                                P1=step90s[a];
                                delay(400);//加适当的延时
                        }
                }
}

void main()
{
        while(1)//大循环 电机会不停旋转
        {
                ping90s();
                //while(1);//这一行不注释的话应该是转360度之后就会停住!
        }
}
 楼主| 林志财 发表于 2013-9-7 22:30 | 显示全部楼层
你用手是不可能拧动它的!
此程序还是不行,这电机到底是不是坏呢,
bboybl 发表于 2013-9-8 11:44 | 显示全部楼层
你把你硬件电路贴出来!
 楼主| 林志财 发表于 2013-9-8 11:50 | 显示全部楼层
开发板上的,应该没事硬件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
bboybl 发表于 2013-9-8 21:38 | 显示全部楼层
{0XFE,0XFD,0XFB,0XF7};把CODE 表换这个数组进去看看!
bboybl 发表于 2013-9-8 21:54 | 显示全部楼层
程序应该是没问题的!我的能动
 楼主| 林志财 发表于 2013-9-8 22:20 | 显示全部楼层
可能这电机真的有问题
新光科技 发表于 2013-9-9 10:07 | 显示全部楼层
低转速试试,或者改改节拍,一般开发板上的硬件是不会出问题的。
 楼主| 林志财 发表于 2013-9-9 12:03 | 显示全部楼层
低转速试试,或者改改节拍,一般开发板上的硬件是不会出问题的。
改过很多次了:L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

392

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部