单片机步进电机设计说明书含电路原理图.
- 格式:doc
- 大小:3.86 MB
- 文档页数:18
4.4 步进电机与微型机的接口电路
由于步进电机的驱动电流较大,
所以微型机与步进电机的连接都需要专门的
接口及驱动电路。
驱动器可用大功率复合管,也可以是专门的驱动器。
总之,只要按一定的顺序改变8713脉冲分配器的 13脚~15脚 三位通电的状况,即可控制步进电机依选定的方向步进。
由于步进电机运行时功率较大,可在微型机与驱动器之间增加一级光电隔离器(一是抗干扰,二是电隔离。
)以防强功率的干扰信号反串进主控系统。
电路图如下所示:
图4.5 单片机与步进电机的接口电路图
1. 图中 K1、K2、K3、K4按钮分别控制步进电机正转、反转、加速、减速。
2. 因为我们讨论的是三相六拍的工作方式,所以P0.4和P0.6接高电平,P0.7接低电平。
3. P0.0输出步进脉冲。
4. P0.1控制步进电机的转向。
一步进电机与驱动电路1.1 什么是步进电机步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
1.2 步进电机的种类步进电机分永磁式(PM)、反应式(VR)、和混合式(HB)三种。
永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。
在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。
它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为0.72度。
这种步进电机的应用最为广泛。
1.3 步进电机的特点1.精度高一般的步进电机的精度为步进角的3-5%,且不累积。
可在宽广的频率围通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点2.过载性好其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合;3.控制方便步进电机是以“步”为单位旋转的,数字特征比较明显,这样就给计算机控制带来了很大的方便,反过来,计算机的出现也为步进电机开辟了更为广阔的使用市场;4.整机结构简单传统的机械速度和位置控制结构比较复杂,调整困难,使用步进电机后,使得整机的结构变得简单和紧凑。
1.4 步进电机的原理图1是一种四相可变磁阻型的步进电机结构示意图。
这种电机定子上有八个凸齿,每一个齿上有一个线圈。
线圈绕组的连接方式,是对称齿上的两个线圈进行反相连接,如图中所示。
八个齿构成四对,所以称为四相步进电机。
图1它的工作过程是这样的:当有一相绕组被激励时,磁通从正相齿,经过软铁芯的转子,并以最短的路径流向负相齿,而其他六个凸齿并无磁通。
51单片机控制四相步进电机接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。
这几天给自己的任务就是搞定步进电机的单片机控制。
以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。
今天从淘宝网买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相,接线共有六根,外形如下图所示:拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为360/(4×5)=18度。
地线与四线接触的顺序相反,电机的转向也相反。
如果用单片机来控制此步进电机,则只需分别依次给四线一定时间的脉冲电流,电机便可连续转动起来。
通过改变脉冲电流的时间间隔,就可以实现对转速的控制;通过改变给四线脉冲电流的顺序,则可实现对转向的控制。
所以,设计了如下电路图:C51程序代码为:代码一#include <AT89X51.h>static unsigned int count;static unsigned int endcount;void delay();void main(void){count = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1; //允许CPU中断TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许TH0 = 0xFC;TL0 = 0x18; //设定时每隔1ms中断一次TR0 = 1; //开始计数startrun:P1_3 = 0;P1_0 = 1;delay();P1_0 = 0;P1_1 = 1;delay();P1_1 = 0;P1_2 = 1;delay();P1_2 = 0;P1_3 = 1;delay();goto startrun;}//定时器0中断处理void timeint(void) interrupt 1{TH0=0xFC;TL0=0x18; //设定时每隔1ms中断一次count++;}void delay(){endcount=2;count=0;do{}while(count<endcount);}将上面的程序编译,用ISP下载线下载至单片机运行,步进电机便转动起来了,初步告捷!不过,上面的程序还只是实现了步进电机的初步控制,速度和方向的控制还不够灵活,另外,由于没有利用步进电机内线圈之间的“中间状态”,步进电机的步进角度为18度。
学院:姓名:班级:学号:一、实验任务1.从键盘上输入正、反转命令,转速参数(16级)和转动步数显示在LED显示器上。
显示器上显示:第一位为0表示正转,为1表示反转;第二位0~F为转速等级;第三到第六位设定步数。
2.单片机显示器上显示的正、反转命令,转速级数和转动步数进行相应动作,转动步数减为零时停止转动。
二、基本原理1.步进电机基本原理如图,当有一相绕组被通电激励时,磁通从正相齿,经过软铁芯的转子,并以最短路径流向负相齿,为使磁通路径最短,在磁场力的作用下,转子被迫移动,使最近的一对齿与被激励的一相对准。
那么,通过对它每相线圈中电流的顺序切换可使电机作步进式旋转。
相数:产生不同对极N、S磁场的激磁线圈对数。
拍数:指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB或A-B-C-D-A,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A.步距角:对应一个脉冲信号电机转子转过的角位移。
步距角=360/(转子齿数*拍数)系统中使用20BY-0型号步进电机,它使用+5V直流电源,步距角为18度,电机线圈由A、B、C、D四相组成。
步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。
BA、BB、BC、BD即为脉冲信号输入插孔,驱动器输出A、B、C、D接步进电机。
步进电机原理接线图如图所示:步进电机模块插头接实验系统J3插座,(顺接)把P1.0~P1.3分别接到BA~BD插孔。
2.数码管显示和键盘(1)数码管显示字形LED显示器是由发光二极管构成的字段组成的显示器。
显示程序任务:●设置显示缓冲区(7EH- 79 H) ,存放待显示数据和字符(位置码)。
●显示译码:程序存储器中建立字形码常数表,查表得出对应数据和字符的字形码。
●输出显示:输出字形码到显示端口。
(2)字位口表(从高位起)(3)键盘显示原理图三、内存使用分配表位置G5 G4 G3 G2 G1 G0 数值20H 10H08H04H02H01H四、设计说明及流程 1.显示子程序模块● 采用动态显示方式,即一位一位地轮流点亮(扫描)6位显示器。
1题目:2 电路原理图的设计2.1步进电机控制电路原理图硬件总体电路原理图如下图2.1所示,图2.1 2.2 LCD显示模块LCD1602与51单片机的接口原理图如下图2.2,2.3L297/298电机驱动模块L297、L298与单片机的接口原理图如下图2.3,图2.3L297能产生4相控制信号,其用于分辨单片机传送给它的信号是低电平还是高电平,以采取相应的措施工作。
L298是步进电机专用驱动芯片,是2相和4相步进电机的专用驱动器,驱动46V,2A 以下的步进电机,如上图2.3所示。
2.4 键盘控制模块(加速、减速、正转、反转)键盘控制模块的链接方式如图2.5所示图2.2图2.5由这4个键分别来控制电机的转动情况:加速,减速,正转,反转。
3软件系统设计3.1软件系统的流程结构3.2主程序模块#include "AT89X51.h"int delay();void inti_lcd();void show_lcd(int);void cmd_wr();void ShowState();void clock(unsigned int Delay) ;void DoSpeed(); //计算速度//正转值#define RIGHT_RUN 1//反转值#define LEFT_RUN 0sbit RS=0xA0;//P2口地址sbit RW=0xA1;sbit E=0xA2;char SpeedChar[]="SPEED(n/min):";char StateChar[]="RUN STATE:";char STATE_CW[]="CW";char STATE_CCW[]="CCW";char SPEED[3]="050";unsigned int RunSpeed=50; //速度unsigned char RunState=RIGHT_RUN; //运行状态main(){/*定时器设置*/TMOD=0x66; //定时器0,1都为计数方式;方式2;EA=1; //开中断TH0=0xff; //定时器0初值FFH;TL0=0xff;ET0=1;TR0=1;TH1=0xff; //定时器1初值FFH;TL1=0xff;ET1=1;TR1=1;IT0=1; //脉冲方式EX0=1; //开外部中断0:加速IT1=1; //脉冲方式EX1=1; //开外部中断1:减速inti_lcd();DoSpeed();ShowState();while(1){clock(RunSpeed);//延时时间P0_1=P0_1^0x01;//什么意思,用与或也行的}}//定时器0中断程序:正转void t_0(void) interrupt 1{RunState=RIGHT_RUN;P0_0=1;//控制CW CCW的P1=0x01;cmd_wr();ShowState();}//定时器1中断:反转void t_1(void) interrupt 3{RunState=LEFT_RUN;P0_0=0;P1=0x01;cmd_wr();ShowState();}//中断0:加速程序void SpeedUp() interrupt 0{if(RunSpeed>=12)RunSpeed=RunSpeed-2;DoSpeed();P1=0x01;cmd_wr();ShowState();}//中断1:减速程序void SpeedDowm() interrupt 2{if(RunSpeed<=100)RunSpeed=RunSpeed+2;DoSpeed();P1=0x01;cmd_wr();ShowState();}int delay() //判断LCD是否忙{int a;start:RS=0;RW=1;E=0;for(a=0;a<2;a++);E=1;P1=0xff;if(P1_7==0)return 0;elsegoto start;}void inti_lcd() //设置LCD方式{P1=0x38;cmd_wr();delay();P1=0x01; //清除cmd_wr();delay();P1=0x0f;cmd_wr();delay();P1=0x06;cmd_wr();delay();P1=0x0c;cmd_wr();delay();}void cmd_wr() //写控制字{RS=0;RW=0;E=0;E=1;}void show_lcd(int i) //LCD显示子程序{P1=i;RS=1;RW=0;E=0;E=1;}void ShowState() //显示状态与速度{int i=0;while(SpeedChar[i]!='\0'){delay();show_lcd(SpeedChar[i]);i++;}delay();P1=0x80 | 0x0d;cmd_wr();i=0;while(SPEED[i]!='\0'){delay();show_lcd(SPEED[i]);i++;}delay();P1=0xC0;cmd_wr();i=0;while(StateChar[i]!='\0'){delay();show_lcd(StateChar[i]);i++;}delay();P1=0xC0 | 0x0A;cmd_wr();i=0;if(RunState==RIGHT_RUN)while(STATE_CW[i]!='\0'){delay();show_lcd(STATE_CW[i]);i++;}elsewhile(STATE_CCW[i]!='\0'){delay();show_lcd(STATE_CCW[i]);i++;}}void clock(unsigned int Delay) //1ms延时程序{ unsigned int i;for(;Delay>0;Delay--)for(i=0;i<124;i++);}void DoSpeed(){SPEED[0]=(1000*6/RunSpeed/100)+48;SPEED[1]=1000*6/RunSpeed%100/10+48;SPEED[2]=1000*6/RunSpeed%10+48;}4仿真及调试如图4.1(1)、图4.1(2)所示5.总论图4.1(1)图4.1(2)参考文献致谢。
【关键字】说明书基于单片机的步进电机控制系统设计1 引言1.1 课题研究的目的和意义步进电动机是用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机,它最突出的优点是可以在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,并且用其组成的开环系统既简单、廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制装置等众多领域有着极其广泛的应用。
随着微电子和计算机技术的发展,步进电动机的需求量与日俱增,研制步进电机驱动器及其控制系统具有十分重要的意义。
1.2 国内外研究概况步进电机是国外发明的。
中国在文化大革命中已经生产和应用,例如江苏、北京都生产,而且都在各行业使用,驱动电路所有半导体器件都是完全国产化的,当时是全分立元器件构成的逻辑运算电路,还有电容耦合输入的计数器,触发器,环形分配器。
国外在大功率的工业设备驱动上,目前基本不使用大扭矩步进电动机,因为从驱动电路的成本,效率,噪音,加速度,绝对速度,系统惯量与最大扭矩比来比较,比较不划算,还是用直流电动机,加电动机编码器整体技术和经济指标高。
一些少数高级的应用,就用空心转杯电机,交流电机。
国外在小功率的场合,还使用步进电机,例如一些工业器材,工业生产装备,打印机,复印件,速印机,银行自动柜员机。
国外用许多现代的手段将步进电机排挤出驱动应用,除了前面提到的旋转编码器,打印机还使用光电编码带或感应编码带配合直流电动机,实现闭环直线位移控制。
国内过去是用大力矩步进电动机实现机床数控,有实力的公司现在也采用交流电动机驱动数控机床,在驱动设备的主要差距,是国外对交流电动机的控制理论与工程分析和应用能力强,先进的控制理论作为软件,写在控制器内部。
在卫星、雷达等应用场合,中国在文化大革命后期,就生产了力矩电机,就生产了环形力矩电机,在高品质的控制场合,有时还不能使用步进电机。
步进电机的细分控制,在改革开放初期,国内就已经基本掌握,这与交流电动机的矢量控制相比,难度要低得多。
正反转可控的步进电机1 引言本课程设计目的是为了进一步掌握单片机系统,加强对系统设计和应用能力的培养而开设的综合设计训练环节。
本系统用51单片机和ULN2003A电机驱动芯片并加入控制按钮来实现步进电机的正、反转控制。
2 设计方案及原理步进电机可以对旋转角度和转动速度进行高精度的控制。
作为控制执行部件,广泛应用于自动控制和精密仪器等领域。
例如在仪器仪表、机床设备以及计算机的外围设备中(如打印机和绘图仪),常有对精确的、可控制的回转源的需要。
在这种情况下,使用步进电机最为理想。
2.1 步进电机控制步进电机两个相邻磁极之间的夹角为60°,线圈绕过相对的两个磁极构成一相。
此外各磁极上还有5个分布均匀的锯形小齿。
电机转子上没有绕组。
当某相绕组通电时,响应的两个磁极就分别形成N-S极,产生磁场,并与转子形成磁路。
如果这是定子的小齿与转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子齿与定子齿对齐,从而使步进电机向前“走”一步。
如果通过单片机按顺序给绕组施加有序的脉冲电流,就可以控制电机的转动,从而进行了数字到角度的转换。
转动的角度大小与施加的脉冲数成正比,转动的速度与脉冲频率成正比,而转动方向则与脉冲的顺序有关。
2.2 步进电机驱动方式步进电机常用的驱动方式是全电压驱动,即在电机移步与锁步时都加载额定电压。
为防止电机过流及改善驱动特性需加限流电阻。
由于步进电机锁步时,限流电阻要消耗掉大量的功率。
因此,限流电阻要有较大功率容量,并且开关管也要有较高的负载能力。
步进电机也可以使用软件方法,即使用单片机实现,这样不但简化了电路,同时降低了成本。
使用单片机以软件方式驱动步进电机,不但可以通过编程方法在一定范围之内自由的设定步进电机的转速,往返转动的角度以及转动次数等;还可以方便灵活的控制步进电机的运行状态,以满足不同用户的需求。
因此常把单片机步进电机控制电路称之为可编程步进电机控制驱动器。
基于单片机的步进电机驱动电路设计步进电机在控制系统中具有广泛的应用。
它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器、或角位移发生器等。
有时从一些旧设备上拆下的步进电机(这种电机一般没有损坏)要改作它用,一般需自己设计驱动器。
本文介绍的就是为从一日本产旧式打印机上拆下的步进电机而设计的驱动器。
本文先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。
1. 步进电机的工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图1是该四相反应式步进电机工作原理示意图。
图1 四相步进电机步进示意图开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:图2.步进电机工作时序波形图图3 步进电机驱动器系统电路原理图AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9 014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。
程设计说明书题目:基于单片机的步进电机控制系统设计课程:机电一体化系统设计姓名:马福德学号:0804705030指导教师:段广云、俞学兰专业年级:机械设计制造及其自动化(机械电子工程方向)2008级所在院系:机械工程学院完成日期: 2011年7月 10 日答辩日期: 2011年7月 11 日摘要随着微电子和计算机技术的发展,步进电机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。
研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。
步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件,步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。
采用单片机控制,用软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。
软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。
本设计是采用AT89C51单片机对步进电机的控制,通过IO口输出的时序方波作为步进电机的控制信号,信号经过芯片AT6560AHQ驱动步进电机;同时,用 4个按键来对电机的状态进行控制,并用数码管动态显示电机的转速。
系统由硬件设计和软件设计两部分组成。
其中,硬件设计包括AT89C51单片机的最小系统、电源模块、键盘控制模块、步进电机驱动模块、数码显示模块、测速模块(含霍尔片UGN3020)6个功能模块的设计,以及各模块在电路板上的有机结合而实现。
软件设计包括键盘控制、步进电机脉冲、数码管动态显示以及转速信号采集模块的控制程序,最终实现对步进电机转动方向及转动速度的控制,并将步进电机的转动速度动态显示在LED数码管上,对速度进行实时监控显示。
软件采用在Keil软件环境下编辑的C语言。
本系统具有智能性、实用性及可靠性的特点。
关键词:步进电机 ,单片机 ,电脉冲信号, 角位移, 转速控制,方向控制ABSTRACTWith the development of microelectronics and computer technology, increasing demand for stepper motor, which is widely used in printers, electronic toys and consumer products such as CNC machine tools, industrial robots, medical equipment and electrical products, and its various national fields are applied. Of stepper motor control system to improve the control accuracy and response speed, energy conservation and so important.Stepper motor is an electric pulse signals can convert the angular displacementor linear displacement of the mechanical and electrical components, stepper motor control system consists of stepper controller, stepper motor power amplifier and so on. Use MCU control, the stepper controller instead of using software to make simple circuit, low cost, reliability greatly increased. Software programming flexibility to produce different types of stepping motor excitation sequence to control the operation of the various stepper motor modeThis design is used AT89C51 of Stepping motor control, through the IO port as a square wave output of the timing of step motor control signal, the signal through the ULN2003 driver chip stepper motor; the same time, with four buttons to the status of the motor control, and dynamic display with digital control motor speed.System consists of hardware and software design of two parts. Among them, the hardware design, including minimum system AT89C51 microcontroller, power supply module, keyboard control module, stepper motor drive (integrated Darlington ULN2003) module, digital display (SM420361K digital control) module, speed modules (including the Hall probe UGN3020) six function modules, and each module in the circuit board to achieve the organic combination. Software design, including keyboard control, stepping motor pulse, the digital dynamic display and speed signal acquisition module, control procedures, and ultimately to the stepper motor rotation direction and rotation speed control of stepper motor rotation speed and dynamic display in the LED digital tube, real-time monitoring of the speed display. Software used in the software environment to edit Keil C language. This system has the intelligence, practicality and reliability features.Key Words: Stepping motor , MCU Pulse Signal , Angular displacement ,Speed control ,Direction control目录1 绪论 (1)1.1背景 (1)1.2设计任务及要求 (1)2 总体方案设计 (2)2.1方案设计 (2)2.2芯片选择 (2)2.2.1 CPU的芯片选择 (2)2.2.2 驱动电路的芯片选择 (3)2.2.3 测试电路的芯片选择 (6)3 系统硬件设计 (7)3.1电机驱动电路 (7)3.2测试及显示电路 (8)3.2.1 CS3020霍尔传感器测试电路 (8)3.2.2 LED数码显示管 (8)3.3电源 (9)3.4两相步进电机 (9)3.5键盘控制系统 (10)4 控制系统软件分析与设计 (11)4.1主程序流程图 (11)4.2读键盘子程序流程图 (11)4.3键盘处理子程序流程图 (12)4.4电机控制中断程序流程图 (12)4.5程序设计平台 (13)4.6源程序清单 (14)5 PCB板设计 (19)5.1设计原则 (19)5.1.1布局操作的基本原则 (19)5.1.2布线原则 (19)5.2PCB板设计方案: (20)5.3PCB板各电器元件的布局 (21)6 设计体会 (22)致谢 (23)参考文献 (24)附录 (25)A元件清单 (25)B电路PCB图 (26)C电路原理图 (26)1 绪论1.1 背景当今社会,电动机在工农业生产、人们日常生活中起着十分重要的作用。
基于AT89C51单片机的步进电机控制及驱动电路设计引言国内控制器的研究起步较晚.运动控制技术为一门多学科交叉的技术.是一个以自动控制理论和现代控制理论为基础.包括许多不同学科的技术领域。
如电机技术、电力电子技术、微电子技术、传感器技术、控制理论和微计算机技术等.运动控制技术是这些技术的有机结合体。
总体上来说.国内研究取得很大的进步.但无论从控制器还是从控制软件上来看.与国外相比还是具有一定差距。
传统上由纯电路设计的步进电机控制和驱动电路一般较复杂.成本又高.而且一旦成型就难于修改.可移植性差.难以适应一些智能化要求较高的场合。
单片机的普及与应用.为步进电机的应用开辟了广阔的前景.使得以往用硬件电路构成的庞大复杂的控制器得以用软件实现.将会避免复杂电路的设设计.既降低了硬件成本又提高了控制的灵活性、可靠性及多功能性。
本文主要介绍了步进电机的基本原理及AT89C51单片机的性能特点。
设计主要研究了一种基于AT89C51单片机和ULN2003驱动芯片的步进电机控制及驱动电路系统。
该系统可分为:控制模块、驱动模块、显示模块、人机交互模块四大部分。
其中采用AT89C51单片机作为控制模块的核心.利用单片机编程实现了对步进电机启动停止、正转反转、加速减速等功能的基本控制。
驱动模块由芯片ULN2003A驱动步进电机工作;显示部分由七段LED共阴数码管组成;人机互换部分由相应的按键实现相应的功能。
通过实际测试表明本设计系统的性能优于传统步进电机控制器.具有结构简单、可靠性高、实用性强、人机接口简单方便、性价比高等特点。
目录1设计原理及方案 (4)1.1 设计原理 (4)1.2 设计方案 (4)1.2.1 方案一 (5)1.2.2 方案二 (6)1.2.3 方案比较及选择 (7)2 设计实现 (8)2.1 主要元器件介绍 (8)2.1.1 四相六线步进电机的介绍 (8)2.1.2 AT89C51单片机芯片介绍 (10)2.1.3 ULN2003芯片介绍 (11)2.1.4 LED七段数码管介绍 (11)2.2 步进电机控制及驱动系统电路设计实现 (12)2.2.1 硬件设计 (12)2.2.2 软件设计 (15)3 电路调试 (15)3.1 软件的仿真 (16)3.2 硬件电路的调试 (17)4 数据分析及总结 (18)4.1 测试数据及说明 (18)4.2 总结 (19)参考文献 (19)附录 (20)1设计原理及方案1.1 设计原理步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
引言步进电机是一种离散运动装置,它和现代数字控制技术有着紧密的本质的联系。
它是一种将电脉冲转化为角位移或直线位移的执行机构,当步进电机驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(又称之为步进角),为此可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过脉冲频率来控制步进电机的转动速度和加速度,从而达到调速的目的。
步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB)。
从以上所述可知,步进电机是可以用脉冲信号直接进行定位控制,由于其具有一定的精度,且控制线路简单,使用方便、可靠;因此它广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备(扫描仪、磁盘驱动器、打印机)、照相机(包括光学照相机与数码照相机),投影仪、数码摄像机、放像机(VCD、DVD等)、大型望远镜、卫星天线定位系统、医疗器械、条码扫描仪以及各种可控机械工具等等。
随着经济的发展,技术的进步和电子技术的发展,步进电机的应用领域更加广阔,步进电机的需求量与日俱增,同时也对步进电机的运行性能提出了更高的要求应用。
虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。
它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用,同时对步进电机的运行性能也提出了更高的要求。
因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。
本文就采用当前流行的MCS-51(8051)单片机来对步进电机进行控制并对相关的问题进行了研究和讨论。
第一章概述1.1 单片机的发展1.1.1 单片机的历史及发展概况根据单片机发展过程中各个阶段的特点,其发展历史大概可划分为以下四个阶段:第一阶段(1974—1976):单片机的初级阶段。
因工艺限制,单片机采用双片的形式,而且功能简单。
第二阶段(1976—1978):低性能单片机阶段。
以Intel公司制造的MCS-48系列单片机为代表第三阶段(1978—1983):高性能单片机阶段。
各模块的电路图如下:试验程序如下:#include <msp430x14x.h>#define DCO_FREQ 1000000 // DCO frequency#define ONE_SEC_CNT 512 // Number of WDT interrupts in 1 second#define DEBOUNCE_CNT 0x05 // (1/512)*5 = ~10 msec debounce#define DIR_MASK 0x01 // 0x01 is clockwise, 0x00 is counter-clockwise #define STEP_MASK 0x02 // 0x00 is full-stepping, 0x02 is half-stepping #define MOTION_MASK 0x04 // 0x00 is continuous, 0x04 is single-step#define DEFAULT_RA TE 0x8000 // Default stepping rate#define MIN_RATE 0x8000 // Minimum stepping rate#define MAX_RATE 0x0800 // Maximum stepping rate// Default state is full-stepping, clockwise, continuousunsigned char state = 1; // State variableunsigned char stepIndex = 0; // State table indexunsigned int rate = DEFAULT_RA TE; // Stepping rateunsigned char change_rate_flag = 0; // Flag indicating rate changeunsigned int max_rate = MAX_RA TE; // Maximum stepping rateunsigned int min_rate = MIN_RA TE; // Minimum stepping rate unsigned int SW[4];void sys_init(void);void Set_DCO(unsigned long freq);void timerA_Init(void);void uart0_Init(void);void wdt_Init(void);void toggle_stepping_mode(void);void increase_stepping_rate(void);void decrease_stepping_rate(void);void toggle_motion(void);void toggle_direction(void);//定义串口操作变量char nRev_UART0; // 串口0 的接收标志char UART0_TX_BUF[10]; // 串口0 的发送缓冲区char UART1_RX_Temp[10];char UART0_RX_BUF[10]; // 串口0 的接收缓冲区int nTX0_Len;int nRX0_Len;int nRX0_Len_temp;char nTX0_Flag;int nSend_TX0;// 整步状态表Astatic const unsigned char fullStepA[] ={0x00,0x00,0x01,0x01};// 半步状态表Bstatic const unsigned char fullStepB[] ={0x01,0x00,0x00,0x01};// 半步状态表Astatic const unsigned char HalfStepA[] = {0x01, // 001 10x06, // 110 20x00, // 000 30x00, // 000 40x00, // 000 50x07, // 111 60x01, // 001 70x01 // 001 8};// 逆时钟、半步状态表Bstatic const unsigned char CcwHalfStepB[] = {0x01, // 001 10x01, // 001 20x01, // 001 30x06, // 110 40x00, // 000 50x00, // 000 60x00, // 000 70x07 // 111 8};// 顺时钟、半步状态表Bstatic const unsigned char CwHalfStepB[] = {0x00, // 000 10x00, // 000 20x00, // 000 30x07, // 111 40x01, // 001 50x01, // 001 60x01, // 001 70x06 // 110 8};void main(void){int i;// 停止WDTWDTCTL = WDTPW + WDTHOLD;sys_init();_EINT();for(;;){if(nRev_UART0 == 1){nRev_UART0 = 0;for(i = 0;i < nRX0_Len;i++) UART1_RX_Temp[i] = UART0_RX_BUF[i];if((UART1_RX_Temp[0] == 'A') && (UART1_RX_Temp[1] == 'T')){UART0_TX_BUF[0] = 'O';UART0_TX_BUF[1] = 'K';UART0_TX_BUF[2] = 13;nTX0_Len = 3;switch(UART1_RX_Temp[2]){case 'D': // 方向toggle_direction();break;case 'C': // 运动模式toggle_motion();break;case 'M': // 步进模式toggle_stepping_mode();break;case 'F': // 增加速率increase_stepping_rate();break;case 'S': // 降低速率decrease_stepping_rate();break;default: break;}}else{UART0_TX_BUF[0] = 'E';UART0_TX_BUF[1] = 'R';UART0_TX_BUF[2] = 'O';UART0_TX_BUF[3] = 'R';UART0_TX_BUF[4] = 'R';UART0_TX_BUF[5] = 13;nTX0_Len = 6;}// 设置中断标志,进入发送中断程序IFG1 |= UTXIFG0;nRX0_Len = 0;}}}void sys_init(void){// 设置下降沿触发中断P1IES = 0x0f;P1IFG = 0x00;P1IE = 0x0f;// 设置P2.3,2,1,0 为输出// 设置P3.3,2,1,0 为输出P2OUT = 0x00;P3OUT = 0x00;P2DIR |= 0x0f;P3DIR |= 0x0f;// 设置DCOSet_DCO(DCO_FREQ);// 初始化Timer AtimerA_Init();// 初始化UART0uart0_Init();// 初始化WDTwdt_Init();}void Set_DCO(unsigned long freq){unsigned int clkCnt;unsigned int numDcoClks;unsigned int prevCnt = 0;// ACLK = LFXT1CLK/8 = 4096 HzBCSCTL1 |= DIV A_3;numDcoClks = freq/4096;TACCTL2 = CM_1 + CCIS_1 + CAP; TACTL = TASSEL_2 + MC_2 + TACLR; while(1){while( !(TACCTL2 & CCIFG) ){}TACCTL2 &= ~CCIFG;clkCnt = TACCR2 - prevCnt;prevCnt = TACCR2;if( numDcoClks == clkCnt ){break;}else if( clkCnt > numDcoClks ){DCOCTL--;if( DCOCTL == 0xFF ){if( BCSCTL1 & 0x07 ){BCSCTL1--;}else{break;}}}else{DCOCTL++;if( DCOCTL == 0x00 ){if( (BCSCTL1 & 0x07) != 0x07 ){BCSCTL1++;}else{break;}}}}// ACLK = LFXT1CLK/1 = 32768 HzBCSCTL1 &= ~DIV A_3;TACCTL2 = 0;TACTL = 0;}void wdt_Init(void){// 设置时钟源为ACLK,1秒内产生512此WDTCTL = WDTPW + WDTTMSEL + WDTCNTCL + WDTSSEL + WDTIS0 + WDTIS1; }void uart0_Init(void){//将寄存器的内容清零U0CTL = 0X00;//数据位为8bitU0CTL += CHAR;U0TCTL = 0X00;//波特率发生器选择ACLKU0TCTL += SSEL0;//波特率为9600UBR0_0 = 0X03;UBR1_0 = 0X00;UMCTL_0 = 0x4A;//使能UART0的TXD和RXDME1 |= UTXE0 + URXE0;//使能UART0的RX中断IE1 |= URXIE0;//使能UART0的TX中断IE1 |= UTXIE0;//设置P3.4为UART0的TXDP3SEL |= BIT4;//设置P3.5为UART0的RXDP3SEL |= BIT5;//P3.4为输出管脚P3DIR |= BIT4;}void timerA_Init(void){TACCR0 = rate;TACCTL0 = CCIE;TACTL = TASSEL_2 + MC_1 + TACLR;}interrupt [TIMERA0_VECTOR] void TimerA_ISR(void) {unsigned char index;unsigned char p2 = 0;unsigned char p3 = 0;// 判断步进速率是否需要改变if( change_rate_flag ){TACCR0 = rate;change_rate_flag = 0;}// 判断状态switch( (state & 0x3) ){case 0x00: // 整步、逆时钟方向index = stepIndex & 0x03;p2 |= fullStepA[index];p3 |= fullStepB[index];P2OUT = p2;P3OUT = p3;++stepIndex;break;case 0x01: // 整步、顺时钟方向index = stepIndex & 0x03;p3 |= fullStepA[index];p2 |= fullStepB[index];P3OUT = p3;P2OUT = p2;++stepIndex;break;case 0x02: // 半步、逆时钟方向index = stepIndex & 0x07;p2 |= HalfStepA[index];p3 |= CcwHalfStepB[index];P2OUT = p2;P3OUT = p3;++stepIndex;break;case 0x03: // 半步、顺时钟方向index = stepIndex & 0x07;p3 |= CwHalfStepB[index];p2 |= HalfStepA[index];P3OUT = p3;P2OUT = p2;++stepIndex;break;default: break;}// 如果单步状态下,禁止定时器中断if( state & MOTION_MASK ){TACCTL0 &= ~CCIE;}}////////////////////////////////////////// 处理来自串口0 的接收中断interrupt [UART0RX_VECTOR] void UART0_RX_ISR(void) {//接收来自的数据UART0_RX_BUF[nRX0_Len_temp] = RXBUF0;nRX0_Len_temp += 1;if(nRX0_Len_temp >= 2)if(UART0_RX_BUF[nRX0_Len_temp - 2] == '\r' && UART0_RX_BUF[nRX0_Len_temp - 1] == '\n') {// 过滤掉回车换行(\r\n)if(nRX0_Len_temp == 2){nRX0_Len_temp = 0;}else if(nRX0_Len_temp > 2){nRX0_Len = nRX0_Len_temp;nRev_UART0 = 1;nRX0_Len_temp = 0;}}}////////////////////////////////////////// 处理来自串口0 的发送中断interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void) {if(nTX0_Len != 0){// 表示缓冲区里的数据没有发送完nTX0_Flag = 0;TXBUF0 = UART0_TX_BUF[nSend_TX0];nSend_TX0 += 1;if(nSend_TX0 >= nTX0_Len){nSend_TX0 = 0;nTX0_Len = 0;nTX0_Flag = 1;}}}interrupt [WDT_VECTOR] void WDT_ISR(void){unsigned char sw_state;static unsigned char one_sec_flag = 0;// 获得P1口的输入sw_state = ~P1IN & 0x0f;// 判断是否有键按下if( sw_state == 0x00 ){// 禁止看门狗中断IE1 &= ~WDTIE;// 判断是否S2的激活状态小于1秒if( !one_sec_flag && (SW[1] >= DEBOUNCE_CNT) ){toggle_motion();}// 复位状态计数器SW[0] = 0;SW[1] = 0;SW[2] = 0;SW[3] = 0;// 复位标志one_sec_flag = 0;// 使能P1口的中断功能P1IFG = 0x00;P1IE = 0x0f;}else{// 检查是否是S1状态if( sw_state & 0x01 ){if( SW[0] < ONE_SEC_CNT ){// 增加状态计数器++SW[0];}if( SW[0] == DEBOUNCE_CNT ){toggle_direction();}}else{SW[0] = 0;}// 检查是否是S2状态if( sw_state & 0x02 ){if( SW[1] < ONE_SEC_CNT ){// 增加状态计数器++SW[1];}if( SW[1] == ONE_SEC_CNT )toggle_stepping_mode();one_sec_flag = 1;SW[1] = 0;}}else{// 判断是否S2的激活状态小于1秒if( !one_sec_flag && (SW[1] >= DEBOUNCE_CNT) ) {toggle_motion();}one_sec_flag = 0;SW[1] = 0;}// 检查是否是S3状态if( sw_state & 0x04 ){// 检查是否是连续模式if( (state & MOTION_MASK) == 0 ){if( SW[2] < ONE_SEC_CNT ){// 增加状态计数器++SW[2];}if( SW[2] == DEBOUNCE_CNT ){increase_stepping_rate();}}else // 单步模式{// 增加状态计数器++SW[2];if( (SW[2] % DEBOUNCE_CNT) == 0 ){increase_stepping_rate();}}else{SW[2] = 0;}// 检查是否是S4状态if( sw_state & 0x08 ){if( SW[3] < ONE_SEC_CNT ){// 增加状态计数器++SW[3];}if( SW[3] == DEBOUNCE_CNT ){decrease_stepping_rate();}}else{SW[3] = 0;}}}interrupt [PORT1_VECTOR] void PORT1_ISR(void) {// 禁止端口1的中断P1IE = 0x00;// 清除端口1的中断标志P1IFG = 0x00;// 使能看门狗中断IE1 |= WDTIE;}void increase_stepping_rate(void){unsigned int new_rate;// 检查是否是连续模式if( (state & MOTION_MASK) == 0 )new_rate = rate >> 1;if( new_rate >= max_rate ){rate = new_rate;change_rate_flag = 1;}}//使能定时器A的中断TACCTL0 |= CCIE;}void decrease_stepping_rate(void){// 检查是否是连续模式if( (state & MOTION_MASK) == 0 ){if( rate <= (min_rate >> 1) ){rate <<= 1;change_rate_flag = 1;}}// 使能定时器A的中断TACCTL0 |= CCIE;}void toggle_stepping_mode(void){// 切换步进模式state ^= STEP_MASK;// 检查是否是半步模式if( state & STEP_MASK ){// 从整步模式切换到半步模式// 定时器的频率加倍rate = (rate >> 1);change_rate_flag = 1;max_rate = (MAX_RA TE >> 1);min_rate = (MIN_RATE >> 1);}else // 整步模式// 从半步模式切换到整步模式// 定时器的频率减半rate = (rate << 1);change_rate_flag = 1;max_rate = MAX_RATE;min_rate = MIN_RA TE;}}void toggle_motion(void){state ^= MOTION_MASK;// 检查是否是连续步进模式if( (state & MOTION_MASK) == 0 ){// 使能定时器中断TACCTL0 |= CCIE;}}void toggle_direction(void){state ^= DIR_MASK;}。
目录1 简介 (1)1.1 步进电机的介绍 (1)1.2 步进电机的基本原理 (1)1.3 步进电机的主要特性 (2)2 硬件电路设计 (3)2.1控制电路 (3)2.2最小系统 (3)2.3驱动电路 (4)3 软件设计 (5)4 心得体会 (8)附录 (9)参考文献 (13)1 简介1.1 步进电机的介绍步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器。
虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机,交流电机在常规下使用。
它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。
因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
1.2 步进电机的基本原理(1)工作原理通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。
该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。
当定子的矢量磁场旋转一个角度。
转子也随着该磁场转一个角度。
每输入一个电脉冲,电动机转动一个角度前进一步。
它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。
华北水利水电学院单片机课程设计步进电机设计说明书2012——2013学年第2学期专业班级:学号:姓名:指导教师:雷冀南院、系:机械学院教研室:机械制造教研室注:指导教师在课程设计期间每天指导时间不少于2小时。
教学院长:教研室主任:填表人:雷冀南填表时间:2013年04月13日步进电机课程设计说明书目录第一章课程设计整体认识及规划 (5)第二章电路所用主要元件认识 (6)第三章画电路原理图 (11)第四章编写程序 (12)第五章调试模拟达到效果 (13)第六章焊接电路板 (13)第七章程序烧写 (14)第八章总结 (14)参考文献 (14)附页附图 (15)附录1 程序流程图附录2 C51程序附录3 电路原理图[摘要]本课程设计的内容是利用51单片机,达到控制步进电机的启动、停止、正转、反转、速度和状态显示的目的,使步进电机控制更加灵活。
步进电机驱动芯片采用ULN2003A,ULN2003A具有大电流、高电压,外电路简单等优点。
利用数码管增设电机速度状态显示功能,各项数据更直观。
实测结果表明,该控制系统达到了设计的要求。
关键字:步进电机、数码管、51单片机、ULN2003A、设计过程第一章课程设计整体认识及规划1.1课程设计目的《单片机应用基础》课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的就是配合本课程的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。
1.2课程设计任务根据给定的任务要求选择合适的单片机和其他电子元器件,进行系统硬件电路设计和软件编程,根据系统制作并调试系统电路板,使之实现任务要求。
有关参数选择要求符合国家标准。
具体设计内容如下:1.能控制电机正反转,有正转和反转按钮。
2.在一定范围内可控制转速,有加速和加速按钮,用七段码显示。
3.可在不断电源的情况下暂停,有一个暂停按钮。
4.电动机处于哪个速度状态观察七段码数值,也可直观的观察电动机的旋转状态比较。
1.3单片机应用系统的设计步骤1.分析设计任务,构思需要达到的效果,了解步进电机的一些知识。
2.设计系统工作原理图,利用PROTEUS软件绘制系统工作原理图;3.购买电路所需的电子元件。
4.系统控制程序设计、调试及实现:(1)根据要求,写出完整的程序流程图;(2)了解C51编写语句,将设计程序输入、汇编,排除语法错误,生成*.OBJ 文件;(3)按所设计的原理图,焊接电路板,检查无误;(4)将目标文件传送到AT89S51芯片上,执行并运行调试该程序,最终实现控制要求单片机的应用系统随着用途不同,它们的硬件和软件结构差别很大,但系统设计的方法和步骤基本上是相同的。
一般包括总体设计、硬件设计、软件设计、仿真调试、固化程序、应用系统独立运行等步骤。
第二章电路所用主要元件认识2.1 AT98S51芯片认识该芯片是我们上课时以此为例讲的,所以也算很熟悉,各个引脚功能课本上一讲很清楚了,在这就不再多赘述。
展示一下它的引脚,实物引脚就这样,焊接电路时需注意!2.2 ULN2003A芯片认识ULN2003A芯片是一个7路反相器,即第1到7引脚输入端为低电平时,对应输出端第16到10引脚输出为高电平,反之亦然。
8引脚接地,第9引脚COM提供工作电压,如proteus中图(3),实物图中引脚编号是逆时针(8号在左下,9号在右下)。
本设计中引脚1、2、3、4分别与AT89s51芯片的P2.0、P2.1、P2.2、P2.3口相连接,规定正转为逆时针方向的转动引脚16、15、14、13连接到A、B、C、D上所示,电动机中间引脚直接与5V电压相接,目的是驱动电动机,使其正常工作2.3七段码显示管认识七段码是大家比较熟悉,实质上就是一些二极管组合,这里用的是共阳极的七段码。
课本上还有接法及码值表。
本设计由P0口控制显示,用共阳极的。
从P0.0-P0.7连接a-f引脚,com接电源。
LED是发光二极管的英文缩写,LED 显示器是由发光二极管构成的,它在单片还机中的应用非常普遍。
通常所说的LED显示器由7个发光二极管组成,其排列状如图所示。
此外,显示器中还有一个圆点型发光二极管以dp表示,用于小数点表示。
通过七个发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。
LED显示中的发光二极管共有两种连接方法:共阳极接法:把发光二极管的阳极连在一起构成公共阳极。
使用时公共阳极接+5V。
这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不亮。
共阴极接法:把发光二极管的阴极连在一起构成公共阴极。
使用时公共阴极接地。
这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不亮。
十六进制码值表如下:2.4 步进电机一、步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
进电机工作原理二、步进电机是工业过程控制及仪表中常用的控制元件之一,例如在机械装置中可以用丝杠把角度变为直线位移,也可以用步进电机带螺旋电位器,调节电压或电流,从而实现对执行机构的控制。
步进电机可以直接接收数字信号,不必进行数模转换,用起来非常方便。
步进电机还具有快速启停、精确步进和定位等特点,因而在数控机床、绘图仪、打印机以及光学仪器中得到广泛的应用。
三、步进电机实际上是一个数字/角度转换器,三相步进电机的结构原理如图所示。
从图中可以看出,电机的定子上有六个等分磁极,A、A′、B、B′、C、C ′,相邻的两个磁极之间夹角为60°,相对的两个磁极组成一相(A-A′,B-B′,C-C′),当某一绕组有电流通过时,该绕组相应的两个磁极形成N极和S极,每个磁极上各有五个均匀分布矩形小齿,电机的转子上有40个矩形小齿均匀地分布的圆周上,相邻两个齿之间夹角为9°。
当某一相绕组通电时,对应的磁极就产生磁场,并与转子形成磁路,如果这时定子的小齿和转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子和定子的齿相互对齐。
由此可见,错齿是促使步进电机旋转的原因。
四、步进电机以三相六拍(三相双拍)方式工作,若按A→AB→B→BC→C→CA→A次序通电为正转,则当按A→AC→C→CB→B→BA→A次序通电为反转。
三相三拍(三相单拍)有两种A→B→C→A,AB→BC→CA→AB正转,反转则反序。
五、速度计算1.输出代码的变化周期T控制了电机的运转速度:n=60/(T.N)式中:n ——步进电机的转速(转/分);N ——步进电机旋转一周需输出的字节数;T ——代码字节的输出变化周期。
2.步角θ=360º/(MZC)M——步进电机的相数;Z——步进电机转子齿数;C——单双拍3.转数 n=60f/(MZC) f——通电脉冲频率注意:步进电机转数受相数、起转频率、载荷影响等只能在一定范围内。
第三章画电路原理图3.1 电路图雏形图从最简单的电路画,只用开关闭合,来控制电机转动。
编写修改的程序调试,简单模拟。
3.2 电路发展图加上发光二极管,画电路图如下3.3电路完善图改用数码管显示速度,因为开关按开与闭合,直接由手控制,眼观察,不需再灯显示。
原理图设计完成进行程序编写。
第四章编写程序老师建议C语言编写,用单片机汇编语言编习惯了且C语言编汇编语言的程序还没学过。
必须得看一下课本,了解到C51(C语言编写程序用来编写单片机汇编语言的调用函数)的语句及用法。
我个人觉得编简单的程序用单片机汇编语言,编复杂的用C51语言,单片机语言执行占cpu少,C51占的多。
先编一个简单使电机转的程序,我刚开始想让电机高速运转,结果电机却几乎不转、一直抖。
用软件仿真可见到P2口变化不均,好像芯片达不到那种变化似的。
只有加上延时程序,降低变化速度。
为此我几乎试了一天,变换不同的延时,从10ms左右才达到好的效果。
最终使程序实现正、反转,加减速,急停,显示的功能。
4.1 旋转程序其实挺简单的就是让接电机驱动的P2.0~P2.3只有一个不同电平在这四相来回安循环即可,也可双相。
例如:for(i=0,P2=0x01;i<4;i++){ delay(12);P2=P2<<1;}4.2 延时程序直接用循环即可void delay(m){ int i,j;for(i=0;i<m;i++)for(j=0;j<1000;j++);}4.3 加减速程序步进电机实现速度的精确控制,我设定十个速度,通过加减延时来实现。
其中最小速度还可用来控制角度,我见一个同学专门编一这样程序才想到的。
4.4 紧急制动把P2置为0ff或00即可实现。
4.5 速度显示用码值表建立一数组即可。
第五章调试模拟达到效果5.1 正反转控制初始时没开关按下数码管显示0,第二、三按钮为正反转按钮,按下其一就能实现正反旋转。
每次换方向都需松开另一方向开关,否则以先按下为准旋转。
5.2 加减速控制按下加减速开关,数码管会显示速度编号。
当松开加减速按钮数码管显示就是当前速度值。
5.3 紧急制动无论是否有按钮按下,按下紧急制动按钮电机会停止,七段码显示“P”。
通过Proteus模拟达到效果所以就开始焊接电路板。
第六章焊接电路板焊接电路板需考虑各元件所放的位置及连接方法,注意引脚连接。
所需工具:电烙铁,松香,镊子,剪刀,打火机等。
注意:焊锡不必太多,先焊元件,再连线路。
第七章程序烧写先了解烧写程序软件progisp及所需工具AT89S系列/AVR系列单片机下载线USB ISP下载器。
Progisp1.72软件的操作:1.插上usb isp下载线,连上电源。
2.单击“RD”读取,显示正确连接ID,方可开始烧写。
3.选调入flash文件打开汇编好的.hex文件。
4.单击“自动”,就开始“檫除——写入——校检”显示成功,即烧好程序。
第八章总结我的步进电机能实现十种不同的速度,当然通过编程能实现更多,达到速度精确,数码管显示的只是速度编号。
最慢的速度,通过按钮点动控制实现角度控制。
普通电机只能实现一种速度,若变速需要复杂变速机构且效率低。
本次课程设计,虽然老师分成硬件、软件组,但我是从画图到编程再到焊接电路全部自己做的。
基本对本次设计刚到满意,虽然硬件做的不是很好。
通过本次课程设计真正体验到单片机制作过程,同时了解了步进电机基本原理,基本要求,确实学到不少知识。
从与同学交流中知道步进电机的控制精确,也感觉到执着追求知识之精神。
做本次课程设计我已尽力,也基本达到我想要的效果。