步进电机控制29281.docx
- 文档编号:4755324
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:21
- 大小:318.26KB
步进电机控制29281.docx
《步进电机控制29281.docx》由会员分享,可在线阅读,更多相关《步进电机控制29281.docx(21页珍藏版)》请在冰豆网上搜索。
步进电机控制29281
机电信息项目学院
单片机系统课程设计报告
系:
自动化系
专业:
自动化
班级:
093班
设计题目:
步进电机控制及转速显示
学生姓名:
白音杭盖、尚国伟
指导教师:
孙进生、王娟
完成日期:
2018年10月16日
一、设计任务2
1.任务分析2
二、设计方案2
三、系统硬件设计3
3.1中央处理模块单片机芯片3
3.2显示模块设计4
3.3键盘模块5
3.5步进电机模块5
3.6ISP下载线模块6
四、系统软件设计7
4.1主程序设计7
4.3显示及输入程序设计8
五、心得体会8
参考文献9
附录1系统电路原理图9
附录2程序清单9
一、设计任务
设计一个具有正转、反转、调速及制动的异步电机控制系统,具有启动键、方向控制键及提示灯、加速键、减速键及停止键,并显示转速。
1.任务分析
步进电动机是一种用电脉冲信号进行控制,并将电脉冲信号转换成相应的角位移的执行器,每一个脉冲信号可使步进电机旋转一个固定的角度,这个角度称为步距角。
因为受脉冲的控制,其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比。
三相反应式步进电动机结构如图8.1所示。
电机定子有六个磁极,相对的磁极为同一绕组励磁,整个电机有三个绕组,按Y形接法接线。
转自为软磁材料,无绕组。
若绕组通电顺序为Ⅰ-Ⅱ-Ⅲ-Ⅰ-Ⅱ-Ⅲ-…,则电动机逆时针转动;若绕组通电顺序为Ⅰ-Ⅲ-Ⅱ-Ⅰ-Ⅲ-Ⅱ-…,则电动机顺时针转动。
此种控制方式称为三相单三拍方式。
若通电顺序为Ⅰ-ⅠⅡ-Ⅱ-ⅡⅢ-Ⅲ-ⅢⅠ-…<逆时针),称为三相六拍方式。
步进电机控制装置发出运行方式、旋转方向和旋转角度<步数),前两项一般由电平表示,后一项用脉冲个数表示。
脉冲分配器根据步进电机控制装置发来的命令<电平信号和脉冲)使步进电机按照要求的工作方式、旋转方向及步数旋转。
步进电机磁极的旋转有速率限制,如果过快,电动机会出现失步现象<转自跟不上磁极的旋转),特别是在电动机的起停阶段,要求有脉冲速率限制措施。
图8.1三相反应式步进电动机结构
二、设计方案
1、方案选择
1.1硬件方案
系统可分为命令接受,控制输出和功率放大三个部分。
命令接受部分接收上位机或控制装置的输出脉冲、运行方式及方向控制信号,脉冲输出部分形成分配脉冲,之后,通过功率放大装置将脉冲送给步进电动机,形成旋转磁场。
图8.2硬件原理框图
因为本系统由单片机构成,所以,脉冲接受部分和脉冲分配部分直接由单片机完成,功率放大可由三极管或光电耦合器完成。
为能够是三个输出端同时动作,脉冲分配输出应考虑同步问题。
同步方法可用软件实施同步,也可用硬件控制实施同步。
考虑到步进电机的失步问题,单片机在接收到脉冲后在系统内进行缓存后,通过速率限制程序进行脉冲分配。
所以,脉冲的缓存可由计数器完成或者通过外部中断对脉冲个数进行计数,之后进行分配。
这里需要注意一个问题,步进电机驱动电压等级可能较高,应根据电动机说明配以合适电压供电。
另外,电动机功率较大,布线时应将电机布线和单片机布线分开布置。
为了使电机驱动电流不干扰单片机电路,最好两套电路实施电隔离,最方便的办法是使用光电耦合器进行隔离。
1.2软件方案
为防止输入脉冲频率过快导致电动机失步,可将输入脉冲在单片机缓存,之后在进行脉冲分配,分配时注意脉冲速率。
脉冲输入模块在每个输入脉冲到来时,将缓存单元进行加1计数;脉冲分配模块时刻扫描缓存单元,当缓存单元不为零时,使步进电机旋转一步,之后缓存单元减1,减到0时停止分配脉冲。
为使三相电平同时变化,程序中应予以考虑。
非同步分配脉冲可能导致电机错转。
为使电动机以最快速度运行,脉冲分配速率应按照梯形曲线分配,如图8.3所示。
图示的含义是:
开始时<零转速)脉冲分配要慢,当电动机旋转起来后,脉冲速率逐渐加快,并达到最高速率;当要停止时,也不可马上停止,必须先降低脉冲速率,最后降到零,电动机停转。
图8.3脉冲速率分配
三、系统硬件设计
3.1中央处理模块单片机芯片
通过比较,选用了AT89C52单片机来作为本系统的核心,图二所示的是中央处理模块的电路部分,即单片机的电路连接。
图二、中央处理模块
3.2显示模块设计
本设计采用的是LCD1602作为显示部分,如图三所示。
图三、显示模块电路
2.3键盘模块设计
四、键盘模块电路
键盘模块共有5个按键,开始键、反转、正转、加速及减速键。
分别对应接到8255PB口的0、1、2、3和PA口的2、3引脚上。
3.48355IO口扩展电路
3.5步进电机驱动电路
采用L298和74LS24做为驱动芯片
3.6电源模块设计
电源电路采用LM7805集成稳压器作为稳压器件,用典型接法,220V电源整流滤波后送入LM7805稳压,在输出端接一个220uf和0.1uf电容进一步滤除纹波,得到5V稳压电源。
电源电路工作原理如图七所示。
图七、整流流程图
3.7ISP下载线模块
3.8可外界驱动设计
四、系统软件设计
4.1主程序设计
系统的软件设计采用结构化和模块化设计的方法,便于程序的编写、调试和排除错误,同时也便于检验和维护。
根据设计的要求和前面描述的控制器系统硬件设计的具体情况,单片机系统的软件程序主要由以下模块组成:
初始化主程序、输入及显示、温度采集、火力控制。
主程序流程图如图九所示。
初始化定时器
中断处理
初始化DS18B20
读取DS18B20的数据
显示温度
预约函数调用
预约按键处理函数调用
直接执行功能函数
按键开始执行函数
结束
图九、主程序流程图
4.32显示及输入程序设计
显示子程序采用动态显示的方式,实时显示定时的数值变化,虽然是动态扫描的但是选着适合的时间段利用人眼的视觉暂留就可以表现为静态变化。
输入程序的设计是针对独立按键设计的,有给单片机引脚以低电平的方式,也有给单片机中断的方式,Key1是开始键,Key2是功能选择键,Key3是上加键,Key4是下减键,Key5是中断显示温度键。
五、心得体会
通过本次实验我和搭档有了很深的认识。
本文所设计的电饭煲控制器通过仿真和实物调试完全实现智能化控制。
包括预约、定时、加热、保温、中断温度显示以及由定时和温度双条件控制功能。
预约及定时时间可随意调整<上电后有默认值),预约最小时间为一小时,预约结束后自动进行相应的预约动作,当预约动作结束后会通过蜂鸣器给用户提示,之后便进入保温环节。
这次课程设计是对我们学习微机原理及单片机课程的检验及实际应用能力的一次提高。
在编写程序之前,我们查阅了大量的相关资料,力求做到规范清晰。
在编程的过程中,我们遇到了很多问题,但在同学和老师的帮助下都得到了解决。
经过三个星期的课程设计,我们得到了充分的锻炼,不仅对单片机的学习有了深刻的理解,同时也增强了我们的毅力和处理突发问题的能力。
课程设计是一次很好的实践动手机会,通过这次设计,我们学会了如何将所学知识学以致用,为我们的毕业设计奠定了良好的基础。
参考文献
[[1]AT89C51技术资料参考手册.
[2]C51语言程序设计.
[3]电机拖动技术
附录1系统电路原理图
PROTEL仿真电路图
附录2程序清单
#include"reg52.h"
#include"intrins.h"
#include"math.h"
#include"absacc.h"
#definenop_nop_(>
#defineRight_RUN1
#defineLeft_RUN0
unsignedlongRunSpeed=76。
unsignedcharRUNState=1。
#defineuintunsignedint
#defineucharunsignedchar
sbitRS=P2^0。
sbitRW=P2^1。
sbitE=P2^2。
sbitP17=P1^7。
bitflag=0。
sbitstart=P2^3。
sbitturn=P2^4。
sbitup=P2^5。
sbitdown=P2^6。
sbitstop=P2^7。
unsignedcharxx[]="speed(n/min>:
"。
unsignedcharSD[]="76"。
charstate[2][14]={"direction:
cw","direction:
ccw"}。
unsignedcharFLG,INMA=0。
unsignedchart,s=0x01。
unsignedinta。
voidOPJIAN(>。
unsignedcharJIAN(>。
unsignedcharJIANZHI(>。
voidspeed(>。
voidSHOW_LCD(>。
voidshow_state(>。
voidwrite1(>。
voidwrit2(unsignedchari>。
voiddelay(>。
voidtime(>。
voidbusy(>。
ucharkeyscan(>。
main(>
{
unsignedchari。
i=0x90。
P3=i。
i=0x01。
TMOD=i。
t=0x10。
a=0x0f。
TH0=0x10。
TL0=0x0f。
FLG=INMA。
SHOW_LCD(>。
show_state(>。
EA=1。
ET0=1。
TR0=1。
while(1>
{
ucharkey。
key=keyscan(>。
if(key!
=0>
{
INMA=key。
OPJIAN(>。
time(>。
}
if(FLG!
=INMA||flag==1>
{FLG=INMA。
SHOW_LCD(>。
show_state(>。
flag=0。
}
}
}
voidSHOW_LCD(>/*lcd设置程序*/
{
P1=0x38。
write1(>。
delay(>。
P1=0x38。
write1(>。
delay(>。
P1=0x38。
write1(>。
delay(>。
P1=0x01。
write1(>。
delay(>。
P1=0x0f。
write1(>。
delay(>。
P1=0x06。
write1(>。
delay(>。
P1=0x0c。
write1(>。
}
voidshow_state(>/*状态显示程序*/
{
unsignedchari=0。
P1=0x80。
write1(>。
while(xx[i]!
='\0'>
{
writ2(xx[i]>。
i++。
delay(>。
}
i=0。
while(SD[i]!
='\0'>
{
writ2(SD[i]>。
delay(>。
i++。
}
P1=0xc0。
write1(>。
i=0。
if(RUNState==Right_RUN>
while(state[0][i]!
='\0'>
{
writ2(state[0][i]>。
i++。
}
else
if(RUNState==Left_RUN>
while(state[1][i]!
='\0'>
{
writ2(state[1][i]>。
i++。
}
}
voidwrite1(>/*lcd写控制字*/
{
RS=0。
RW=0。
E=0。
busy(>。
E=1。
}
voidwrit2(unsignedchari>/*lcd写数据*/
{P1=i。
RS=1。
RW=0。
E=0。
busy(>。
E=1。
}
voiddelay(>/*延时程序*/
{
unsignedchari。
for(i=0。
i<100。
i++>
{
i=i。
}
}
voidtime(>
{unsignedchari,j。
for(i=0。
i<100。
i++>
{
for(j=0。
j<30。
j++>
{
j=j。
}
}
}
voidbusy(>//判断LCD是否忙
{
do
{
P1=0xff。
RS=0。
RW=1。
E=0。
nop。
E=1。
}while(P17==1>。
}
ucharkeyscan(>
{
ucharkey=0。
if(start==0>
{
key=1。
while(start==0>
{}
}
if(turn==0>
{
key=2。
while(turn==0>
{}
}
if(up==0>
{
key=3。
while(up==0>
{}
}
if(down==0>
{
key=4。
while(down==0>
{}
}
if(stop==0>
{
key=5。
while(stop==0>
{}
}
returnkey。
}
voidOPJIAN(>/*键值处理程序*/
{
switch(INMA>
{
case1:
{
TR0=1。
RUNState=Right_RUN。
s=0xf7。
}
break。
case2:
{
RUNState=Left_RUN。
s=0x01。
}
break。
case3:
{
flag=1。
t=t+2。
RunSpeed=5000000/(65536-t*256-a>。
speed(>。
}
break。
case4:
{
delay(>。
flag=1。
t=t-2。
RunSpeed=5000000/(65536-t*256-a>。
speed(>。
}
case5:
{
P3=0xff。
TR0=0。
}
}
}
voidspeed(>/*速度处理程序*/
{
unsignedchari=0。
SD[0]=RunSpeed/100+48。
SD[1]=RunSpeed%100/10+48。
SD[2]=RunSpeed%10+48。
}
voidtime1(void>interrupt1using2
{
TR0=0。
P3=s。
if(RUNState==0>
{
s=(s<<1>。
if(s==0x10>
s=0x01。
}
else
{
s=s>>1。
if(s==0x0f>
s=0xf7。
}
TH0=t。
TL0=a。
TR0=1。
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 控制 29281