基于单片机步进电机转动速度角度的简单键盘控制设计.docx
《基于单片机步进电机转动速度角度的简单键盘控制设计.docx》由会员分享,可在线阅读,更多相关《基于单片机步进电机转动速度角度的简单键盘控制设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于单片机步进电机转动速度角度的简单键盘控制设计
北方民族大学
论文题目:
基于单片机步进电机控制系统
院(部)名称:
电气信息工程学院
组长姓名:
=
专业:
测控技术与仪器学号:
********
指导教师姓名:
组员:
论文提交时间:
论文答辩时间:
学位授予时间:
北方民族大学教务处制
摘要
随着微电子和计算机技术的发展步进电机的需求量与日俱增它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中其在各个国民经济领域都有应用。
研究步进电机的控制系统对提高控制精度和响应速度、节约能源等都具有重要意义。
步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。
采用单片机控制,用C语言编写软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。
软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。
本设计是采用AT89C51单片机对步进电机的控制,通过I/O口输出的时序方波作为步进电机的控制信号,信号经过芯片ULN2003驱动步进电机。
实践证明,基于单片机控制的步进电机比传统的步进控制器具有更好的性能更加简单、方便、可靠。
本设计的主要研究对象就是开环伺服系统中最常用的执行器件———步进电机。
关键词:
步进电机单片机正反转控制速度控制角度控制LED发光二极管
前言
1.步进电机及其发展
步进电机又称为脉冲电动机或阶跃电动机,它是基于最基本的电磁感应作用将电脉冲信号转变为角位移或线位移的开环控制元件。
单片机控制的步进电机广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,大型望远镜,卫星天线定位系统等等。
随着经济的发展技术的进步和电子技术的发展,步进电机的应用领域更加广阔,同时也对步进电机的运行性能提出了更高的要求。
步进电机的原始模型起源于1830年至1860年1870年前后开始以控制为目的的尝试应用于氩弧灯的电极输送机构中,这被认为最早的步进电机。
1950年后期晶体管的发明也逐渐应用在步进电机上,对于数字化的控制变得更为容易。
到20世纪60年代后期在步进电机本体方面随着永磁材料的发展,各种实用性步进电机应运而生。
步进电机往后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解能、高响应性、信赖性等灵活控制性高的机械系统中。
在生产过程中要求自动化、省人力、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。
2.国内外步进电机技术发展概况
我国步进电机的研究及制造起始于本世界50年代后期,从50年代后期到60年代后期,主要是高等院校和科研机构为研究一些装置而使用或开发少量产品。
我国在文化大革命中开始大量生产和应用步进电机。
例如江苏、浙江、北京、南京、四川等各地都有投入生产,而且都在各行业使用,其中的驱动电路所有半导体器件都是完全国产化的。
当时是全分立元器件构成的逻辑运算电路,还有电容耦合输入的计数器、触发器、环形分配器。
中等耐压的大功率半导体器件也完全国产化。
70年代初期,步进电机的生产和研究都有所突破,除反映在驱动器设计方面的长足进步以外,对反应式步进电机本体的设计研究发展到一个较高的水平。
70年代中期至80年代中期为成品发展阶段,新品种高性能电动机不断被开发。
至80年代中期以来,由于步进电机精确模型做了大量研究工作,各种混合式步进电机及驱动器作为产品广泛利用。
国外在大功率的工业设备驱动上,目前基本不使用大扭矩步进电动机,因为从驱动电路的成本,效率、噪音、加速度、绝对速度、系统惯量与最大扭矩比比较、比较不划算、还是用直流电动机、加电动机编码器整体技术和经济指标高。
一些少数高级的应用、就用空心转杯电机、交流电机。
国外在小功率的场合,还使用步进电机。
例如一些工业器材、工业生产装备、打印机、复印件、速印机、银行自动柜员机。
国内过去是用大力矩步进电动机实现机床数控,有实力的公司现在也采用交流电动机驱动数控机床,在驱动设备的主要差距,是国外对交流电动机的控制理论与工程分析和应用能力强,先进的控制理论作为软件,写在控制器内部。
目前,生产步进电机的厂家的确不少,但具有专业技术人员,能够自行开发,研制的厂家却非常少,大部分的厂家只一、二十人连最基本的设备都没有。
仅仅处于一种盲目的仿制阶段。
这就给户在产品选型、使用中造成许多麻烦。
虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。
它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。
因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。
3.设计方案及思路
该设计采用51单片机扫描三乘三矩阵键盘控制四相步进电机的正反转,角度及速度。
单片机实现对四相步进电机的手动和遥控控制。
由单片机产生的脉冲信号经过脉冲分配后分解出对应的四相脉冲,分解出的四相脉冲经驱动电路功率放大后驱动步进电机的转动。
转速的调节和状态的改变由按键进行选择。
通过键盘扫描把选择的信息反馈给单片机,单片机根据反馈信息做出相应的判断并改变输出脉冲的频率或转动状态信号。
电机转动的不同状态由LED指示灯显示。
总开关打开相应指示灯亮,总开关关闭指示灯灭,如果电机工作,也会停止工作所有指示灯熄灭;反转对应指示灯亮,正转对应指示灯灭,默认正转;档位分别是5.625度与45度切换,45度档位指示灯灭,5.625度指示灯亮。
默认45度,角度增加与减小按键分开,默认8下,即360度;速度三种分别快、中、慢,速度默认为零;最后启动按键,启动后相应指示灯亮,电机转完之后,指示灯灭,在启动之前一定要设置速度,因为速度默认为零。
正文
1.主要器件的选取
1.1单片机的选取
随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时器/计数器和多种I/O接口集成在一片芯片上,形成了芯片级的计算机,因此单片机早期的含义称为单片微型计算机(singlechipmicrocomputer),直译为单片机,沿用至今。
准确反映单片机本质的叫法应是微控制器(microcontroller)。
单片机具有集成度高,功能强,可靠性高,体积小,功耗低。
使用方便,价格低廉等特点,在各个领域得到了广泛的应用和发展,目前已渗透到人们工作和生活的各个角落,几乎无处不在。
革片机最早是以嵌入式微控制器(EmbeddedMicro-
controller)的面貌出现的。
在嵌入式系统中,它是应用最多的核心器件。
在计算机主导工业生产并且目益走进家庭生活的今天,从家用电器、工业控制、医疗仪器到军事应用,到处都有单片机的存在。
目前世界上有很多单片枕卷4造公司,如美国的INTEL、ATMEL、MOTOROLA和ZILOG公司:
德国的SIEMES公司;荷兰的PHILIP公司等。
他们相继推出了各种类型的单片机,其中INTEL公司撰出的一种离性能8位单片机MCS--51系列单片机以优越的性能,成熟的技术和高性价比迅速占领了工业测控和自动化工程领域的主要市场,成为单片机领域中的主流产品。
除了INTEL公司外,PHILIP,ATMEL,ADM,SIEMES等公司纷纷推出了与MCS--51系列兼容的单片机,其中ATMEL公司的89系列单片机也称Flash单片机是以8031为核心构成的,它和INTEL公司的MCS--51系列单片机完全兼容,它不但继承了MCS一51系列原有的功能,而且又扩展了它的功能。
对于一般用户来说,89系列单片机存在下列很显著的优点:
内部含Flash存储器;
和AT80CSl插座兼容;
静态时钟方式:
错误编程亦无废品产生;
可反复进行系统试验。
使用方便是ATMEL公司89系列单片机被广泛应用的一个主要因素。
一般的OTP产品,一旦错误编程就成了废品,而89系列单片枫内部采用了Flash存储器,所以,错误编程后仍可以重新编程,直到正确为止。
其次是它可反复进行系统试验。
用89系列单片枕设计的系统,可以反复进行系统试验,每次试验可以编入不同的程序,这样可以保证用户的系统设计达到最优,而且还可以随用户的需要和发展进行修改,使系统能不断追髓用户的最新要求。
89系列单片机可分为标准型号,低档型号和高档型号。
鉴于以上的优点,经过分析比较,根据本课题的特点,选用ATMEL公司89系列懿标准型单片机ATC89C51。
1.2步进电机及驱动的选取
步进电机又称电脉冲马达。
它是将电脉冲信号转换成机械角位移的执行元件。
输入一个电脉冲就转动一步,即每当电机绕组接受一个电脉冲,转子就转过一个相应的步距角。
转子的角位移的大小及转速分别与输入的电脉冲数及其频率成正比。
并在时间上与输入脉冲同步。
只要控制输入电脉冲的数量、频率以及电机绕组通电相序即可获得所需的转角、转速及转向,很容易用微机实现数字控制。
步矩角的大小与通电方式和转子齿数有关,其大小可用下式计算:
a=360°/(zm)
式中:
z-转子齿数;m-运行拍数,通常等于相数或相数整数倍,即m=KN(N为电动机相数,单拍时K=1,四相八拍或双拍K=2)。
本设计步进电机采用四相五线混合式步进电机,直径:
28mm;电压:
5V;步进角度:
5.625x1/64;减速比:
1/64;单个重:
0.04KG;5线4相可以用普通uln2003芯片驱动,也可以接成2相使用。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
例如:
八拍工作方式A-AB-B-BC-C-CD-D-DA。
1.3驱动芯片的选取
步进电机的驱动芯片选用ULN2003A,ULN200A电路具有以下特点:
电流增益高(大于1000);带负载能力强(输出电流大于500mA);温度范围宽(-40~85℃);工作电压高(大于50V)。
引出端脚的功能符号
引出端序号
符号
功能
引出端序号
符号
同意功能
1
1B
输入
9
COM
公共端
2
2B
输入
10
7C
输出
3
3B
输入
11
6C
输出
4
4B
输入
12
5C
输出
5
5B
输入
13
4C
输出
6
6B
输入
14
3C
输出
7
7B
输入
15
2C
输出
8
E
发射极
16
1C
输出
ULN2003A型高压大电流达林顿晶体管阵列电路的输入脉冲占空比、输出路数与输出电流的关系曲线如图3所示,从图3可以看出,随着输入脉冲的占空比以及输出路数的增加,允许的输出电流随之降低,也就是说:
电路的输出路数的增加将导致电路的驱动能力下降。
图4所示为ULN2003A电路输出电流Ic、输出电压VCE和输入电流I1三者之间的关系曲线,从图4可以看出,随着输入电流的增加,输出电压随之降低,而随着输出电流的增加,输出电压也随之增加。
ULN2003A主要电特性
特性
符号
条件
(若无其它规定,TA=-40~85℃)
规范值
单位
最小
最大
直流放大倍数
hEF
VCE=2V,Ic350mA
1000
-
集电极-发射极饱和电压
VCE(sat)
IB=500μA,IC=350mA
-
1.6
V
箝位二极管正向电压
VF
IF=350mA,输入开路
-
2.0
V
集电极截止电流
ICEX
VCE=50V
Ii=0mA
-
50
μA
Vi=6V
-
500
μA
箝位二极截止电流
IFEX
VF=50V
TA=25
-
50
μA
Vi=85
-
100
μA
集电极最大电压
Vamx
空载
50
-
V
集电极最大电流
Imax
VCE=2V
500
-
mA
开态延迟时间
ton
VCE=5V,16kHz的方波输入
-1.0
μS
关态延迟时间
toff
VCE=5V,16kHz的方波输入
-1.0
μS
2.单片机的主要系统电路
2.1时钟电路
单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:
内部振荡和外部振荡。
MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。
图中外接晶体以及电容C2和C3构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均为30PF左右,晶振频率选12MHz。
30PF
ATC89C51ATC89C51
XTAL2VCC
GND12M10UFRESET
GND
30PFXTAL11KΩ
时钟电路复位电路
2.2复位电路
为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。
单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位。
但如果RST引脚上持续为高电平,单片机就处于循环复位状态。
复位后系统将输入/输出(I/O)端口寄存器置为FFH,堆栈指针SP置为07H,SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。
复位操作有两种情况,即上电复位和手动(开关)复位。
本系统采用上电复位方式。
3.软件设计
3.1软件流程图
系统软件程序设计主要包括:
主程序设计.键盘扫描,电机控制正反转,速度,角度控制程序等。
开始
键盘扫描
总开关是否打开否
是
角度档位设置与转速按键设置
步进电机正反转选择角度
对应的指示灯亮
是
启动工作对应的指示灯亮
是结束
步进电机停止工作对应的指示灯熄灭
3.2语言软件的选取
本系统下位机以单片机为核心,采用C语言编程。
C语言是书写程序的一种软件语言,它是计算机软件设计的重要工具。
在系统软件开发、实时控制的和实时处理领域中有着不可替代的地位。
用C语言编程使编程简洁易懂,进而进行高质量的设计,而且它不独立于具体机器,是一种非常通用的高级程序设计语言,采用C语言编程,因此,在已经有众多高级语言和可视化集成开发环境工具的今天,C语言有着重要的有效的程序设计语言地位。
4.仿真
仿真使用protues软件,仿真图如下
5.元件清单
ATC89S51单片机,九个开关四个LED二极管,四个三极管,一个12M晶振,电容两个,排阻一件,ULN2003A,步进电机。
结论
经过这个学期对微机的深入学习,并且在老师的悉心指导和严格要求下,我们终于完成了四相步进电机设计课程。
从书本上的知识到自己亲手的课程设计,每一步对我们来说无疑是巨大的尝试和挑战,也成就了我们目前在大学期间独立完成的最大的项目。
记得在刚接到这个课题时,由于对相关知识不是很了解,我们都有些茫然不知所措。
设计好一个步进电机需要什么专业知识?
带着这个疑问我们开始了地学习和实验:
去图书馆查阅相关资料、上网去了解相关的内容,渐渐头脑中的概念清晰了起来。
在具体设计的过程中,我们遇到了更大的困难。
我们不断地给自己提出新的问题,然后去论证、推翻,再接着提出新的问题。
在这个循环往复的过程中,我们这篇稚嫩的设计日臻完善。
虽然我们的设计作品不是很成熟,即使借鉴前人的很多资料仍然还有很多不足之处,但我仍然心里有一种莫大的幸福感,因为我们实实在在地走过了一个完整的设计所应该走的每一个过程,并且享受了每一个过程。
致谢
首先,我们要感谢毛老师指导,毛老师在各个方面都给予了我无微不至的关怀和帮助,他对工作一丝不莓,严谨治学的态度,使我深受启发和感动,在此表达对他的深深敬意和感激之情。
同时还要感谢我的组员同学积极和配合上,并向所有帮助和关心着我们的老师和同学们,在此道一声谢谢。
参考文献
(1)单片机原理与接口技术
(2)模拟电子技术
(3)数字电路
(4)C语言教程
附件
1.C语言程序部分:
#include
#include
typedefcharint8;
typedefunsignedcharuint8;
typedefunsignedintuint16;
sbitKeyin_1=P0^3;
sbitKeyin_2=P0^4;
sbitKeyin_3=P0^5;
sbitD1=P2^0;
sbitD2=P2^1;
sbitD3=P2^2;
sbitD4=P2^3;
/*================延时函数==================*/
voiddelay_1(uint8dat)
{while(dat--);}
/*================键盘函数=================*/
uint8keyboard_1(void)
{
staticuint8dat=0;
uint8a[]={0XFe,0XFd,0XFb},i,
b[3][3]={1,2,3,
4,5,7,
9,11,15};
for(i=0;i<3;i++)
{P0=a[i];
if(!
Keyin_1)
{
delay_1(20);
if(!
Keyin_1)
{
dat=b[i][0];
while(!
Keyin_1);
returndat;
}
}
if(!
Keyin_2)
{
delay_1(20);
if(!
Keyin_2)
{
dat=b[i][1];
while(!
Keyin_2);
returndat;
}
}
if(!
Keyin_3)
{
delay_1(20);
if(!
Keyin_3)
{
dat=b[i][2];
while(!
Keyin_3);
returndat;
}
}
}
return0;
}
/*===================角度速度控制函数=============*/
voidmotor_1(uint8dat)
{
int8i,a[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
staticbitON=0,RL=0,ST=0;
staticuint16K=8,L=64,M=0,N=0;
P1=0X00;
if(dat==1){ON=~ON;D1=~D1;}
if(ON)
{
if(dat==2){RL=~RL;D2=~D2;}
if(dat==3){if(L==64)L=8;elseL=64;D3=~D3;}
if(dat==4)K--;
if(dat==5)K++;
if(dat==15)ST=1;
M=L*K;
if(dat>5&&dat<13)N=23*dat;
if(!
RL)
{
if(ST)while(M--)
{for(i=0;i<8;i++)
{
D4=0;
P1=a[i];
delay_1(N);
}
if(keyboard_1()==1){ON=0;break;}
}
}
if(RL)
{
if(ST)while(M--)
{for(i=7;i>=0;i--)
{
D4=0;
P1=a[i];
delay_1(N);
}
if(keyboard_1()==1){ON=0;break;}
}
}
}
if(!
ON){N=0;K=8;L=64;RL=0;P2=0X0F;}
ST=0;
D4=1;
}
/*================主函数=================*/
voidmain(void)
{
P2=0X0F;
P1=0X00;
while
(1)motor_1(keyboard_1());
}
2.仿真图如下