打印

小步进电机的驱动程序

[复制链接]
1861|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#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和反向器

B{CRK9B6TBI6RR]ZVI6}}BE.jpg (103.08 KB )

B{CRK9B6TBI6RR]ZVI6}}BE.jpg

B{CRK9B6TBI6RR]ZVI6}}BE.jpg (103.08 KB )

小电机

小电机

使用特权

评论回复
板凳
bboybl| | 2013-9-6 01:33 | 只看该作者
这货我用过 扭矩小的可怜!

使用特权

评论回复
地板
bboybl| | 2013-9-6 01:47 | 只看该作者
SPEED=1时 有一毫秒的延时吗?????

使用特权

评论回复
5
林志财|  楼主 | 2013-9-6 07:08 | 只看该作者
时间我调过,没用

使用特权

评论回复
6
林志财|  楼主 | 2013-9-6 17:25 | 只看该作者
这货我用过 扭矩小的可怜!
你可有程序,发给我。我现在不确定是电机坏,还是程序问题。此电机用手怎么扭都没轴都没动。

使用特权

评论回复
7
草民| | 2013-9-6 22:44 | 只看该作者
可能是输出频率不合适,步进电机启动时频率直接加大了的话会堵转。

使用特权

评论回复
8
bboybl| | 2013-9-7 00:29 | 只看该作者
不好意思 我看错了 的确是一毫秒左右的延时!程序我找找 !!你这个我觉得是SPEED 延时不够 起码要30以上!!

使用特权

评论回复
9
bboybl| | 2013-9-7 00:29 | 只看该作者
林志财 发表于 2013-9-6 17:25
你可有程序,发给我。我现在不确定是电机坏,还是程序问题。此电机用手怎么扭都没轴都没动。 ...

你用手是不可能拧动它的!

使用特权

评论回复
10
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度之后就会停住!
        }
}

使用特权

评论回复
11
林志财|  楼主 | 2013-9-7 22:30 | 只看该作者
你用手是不可能拧动它的!
此程序还是不行,这电机到底是不是坏呢,

使用特权

评论回复
12
bboybl| | 2013-9-8 11:44 | 只看该作者
你把你硬件电路贴出来!

使用特权

评论回复
13
林志财|  楼主 | 2013-9-8 11:50 | 只看该作者
开发板上的,应该没事硬件

JFS@N[]8MB_1BZ1[FL(V2~U.jpg (65.58 KB )

JFS@N[]8MB_1BZ1[FL(V2~U.jpg

使用特权

评论回复
14
bboybl| | 2013-9-8 21:38 | 只看该作者
{0XFE,0XFD,0XFB,0XF7};把CODE 表换这个数组进去看看!

使用特权

评论回复
15
bboybl| | 2013-9-8 21:54 | 只看该作者
程序应该是没问题的!我的能动

使用特权

评论回复
16
林志财|  楼主 | 2013-9-8 22:20 | 只看该作者
可能这电机真的有问题

使用特权

评论回复
17
新光科技| | 2013-9-9 10:07 | 只看该作者
低转速试试,或者改改节拍,一般开发板上的硬件是不会出问题的。

使用特权

评论回复
18
林志财|  楼主 | 2013-9-9 12:03 | 只看该作者
低转速试试,或者改改节拍,一般开发板上的硬件是不会出问题的。
改过很多次了:L

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

392

帖子

0

粉丝