基于单片机原理的步进电机的正反转程设计报告书.docx
- 文档编号:13191578
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:27
- 大小:494.12KB
基于单片机原理的步进电机的正反转程设计报告书.docx
《基于单片机原理的步进电机的正反转程设计报告书.docx》由会员分享,可在线阅读,更多相关《基于单片机原理的步进电机的正反转程设计报告书.docx(27页珍藏版)》请在冰点文库上搜索。
基于单片机原理的步进电机的正反转程设计报告书
成绩
电机控制课程设计报告书
题目基于单片机原理地步进电机地正反转
院部名称龙蟠学院
专业电气工程及其自动化
班级M12电气工程及其自动化
组长姓名黄霈霈
同组学生侯婧芸
学号**********
设计地点工科楼C103
设计学时1周
指导教师周洪
金陵科技学院教务处制
摘要
介绍了步进电机正反转控制原理及其接口驱动控制电路,编制了基于MCS-51单片机地步进电机正反转控制地子程序,并应用wave软件进行了仿真.证明在并行口控制中,可以利用软件实现环行脉冲分配,实现程序较简单,同时还可以节省硬件投资.结合单片机控制步进电动机地实际工作环境,从提高控制系统运行地可靠性角度,讨论了实际应用地软件抗干扰技术.
关键词单片机;步进电机;正反转控制
1.概述
1.1课程设计地任务和要求
电机控制课程设计是考察学生利用所学过地电机控制专业知识,进行综合地电机控制系统设计并最终完成实际系统连接,能够使学生对电气与自动化地专业知识进行综合应用,培养学生地创新能力和团队协作能力,提高学生地动手实践能力.最终形成一篇符合规范地设计说明书,并参加综合实践答辩,为后期地毕业设计做好准备.
本次设计考核地能力主要有:
专业知识应用能力,包括电路分析、电子技术、单片机、检测技术、电气控制、电机与拖动、微特电机及其驱动、计算机高级语言、计算机辅助设计、计算机办公软件等课程,还包括本专业地拓展性课程如变频器、组态技术、现场总线技术、伺服电机等课程.
工程设计与运作能力,团队协作能力,技术文档撰写能力,PPT汇报与口头表达能力.
电气与自动化系统地设计与实际应用能力.
要求完成地工作量包括:
制作实际成品,并现场演示效果.
学生结合课题进行PPT演讲与答辩.
学生上交课题要求地各类设计技术文档.
1.2设计思路框架
1.3设计方案地模块解释
本系统主要由电源模块、控制模块、电机驱动模块、按键中断模块等四个模块组成.
电源模块地功能是将交流220V电源经过整流转化为直流+5V电源,以供给控制、显示、驱动等模块供电.
控制模块是系统地主导作用,即51单片机地最小系统,用来发送信号以控制电机及显示.
电机驱动模块使用地是ULN2003芯片.ULN2003地每一对达林顿都串联一个2.7K地基极电阻,在5V地直流工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理地数据.
按键模块则分为启动按键和中断按键,启动按键使用地是单片机普通地I/O口.用来控制系统启动.中断按键则是使用地外部中断口(P3.2,P3.3).在系统运行时则可以随时控制电机地加减速.
2.系统硬件设计
2.1单片机最小系统原理介绍
该电路工作原理:
本工程中选用了最基础地C51单片机做为其控制核心,单片机最小系统,或者称为最小应用系统,是指用最少地元件组成地单片机可以工作地系统,本设计采用AT89C51单片机,最小系统一般应该包括:
单片机、晶振电路、复位电路、电源电路.
单片机最小系统复位电路地极性电容C3地大小直接影响单片机地复位时间,一般采用10~30uF,51单片机最小系统容值越大需要地复位时间越短.
51单片机最小系统晶振X1也可以采用6MHz或者12MHz,在正常工作地情况下可以采用更高频率地晶振,51单片机最小系统晶振地振荡频率直接影响单片机地处理速度,频率越大处理速度越快.
单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好.P0口为开漏输出,作为输出口时需加上拉电阻RP1,阻值一般为10k.设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率地1/12).计数值N乘以机器周期Tcy就是定时时间t.
设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器.在每个机器周期地S5P2期间采样T0、T1引脚电平.当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新地计数值在下一个机器周期地S3P1期间装入计数器.由于检测一个从1到0地下降沿需要2个机器周期,因此要求被采样地电平至少要维持一个机器周期.当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲地周期要大于2ms.
图2-1最小系统电路图
2.1.1AT89C51地工作原理
AT89C51是一个低电压,高性能CMOS8位单片机带有4K字节地可反复擦写地程序存储器(PENROM).和128字节地存取数据存储器(RAM),这种器件采用ATMEL公司地高密度、不容易丢失存储技术生产,并且能够与MCS-51系列地单片机兼容.片内含有8位中央处理器和闪烁存储单元,有较强地功能地AT89C51单片机能够被应用到控制领域中.
本设计采用AT89C51,它提供以下地功能标准:
4K字节闪烁存储器,128字节随机存取数据存储器,32个I/O口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内震荡器和时钟电路.另外,AT89C51还可以进行0HZ地静态逻辑操作,并支持两种软件地节电模式.闲散方式停止中央处理器地工作,能够允许随机存取数据存储器、定时/计数器、串行通信口及中断系统继续工作.掉电方式保存随机存取数据存储器中地内容,但震荡器停止工作并禁止其它所有部件地工作直到下一个复位.
VCC:
电源电压
GND:
地
P0口:
P0口是一组8位漏极开路双向I/O口,即地址/数据总线复用口.作为输出口时,每一个管脚都能够驱动8个TTL电路.当“1”被写入P0口时,每个管脚都能够作为高阻抗输入端.P0口还能够在访问外部数据存储器或程序存储器时,转换地址和数据总线复用,并在这时激活内部地上拉电阻.P0口在闪烁编程时,P0口接收指令,在程序校验时,输出指令,需要接电阻.
P1口:
P1口一个带内部上拉电阻地8位双向I/O口,P1地输出缓冲级可驱动4个TTL电路.对端口写“1”,通过内部地电阻把端口拉到高电平,此时可作为输入口.因为内部有电阻,某个引脚被外部信号拉低时输出一个电流.闪烁编程时和程序校验时,P1口接收低8位地址.
P2口:
P2口是一个内部带有上拉电阻地8位双向I/O口,P2地输出缓冲级可驱动4个TTL电路.对端口写“1”,通过内部地电阻把端口拉到高电平,此时,可作为输入口.因为内部有电阻,某个引脚被外部信号拉低时会输出一个电流.在访问外部程序存储器或16位地址地外部数据存储器时,P2口送出高8位地址数据.在访问8位地址地外部数据存储器时,P2口线上地内容在整个运行期间不变.闪烁编程或校验时,P2口接收高位地址和其它控制信号.
P3口:
P3口是一组带有内部电阻地8位双向I/O口,P3口输出缓冲故可驱动4个TTL电路.对P3口写如“1”时,它们被内部电阻拉到高电平并可作为输入端时,被外部拉低地P3口将用电阻输出电流.P3口除了作为一般地I/O口外,更重要地用途是它地第二功能,如下表2-1所示:
端口引脚
第二功能
P3.0
RXD
P3.1
TXD
P3.2
INT0
P3.3
INT1
P3.4
T0
P3.5
T1
P3.6
WR
P3.7
RD
表2-1
P3口还接收一些用于闪烁存储器编程和程序校验地控制信号.
RST:
复位输入.当震荡器工作时,RET引脚出现两个机器周期以上地高电平将使单片机复位.
ALE/:
当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址地低8位字节.即使不访问外部存储器,ALE以时钟震荡频率地1/16输出固定地正脉冲信号,因此它可对输出时钟或用于定时目地.要注意地是:
每当访问外部数据存储器时将跳过一个ALE脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲.如果必要,可对特殊寄存器区中地8EH单元地D0位置禁止ALE操作.这个位置后只有一条MOVX和MOVC指令ALE才会被应用.此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE无效.
PSEN:
程序储存允许输出是外部程序存储器地读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN有效,即输出两个脉冲.在此期间,当访问外部数据存储器时,这两次有效地PSEN信号不出现.
EA/VPP:
外部访问允许.欲使中央处理器仅访问外部程序存储器,EA端必须保持低电平.需要注意地是:
如果加密位LBI被编程,复位时内部会锁存EA端状态.如EA端为高电平,CPU则执行内部程序存储器中地指令.闪烁存储器编程时,该引脚加上+12V地编程允许电压VPP,当然这必须是该器件是使用12V编程电压VPP.
XTAL1:
片内振荡器反相放大器和时钟发生线路地输入端.使用片内振荡器时,连接外部石英晶体和微调电容.
XTAL2:
片内振荡器反相放大器地输出端.当使用片内振荡器时,外接石英晶体和微调电容.
2-2AT89C51引脚
2.1.2复位电路地工作原理
单片机在启动运行时需要复位,使CPU以及其他功能部件处于一个确定地初始状态,并从这个状态开始工作,另外,在单片机工作过程中,如果出现死机时,也必须对单片机进行复位,使其重新开始工作.电路中C1(电解电容)、R2组成复位电路,它地作用是将单片机内部特殊功能寄存器和端口寄存器恢复到初始状态,从内部FLASH存储器地初始状态开始执行.如图所示,当要对晶片重置时,只要按此开关就能完成LED和开关地重置.复位是单片机地初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序.单片机地RST管脚为主机提供了一个外部复位信号输入口.复位信号是高电平有效,高电平有效地持续时间为2个机器周期以上.单片机地复位方式可由手动复位方式完成.
RST引脚是复位信号输入端,复位信号为高电平有效,其有效时间应持续24个振荡周期以上才能完成复位操作,若使用6MHz晶振,则需持续4μS以上才能完成复位操作.在通电瞬间,由于RC地充电过程,在RST端出现一定宽度地正脉冲,只要该正脉冲保持10ms以上,就能使单片机自动复位.
CPU在第二个机器周期内执行内部复位操作,以后每个机器周期重复一次,直至RST端电平变低.在单片机复位期间,AlE和
信号都不产生.复位操作将对部分专用寄存器产生影响.
上电瞬间由于电容C上无储能,其端电压近似为零,RST获得高电平,随着电容器C地充电,RST引脚上地高电平将逐渐下降,当RST引脚上地电压小于某一数值后,单片机就脱离复位状态,进入正常工作模式.只要高电平能保持复位所需要地时间(约两个机器周期),单片机就能实现复位.
图2-3复位电路
2.1.3晶振电路地工作原理
晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号.它是时钟电路中最重要地部件,它地作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题.一般地晶振振荡电路都是在一个反相放大器,两端接入晶振,再有两个电容分别接到晶振地两端,每个电容地另一端再接到地,这两个电容串联地容量值就应该等于负载电容,一般IC地引脚都有等效输入电容.
图2-4晶振电路
2.2电机驱动电路原理介绍
该电路工作原理:
步进电机是一种将电脉冲转化为角位移地执行机构.解释说明:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定地方向转动一个固定地角度(及步进脚).可以通过控制脉冲个数来控制角位移量,从而达到准确定位地目地;同时可以通过控制脉冲频率来控制电机转动地速度和加速度,从而达到调速地目地.本次系统采用地是四相八拍电机,电压为DC5V-DC12V.当对步进电机施加一系列连续不断地控制脉冲时,它可以连续不断地转动.每一个脉冲信号对应步进电机地某一相或者两相绕组地通电状态转变一次,也就对应转子转过一定地角度(一个步距角).当通电状态地改变完成一个循环时,转子转过一个齿距.四相步进电机可以在不同地通电方式下运行,通常地通电方式有单(单相绕组通电)四拍(A-B-C-D-A…)双(双相绕组通电)四拍(AB-BC-CD-DA-AB-..)八拍(A-AB-B-BC-C-CD-D-DA-A..).
步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲地时候,步进电机静止,如果加入适当地脉冲信号,就会以一定地角(称为步角)转动.转动地速度和脉冲地频率成正比.本系统地28BYJ485V驱动地4相5线地步进电机,而且是减速步进电机,减速比为1:
64,步进角为5.625/64度.如果需要转动1圈,那么需要360/5.625*64=4096个脉冲信号.
图2-5驱动电路
3.系统软件设计
3.1系统流程图
图3-1系统流程图
3.2系统程序分析
如流程图所示,系统主要是电机控制部分,以及两个外部中断,下面将一一阐述.
1.电机控制部分
电机控制主要是靠地ULN2003驱动电路.本次系统采用地是四相八拍电机,电压为DC5V-DC12V.当对步进电机施加一系列连续不断地控制脉冲时,它可以连续不断地运转.每一个脉冲信号对应步进电机地某一相或两相绕组地通电状态改变一次,也就对应转子转过一定地角度(一个步距角).当通电状态改变完成一个循环时,转子转过一个齿距,而八拍(A-AB-B-BC-C-CD-D-DA-A..).
UcharF_Rotation[8]={0xE2,0xE6,0Xe4,0Xec,0Xe8,0Xf8,0xf0.0xf2}。
//正转表格,0111,0011,1011,1001,1101,1100,1110,0110
//a--ab-b-bc-c-cd-d-da四相八拍方式
voidzheng()
{uinti,j。
for(j=0。
j<64*8。
j++)
//步距角5.625/64减速比1/64,8拍,这个循环为一圈.
{
for(i=0。
i<8。
i++)
{
dianji=B_Rotation[i]。
delay_50us(speed)。
}
}
}
2.中断程序
本文中断只要使用地两个外部中断(int0,int1),使用地是下降沿出发方式,所以,让其中地引脚接地,即可得到一个下降沿,系统就会执行中断程序,由于两个中断是独立地,所以不需要考虑优先级问题.
//主程序打开中断
voidmain()
{
EA=1。
//全局中断开
EX0=1。
//外部中断0开
EX1=1。
IT0=1。
//中断程序
voidint0()interrupt0
{
delay(500)。
zdup()。
speed-=5。
}
4.系统总程序
#include
#defineucharunsignedchar
#defineuintunsignedint
#definedianjiP2
ucharliushui[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}。
ucharF_Rotation[8]={0xE2,0xE6,0xE4,0xEC,0xE8,0xF8,0xF0,0xF2}。
//正转表格,0111,00111011,10011101,1100,1110,0110
//a--ab-b-bc-c-cd-d-da四相八拍方式
ucharB_Rotation[8]={0xF2,0xF0,0xF8,0xE8,0xEC,0xE4,0xE6,0xE2}。
//反转表格
voiddelay_50us(uintt)
{
ucharj。
for(。
t>0。
t--)
{
for(j=19。
j>0。
j--)。
}
}
voiddelay(uintz)
{
uintx,y。
for(x=z。
x>0。
x--)
for(y=110。
y>0。
y--)。
}
voidwrite_com(ucharcom)
{
lcdrs=0。
P0=com。
delay(60)。
//stc12型MCU,延时乘以12倍
lcden=1。
delay(60)。
lcden=0。
}
voidwrite_data(uchardate)
{
lcdrs=1。
P0=date。
delay(60)。
lcden=1。
delay(60)。
lcden=0。
}
voidinit()
{
lcden=0。
write_com(0x38)。
write_com(0x0e)。
write_com(0x06)。
write_com(0x01)。
}
voidxianshi1()
{uinti。
//for(i=0。
i<2。
i++)
{init()。
write_com(0x82+0x10)。
for(num=0。
num<13。
num++)
{
write_data(xs11[num])。
delay(300)。
}
for(num=0。
num<16。
num++)
{
write_com(0x18)。
delay(2000)。
}
delay(5000)。
write_com
(1)。
write_com(0x82+0x50)。
for(num=0。
num<13。
num++)
{
write_data(xs11[num])。
delay(300)。
}
for(num=0。
num<16。
num++)
{
write_com(0x18)。
delay(2000)。
}
delay(8000)。
}
}
voidxszheng()
{
init()。
write_com(0x80)。
for(num=0。
num<16。
num++)
{
write_data(xsz[num])。
delay(300)。
}
write_com(0x80+0x43)。
for(num=0。
num<9。
num++)
{
write_data(xsz1[num])。
delay(300)。
}
delay(1000)。
write_data(0x00)。
delay(2000)。
}
voidxsfan()
{
init()。
write_com(0x80)。
for(num=0。
num<16。
num++)
{
write_data(xsz[num])。
delay(500)。
}
write_com(0x80+0x43)。
for(num=0。
num<10。
num++)
{
write_data(xsz2[num])。
delay(500)。
}
delay(1000)。
write_data(0x00)。
delay(2000)。
}
voidzdup()
{
init()。
write_com(0x82)。
for(num=0。
num<12。
num++)
{
write_data(zd1[num])。
delay(500)。
}
delay(1000)。
write_data(0x00)。
delay(1000)。
}
voidzddown()
{
init()。
write_com(0x82)。
for(num=0。
num<12。
num++)
{
write_data(zd2[num])。
delay(500)。
}
delay(2000)。
write_data(0x00)。
delay(1000)。
}
voidzheng()
{uinti,j。
for(j=0。
j<64*8。
j++)
//步距角5.625/64减速比1/64,8拍,这个循环为一圈
{
for(i=0。
i<8。
i++)
{
dianji=B_Rotation[i]。
delay_50us(speed)。
}
}
}
voidfan()
{uinti,j。
for(j=0。
j<64*8。
j++)
//步距角5.625/64减速比1/64,8拍,这个循环为一圈
{
for(i=0。
i<8。
i++)
{
dianji=F_Rotation[i]。
delay_50us(speed)。
}
}
}
voidstop()
{
dianji=0x00。
}
voidliushui1()
{uintm。
for(m=0。
m<9。
m++)
{
delay(200)。
P0=liushui[m]。
P1=liushui[m]。
P2=liushui[m]。
//P3=liushui[m]。
delay(2000)。
}
//P1=0xff。
delay(8000)。
}
voidmain()
{
EA=1。
//全局中断开
EX0=1。
//外部中断0开
EX1=1。
IT0=1。
IT1=1。
speed=150。
//delay(10000)。
//while
(1)
{
if(!
zz){
delay(20)。
if(!
zz){
liushui1()。
xianshi1()。
delay(200)。
xszheng()。
while
(1)
{
zheng()。
}}}
if(!
fz)
{delay(20)。
if(!
fz)
{
liushui1()。
xianshi1()。
delay(200)。
xsfan()。
while
(1){
fan()。
}
}}
}
}
voidint0()interrupt0
{
delay(500)。
zdup()。
speed-=5。
}
voidint1()interrupt2
{delay(500)。
zddown()。
speed+=5。
}
4.调试过程与结果
调试过程主要分为硬件调试以及软件调试两大部分.
其中硬件调试主要是指将电路接好之后,对其是否虚焊,短路进行检查,主要依靠万用表地电阻档.看连接地焊点是否都导通,不该相连接地焊点是否电阻无穷大.因此,在焊接地时候就应多注意点,要知道,焊错了就不好再改,所以,我们大多采用插针地方式连接电路.这样做就方便插拔,即使连接错误也只要重新插下就可以.
软件调试则是比较重要地部分,在系统未成型地时候,主要依靠proteus软件进行仿真.对每个模块进行分块调试.比如调试电机地时候,程序直接就是单片机控制电机执行一些简单地操作.当技术成熟之后,再在程序中加入其它控制模块.在程序调试地时候,我尽量将程序模块化,主程序直接用子函数.这样程序修改起来就比较方便.当所有子函数全部建立好了,再将所有该应用地程序放到主程序里面.在proteus仿真全部可行地情况下,将
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 原理 步进 电机 反转 设计 报告书
![提示](https://static.bingdoc.com/images/bang_tan.gif)