28BYJ-48步进电机驱动

一:驱动原理:

28BYJ-48步进电机使用ULN2003驱动板

该步进电机每转一圈需要2048步,因此需要转动目标角度需要的步数=(目标角度/360)*2048

因此要想步进电机转动一圈需要给其2048个电平变化

ULN2003驱动板使用5~12v供电,需要4个单片机IO口,IO口的控制逻辑是依次通高电平,以下代码是步进电机驱动的核心部分

for(j=0;j<512;j++)// 512*4=2048步
{
    for(i=0;i<4;i++)      // 四相电机,电平变化=>0010, 0100, 1000, 0001
       {
           P2=F_Rotation[i]; 
           Delay(200); //延时控制电机转动速度;参数越小转得越快,但力矩越小
        }
}

其中F_Rotation[4]={0x02,0x04,0x08,0x01}=>0000 0010, 0000 0100, 0000 1000, 0000 0001

可以看见电平给到四个单片机IO口的电平为0010=>0100=>1000=>0001,四个电平状态控制步进电机不断旋转,配合外面的for循环一共执行512*4=2048步,刚好控制电机旋转一圈

二:线路连接:

单片机IO口P2^1~P2^4依次连接ULN2003驱动板的IN1~IN4,驱动板电源连接5v~12v,步进电机连接线直接插入驱动板的白色的端子中即可(有方向限制,不会插反)

二:存在的问题:

如果是5v的驱动,在第二个for语句中使用200的延时,扭矩有点不足,存在很多丢步的现象;使用12v时扭矩足够,但是其发热量较大;为了保证不丢步,适当降低电机转速或则在5v的基础上增加供电电压。

三:51代码实现:

#include <reg52.h>
#include <intrins.h>

unsigned char code F_Rotation[4]={0x02,0x04,0x08,0x01};
unsigned char code B_Rotation[4]={0x01,0x08,0x040,0x02};
void Delay1000ms()  //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    _nop_();
    i = 43;
    j = 6;
    k = 203;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

void Delay(unsigned int i)
{
 while(--i);              
}

main()
{
 unsigned long i,j;

 while(1)
 {
    //Delay(600000); 
     Delay1000ms();
     for(j=0;j<512;j++)
     {
        for(i=0;i<4;i++)
     {
         P2=F_Rotation[i];
         Delay(200); 
      }
   }
     P2=0;
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值