找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 713|回复: 9
打印 上一主题 下一主题
收起左侧

我的单片机步进电机设计 含源程序,模拟电路图,Proteus仿真图

[复制链接]
跳转到指定楼层
楼主
这是我最近做的一个步进电机设计
使用的单片机是AT89C51
需要用到软件Keil5,Proteus8.9
是根据我们的设计要求做的
附件里包含步进电机的单片机源代码,以及Proteus模拟电路图,设计文件
对该作品的介绍可能不是很严谨,还请大家多包涵
如果该设计存在学术性错误,还请为我指正!
以下是设计内容,希望它可以帮到你:

所涉及到的知识:

一、步进电机是什么?

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电
机来控制变的非常的简单。

二、步进电机的主要特性有哪些?

1.  步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。

2.  本次使用的步进电机是 28BYJ48 5V 驱动的 4 相 5 线的步进电机,而且是减速步进电机,减速比为 1:64,步进角为 5.625/64 度。如果需要转动 1 圈,那么需要 360/5.625*64=4096 个脉冲信号。

3.  步进电机具有瞬间启动和急速停止的优越特性。

4.  改变脉冲的顺序,可以方便的改变转动的方向。


本设计将通过实现一个基于单片机的可以通过按键精确控制电机正反转,加减速,开始和停止控制电路来说明单片机如何工作

具体操作步骤如下:

第一步:Keil编程(此处省略了文件创建步骤)

第一部分   这一串代码可以控制电机的转向

#include<reg51.h>
#define uchar unsigned char
bit flag;
uchar  a= 1,t = 100;
uchar code tab1[] = {0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code tab2[] = {0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
sfr   P1M1   = 0X91;
sfr   P1M0   = 0X92;
sfr  P2M1   = 0X95;
sfr  P2M0   = 0X96;

第二部分  这一串代码可以实现对电机的接近毫秒级延时的控制,原理是通过嵌套循环消耗 CPU 时间实现延时

void delay(uchar ms)
{ uchar j;
while(ms--)
for(j=0;j<100;j++);}

第三部分   这一串代码可以实现电机的转向切换、调速、启停控制

void keyscan()
{   P1M1 = 0;
    P2M1 = 0;
P1M0 = 0XFF;
P2M0 = 0XFF;
if(P2!=0xff)
  {  delay(5);
  if(P2!=0xff)
  {  switch(P2)
   {
    case 0xfe:a=1;break;//正转
    case 0xfd:a=2;break;//反转
    case 0xfb:if(t>50)t=t-10;else t=50;break;//加速
    case 0xf7:if(t<150)t=t+10;else t=150;break;//减速
    case 0xef:flag=1;break;//开始
    case 0xdf:flag=0;break;//停止
   }
   while(P2!=0xff);
  }
}
}

第四部分   这一段代码可以通过定时器 0 实现定时中断

void time0_init() //定时器T0初始化
{
TMOD=0x01;   //设置定时器0工作方式1
TH0=(65536-50000)/256;//定时50ms取高八位
TL0=(65536-50000)%256; //取低八位
ET0=1; //开定时器0中断使能
EA=1;  //开总中断使能
TR0=1; //开启中断
}
void time0() interrupt 1 //定时器T0入口函数
{
TH0=(65536-50000)/256; //定时50ms重新赋初值
TL0=(65536-50000)%256;
keyscan();
}

第五部分   这一段是主函数,根据flag(启停标志)和a(转向标志)控制电机运行

void main()
{   uchar i;
     time0_init();
while(1)
{  if(flag)
  {  if(a==1)
   { for(i=0;i<8;i++)
    {  P1=tab1;
     delay(t);}
   }
   if(a==2)
   { for(i=0;i<8;i++)
    {   P1=tab2;
     delay(t);
    }
   }
  }
  else
   P1=0x00;
}  
}

Keil5内的代码如下图







第二步:使用Proteus仿真电路(此处省略了文件创建步骤)


放置元件AT89C51(单片机)与L298(电机驱动芯片)
将单片机的P1 口(P1.0~P1.5)连接 L298 的IN1~IN4和ENA/ENB(使能端),用于输出步进电机的相序控制信号和使能信号
将单片机的P2 口(P2.0~P2.5)连接 6 个按键(正转、反转、加速、减速、启动、停止),用于接收用户操作指令
XTAL1/XTAL2 预留晶振接口(外接晶振和电容构成时钟电路)
RST 为复位引脚(外接复位电路)

L298 电机驱动芯片的IN1~IN4接口连接单片机 P1 口,接收相序控制信号;ENA/ENB连接单片机 P1 口,控制驱动模块的使能(可用于调速)
VCC接 5V 逻辑电源,VS接电机驱动电源(需根据电机功率选择,通常≥12V);OUT1~OUT4连接步进电机的 4 个绕组,输出驱动电流。
SENSA/SENSB为电流检测引脚(本电路中未使用,直接接地),可用于过流保护。

电机的 4 个绕组对应连接 L298 的OUT1~OUT4,由驱动芯片输出的相序电流驱动转动。




Proteus内的电路连接情况如下图




实验模型搭建完成,接下来进行第三步



第三步:在Proteus内进行模拟实验


点击左下角的按键启动模拟,点击各个按钮,观察电机的旋转情况



点击“启动”,电机开始旋转



点击“加速”,电机转速变快



点击“反转”,电机朝反方向转动



点击“停止”,电机停转



实验成功

由上述结果证明:

步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度转动。转动的速度和脉冲的频率成正比,而且改变脉冲的顺序,可以改变电机转动的方向。

本设计到此结束,谢谢您的观看!
仿真程序下载: 步进电机.zip (939.21 KB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1161211 发表于 2025-12-10 09:06 | 只看该作者
T0定时器初值是不是搞反了,以12M主频为例,如果定时50ms,应该是65536-15536吧?
回复

使用道具 举报

板凳
ID:1163351 发表于 2025-12-10 12:24 | 只看该作者
发表于 2025-12-10 09:06
T0定时器初值是不是搞反了,如果定时50ms,应该是65536-15536吧?

我用人工智能搜了一下,它告诉我应该是65536-50000,说是“需要计数 50000 次才能达到 50ms 定时”这样
回复

使用道具 举报

地板
ID:1161211 发表于 2025-12-10 19:58 | 只看该作者
RoLain 发表于 2025-12-10 12:24
我用人工智能搜了一下,它告诉我应该是65536-50000,说是“需要计数 50000 次才能达到 50ms 定时”这样

你是对的,不好意思我搞错了。
回复

使用道具 举报

5#
ID:1163351 发表于 2025-12-11 10:34 | 只看该作者
kpffq 发表于 2025-12-10 19:58
你是对的,不好意思我搞错了。

没事,谢谢你能提出问题
回复

使用道具 举报

6#
ID:876947 发表于 2025-12-11 11:54 | 只看该作者
能运行吗?

回复

使用道具 举报

7#
ID:1163351 发表于 2025-12-11 15:46 | 只看该作者

我在Proteus里成功运行了,是遇到什么问题了吗?
回复

使用道具 举报

8#
ID:876947 发表于 2025-12-12 10:34 | 只看该作者
RoLain 发表于 2025-12-11 15:46
我在Proteus里成功运行了,是遇到什么问题了吗?

我做了实验速度可调但快不了
回复

使用道具 举报

9#
ID:1163351 发表于 2025-12-13 14:19 | 只看该作者
白水大虾2016 发表于 2025-12-12 10:34
我做了实验速度可调但快不了

按加速键也转不了更快吗?还请详细说明
回复

使用道具 举报

10#
ID:876947 发表于 2025-12-24 12:08 | 只看该作者
可以变快,但不能很快
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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