单片机控制的步进电机.docx
《单片机控制的步进电机.docx》由会员分享,可在线阅读,更多相关《单片机控制的步进电机.docx(12页珍藏版)》请在冰点文库上搜索。
单片机控制的步进电机
浙江海洋学院
设计题目单片机控制的步进电机
摘要
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件,步进电机有三线式、五线式、六线式3种但控制方法都相同都必须以脉冲电流来驱动。
非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,广泛应用在各种自动化控制系统。
本设计以AT89C51单片机为核心,对步进电机进行控制,通过按键实现步进电机正转、反转、加速、减速,并使用LED显示电机速度。
经过PROTEUS仿真和硬件焊接,结果表明,系统实现了要求。
电机控制编程原理根据励磁方法建立励磁顺序数组,励磁顺序数组元素为:
x[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03}该电路简单,可靠性强,运行稳定。
关键词:
AT89C51;ULN2003A,LED;步进电机
目录
1.引言……………………………………………………………...5
2.方案设计………………………………………………………....5
2.1.设计要求………………………………………………….5
2.2.1单片机芯片的选择……………………………………………………5
2.2.2总设计及系统原理……………………………………………5
2.2.设计方案…………………………………………………..5
3.硬件设计…………………………………………………………...6
3.1.单片机最小系统…………………………………………..6
3.2.驱动部分…………………………………………………..6
3.3按键部分……………………………………………………...6
3.4显示部分…………………………………………….....7
4.软件设计………………………………………………………...7
4.1.软件流程…………………………………………………..7
4.2.子程序设计...................................7
5.实验结果与讨论……………………………….………….......8
5.1.实验仿真…………………………………………………8
5.2.结果讨论…………………………………………………8
6.心得体会.………………………………………………………9
7.附录;源程序……………………………………………….10
8.参考文献……………………………………………………….11
1.引言
步进电机是一种常用的机电执行元件,相应的控制和驱动电路对于其整体性能起着非常重要的作用。
采用常见的AT89S51单片机和步进电机驱动芯片L298N实现步进电机的控制和驱动。
整个系统具有结构简单、可靠性高、体积小、成本低和实用性强等特点,具有较高的应用推广价值。
利用STC89C51单片机对四相步进电机进行读写操作并通过对按键的控制改变单片机的输出脉冲以此控制电机转速反应电机正反转及加速减速,这样便构成了一个单片机控制的步进电机。
2.方案设计
2.1设计要求
1、基本要求
(1)能够用按钮控制电机(四相)的加减速,正反转以及停止。
(2)显示电动机的转速与方向(顺时针+逆时针-)
2、发挥部分
(1)能够在转速方向调整时有一个缓冲的过程即先减速然后反向加速到原速度。
2.2设计方案
2.2.1单片机芯片的选择
本设计选择的是STC89C51单片机,它是采用8051核的ISP在系统可编程芯片,最高工作时钟频率为80MHz,片内含8KBytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,具有在系统可编程特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。
2.2.2总设计及系统原理
电机的整体设计较简单,包括单片机、自动复位电路、键盘电路、显示电路、驱动与指示电路。
显示部分电路用的是液晶显示屏,用以显示电机的运转速率的等级,以显示加速减速的实现结果,使结果显而易见。
3.硬件设计
3.1单片机最小系统
单片机最小系统选用STC89C51,包含上电自动复位电路和手动复位电路,可对单片机进行复位操作。
3.2驱动部分
以ULN2003A原件和四相电机组成驱动电路
3.3按键部分
按键设定部分比较简单,因为本系统按键少,所以在设计上采用了独立按键方式,程序的编制上也采用了简单的扫描方式。
按下操作键K1-K6执行动作如下:
操作键1:
控制电源开关
操作键2:
控制电机正转反转
操作键3:
控制电机加速运转
操作键4:
控制电机减速运转
3.4显示部分
显示部分显示部分使用LCD,显示实时电机转动方向及速度DIR+为正转DIR-反转,速度seed0、seed1、seed2、seed4、seed5一次减慢
4.软件设计
4.1软件流程
流程图如图所示:
4.2子程序设计
(1)delay:
延时子程序
Delay是通过对参数K的设置来调整延时时间的长短,其精度为1ms,最大延时的时间为65532ms。
(2)void2docjinterrupto定时器T0计时中断程序,d值符合条件,定义d值。
(3)date()显屏ascll码。
5.实验仿真与讨论
5.1实验仿真
依据各功能模块的功能要求和工作过程画出程序的流程图,然后根据流程图和系统的硬件连接写出详细的程序,接着对各个子程序进行编译,调试,运行,看看是否能达到其功能,然后再将整个程序糅合在一起进行整体软件调试。
在整体调试中,需注意寄存器组不能重复,在进入中断时,哪些寄存器内容和参数需入栈保护,以及调用子程序时各参数必须统一,在编译通过时,最好能把整个程序再单步执行一遍。
单步执行时看看每步执行完后数据各个特殊功能寄存器中数据的变化,这样才能确保整个程序按照系统的工作过程和功能要求执行。
仿真结果如图所示:
5.2结果讨论
本设计以AT89C51单片机为系统的控制核心,采用proteus仿真软件进行测试。
Proteus是一款比较常用的单片机仿真软件,用proteus和keil配合进行仿真提高系统运行效率与稳定性。
由于采用了液晶显示的方式,使电机的加速减速更为直观可见。
6.心得体会
单片机是我所学专业的主要课程之一,因此我认为单片机课程设计是十分必要而且十分重要的。
尽管刚刚拿到课程设计题目时有点迷惘,不知道如何着手,但通过上网和图书馆查阅相关资料,自己认真钻研以及虚心询问同学,终于解决了一个又一个的困难和障碍,成功完成了任务。
通过本次的单片机课程设计,不仅大大地丰富了我的理论知识,而且在实践过程中更令我学会了坚持、耐心和努力。
此次单片机课程设计需要运用到许多之前所学过的知识,令我认识到自己以前学习的一些不足之处,例如对以前所学知识的理解不够深刻,掌握得不够牢固,运用不够灵活。
这让我懂得了认真学习的重要性,以及要孜孜不倦地钻研所学过的知识,做得融会贯通,不能一览而过,不求甚解。
在边学习边动手的过程中,我对步进电机的构造以及原理有了进一步的了解,同时也加深和巩固了我对单片机语言的认识。
除此之外,由于是第一次做单片机,因此在此次课程设计的过程中,无论是电路绘制还是汇编语言编写都难免遇到了不少困难和障碍,例如C语言编写出错、电路元件无从入手等。
在面对困难和障碍时,我庆幸自己没有退缩和逃避,而是通过各种方法,迎难而上,以坚持、耐心和努力勇敢无畏地面对困难,克服困难,解决困难。
让我发现问题、分析问题、解决问题以及动手实践的能力都有了很大的提高,并了解到理论知识与实践相结合的重要意义。
7.附录:
源程序
源程序如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
charx[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};
unsigned
intbx[]={50,70,100,200,300,500};
unsignedcharc;
chara,b,d;
sbitp0=P2^6;
sbitp1=P2^7;
sbitjiasu=P3^2;
sbitjiansu=P3^3;
sbitE=P2^1;
sbitRS=P2^0;
voiddelay(uintz){
uinty;
for(;z>0;z--)
for(y=110;y>0;y--);}
voidcom(uchara)
{
RS=0;
P0=a;
delay(5);
E=1;
delay(5);
E=0;}
voiddate(ucharb)
{
RS=1;
P0=b;
delay(5);
E=1;
delay(5);
E=0;}
voidCS()
{
E=0;
com(0X38);
com(0X0C);
com(0X06);
com(0X01);}
voidzd0()interrupt0{
d--;if(d<0)d=0;
}
voidzd2()interrupt2{
d++;if(d>5)d=5;
}
voidmain(){
IT0=1;
EX0=1;
IT1=1;
EX1=1;
EA=1;
CS();
while
(1){
com(0x80);
date(0x44);
date(0x49);
date(0x52);//:
的ascll码
if(c==1)date(0x2b);
if(c==2)date(0x2d);
date(0x07);
date(0x73);
date(0x65);
date(0x65);
date(0x64);
date(d+0x30);
if(p0==0)c=1;
if(p1==0)c=2;
if(p0==0&&p1==0)c=0;
if(jiansu==0){
d++;while(jiansu==0);}
if(d>5)d=0;
if(c==1){
/*if(jiasu==0){
d--;while(jiasu==0);}
if(jiansu==0){
d++;while(jiansu==0);}*/
for(a=0;a<8;a++){
P1=x[a];
delay(bx[d]);}}
if(c==2){
/*if(jiasu==0){
d--;while(jiasu==0);}
if(jiansu==0){
d++;while(jiansu==0);}*/
for(b=7;b>-1;b--){
P1=x[b];
delay(bx[d]);}}
}
}
8.参考文献
[1]彭伟.单片机C语言程序设计实训100例
[2]周景润张丽娜.Proteus入门实用教程
[3]单片机原理及其应用--基于proteus和KeilC(第2版)
[4]C语音程序设计学习指导与实验教程
[5]数字电子技术基础
[6]电子设计基础
[7]沙占有,孟志永,王彦朋,单片机外围电路设计