步进电机控制系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

步进电机控制系统设计 Last revision date: 13 December 2020.
电气及自动化课程设计报告题目步进电机控制系统设计
课程电机与拖动
学生姓名:
学生学号:
年级: 2014级
专业:自动化
班级: 2班
指导教师:
机械与电气工程学院制
2017年3月
目录
步进电机控制系统设计
1设计的任务与要求
课程设计的任务
步进电机是用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机,它突出的优点是可以在宽广的频率范围内通过改变脉冲频率来实现调速,快速启停,正反转控制及制动等,并且用其组成的开环系统既简单、廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制设备等众多领域有着极其广泛的应用。

随着微电子和计算机技术的发展,步进电机的需求与日俱增,研制步进电机驱动器及其控制系统具有十分重要的意义。

课程设计的要求
本次实验是基于单片机的控制系统设计,用汇编语言和C语言编写出电机正转、反转、调速、停止程序,通过单片机、电机的驱动芯片ULN2001以及相应的按键实现以上功能,并且步进电机的工作状态要用LCD液晶显示器显示出来。

本次课程设计介绍步进电机以及单片机工作原理、该系统的硬件电路、程序组成,同时对软、硬件进行了调试。

该设计具有思路明确、可靠性高、稳定性强等特点,通过调试实现了上述功能。

2 步进电机控制系统设计方案制定
步进电机工作的原理
步进电机的工作原理就是步进转动,其功能是将脉冲电信号变换为相应的角位移或者是直线位移,就是给一个脉冲信号,电动机转动一个角度或是前进一步。

步进电机的角位移量与脉冲数成正比,它的转速与脉冲频率(f)成正比,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化影响,即给电机加一个脉冲信号,电机则转过一个歩距角。

步进电机不能直接接到交直流电源上工作,而必须使用专用设备——步进电机驱动器。

典型的步进电机驱动系统是由步进电机控制器、步进电机驱动器和步进电机本体三部分组成,步进电机控制器发出步进脉冲和方向信号。

每发一个脉冲,步进电机驱动器驱动步进电机转子旋转一个歩距角,即步进一步。

步进电机转速的高低、升速或降速、启动或停止都完全取决于脉冲的有无或频
率的高低。

控制器的方向信号决定步进电机的顺时针或者逆时针旋转。

通常,步进电机驱动器由逻辑控制电路、功率驱动电路、保护电路和电源组成。

步进电机驱动器一旦接收到来自控制器方向的信号和步进脉冲,控制电路就按预先设定的电机通电方式产生步进电机各相励磁绕组导通或截止信号。

控制电路输出的信号功率很低,不能提供步进电机所需的输出功率,必须进行功率放大,这就是步进电机驱动器的功率驱动部分。

功率驱动电路向步进电机控制绕组输入电流,使其励磁形成空间旋转磁场,驱动转子运动。

保护电路在出现短路、过载、过热等故障时迅速停止驱动器和电机的运行。

如图1所示的步进电机为一四相步进电机,采用单极性直流电源供电。

只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。

图1是该四项反应式步进电机工作原理图。

图1 四项步进电机步进示意图
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。

当开关SC接通电源,SB、SA、SD断开,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。

而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。

以此类推,A、B、C、D四相绕组轮流供电,则转子就会沿着A、B、C、D反向转动。

单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2所示。

a.单四拍
b.双四拍
c.八拍
图2 步进电机工作时序波形图
单片机的原理
(1)单片机原理概述
单片机是把微型计算机主要部分都集成在一块芯片上的单芯片微型计算机。

图3中表示单片机的典型结构。

由于单片机的高度集成化,缩短了系统内的信号传送距离,优化了系统配置,大大地提高了系统的可靠性及运行速度,
同时它的指令系统又很适合于工业控制的要求,所以单片机在工业过程及设备控制中得到了广泛的应用。

图3 典型单片机结构
(2)AT89C51简介
AT89C51含E2PROM电可编闪速存储器。

有两级或三级程序存储器保密系统,防止E2PROM中的程序被非法复制。

不可用紫外线擦除,调高了编程效率。

程序存储器E2PROM容量可达20K字节。

AT89C51的主要参数如表1所示。

表1 AT89C51的主要参数表
型号定时器I/O串行口中断速度其他特点
89C512321624低电压
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,用工业标准的MCS—51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

其引脚如图4所示。

图4 单片机的引脚排列
3 仿真软件介绍
Proteus软件介绍
Proteus软件是英国Labcebter electronics公司出版的EDA工具软件。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

Proteus是世界上着名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。

在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。

Keil-uvision4软件介绍
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。

运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。

C51工具包的整体结构,其中Vision与Ishell 分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及A51编译器编译生成目标文件
(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

4 步进电机控制系统电路仿真设计
驱动部分
如图5所示,此电路是步进电机的驱动部分,选用的是ULN2001芯片来驱动的,ULN2001系列是一款高耐压,大电流达林顿管驱动器,包含7个NPN达林顿管。

图5 驱动部分
时钟部分
时钟电路它控制计算机的工作节奏,可以通过提高时钟频率来提高CPU的速度,本次设计采用的晶振为12MHz。

如图6所示。

图6 时钟部分
复位部分
根据应用的要求,复位操作通常有两种基本形式:上电位复位和上电或者开关复位。

本次设计使用上电复位。

如图7所示。

图7 复位部分
基本电路的最后一个部分是存储器的设置,如果31引脚接电源,则采用
内部存储器,如果31脚接地,则采用外部存储器。

将时钟电路、复位电路连接
并设置好存储器,就构成了最小系统。

这是做任何单片机设计都必须有的部
分。

状态指示部分
状态指示用P0口控制LCD的显示,STA显示的是转动的速度,RUN显示的
是机器是否运转,用它来表示步进电机所处的状态。

如图8所示。

图8 状态指示部分
按键部分
本次设计选用的是单片机的P2口来控制信号的输入,所以把按键开关和P2
口连接起来,当按下开关KEY1时,相当于给口一个低电平,开始转动;当按下
开关KEY2时,相当于给口一个低电平,步进电机反转,相反则正转;当按下开
关KEY3时,相当于给口一个低电平,调节转速。

如图9所示。

图9 按键部分
系统程序框图
系统分为电机正转、电机反转、开始与转速的几部分组成,其主程序框图如
图10所示。

图10 系统程序图
系统整图
系统整图如图11所示,本系统采用外部中断方式,P2口为信号的输入部
分,P0口为发光LCD显示部分,P1口作为电机的驱动部分。

图11 系统整图
元器件清单
根据以上原理图,本次设计所需要的一些元器件如下表:
表2 元器件列表
序号标号器件名称数值
1C1、C2电容30PF、30PF
2R1、R2、R3、R4电阻1K、10K、10K、10K
3X1晶振12MHz
4C3电解电容30PF
5LCD1液晶显示屏
6RP1排阻
7按钮
8步进电机
5 步进电机控制系统电路仿真设计方案的仿真实现
(1)速度1正转。

运行程序,闭合开始按钮,断开正/反转按钮,速度按钮为速度1。

LED1液晶显示屏显示数据如下:STA:Z SPD:1UN RUN:ON 步进电机显示转速为+127。

如图12所示。

图12 速度1正转
(2)速度1反转。

运行程序,闭合开始按钮,闭合正/反转按钮,速度按钮为速度1。

LED1液晶显示屏显示数据如下:STA:F SPD:1UN RUN:ON 步进电机显示转速—149。

如图13所示。

图13 速度1反转
(3)速度1正转停止。

运行程序,断开开始按钮,断开正/反转按钮,速度按钮为速度1。

LED1液晶显示屏显示数据如下:STA:Z SPD:1UN RUN:OFF 步进电机显示转速+138。

如图14所示。

图14 速度1正转停止
(4)速度1反转停止。

运行程序,断开开始按钮,闭合正/反转按钮,速度按钮为速度1。

LED1液晶显示屏显示数据如下:STA:F SPD:1UN RUN:OFF 步进电机显示转速—117。

如图15所示。

图15 速度1反转停止
(5)速度2正转。

运行程序,闭合开始按钮,断开正/反转按钮,速度按钮为速度2。

LED1液晶显示屏显示数据如下:STA:Z SPD:2UN RUN:ON 步进电机显示转速为+205。

如图16所示。

图16 速度2正转
(6)速度2反转。

运行程序,闭合开始按钮,闭合正/反转按钮,速度按钮为速度2。

LED1液晶显示屏显示数据如下:STA:F SPD:2UN RUN:ON 步进电机显示转速为—223。

如图17所示。

图17 速度2反转
(7)速度2正转停止。

运行程序,断开开始按钮,断开正/反转按钮,速度按钮为速度1。

LED1液晶显示屏显示数据如下:STA:Z SPD:2UN RUN:OFF 步进电机显示转速为+221。

如图18所示。

图18 速度2正转停止
(8)速度2反转停止。

运行程序,断开开始按钮,闭合正/反转按钮,速度按钮为速度2。

LED1液晶显示屏显示数据如下:STA:F SPD:2UN RUN:OFF 步进电机显示转速为—241。

如图19所示。

图19 速度2反转停止
(9)速度3正转。

运行程序,闭合开始按钮,断开正/反转按钮,速度按钮为速度3。

LED1液晶显示屏显示数据如下:STA:Z SPD:3UN RUN:ON 步进电机显示转速为+307。

如图20所示。

图20 速度3正转
(10)速度3反转。

运行程序,闭合开始按钮,闭合正/反转按钮,速度按钮为速度3。

LED1液晶显示屏显示数据如下:STA:F SPD:3UN RUN:ON 步进电机显示转速为—332。

如图21所示。

图21 速度3反转
(11)速度3正转停止。

运行程序,断开开始按钮,断开正/反转按钮,速度按钮为速度3。

LED1液晶显示屏显示数据如下:STA:Z SPD:3UN RUN:OFF 步进电机显示转速为+315。

如图22所示。

图22 速度3正转停止
(12)速度3反转停止。

运行程序,断开开始按钮,闭合正/反转按钮,速度按钮为速度3。

LED1液晶显示屏显示数据如下:STA:F SPD:3UN RUN:OFF 步进电机显示转速为—346。

如图23所示。

图23 速度3反转停
6.总结
本次步进电机控制系统课程设计采用单片机为控制核心,利用其强大的功能,把按键电路和LCD显示电路,电机驱动电路有机的结合起来,组成一个操作方便,交互性强的简单系统。

通过系统的设计实现了预期的设计目标。

完成了整个硬件设计和软件编程,能通过按键电路控制步进电机的转速控制,能实现启动、正转、反转、速度控制;通过编程实现了通过单片机能输出四相八拍的脉冲控制序列。

驱动电路能提供12V,的驱动信号;整个电机的转速,转动
方向等都能通过LCD管显示出来。

在本设计中作为电机正常工作比较重要的电机驱动模块,本设计中采用驱动芯片ULN2001来实现的,其特点是成本低,可靠性高,出现问题容易维护,实现相对容易等特点。

在电机工作模式上本设计实现了四相八拍的脉冲控制方式。

7 参考文献
[1]张友德.单片机微型机原理、应用与实验[M] .上海:复旦大学出版社,2005年:85-92.
[2]李夙.异步电机直接转矩控制[M]. 北京:机械工业出版社,1998年:56-78.
[3]王鸿钰.步进电机控制入门[M].上海:同济大学出版社,1990年:88-94.
[4]王秀和.永磁电机[M].北京:中国电力出版社,2007:119-136.
[5]房玉明,杭柏林.基于单片机的步进电机开环控制系统[M]. 北京:电子工业出版社,2010年:156-161.
[6]吴玉香,李艳,刘华,毛宗源.电机及拖动. 北京:化学工业出版社,2013
年:117-125.
附录:
C程序:
#include""
#include""
#include""
#define busy 0x80
#define uchar unsigned char
#define unit unsigned int
sbit RS=P2^3;
sbit RW=P2^4;
sbit E=P2^5;
sbit KEY1=P2^0;
sbit KEY2=P2^1;
sbit KEY3=P2^2;
uchar code tab[8]={0x02,0x06,0x04,0x0C,0x08,0x09,0x01,0x03}; uchar temp;
void delay(uchar k)
{
unit i,j;
for(i=0;i<k;i++)
{
for(j=0;j<60;j++)
{;}
}
}
void test_1602busy()
{
P0=0xFF;
E=1;
RS=0;
RW=1;
_nop_();
_nop_();
while(P0&busy)
{
E=0;
_nop_();
E=1;
_nop_();
}
E=0;
}
void write_1602Command(uchar co) {
test_1602busy();
RS=0;
RW=0;
E=0;
_nop_();
P0=co;
_nop_();
E=1;
_nop_();
E=0;
}
void write_1602Data(uchar Data) {
test_1602busy();
P0=Data;
RS=1;
RW=0;
E=1;
_nop_();
E=0;
}
void init_1602(void)
{
write_1602Command(0x38);
delay(5);
write_1602Command(0x01);
delay(5);
write_1602Command(0x06);
delay(5);
write_1602Command(0x0F);
delay(5);
write_1602Command(0x0C);
}
void DisplayOneChar(uchar X, uchar Y, uchar DData) {
Y&=1;
X&=15;
if(Y)X|=0x40;
X|=0x80;
write_1602Command(X);
write_1602Data(DData);
}
void display_1602(uchar *DData,X,Y)
{
uchar ListLength=0;
Y&=0x01;
X&=0x0F;
while(X<16)
{
DisplayOneChar(X,Y,DData[ListLength]) ;
ListLength++;
X++;
}
}
void main()
{
uchar i=0;
uchar delay_v=100;
uchar flag=0;
P1=0xFF;
P2=0xFF;
init_1602();
display_1602("STA: SPD: ",0,0);
display_1602("RUN: ",0,1);
while(1)
{
if(KEY2==1)DisplayOneChar(4,0,'Z');
else DisplayOneChar(4,0,'F');
if(KEY3==0)
{
i++;
i=i%3;
while(KEY3==0)
{;}
}
switch(i)
{
case 0:delay_v=100;DisplayOneChar(13,0,'1');break; case 1:delay_v=75;DisplayOneChar(13,0,'2');break; case 2:delay_v=100;DisplayOneChar(13,0,'3');break;
}
if(KEY1==0)
{
display_1602(" RUN:ON ",0,1); if(flag==0)
{
if(KEY2==1)
{ temp=0;
P1=tab[temp];
flag=1;
delay(delay_v);
}
if(KEY2==0)
{ temp=6;
P1=tab[temp];
flag=1;
delay(delay_v);
}
}
if(KEY2==1)
{ temp++;
if(temp==8)
{temp=0;}
P1=tab[temp];
delay(delay_v);
}
if(KEY2==0)
{ temp--;
if(temp==0xFF)
{temp=7;}
P1=tab[temp];
delay(delay_v);
}
}
else display_1602(" RUN:off ",0,1); }
}。

相关文档
最新文档