步进电机.docx
- 文档编号:28444239
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:22
- 大小:197.55KB
步进电机.docx
《步进电机.docx》由会员分享,可在线阅读,更多相关《步进电机.docx(22页珍藏版)》请在冰豆网上搜索。
步进电机
课程设计报告
课程名称:
单片机原理及应用课程设计
设计题目:
基于单片机的步进电机控制系统
系别:
通信与控制工程系
专业:
电子信息工程
班级:
学生姓名:
学号:
起止日期:
指导教师:
教研室主任:
指导教师评语:
指导教师签名:
年月日
成绩评定
项目
权重
成绩
1、设计过程中出勤、学习态度等方面
0.2
2、课程设计质量与答辩
0.5
3、设计报告书写及图纸规范程度
0.3
总成绩
教研室审核意见:
教研室主任签字:
年月日
教学系审核意见:
主任签字:
年月日
摘要
基于步进电机原理和单片机控制技术,进行了步进电机控制系统的硬件和软件设计。
单片机采用STC89C52。
在单片机与步进电机之间选用ULN2003型号步进电机驱动器。
本控制步进电机控制系统主要由按键电路、单片机最小系统、STC89C52单片机、步进电机状态显示电路、驱动电路以及步进电机等几部分组成。
可以通过按键控制实现电机的正、反转、加速和减速以及LED状态显示功能电路设计可靠且易于实现,程序设计简单易懂。
关键词:
步进电机单片机单片机最小系统子程序
目录
设计要求1
1方案论证与对比1
1.1方案一1
1.2方案二2
1.3方案对比2
1.4方案二设计思路2
2硬件电路设计3
2.1步进电机驱动电路3
2.2步进电机加减速控制4
2.3单片机外扩可编程并行I/O接口芯片8255A5
2.4步进电机状态显示5
2.5速度控制程序流程图与分析6
3总程序流程图与分析7
4调试小结8
5使用的仪器及元件8
6总结与致谢9
参考文献10
附录一:
软件编程11
基于单片机的步进电机控制系统
步进电机控制系统设计要求
本课题以单片机为核心,设计并制作出步进电机控制系统,具有以下功能:
1)、按下不同的键,分别使步进电机实现顺时针和逆时针旋转;
2)、电机运转状态可以是正反转,加速减速,五种不同速度的各种组合;
3)、通过LED数码管显示电机运行状态。
1方案论证与对比
1.1方案一
图1、方案一设计思路图
此方案系统包括了开关控制电路,复位电路,时钟电路,显示电路,光电耦合电路,功率放大电路的选择。
1.2方案二
图2、方案二设计思路图
方案二主要由按键电路、单片机最小系统、STC89C52单片机、步进电机电机电路、驱动电路以及步进电机等几部分组成。
1.3方案对比
综上所述,方案一运用了复位电路,时钟电路,显示电路,光电耦合电路等电路,二方案二只运用了驱动电路相对比较简单,所以选方案二进行设计。
1.4方案二设计思路
本系统主要由按键电路、单片机最小系统、STC89C52单片机、步进电机电机电路、驱动电路以及步进电机等几部分组成。
驱动电路用ULN2003,因为它是高耐压、大电流达林顿陈列,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
它工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
步进电机的控制主要通过6个按键来实现,这6个按键分别表示“正转”、“反转”、“加速”、“减速”、“暂停”和“停止”。
单片机输出四路脉冲信号触发驱动电路的四个PNP型三极管,其中触发导通的三极管可通过ULN2003使步进电机的相应绕组获得信号,即步进电机获得脉冲信号,从而产生一定的角位移。
单片机循序不断的输出时序脉冲,就可以实现步进电机的旋转了。
当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。
每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。
当通电状态的改变完成一个循环时,转子转过一个齿距。
四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A……),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-……),八拍(A-AB-B-BC-C-CD-D-DA-A……)。
本设计采用28BYJ48型四相八拍步进电机,电压为DC5V。
2硬件电路设计
2.1步进电机驱动电路
图3、步进电机驱动电路
驱动电路原理分析:
如图1所示,要使PNP三极管正常工作,则单片机的P13、P14、P15、P16四个引脚必须为低电平,否则三极管截止发射极为高电平,从而使得与三极管发射极相接ULN2003的引脚输入的是高电平,对应输出为低电平将不能驱动步进电机转动。
由于ULN2003的工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
当三极管正常工作时,经ULN2003驱动器可使步进电机获的较大的电流以驱动步进电机。
当三极管按某种方式周期性的导通或截止时,步进电机获得相应的励磁激励信号,从而转动。
然而激励信号按逆顺序送时步进电机逆向转动。
以达到控制步进电机正传或者反转的目的。
2.2步进电机加减速控制
图4、步进电机速度控制
如图2所示,图中加速与减速按键开关分别接单片机的外部事件中断0、1引脚。
单片机外部事件中断设置为低电平触发方式,每按一次加速或减速键盘时单片机CPU将响应中断,在中断程序中使控制励磁激励频率的变量增大或者减小,从而使步进电机的转速变大或者减小。
图5、单片机外扩8255A芯片
2.3单片机外扩可编程并行I/O接口芯片8255A
本设计中用到了可编程并行口8255A芯片,它具有3个8位并行口PA、PB和PC,可编程设定为输入口或输出口等。
8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
如图3所示,为单片机外扩可编程并行I/O接口芯片8255A的原理图。
8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式。
2.4步进电机状态显示
图6、步进电机状态显示
如图4所示,图中用到了矩阵键盘中的4个按键“正转”、“反转”、“暂停”、“停止”,分别实现对步进电机的正向转动反向转动、暂停以及停止转动。
其中“暂停”按键按下时步进电机停止转动,释放该按键时步进电机继续转动,而按下“停止”后需重新按正转或反转按键步进电机才工作。
图中可编程并行I/O接口芯片8255A的PB口为数码管段选,PA口为低6位为数码管位选。
本设计中采用的是共阳极数码管,用来显示步进电机的运行状态。
数码管位选通过PNP三极管接8255A的PA口低6位,当PA口位选控制引脚为低电平时PNP三极管导通(此时三极管集电极电压在4V左右),PB口送入段选信号时数码管显示,否则数码管不显示。
2.5速度控制程序流程图与分析
图7、速度控制流程图
速度控制程序流程分析:
如图6所示,步进电机的速度由单片机的两个外部事件中断控制,外部事件中断0触发时允许步进电机加速,外部事件中断0每触发一次,步进电机加速一次。
外部事件中断1触发时允许步进电机减速,外部事件中断1每触发一次,步进电机减速一次。
另外,在中断程序中限制了控制对步进电机转速起决定性作用的变量(也就是程序的rate)的变化范围,从而使得步进电机在加速过程中转速有上限,达到该上限时转速不能再增大,步进电机在减速过程中转速有下限,达到此下限时转速不能再减小。
通过中断的方式对步进电机转速控制易于实现而且对转速的控制非常的灵活。
3总程序流程图与分析
图8、主程序流程
主程序流程分析:
如图7所示,首先对对步进电机转速控制有关的变量初始化,使得步进电机在启动后的转速是一个常量。
然而未启动时,循环通过按键子程序扫描是否有键盘按下。
如果步进电机“正转”键按下一次,步进电机就开始正向转动。
若是“反转”键盘按下一次,则步进电机进入反向转动的状态。
同时在正或反转时通过“显示子程序”对步进电机的转向和大致的转速显示出来使我们对步进电机的转速有所了解。
在电机转动过程中,无论它是正转还是反转,只要按下“暂停”键盘它就停止转动,而释放该键时步进电机仍然以暂停前的工作状态继续工作。
但是当“停止”键盘按下一次
步进电机则会停止转动,直到我们再次启动它,它才会转动。
4调试与分析
电路设计完后就进入了对系统进行调试这一环节了。
调试是设计中最为重要的一步,在调试过程中,程序并没有一步到位,而是出现了一些问题。
开始我初步了解到步进电机转速与励磁激励频率是成正比关系的,于是我编写程序并没有限制励磁激励的频率的范围,以致在测试时我不断的按加速键使它加速可是励磁激励频率达到某个值再按加速键时步进电机就停止转动了。
我当时很纳闷为什么会那样,后来再查阅了一些与步进电机相关的资料,于是对它又有了更进一步的了解。
原来励磁激励频率太大电机由于自身原因就不会转动了。
我便修改了程序使送的励磁激励频率被限制在一定的范围之内,于是就解决了加速到极限值后就停止的问题。
在调试中我的体会是我们观察到的实验现象直接体现了程序的流程与程序语句的功能,根据那些现象我们大抵可以想象是哪里出了问题哪里没有问题。
总之,调试实验中能让我们通过现象看到事物本质非常有利于设计。
5使用的仪器及元件
名称(符号)
型号(参数)
数量单位(个)
备注
单片机
STC89C52
1
I/O接口扩展芯片
NEC8255A
1
电阻
1K
48
晶振
12MHZ
1
步进电机
28BYJ48DC5V
1
驱动芯片
ULN2003
1
陶瓷电容
33
2
陶瓷电容
104
1
三极管PNP
9015
12
按键开关
19
7段数码管
共阳极(三位)
2
排针
若干
USB
母
1
拨码开关
1
连接器
DB9
1
配1套包括下载线
表一、使用器件清单
6总结与致谢
电子设计所涉及的东西非常的多,同学们的设计课题五花八门,设计中所要用到的知识很多是我们课本上所没有的,因此在课程设计期间我通过不断的学习不但学到了许多新的知识,开阔了自己的视野,而且提高了自己的设计能力。
这让我体会到刚学好课本中的知识是远远不够的,要想拓展自己的知识面就必须做一些项目,在项目的设计中去积累经验提升自己的专业素质。
因为如果你不去实验你就不会知道你所想的是不是对的,有的东西看上去好像是对的,但是它可能错了。
比如说写完一个程序你去编译它没有错误,如果你认为它说对的,那就不然了,可能你写的程序没有语法等错误,但很可能并没能实现你想要的那个功能。
所以说通过了实验检验的才是真正靠得住的东西。
转眼接近课程设计就快到了截止期限,课程设计的完成也随之进入了尾声。
在此我再次感谢老师的指导和同学们提供的帮助,同时也感谢学校给了我们这一次实践的机会。
参考文献
【1】单片机原理及应用(第2版).张鑫主编.-北京:
电子工业出版社,2010.10.
【2】单片机原理与应用实例仿真.李泉溪主编.-北京:
北京航空航天大学出版社,2009.8.
【3】单片机课程设计指导.楼然苗,李光飞编著.-北京:
北京航空航天大学出版社,2007.7.
【4】新概念51单片机C语言教程:
入门、提高、开发、拓展全攻略.郭天祥编著.-北京:
电子工业出版社,2009.1.
【5】单片机典型系统设计实例精讲.彭为,黄科,雷道仲编著.-北京:
电子工业出版社,2006.5.
【6】单片机原理与应用设计.张毅刚编著.-北京:
电子工业出版社,2008.
附录一:
软件程序
#include
#include
#definea8255_PAXBYTE[0xD1FF]//PA口地址
#definea8255_PBXBYTE[0xD2FF]//PB口地址
#definea8255_PCXBYTE[0xD5FF]//PC口地址
#definea8255_CONXBYTE[0xD7FF]//控制字地址
#defineucharunsignedchar
#defineuintunsignedint
sbitint_P0=P3^2;
sbitint_P1=P3^3;
ucharcodetable[10]={0xA0,0xBB,0x62,
0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28};
/*上叙数组10个16进制数元数分别对应十进制数0至9*/
ucharcodeFFW[8]={0x38,0x30,0x70,
0x60,0x68,0x48,0x58,0x18};//正转
ucharcodeREV[8]={0x18,0x58,0x48,
0x68,0x60,0x70,0x30,0x38};//反转
ucharrate,wan,qian,bai,shi,ge,num;
ucharwanwei,qianwei,baiwei,shiwei,gewei;
uintv;
/**********************************************/
voiddelays(void)//数码管每位显示间隔的时间
{
ucharmm=10;
while(mm--);
}
/*************************************************/
voiddisplay()//数码管显示执行时间为0.00100450S
{
/*计算步进电机的每小时大约转的圈数:
v*/
v=3600*5.625*8/(64*360)/(8*(rate*0.000403+0.002261));
wan=v/10000;
qian=v%10000/1000;
bai=v%10000%1000/100;
shi=v%10000%1000%100/10;
ge=v%10;
for(num=0;num<10;num++)
{
if(wan==num)
wanwei=num;
if(qian==num)
qianwei=num;
if(bai==num)
baiwei=num;
if(shi==num)
shiwei=num;
if(ge==num)
gewei=num;
}
a8255_PB=table[wanwei];
a8255_PA=0xfd;
delays();
a8255_PA=0xff;
a8255_PB=table[qianwei];
a8255_PA=0xfb;
delays();
a8255_PA=0xff;
a8255_PB=table[baiwei];
a8255_PA=0xf7;
delays();
a8255_PA=0xff;
a8255_PB=table[shiwei];
a8255_PA=0xef;
delays();
a8255_PA=0xff;
a8255_PB=table[gewei];
a8255_PA=0xdf;
delays();
a8255_PA=0xff;
}
/***********************************************/
voidsign(void)
{
a8255_PB=0x7f;//显示分隔符“-”,表示反转
a8255_PA=0xfe;
delays();
a8255_PA=0xff;
}
/******************************************/
voiddelay(void)//按键时的延时消抖子程序
{
uchari;
for(i=250;i>0;i--);
}
/*************************************************/
ucharinkey()//按键扫描仿真得约延时0.00125650S
{
uchari,j=0x10,k;
ucharkeytab[16]={0x18,0x28,0x48,0x88,0x14,0x24,
0x44,0x84,0x12,0x22,0x42,0x82,0x11,0x21,0x41,0x81
};//按键编码
a8255_CON=0x81;//PA,PB输出PC高四位输出低四位输入
a8255_PC=0x00;
a8255_PA=0xff;
a8255_PB=0xff;
for(i=0;i<4;i++)
{
a8255_PC=j;
a8255_PA=0xff;
k=a8255_PC;//读键盘状态
k=k&0x0f;
if(k!
=0)
{
delay();//延时消除抖动
k=a8255_PC;//重新读PC口状态
k=k&0x0f;//屏蔽高四位,存低四位状态
if(k!
=0)//k不为0有键按下则跳出循环
break;
}
j=j<<1;
delay();
}
k=k+j;//将按键状态赋给k
for(i=0;i<16;i++)
{
if(keytab[i]==k)break;
}
returni;//返回按键编号值
}
/***************************************************/
voiddelaym()//送励磁激励间隔时间
{
uchark;
uints;
k=rate;
do
{
for(s=0;s<100;s++);//循环一次约0.00040300S
}while(--k);//延时约为t==rate*0.000403S
}
/**************************************************/
voidmotor_ffw()//步进电机正转
{
uchari;
/*对于八拍一个周期步进电机电机转45度,(28BYJ-48型进电机步距角为5.625度,电机转64圈输出轴转一圈)*/
for(i=0;i<8;i++)
{
P1=FFW[i];//取数据,送励磁激励
delaym();//调节转速
}
}
/****************************************************/
voidmotor_rev()//步进电机反转
{
uchari;
for(i=0;i<8;i++)//一个周期转45度
{
P1=REV[i];//取数据,送励磁激励
delaym();//调节转速
}
}
/**************************************************/
voidint_0()interrupt0using2
{
if(int_P0==0)
{
while(!
int_P0);
/*外部事件0每发生一次中断rate减1,
励磁激励频率变大步进电机转速变增大*/
rate--;
if(rate==2)
{
rate=3;
}
}
}
voidint_1()interrupt2using3
{
if(int_P1==0)
{
while(!
int_P1);
rate++;
/*外部事件1每发生一次中断rate加1,
励磁激励频率变小步进电机转速减小*/
if(rate==93)
{
rate=92;
}
}
}
/************************************************/
voidmain(void)
{
ucharn=0,k=0xdf,x;
EA=1;
EX0=1;
IT0=0;
EX1=1;
IT1=0;
PX1=1;
v=0;
while
(1)
{
x=1;
rate=0x30;//初始化励磁激励
n=inkey();//按键编号值赋给n
if(n==0)//步进电机匀速反转键盘
{
do
{
n=inkey();//扫描键盘是否有键按下
if(n==15)
{
x=0;
}
if(n==12)//电机暂停控制键
{do{
n=inkey();
}while(!
(n^12));
}
motor_ffw();//正转
display();
}while(x);
}
if(n==4)//正转控制键
{
do
{
n=inkey();//扫描键盘是否有键按下
if(n==15)//步进电机停止控制键盘
{
x=0;
}
if(n==12)//暂停键盘
{do{
n=inkey();
}while(!
(n^12));
}
motor_rev();//步进电机运行,反转方式
display();
sign();
}while(x);
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机