步进电机驱动实验(89C51 + KEIL + Proteus)
当时做的一个简单的步进电机驱动实验,仅供参考。
文章目录
- 第1章 实验目的
- 1.2 实验原理
- 1.2.1 步进电机原理
- 1.2.2 步进电机分类
- 1.2.3 步进电机励磁方式
- 1.2.4 驱动问题
- 第2章 实验设计
- 2.1 方案设计
- 2.2 程序设计
- 第3章 实验结果
第1章 实验目的
本章节主要对步进电机驱动实验的目的进行介绍,主要从实验内容和实验原理进行展开介绍。
1.1 实验内容
(1) 了解步进电机原理;
(2) 采用任意mcu设计步进电机驱动电路;
(3) 编制步进电机驱动(正反转)程序;
(4) 撰写报告。
1.2 实验原理
本章主要对步进电机驱动实验的原理进行介绍。
1.2.1 步进电机原理
步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件,又称为脉冲电机。在驱动电源的作用下,步进电机受到脉冲的控制,其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比。步进电机每接收一个电脉冲,转子就转过一个相应的角度(步距角)。改变通电顺序可改变步进电动机的旋转方向;改变通电频率可改变步进电动机的转速。因此,通过控制输入电脉冲的数目、频率及电动机绕组的通电顺序就可以获得所需要的转角、转速及转向,利用单片机就可以很容易实现步进电机的开环数字控制。
传统的步进电机控制方法是由触发器产生控制脉冲来进行控制的,但此种控制方法工作方式单一而且难于实现人机交互,当步进电机的参数发生变化时,需要重新进行控制器的设计。因此适合于单片机控制,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。
步进电机内部实际产生了一个可以旋转的磁场,如图所示,当旋转磁场依次切换时,转子(rotor)就会随之转动相应的角度。当磁场旋转过快或者转子上所带负载的转动惯量太大时,转子无法跟上步伐,就会造成失步。
图1 步进电机示意图
1.2.2 步进电机分类
步进电机的磁极数量规格和接线规格很多,为简化问题,我们这里就先只以四相步进电机为例进行讨论。所谓四相,就是说电机内部有四对磁极,此外还有一个公共端(COM)接电源,ABCD是四线的接头。而四相电机可以向外引出六条线(两条COM共同接入Vcc),即GND和ABCD,也可以引出五条线,如图所示,所以有六线四相制和五线四相制。
(a)六线四相制 (b) 五线四相制
图2 四相步进电机接线规格
六线四相制和五线四相制控制方法类似。
1.2.3 步进电机励磁方式
• 一相励磁方式
下表中,1代表高电平,0代表低电平,我们以最简单的一相励磁方式来驱动步进电机。
表1 一相励磁方式
电机在每个瞬间只有一个线圈导通,消耗电力小,但在切换瞬间没有任何的电磁作用在转子上,容易造成振动,也容易因为惯性而失步。
• 二相励磁方式
这种方式输出的转矩较大且振动较少,切换过程中至少有一个线圈通电作用于转子,使得输出的转矩较大,振动较小,也比一相励磁较为平稳,不易失步。
• 一相二相励磁交替进行
综合上述两种驱动信号,下面提出一相励磁和二相励磁交替进行的方式,每传送一个励磁信号,步进电机前进半个歩距角。其特点是分标率高,运转更加平滑。
表3 一相二相励磁交替进行方式
三种驱动方式的时序波形图:
图3 时序波形图
1.2.4 驱动问题
因为89C51单片机的数字I/O口通过的电流很小,所以89C51单片机的端口是不能直接驱动步进电机的。因此,可以使用晶体管进行放大(或使用专门的集成电路)。常用的方法有三种:
直接利用晶体管来驱动,这需要对电机和晶体管的详细参数有一定了解,才能选择恰当的参数去匹配他们。此外,还必须使用二极管来处理当电机内部线圈产生感应电动势逆向流入晶体管而对晶体管造成损害。
使用诸如ULN2003和L298N 这样的激励器,它实际上是内部集成好了放大功能的集成电路芯片,此外也无需额外添加二极管,因为它已经内置了。
使用光耦,在驱动芯片或者晶体管的前端再加入光耦合器,以加强隔离步进电机的反电动势,以免损害单片机。
图4 加入光耦合器的电路使用L293D这样的H桥的方式来驱动步进电机。
图5 使用L293D驱动步进电机
第2章 实验设计
本章节对步进电机驱动实验的软件部分进行设计。
2.1 方案设计
将89C51单片机的四个输出端口用杜邦线分别链接驱动板的IN1,IN2,IN3,IN4,再用外置电源连接驱动板的5-12+接口,并把电源和单片机的地(GND)与驱动板的(-)共线。
电路连接如下图所示:
图6 步进电机实验电路设计方案
在电路中,步进电机采用了六线四相制连接。
2.2 程序设计
该程序中,步进电机励磁方式采用一相二相励磁交替进行,程序实现了控制步进电机的正反转功能。
电机相序如表4所示:
表4 程序电机相序表
程序逻辑流程图如下:
图7 电机驱动程序
电机驱动实验程序代码如下:
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
#define out P2 // p2输出
sbit pos=P0^0; // 按键0控制正转
sbit neg=P0^1; // 按键1控制反转
void delayms(uint); // 延时函数
/*
采用一相二相励磁交替进行
相序:0x02 000000100x06 000001100x04 000001000x0c 000011000x08 000010000x09 000010010x01 000000010x03 00000011
*/uchar code turn[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};
void main(void)
{ uchar i; // 默认值为0out=0x03; // 初始化 00000011while(1) { if(!pos) // 正转按键按下 pos为0{ i = i < 8 ? i+1 : 0; // 顺序取出所有相位out=turn[i]; delayms(50); // 延时,控制转速} else if(!neg) // 正转按钮松开,反转按钮按下,pos为1,neg为0{ i = i > 0 ? i-1 : 7; // 反序取出所有的相位out=turn[i]; delayms(50); // 延时,控制转速} }
}
/* 延时函数通过循环消耗时间
*/
void delayms(uint j)
{ uchar i; for (;j>0;j--) { i=250; while(--i); i=249; while(--i); }
}
第3章 实验结果
仿真及结果展示:
本实验通过KEIL把源代码编译成HEX文件,然后将HEX文件直接烧写进89C51芯片,然后使用Proteus电路仿真软件进行实验仿真。
仿真过程:
- 通过KEIL把源代码编译成HEX文件
打开KEIL后,新建一个项目,将之前设计的程序写入,在写好文件后,点击工具栏上的红框标志,选择Output(输出),把Create HEX File 勾上,点击OK,如图8所示
图8 KEIL设置
然后在工具栏上点击编译按钮,然后就生成了HEX文件。
2. 在Proteus中绘制步进电机实验电路。
仿真电路如下图所示:
图9 步进电机仿真电路
- 将HEX文件直接烧写进89C51芯片
图10将HEX文件直接烧写进89C51芯片
结果展示:
将HEX文件烧写进89C51芯片后,按下仿真启动按钮,开始仿真。如图11所示。
图11 步进电机仿真运行图
此时,按下D1开关,即可实现电机的正转,按下D2开关,即可实现电机的反转。
步进电机驱动实验(89C51 + KEIL + Proteus)相关推荐
- 【51单片机】矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤
[51单片机]矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤 一.环境 二.硬件部分 1. Proteus新建工程 2. 添加元件 3.连接线路 4.硬件效果 三.软件部分 1 ...
- 【Proteus仿真】51单片机+按键控制步进电机驱动+LCD1602显示
[Proteus仿真]51单片机+按键控制步进电机驱动+LCD1602显示 Proteus仿真 在Proteus当中,步进电机选取的不同,接线的顺序不同,为了避免在接线出错,将里面的两种步进电机都选择 ...
- 单片机四线步进电机驱动 PROTEUS 和51单片机教程(附仿真文件+源代码)
单片机四线步进电机驱动 程序功能: 当按下SW1时步进电机正转,按下SW2后步进电机反转,并可以根据源码任意调节旋转速度和每一个脉冲旋转角度 程序参考源代码如下: /C语言程序:/ #include ...
- arduino步进电机程序库_Arduino基础入门篇27—步进电机驱动库的使用
本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...
- arduino步进电机程序库_Arduino入门教程15(步进电机驱动库的使用):Arduino Uno R3+ULN2003+步进电机 使用Stepper驱动库,控制步进电机转动角度...
本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...
- NX300 步进电机驱动电路图
NX300 步进电机驱动电路图 最近工作原因,一直很忙,过完年后就没有什么时间玩这个控制程序了,学习需要持之以恒,这些革命工作还得继续!上次说要把拆下的步进电机驱动电路专门设计,只有参考原来的打印机控 ...
- STC51单片机35——五线四相步进电机驱动测试程序(2个步进电机)
/*-------------------------------------------------------------------------------- MCU: ...
- 基于单片机的步进电机驱动电路设计
基于单片机的步进电机驱动电路设计 步进电机在控制系统中具有广泛的应用.它可以把脉冲信号转换成角位移,并且可用作电磁制动轮.电磁差分器.或角位移发生器等. 有时从一些旧设备上拆下的步进电机(这种电机一般 ...
- 基于51单片机的步进电机驱动,亲测无误
文章目录 前言 一.我们该如何实现电机驱动? 二.驱动实现 1.硬件准备 2.软件编写 3.实物 总结 前言 这一次要分享的项目是最近接单做的一个小玩意儿,基于51单片机的步进电机驱动.最近积压了两个 ...
- a4988 脉宽要求_基于STM32的微型步进电机驱动控制器设计
基于STM32的微型步进电机驱动控制器设计 摘 要: 设计了一种微型步进电机驱动控制器,通过上位机界面修改步进电机转速.旋转角度.细分系数.该设计以STM32F103T8U6作为主控制器,以A4988 ...
最新文章
- 久未更 ~ 一之 —— 关于ToolBar
- k8s 带你一步步 创建用户账号(User Account)
- BZOJ3775 : 点和直线
- Linux Socket TCP/IP通信
- storm hook的使用
- 什么是SAP Spartacus schematics
- iPhone 12 mini被“阉割”到惨不忍睹,5G都没了
- sqlite+php+函数大全,Sqlite 常用函数 推荐
- python列表-使用
- 从 Windows 切换到 Mac,这些不能错过的 Tips
- 如何进行各种码制数据之间转换
- 论文用impact、effect、influence 什么区别
- php 真太阳时间修正,真太阳时查询表(建议收藏)
- Cadence导入AD的pcb文件中元件的封装
- 电压模块THM30-2421WI
- 超低功耗 无线测温模块 无线测温系统, 待机数年无需更换电池
- 用记事本编写ajax,用记事本轻松制作ajax+xml在线聊天室
- html汉字间的间距,div字间距-div内文字之间间距设置方法
- 《巴黎评论 I》启示录连载之 - 杜鲁门.卡波蒂
- 【机器人学、机器视觉与控制】用工具箱确定D-H参数