基于单片机的步进电机控制课程设计报告doc.docx
《基于单片机的步进电机控制课程设计报告doc.docx》由会员分享,可在线阅读,更多相关《基于单片机的步进电机控制课程设计报告doc.docx(26页珍藏版)》请在冰豆网上搜索。
基于单片机的步进电机控制课程设计报告doc
河南农业大学
单片机课程
设计报告
题目名称:
步进电机控制系统
专业:
电子信息工程
班级:
10电信一班
学号:
1004101021
学生姓名:
汤炜炜
指导老师:
王玲
2013年6月27日
1.前言1
2.整体设计2
2.1步进电机28BYJ-482
2.1.128BYJ-48工作原理2
2.1.228BYJ-48参数2
2.2单片机3
2.2.1.概述3
2.2.2.单片机的选择4
2.2.3.单片机的基本结构4
3.电路仿真设计6
3.1仿真软件Proteus的使用6
3.2单片机最小系统8
3.3液晶显示模块9
3.4步进电机及其驱动模块10
3.5键盘设计11
4.软件设计12
4.1KeilC51编程软件的使用及调试方法12
4.2软件设计要求13
4.3系统软件设计流程13
4.3.1软件总体设计框图13
4.4主程序14
4.4.1头文件14
4.4.2主程序15
4.4.3液晶模块16
4.4.4矩阵键盘模块18
4.4.5电机模块20
5.调试与功能说明20
5.1硬件调试21
6.结束语22
7.参考文献22
1.前言
步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快,其中步进电机也广泛应用于数字控制系统,例如数控机床、绘图机、计算机外围设备、自动记录仪表、钟表和数—模转换装置等。
步进电机分三种:
永磁式(PM),反应式(VR)和混合式(HB),永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。
在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。
它又分为两相和五相:
两相步进角一般为1.8度而五相步进角一般为0.72度。
这种步进电机的应用最为广泛。
基于步进电机在社会实践中的广泛应用,本设计主要运用28BYJ-18步进电机,此产品小体积、高转速、底振动。
具有结构紧凑、力矩大、输入功率小、噪音小、使用方便等特点。
产品广泛用于空调器、电动器械、冷暖通阀门、热水器自动调温系统、自动化仪器、舞台灯光、安防视频监控、及单片机学习开发等领域。
再用STC89C52单片机作为控制器来实现基于单片机的步进电机控制系统。
2、整体设计
2.1步进电机28BYJ-48
2.1.128BYJ-48工作原理
本实验选择28BYJ-48步进电机作为设计对象,步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。
当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。
每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。
当通电状态的改变完成一个循环时,转子转过一个齿距。
四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。
。
。
),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。
。
。
),八拍(A-AB-B-BC-C-CD-D-DA-A。
。
。
)
2.1.228BYJ-48参数
1.极限参数:
表2-1
参数
最小值
最大值
单位
工作温度
1
+60
℃
储存温度
-20
+75
℃
2.技术参数:
表2-2
参数
值
参数
值
电压VDC
5
空载牵入频率
Hz
≥500
直流电阻25°CΩ±7%
32
空载牵出频率
Hz
≥600
步距角
5.625°/64
绝缘耐压
V1S
600
减速比
1/64
温升K
≤55
牵入转矩(100Hz时)
gf.cm
250
噪音dB
≤40
自定位转矩
gf.cm
300
驱动方式
四相八拍
连接线长:
230mm,采用UL26AWG1061的电源线
3.接线示意图
图2.1接线示意图
4.脉冲分配方式
图2.2脉冲分配方式
2.2单片机
2.2.1.概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
2.2.2.单片机的选择
目前,我国生产很多型号的单片机,在此,我们采用型号为STC89C51的单片机。
因为:
STC89C51是一个低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-52指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。
STC89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,STC89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
2.2.3.单片机的基本结构
下图是MCS-51系列单片机的内部结构示意图:
MCS-51系列单片机无论是片内RAM容量、I/O口功能、系统扩展能力、指令系统、引脚等都基本相同。
在制造技术上,MCS-51系列单片机按两种工艺生产。
一种是HMOS工艺,即高密度短沟道MOS工艺。
另一种是CHMOS工艺,即互补金属氧化物的HMOS工艺生产。
在片内程序存储器的配置上,MCS-51系列单片机有三种形式,即片内无程序存储器、有掩膜程序存储器ROM、有可擦除程序存储器EPROM。
单片机端口的既有一定的通用性,亦要有相当的灵活性,端口的设置目的总是想尽量满足各种设备连接的要求。
当然单一通用的单片机芯片,是无法实现与任意一种外设的直接连接的。
单片机的引脚数有限,更不能同时与多个外设直接连接。
目前解决的办法是使用外接接口芯片来实现。
此类芯片目前市面上有很多,有的接口芯片起传输过程中的缓冲作用以便满足接口的驱动能力要求;有的可以进行对电信号进行放大或衰减,以便适应单片机电平的需求;有的可以进行模数或数模转换,支持单片机对模拟信号处理。
在功能上,MCS-51系列单片机有基本型和增强型两类,它们以芯片型号的末位数字来区分。
即“1”为基本型,“2”为增强型。
在MCS-51系列单片机中,我们以8051为例,来介绍其结构及功能。
8051单片机的内部功能框图如图2.3示:
图2.3MCS-51系列单片机的内部结构
3.电路仿真设计
本系统主要由键盘模块,显示模块,主控模块,步进电机模块组成,其系统图如下:
图3.0系统总体结构框图
3.1仿真软件Proteus的使用
Proteus是一款专门的单片机系统仿真软件,其所提供的单片机型号多,可便于用户进行各种单片机系统的设计与仿真。
另外,Proteus提供了很多设计中常用的各种芯片如各种数字门电路、触发器、移位寄存器和其他可编程逻辑芯片,方便用户进行各种设计电路的仿真。
值得一提的是Proteus提供的示波器、信号发生器、测量探针等虚拟仪器为用户分析测试设计电路提供了理论依据,方便了用户设计。
双击桌面快捷方式
打开Proteus原理图设计软件,界面如下所示:
图3.1Proteus的ISIS原理图编辑界面
单击界面中的YES可以查看Proteus软件自带的原理图仿真实例,选择NO可以进行电路原理图的设计。
然后点击软件界面右面的
P可以放置所需要的元器件,界面如下图所示:
图3.2元器件放置界面
找到设计电路所需要的元器件然后双击所需的元器件,这时就会在软件右侧的元器件列表中看到所选择的元器件了。
在此单击鼠标左键后就可将元件放到原理图编辑界面中。
放好元器件后用导线将元器件连接起来,最后的总体的系统设计图如下:
图3.3系统总体设计
3.2单片机最小系统
单片机的最小系统是由电源、复位、晶振组成,下面介绍一下每一个组成部分。
其proteus仿真图如下:
图3.4单片机最小系统
3.3液晶显示模块
为了更人性化,更直观的了解到步进电机的运行状况,所以在本设计中加入了液晶显示模块,以便及时的将步进电机的当前运行状态提供给用户,由于本设计所显示的内容并不多所以选着较小容量的LCD1602即可。
其设计的电路图如下:
图3.5液晶显示电路
3.4步进电机及其驱动模块
由于单片机驱动能力有限,不能直接用于步进电机的驱动本设计采用ULN2003A芯片驱动步进电机。
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。
该电路的特点如下:
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
其内部结构如下:
图3.6ULN2003内部结构图
连接步进电机电路图如下:
图3.7步进电机及其驱动电路
3.5键盘设计
本次设计要求有六个按键,分别为启动,停止,,一档,二档,三档,四档。
由于键盘数量较多,用独立按键将浪费大量IO口,所以本地合计采用矩阵键盘,其中K1,K2分别对应启动,停止,K5-K8对应一档,二档,三档,四档,其电路图如下:
图3.8键盘电路
当用手按下一个键时,如图3-8所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。
这就是抖动。
抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。
很容易想到,抖动问题不解决就会引起对闭合键的识别。
用软件方法可以很容易地解决抖动问题,这就是通过延迟3-10ms来等待抖动消失,这之后,在读入键盘码
图3.9按键抖动信号波形
4.软件设计
4.1KeilC51编程软件的使用及调试方法
本设计的软件设计采用KeilC51来编写,该软件的使用方法介绍如下。
双击桌面上的Keil软件的快捷启动方式
打开软件,打开后的软件界面如下图所示:
图4.1Keil软件界面
然后点击Project—>NewProject选择新建工程,并保存到合适的位置,然后在芯片列表中选择相应的芯片,界面如下图所示,然后点击完成即可。
图4.2芯片选择界面
完成后点击File—>New新建一个程序编辑文件,然后保存即可在其中编辑所需要的程序了,然后点击软件上方的调试按钮
进行纠错调试直至没有错误。
4.2软件设计要求
本设计要求实现用STC89C52单片机实现对步进电机的控制,并能实现步进电机的旋转,及四档不同的速度调节,同时能及时的用液晶显示屏显示步进电机的当前状态
4.3系统软件设计流程
4.3.1软件总体设计框图
图4.1主程序流程图
4.4主程序
本设计为使程序可读性好将分模块进行说明。
4.4.1头文件
#ifndef_KYE_H_
#define_KYE_H_
/*常用数据类型简化定义****/
typedefunsignedcharuint8;
typedefunsignedintuint16;
/*****矩阵键盘位定义****/
sbitKeyIn1=P1^0;
sbitKeyIn2=P1^1;
sbitKeyIn3=P1^2;
sbitKeyIn4=P1^3;
sbitKeyOut1=P1^4;
sbitKeyOut2=P1^5;
sbitKeyOut3=P1^6;
sbitKeyOut4=P1^7;
/****液晶控制位定义*****/
sbitRS=P2^5;
sbitRW=P2^6;
sbitEN=P2^7;
sbitBUSY=P0^7;
/****电机转速档位定义***/
#defineOne50
#defineTwo30
#defineThree16
#defineFour8
/****子程序声明*********/
voidDis(void);
voidwait(void);
voidw_cmd(uint8cmd);
voidw_dat(uint8dat);
voidw_string(uint8addr_start,uint8*p);
voidInit_LCD1602(void);
voiddelay(uint8t);
voidkeyscan(void);
voidMoFor(void);
#endif
4.4.2主程序
#include
#include
#include"Motorz.h"
bitStartEnd=0;//启动停止标志位,默认停止
uint8Gra=One;//档位变量,默认一档
uint8codeFFW[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//旋转码表
voidmain(void)
{
while
(1)
{
keyscan();//键盘扫描
Dis();//液晶显示初始化
if(StartEnd==1)
{
MoFor();
}
else
{
P3=0;
}
}
}
4.4.3液晶模块
/***等待繁忙标志*/
voidwait(void)
{
P0=0xFF;
Do
{
RS=0;
RW=1;
EN=0;
EN=1;}while(BUSY==1);
EN=0;
}
/***写数据*/
voidw_dat(uint8dat)
{
wait();
EN=0;
P0=dat;
RS=1;
RW=0;
EN=1;
EN=0;}
/***写命令*/
voidw_cmd(uint8cmd)
{
wait();
EN=0;
P0=cmd;
RS=0;
RW=0;
EN=1;
EN=0;
}
/***发送字符串到LCD*/
voidw_string(uint8addr_start,uint8*p)
{
w_cmd(addr_start);
while(*p!
='\0')
{
w_dat(*p++);
}
}
/***初始化1602*/
voidInit_LCD1602(void)
{
w_cmd(0x38);//16*2显示,5*7点阵,8位数据接口
w_cmd(0x0C);//显示器开,不显示光标
w_cmd(0x06);//写一个字符后,地址指针加1
w_cmd(0x01);//现实清零,数据指针清零
}
/***液晶显示子程序*/
voidDis(void)
{
Init_LCD1602();
if(StartEnd)
{
w_string(0x80,"start");
if(Gra==One)
{
w_string(0xc0,"grade:
one");
}
elseif(Gra==Two)
{
w_string(0xc0,"grade:
Two");
}
elseif(Gra==Three)
{
w_string(0xc0,"grade:
Three");
}
Else
{
w_string(0xc0,"grade:
Four");
}
}
Else
{
w_string(0x01,"");
}
}
4.4.4矩阵键盘模块
/****键盘扫描子程序*/
voidkeyscan(void)
{
KeyOut1=0;
KeyOut2=1;
KeyOut3=1;
KeyOut4=1;
if(!
KeyIn1)
{
delay(5);
if(!
KeyIn1)
{
StartEnd=1;
while(!
KeyIn1);
}
}
if(!
KeyIn2)
{
delay(5);
if(!
KeyIn2)
{
StartEnd=0;
while(!
KeyIn2);
}
}
KeyOut1=1;
KeyOut2=0;
KeyOut3=1;
KeyOut4=1;
if(!
KeyIn1)
{
delay(5);
if(!
KeyIn1)
{
Gra=One;
while(!
KeyIn1);
}
}
if(!
KeyIn2)
{
delay(5);
if(!
KeyIn2)
{
Gra=Two;
while(!
KeyIn2);
}
}
if(!
KeyIn3)
{
delay(5);
if(!
KeyIn3)
{
Gra=Three;
while(!
KeyIn3);
}
}
if(!
KeyIn4)
{
delay(5);
if(!
KeyIn4)
{
Gra=Four;
while(!
KeyIn4);
}
}
}
4.4.5电机模块
/****电机旋转子程序*/
voidMoFor(void)
{
chari;
while(StartEnd)
{
keyscan();
Dis();
for(i=7;i>=0;i--)
{
P3=FFW[i];
delay(Gra);
}
}
}
/****tms延时*/
voiddelay(uint8t)
{
uint8i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
5.调试与功能说明
5.1硬件调试
本次设计采用学习开发板作为调试平台。
将软件下载到STC89C51单片机中,未按键式,电机不工作和液晶显示也不工作;
当按下启动键,步进电机转动一档转速转动,液晶屏上显示startgrade:
one;
当按下停止键,电机和液晶同时停止工作,再按启动键,步进电机转动一档转速转动,液晶屏上显示startgrade:
one;
当依次按下一档,二档,三档,四档键时速度一次升高,液晶上也一次显示startgrade:
one;startgrade:
two;startgrade:
three;startgrade:
four;
当依次按下四档,三档,二档,一档时,电机转速递减,且液晶上显示startgrade:
four;startgrade:
three;startgrade:
two;startFFWgrade:
one;
6.结束语
我在这一次单片机最小系统的设计过程中,很是受益匪浅。
通过对自己所学的知识的回顾,并充分发挥对所学知识的理解和对课程设计的思考及书面表达能力,最终完成了。
这为自己今后进一步深化学习,积累了一定宝贵的经验。
撰写设计论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。
培养了我运用所学知识解决实际问题的能力。
通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。
这个实验十分有意义我获得很深刻的经验。
通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。
我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。
学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。
这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。
7.参考文献
[1]朱清慧编著.基于Proteus显示控制系统设计与实例.北京:
清华大学出版社,2011
[2]51单片机C语言教程.郭天祥主编.电子工业出版社,2009年