两相步进电机转速课程设计Word格式.docx
《两相步进电机转速课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《两相步进电机转速课程设计Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
2.1两相步进电机结构
图2.1两相步进电机结构图
电动机轴向结构如图2.1所示。
转子被分为完全对称的两段,一段转子的磁力线沿转子表面呈放射形进入定子铁心,称为N极转子;
另一段转子的磁力线经过定子铁心沿定子表面穿过气隙回归到转子中去,称为S极转子。
图中虚线闭和回路为磁力线的行走路线。
相应地定子也被分为两段,其上装有A、B两相对称绕组.同时,沿转子轴在两段转子中间安装一块永磁铁,形成转子的N、S极性。
从轴向看过去,两段转子齿中心线彼此错开半个转子齿距。
2.2两相步进电机的原理
通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。
该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。
每输入一个电脉冲,电动机转动一个角度前进一步。
它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。
改变绕组通电的顺序,电机就会反转。
所以可用控制脉冲数量、电动机各相绕组的通电顺序来控制步进电机的转动。
2.3两相步进电机的供电方式
两相四线的步进电机,有两个绕组:
A,B。
在半步供电方式时,电机的通电方式采用顺序八拍一个循环给两相绕组供电为:
八拍,半步:
(+A)(+B)--(+B)--(-A)(+B)--(-A)--(-A)(-B)--(-B)--(+A)(-B)--(+A)-。
两相混合式步进电动机还有一种供电方式为双4拍整步方式,即采用通电次序两相,四拍:
(+A)(+B)--(-A)(+B)--(-A)(-B)--(+A)(-B)—。
3硬件电路设计
3.1系统总体设计框图
根据设计要求设计了如图3.1图所示系统总体设计框图,步进电机是较早实用的典型的机电一体化组件。
步进电机本体、步进电机驱动器和控制器构成步进电机系统不可分割的三大部分其设计框图。
图3.1总体设计框图
3.2单片机系统
如图3.2电路中采用的是Atmel公司的AT89C51型号的单片机,其内部结构结构
如图3.2所示。
图3.289C51内部结构图
按照图3.2它具有如下一些特点:
(1)集成度高。
AT89C51为40脚封装,内部有4K字节的ROM,128字节的RAM,四个8位并行口,一个全双工的串行口,二个16位定时器计数器,一个功能很强的中央处理器以及内部晶体振荡电路。
(2)系统结构简单。
一片Ar89C51即可构成一个小型的控制系统。
该芯片扩充能力强,具有对64K外部程序存储器和64K外部数据存储器的寻址能力。
两个单片机间还可进行通讯,可以构成双CPU系统。
可靠性高。
AT89C51能在常温下工作,大部分总线在芯片内部不易受干扰,系统简单,体积小,容易采取屏蔽措施,因此有较高的可靠性。
(3)处理功能强,速度快。
AT89C51具有丰富的指令系统,除加减指令外,还有字节的乘除运算指令,具有对128个控制位的位操作指令,因此特别适用于控制要求。
CPU时钟高达12MHz,机器周期只有1微秒,多数指令为一个机器周期或两个机器周期,所以运算速度快,可使系统有较强的功能和较高的响应。
3.3时钟信号控制电路
如图3.3所示,89C51芯片内部有一个高增益反相放大器,用于构成振荡器。
反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。
电容C1和C2可以稳定频率并对振荡频率有微调作用。
振荡脉冲频率为0到24MHz。
振荡信号从XTAL2端输入到片内的时钟发生器上。
图3.3时钟信号控制电路
3.4电源电路
如图3.4所示为电源电路,在电子电路中,通常都需要电压稳定的直流稳压电源供电,小功率的稳压电源是由电源变压器、整流电路、滤波电路和稳压电路等四部分组成。
它的指标是输入电压为220V/50HZ交流电;
输出电压分别为+12V/1A,-12V/1A,+5V/1A,-5V/1A,+5V/3A及一组可调正电压,本次电路系统多用到+5V/1A的电源,通过具体的调节可以得到稳定的需求电压。
3.5驱动电路
如图3.5所示,驱动电路用L298来驱动步进电机,L298所出产的双全桥步进电机专用驱动芯片,内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,内含二个H-Bridge的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压;
此芯片可直接由单片机的IO端口来提供模拟时序信号。
图3.5驱动电路
引脚功能说明:
引脚
Name
Function功能说明
1;
15
SenseA;
SenseB
电流监测端,1、15和PowerSO的2、19用法一样,SEN1、SEN2分别为两个H桥的电流反馈脚,不用时可以直接接地
2;
3
Out1;
Out2
1Y1、1Y2输出端
4
VS
功率电源电压,此引脚与地必须连接100nF电容器
5;
7
Input1;
Input2
1A1、1A2输入端,TTL电平兼容
6;
11
EnableA;
EnableB
TTL电平兼容输入1EN、2EN使能端,低电平禁止输出
8
GND
GND地
9
VSS
逻辑电源电压。
此引脚与地必须连接100nF电容器
10;
12
Input3;
Input4
2A1、2A2输入端,TTL电平兼容
13;
14
Out3;
Out4
2Y1、2Y2输出端监测引脚15
–
N.C.
NotConnected空
3.6显示电路
如图3.6所示,步进电机的转速显示是通过1602来实现的。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
(LCD1602引脚图)
1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VCC接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
图3.6LCD显示电路
3.7键盘电路
本次设计要对步进电机实现正转、反转和点动等功能,所以设计了键盘按键分别进行步进电机的“正转”、“反转”、“点动”和“停止”。
图3.7键盘电路
4软件系统设计
4.1主程序流程图
如图4.1是主程序流程图,初始化程序后,有键按下该按键对应值为0,其他按键则为1来进行按键的处理,并且进行控制步进电机的正反转及点动以及停转。
在处理案件的过程中,如有其他键按下,则退出该键的循环改为进入更改过后的按键的处
理程序然后调用显示程序显示转过的角度数。
如此进行旋转和显示。
图4.1主程序流程图
4.2键盘处理
共设置4个键盘,分别为K1、K2、K3、K4,分别代表:
sbitK1=P2^4;
//顺转
sbitK2=P2^5;
//反转
sbitK3=P2^6;
//点动
sbitK4=P2^7;
//停止
4.3LCD显示
如图4.3所示为LCD显示程序流程图,开始判断LCD是否忙碌。
Result=1则为忙碌状态,需要等待。
Result=0则为不忙,可以对液晶模块进行读和写。
RS为低电平,RW为高电平时,可以读状态。
E=1,才允许读写。
RS和R/W同时为低电平时,可以写入指令,将数据送入P0口,即写入指令或地址。
RS为高电平,RW为低电平时,可以写入数据,将数据送入P0口,即将数据写入液晶模块。
当E由高电平跳变成低电平时,液晶模块开始执行命令。
4.3液晶显示流程图
5开发系统简介
5.1keilc_51编译器的简介
Keilc_51是一款功能强大的优秀的单片机程序编辑、调试软件。
程序采汇编、C语言语言,利用该软件进行程序的编辑与调试。
实验程序采用多种语言适应不同的语言适应不同层次的学生需要。
高级语言编写应用程序,是一种时代的需要,通过应用高级语言的汇编和实验们可以更好的掌握。
它可以对C语言和汇编语言进行编译检查,利用它可以很好的进行编程设计,通过运行生成的文件,被89c51用于仿真。
5.2Protues仿真平台简介
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐,Protues是一个能仿真模拟和数字电路,特别是能够仿真单片机、ARM、DSP、FPGA等的软件,它还能和KEIL软件在同一台机子实现联调Protues可提供的仿真仪表资源:
示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。
理论上同一种仪器可以在一个电路中随意的调用PROTUES不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。
前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。
它的元器件、连接线路等却和传统的单片机实验硬件高度对应。
这在相当程度上替代了传统的单片机实验教学的功能,例:
元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。
课程设计、毕业设计是学生走向就业的重要实践环节。
由于PROTUES提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。
因此在不具备实验前可以利用protues进行仿真的检查。
其仿真的界面如图5.2所示。
图5.2protues仿真平台
6仿真结果及分析
1、打开文件,进行编译,无误后,点击工具栏中的运行工具,就得到了图中的正确运行。
2、准备调试
3、调入文件后,开始调试硬件电路,点击运行,电路接通,电路正常显示。
图6protues调试硬件电路
4、从键盘输入,按正转,电机正转运行。
5、从键盘输入,按反转,电机反转运行。
6、从键盘输入,按点动,点一下电机转过一个步距角。
7、从键盘输入暂停,电机停转。
调试完毕,通过键盘输入数电机按照给定的要求进行正确运转,数码管正确显示角度。
所得的结论与理论的相符合,调试成功。
7课程设计总结
本次课程设计采用AT89C51单片机对两相四线步进电机进行控制,通过改变相序可以改变电机的转向,通过键盘的按键控制步进电机的正转、反转、点动和停止,所运行的角度由LCD进行显示。
通过调试和运行,得到了正确的结果。
开始接到任务时候感觉不知道从哪儿开始,后面通过从网上找了相关的资料后开始对我们的课程设计有所了解,然后慢慢的进行,从发现问题到慢慢的去解决问题,慢慢的感觉自己好像懂得的多了一些,感觉问题一步步的得到了解决。
但是我在学习的过程中也发现了不少的问题,也花了不少的时间。
有时候遇到的困难一下子很难发现和解决,那时候真想放弃,但最后还是坚持了下来,不动就去问,到处问到处找,感觉这也很有趣,一种学习的乐趣。
虽然这次课程设计做的不是很好。
但是还是通过了自己的努力。
通过对本次的课程设计,不但了解了怎样设计课程设计的方法更重要的是将书本上的知识用到了现实中,更加深刻的了解了89C51单片机的用法,以及端口的相应的功能和接线。
附录程序表
#include<
reg51.h>
#include<
intrins.h>
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;
sbitBF=P0^7;
//步进电机八拍编码向量;
unsignedcharcodebianma[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
//0~9字符编码向量;
unsignedcharcodeword[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
//延时1毫秒
voiddelay(unsignedintt)
{
unsignedintk;
while(t--)
{
for(k=0;
k<
125;
k++)
{}
}
}
/*****************************************************
函数功能:
判断液晶模块的忙碌状态
返回值:
result。
result=1,忙碌;
result=0,不忙
***************************************************/
bitBusyTest(void)
bitresult;
RS=0;
//根据规定,RS为低电平,RW为高电平时,可以读状态
RW=1;
E=1;
//E=1,才允许读写
_nop_();
//空操作
_nop_();
//空操作四个机器周期,给硬件反应时间
result=BF;
//将忙碌标志电平赋给result
E=0;
returnresult;
将模式设置指令或显示地址写入液晶模块
入口参数:
dictate
voidWrite_com(unsignedchardictate)
{
while(BusyTest()==1);
//如果忙就等待
RS=0;
//根据规定,RS和R/W同时为低电平时,可以写入指令
RW=0;
E=0;
//E置低电平(写指令时,
//就是让E从0到1发生正跳变,所以应先置"
0"
_nop_();
//空操作两个机器周期,给硬件反应时间
P0=dictate;
//将数据送入P0口,即写入指令或地址
//空操作四个机器周期,给硬件反应时间
E=1;
//E置高电平
//当E由高电平跳变成低电平时,液晶模块开始执行命令
指定字符显示的实际地址
x
voidWriteAddress(unsignedcharx)
Write_com(x|0x80);
//显示位置的确定方法规定为"
80H+地址码x"
将数据(字符的标准ASCII码)写入液晶模块
y(为字符常量)
voidWriteData(unsignedchary)
RS=1;
//RS为高电平,RW为低电平时,可以写入数据
//E置低电平(写指令时,,
P0=y;
//将数据送入P0口,即将数据写入液晶模块
//屏幕初始化
voidLcdInt(void)
delay(15);
//延时15ms,首次写指令时应给LCD一段较长的反应时间
Write_com(0x38);
//显示模式设置:
16×
2显示,5×
7点阵,8位数据接口
delay(5);
//延时5ms
Write_com(0x38);
//3次写设置模式
Write_com(0x0F);
显示开,有光标,光标闪烁
Write_com(0x06);
光标右移,字符不移
Write_com(0x01);
//清屏幕指令,将以前的显示内容清除
//主程序
main()
unsignedintp=0;
longintr=0;
intD1,D2,D3,flag;
LcdInt();
//LCD1602初始化
P1=0xf9;
delay(15);
while
(1)
if(K1==0)
{
for(;
)
{
p=(p+1)%8;
//电机正转
P1=bianma[p];
r=r+3;
if(r>
0)
flag=0;
else
flag=1;
D3=(r%360-flag*360)/100;
D2=((r%360-flag*360)/10)%10;
D1=(r%360-flag*360)%10;
WriteAddress(0x00);
WriteData(0x2b+flag*2);
WriteData(word[D3]);
WriteData(word[D2]);
WriteData(word[D1]);
if(K2==0||K3==0||K4==0)
{break;
}//退出此循环程序
}
}
elseif(K2==0)
p=(p+7)%8;
//电机反转
r=r-3;
delay
(1);
if(K1==0||K3==0||K4==0)
elseif(K3==0)
delay(25);
if(K3==0)
while(!
K3);
p=(p+1)%8;
P1=bianma[p];
r=r+3;
if(r>
flag=0;
else
flag=1;
D3=(r%360-flag*360)/100;
D2=((r