野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16107|回复: 3

51单片机使用ULN2003驱动步进电机28BYJ48

[复制链接]
发表于 2017-3-18 20:00:27 | 显示全部楼层 |阅读模式
    28YJ48步进电机,48的含义就是驱动方式为4相8拍。步距角度为5.625/64,减速比为1:64。由此可知当内部转子转了5.625度,则外部输出轴转(5.628/64)度。步进电机的工作方式是给一个脉冲转一步,所以要想让外部输出轴旋转360度,则需要360/(5.625/64)=4096个脉冲。下面来介绍如何驱动,我直接用现成的ULN2003驱动模块,一端接单片机的IO口,另一端接步进电机的线(不用担心线会接错,因为有防反插设计),然后是供电端,我是直接用开发板的5V供电,如果步进电机的驱动电压比较高,那就需要外接电源,且需要共地。身为新手的我,只想整理下自己所学,大神不喜勿喷!!,下面是51的程序:虽然我精确的给了4096个脉冲,可外部输出并没精确的转了一周,差了20度左右,附件里的压缩包有视频,不知道哪位同志有没有方法可以改进,欢迎交流讨论。
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char

#define motor P1

uint i,j;
uint N=4096;        //4096个脉冲

uchar code table1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};        //顺时针旋转
uchar code table2[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};        //逆时针旋转

void main()
{
   TMOD=0x01; //设置定时器0为方式1
   TH0=0xf8;  
   TL0=0x30;  //每2ms进入定时器中断
   EA=1;         //开总中断
   ET0=1;         //开定时器中断

   motor=table1[0];        //步进电机定位
   TR0=1;                //开启定时器0
   while(1);

}

void ser() interrupt 1
{
   TH0=0xf8;         //定时器重装
   TL0=0x30;

   j++;
   if(j>=8)
     j=0;
   motor=table1[j];

   N--;
   if(N==0)
     {
           TR0=0;
           motor=0;
         }

}

28BYJ48

28BYJ48

ULN2003驱动模块

ULN2003驱动模块

步进电机通电顺序

步进电机通电顺序

接线图

接线图
QQ图片20170318194300.png

wx_camera_1489390847370.rar

1.99 MB, 下载次数: 389

回复

使用道具 举报

发表于 2017-3-20 10:37:25 | 显示全部楼层
谢谢分享                  
回复 支持 反对

使用道具 举报

发表于 2017-5-15 18:01:32 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2019-5-17 13:03:52 | 显示全部楼层
请问线路有具体的接法可以学习一下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-5 00:34 , Processed in 0.037184 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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