步进电机控制及驱动电路的方案设计书Word文档下载推荐.docx
《步进电机控制及驱动电路的方案设计书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《步进电机控制及驱动电路的方案设计书Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
![步进电机控制及驱动电路的方案设计书Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/10/c78f7e7a-c2cb-45a8-957c-48b7d703f3dd/c78f7e7a-c2cb-45a8-957c-48b7d703f3dd1.gif)
指导教师签名:
年月日
系主任(或责任教师)签名:
1.步进电机原理.................................................2
1.1步进电机简介..............................................2
1.2步进电机原理及控制技术....................................2
1.3步进电机驱动方法.........................................2
1.4总体设计方框图............................................3
1.5设计原理分析..............................................3
1.5.1元器件介绍.......................................................3
1.5.2方案论证.........................................................5
2硬件设计......................................................6
2.1控制电路..................................................6
2.2最小系统..................................................6
2.3驱动电路..................................................7
2.4显示电路.................................................7
2.5总体电路图...............................................8
3软件设计.....................................................9
4程序编写.....................................................9
5实验心得及体会...............................................17
参考文献......................................................17
1.步进电机原理及硬件和软件设计
1.1步进电机简介
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;
同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
1.2步进电机基本原理
通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。
该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。
当定子的矢量磁场旋转一个角度。
转子也随着该磁场转一个角度。
每输入一个电脉冲,电动机转动一个角度前进一步。
它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。
改变绕组通电的顺序,电机就会反转。
所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动。
1.3步进电机驱动方法
步进电机不能直接接到工频交流或直流电源上工作,而必须使用专用的步进电动机驱动器,如下图所示。
它由脉冲发生控制单元、功率驱动单元、保护单元等组成。
图中点划线所包围的二个单元可以用微机控制来实现。
驱动单元与步进电动机直接耦合,也可理解成步进电动机微机控制器的功率接口。
1.4总体设计方案框图
1.5设计原理分析
1.5.1元器件介绍
(1)步进电机
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。
步进电机区别于其他控制电机的最大特点是:
它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
步进电机分三种:
永磁式(PM),反应式(VR)和混合式(HB),步进电机又称为脉冲电机,是工业过程控制和仪表中一种能够快速启动,反转和制动的执行元件,其功用是将电脉冲转换为相应的角位移或直线位移,由于开环下就能实现精确定位的特点,使其在工业控制领域获得了广泛应用。
步进电机的运转是由电脉冲信号控制的,其角位移量或线位移量与脉冲数成正比,每个一个脉冲,步进电机就转动一个角度或前进、倒退一步。
步进电机旋转的角度由输入的电脉冲数确定。
1四相步进电机的工作原理
该设计采用了20BY-0型步进电机,该电机为四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机转动。
当某一相绕组通电时,对应的磁极产生磁场,并与转子形成磁路,这时,如果定子和转子的小齿没有对齐,在磁场的作用下,由于磁通具有力图走磁阻最小路径的特点,则转子将转动一定的角度,使转子与定子的齿相互对齐,由此可见,错齿是促使电机旋转的原因。
2步进电机的静态指标及术语
相数:
产生不同队N、S磁场的激磁线圈对数,常用m表示。
拍数:
完成一个磁场周期性变化所需脉冲用n表示,
定位转矩:
电机在不通电的状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)。
静转矩:
电机在额定静态作业下,电机不做旋转运动时,电机转轴的锁定力矩。
此力矩是衡量电机体积的标准,与驱动电压及驱动电源等无关。
虽然静态转矩与电磁激磁匝数成正比,与定子和转子间的气隙有关。
但过分采用减小气隙,增加励磁匝数来提高静转矩是不可取的,这样会造成电机的发热及机械噪音。
3四相步进电机的脉冲分配规律
对步进电机的控制主要有分散器件组成的环形脉冲分配器、软件环形脉冲分配器、专用集成芯片环形脉冲分配器等。
本设计利用单片机进行控制,主要是利用软件进行环形脉冲分配。
四相步进电机的工作方式为四相单四拍,双四拍和四相八拍工作的方式。
各种工作方式在电源通电时的时序与波形分别如图所示。
本设计的电机工作方式为四相单四拍,根据步进电机的工作的时序和波形图,总结出其工作方式为四相单四拍时的脉冲分配规律,四相双四拍的脉冲分配规律,在每一种工作方式中,脉冲的频率越高,其转速就越快,但脉冲频率高到一定程度,步进电机跟不上频率的变化后电机会出现失步现象,所以脉冲频率一定要控制在步进电机允许的范围内。
(2)89C51单片机
89C51单片机是一种低功耗、低电压、高性能的8位单片机,它采用CMOS和高密度非易失性存储技术,而且其输出引脚和指令系统都与MCS-51兼容;
片内的FlashROM允许在系统内改编程序或用常规的非易失性编程器来编程,内部除CPU外,还包括256字节RAM,4个8位并行I/O口,5个中断源,2个中断优先级,2个16位可编程定时计数器,89C51单片机是一种功能强、灵活性高且价格合理的单片机,完全满足本系统设计需要。
1.5.2方案论证
从课程设计要求可知,该系统的输入量为速度和方向,速度应该有增减变化,通常用加减按钮控制速度,由于设置八个键盘功能,采用P1口间接八个独立按键。
系统的输出线与步进电机的绕组数有关。
这里选5线4相步进电机制。
该电机共有四相绕组,工作电压为+5V,可以个单片机共用一个电源。
步进电机的四相绕组用P1口的P1.0~P1.3控制,由于P1口驱动能力不够,因而用一片2803增加驱动能力。
用P0口控制液晶显示转动状态及速度。
2硬件设计
本设计的硬件电路只要包括控制电路、最小系统、驱动电路、显示电路四大部分。
最小系统只要是为了使单片机正常工作。
控制电路只要由开关和按键组成,由操作者根据相应的工作需要进行操作。
显示电路主要是为了显示电机的工作状态和转速。
驱动电路主要是对单片机输出的脉冲进行功率放大,从而驱动电机转动。
2.1控制电路
据系统的控制要求,控制输入部分设置了启动控制,换向控制,加速控制和减速控制按钮,分别是K1、K2、K3、K4、K5、K6、K7、K8,控制电路如下图所示。
通过K1、K2、K3选择单相、二相、一二相驱动;
通过K4、K5选择正转、反转;
通过K6、K7控制转速,K8控制系统回复初始状态或重置状态。
根据步进电机的工作原理可以知道,步进电机转速的控制主要是通过控制通入电机的脉冲频率,从而控制电机的转速。
对于单片机而言,主要的方法有:
软件延时和定时中断在此电路中电机的转速控制主要是通过定时器的中断来实现的,该电路控制电机加速度主要是通过K6、K7的断开和闭合,从而控制外部中断根据按键次数,改变速度值存储区中的数据(该数据为定时器的中断次数),这样就改变了步进电机的输出脉冲频率,从而改变了电机的转速。
2.2最小系统
单片机最小系统或者称为最小应用系统,素质用最少的元件组成的单片机可以工作的系统,对51系列单片机来说,最小系统一般应该包括:
单片机、复位电路、晶振电路。
2.3驱动电路
通过ULN2803构成驱动电路,电路图如下图所示。
通过单片机的P1.0~P1.3输出脉冲到ULN2803的1B~4B口,经信号放大后从1C~4C口分别输出到电机的A、B、C、D相。
2.4显示电路
在该步进电机的控制器中,电机可以正反转,可以加速、减速,其中电机转速的等级分为七级,为了方便知道电机的运行状态和电机的转速的等级,这里设计了电机转速和电机的工作状态的显示电路。
在显示电路中,主要是利用了单片机的P0口,采用1602液晶作显示。
第一行根据键盘控制显示“Mode:
Single+”/“Mode:
Single–”/
“Mode:
Double+”/“Mode:
Double_”/“Mode:
Mixed+”/“Mode:
Mixed-”,分别代表一相正转/一相反转/二相正转/二相反转/一二相正转/一二相反转。
第二行根据键盘控制显示“Speed:
10”,初始数字为10,数字代表速度等级,共有20级,即数字可显示从0到20,数字越小即周期越短速度越快。
2.5实物电路图
各个部分的电路图组合成失误电路图,如下图所示。
3软件设计
通过分析可以看出,实现系统功能可以采用多种方法,由于随时有可能输入加速、加速信号和方向信号,因而采用中断方式效率最高,这样总共要完成2个部分的工作才能满足课题要求,即主程序部分、定时器中断部分,其中主程序的主要功能是系统初始参数的设置及启动开关的检测,若启动开关合上则系统开始工作,反之系统停止工作;
定时器部分控制脉冲频率,它决定了步进电机各个状态确定设置。
下面分析主程序与定时器中断程序及外部中断程序。
(1)主程序设计
主程序中要完成的工作主要有系统初始值的设置、系统状态的显示以及各种开关状态的检测判断等。
其中系统初始状态的设置内容较多,该系统中,需要初始化定时器、外部中断,液晶屏。
当上电时,液晶屏第一行显示“Mode:
”,第二行显示“Speed:
”,由于未设置步进电机工作状态,步进电机未工作,且液晶未显示步进电机有关状态。
(2)定时中断设计
步进电机的状态设置由键盘的按下松开确定。
K1~K8的按下就会对数组进行赋值,通过对数组的判断确定我们所设置的工作状态。
由于我们需要实时地调节步进电机的转速,因此采用定时中断程序,每当扫描键盘时,K6、K7的按下会对数组的值进行加减,通过数组值的大小的改变控制步进电机的转动频率从而调节步进电机的转速,数字值最大为20最小为0,超出范围时数组值不可改变。
由于对每一按键定义了一种功能,当按下某些按键组合时会产生一些错误的设定,对于这种情况我们设定了K8作为初始化/复位按键,按下K8会使系统回到初始状态,这时我们可以对系统进行重新正确的设定或者转换另一种工作状态。
4程序编写
#include<
reg52.h>
#defineKeyPortP3
#defineLCDP0
sbitrs=P2^4。
//定义液晶使能控制端口
sbitrw=P2^5。
sbiten=P2^6。
sbitA1=P1^0。
//定义反向驱动端口
sbitB1=P1^1。
sbitC1=P1^2。
sbitD1=P1^3。
unsignedcharn[5]。
unsignedcharT=10,Y=0。
unsignedcharmode[]="
mode:
"
speed[]="
speed:
one[]="
Single"
two[]="
Double"
mixed[]="
Mixed"
re[]="
Reset"
er[]="
Error"
。
#defineCoil_AB1{A1=1。
B1=1。
C1=0。
D1=0。
}//对步进电机进行编码
#defineCoil_BC1{A1=0。
C1=1。
}
#defineCoil_CD1{A1=0。
B1=0。
D1=1。
#defineCoil_DA1{A1=1。
#defineCoil_A1{A1=1。
#defineCoil_B1{A1=0。
#defineCoil_C1{A1=0。
#defineCoil_D1{A1=0。
#defineCoil_OFF{A1=0。
voidDelayMs(unsignedchart)//定义延时
{
intx,y。
for(x=t。
x>
0。
x--)
for(y=110。
y>
y--)。
}
voidwrite_com(unsignedcharcom)//液晶显示状态控制程序
rs=0。
rw=0。
en=0。
LCD=com。
DelayMs(5)。
en=1。
voidwrite_date(unsignedchardate)//液晶数据显示程序
rs=1。
LCD=date。
voidinit_LCD()//液晶初始化程序
inta。
write_com(0x38)。
write_com(0x06)。
write_com(0x01)。
write_com(0x0c)。
write_com(0x80)。
for(a=0。
a<
5。
a++)
{
write_date(mode[a])。
}
write_com(0x80+0x40)。
6。
write_date(speed[a])。
voidInit_Timer0()//定时器初始化
TMOD=0x01。
TH0=0x00。
TL0=0x00。
EA=1。
ET0=1。
TR0=1。
PT0=1。
voiddisplay()//显示程序
chara,b,c,d,e。
if(n[0]==1&
&
n[1]==0&
n[2]==0)
write_com(0x80+6)。
for(a=0。
{
write_date(one[a])。
}
if(n[0]==0&
n[1]==1&
write_date(two[a])。
n[2]==1)
write_date(mixed[a])。
if(n[3]==1&
n[4]==0)
write_com(0x80+13)。
write_date('
+'
)。
if(n[3]==0&
n[4]==1)
-'
b=T/10。
c=T%10。
write_com(0x80+0x40+6)。
write_date(0x30+b)。
write_com(0x80+0x40+7)。
write_date(0x30+c)。
d=n[0]+n[1]+n[2]。
e=n[3]+n[4]。
if(d>
1||e==2)
init_LCD()。
write_date(er[a])。
unsignedcharKeyScan(void)//键盘扫面
unsignedcharkeyvalue。
if(KeyPort!
=0xff)
DelayMs(10)。
keyvalue=KeyPort。
while(KeyPort!
=0xff)。
switch(keyvalue)
{
case0xfe:
return1。
break。
case0xfd:
return2。
case0xfb:
return3。
case0xf7:
return4。
case0xef:
return5。
case0xdf:
return6。
case0xbf:
return7。
case0x7f:
return8。
default:
return0。
}
return0。
voiddanxiang_0()//步进电机单相正转
{
Coil_A1
DelayMs(T)。
Coil_B1
Coil_C1
Coil_D1
voiddanxiang_1()//步进电机单相发转
{
voiderxiang_0()//步进电机二相正转
Coil_AB1
Coil_BC1
Coil_CD1
Coil_DA1
voiderxiang_1()//步进电机二相反转
voidyi_er_0()//步进电机一二相正转
voidyi_er_1()//步进电机一二相反转
voidrun()//步进电机控制程序
n[3]==1&
danxiang_0()。
n[3]==0&
danxiang_1()。
if(n[1]==1&
erxiang_0()。
erxiang_1()。
if(n[2]==1&
yi_er_0()。
n[3