基于单片机的步进电机控制单片机课程设计Word格式文档下载.docx
- 文档编号:17336261
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:132.13KB
基于单片机的步进电机控制单片机课程设计Word格式文档下载.docx
《基于单片机的步进电机控制单片机课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的步进电机控制单片机课程设计Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
四、硬件线路图及主要芯片说明
本系统主要由按键电路、拨码开关、单片机最小系统、AT89c52单片机、步进电机、驱动电路以及步进电机等几部分组成。
本系统采用两个独立开关三个独立按钮,分别进行启动、停止、正反转以及高低速的控制。
驱动电路采用ULN2003实现步进电机的驱动。
步进电机的供电采用独立12V供电。
.
1.总体设计框图
与传统步进控制器相比较有以下优点:
1.用微型机代替了步进控制器把并行二进制码转换成串行脉冲序列,并实现方向控制;
2.只要负载是在步进电机允许的范围之内,每个脉冲将使电机转动一个固定的步距角度。
3.根据步距角的大小及实际走的步数,只要知道初始位置,便可知道步进电机的最终位置。
2.主要硬件线路图
(1)单片机最小系统的硬件原理接线图:
A、接电源:
VCC(PIN40)、GND(PIN20)。
加接退耦电容0.1uF
B、接晶体:
X1(PIN18)、X2(PIN19)。
注意标出晶体频率(选用12MHz),还有辅助电容20pF
C、接复位:
RES(PIN9)。
接上电复位电路,以及手动复位电路,分析复位工作原理
D、接配置:
EA(PIN31)。
说明原因。
(2)单片机内部I/O部件
A、四个8位通用I/O端口,对应引脚P0、P1、P2和P3;
B、两个16位定时计数器;
(TMOD,TCON,TL0,TH0,TL1,TH1)
C、一个串行通信接口;
(SCON,SBUF)
D、一个中断控制器;
(IE,IP)
3.ULN2003芯片说明
ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN复合晶体管组成。
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。
可直接驱动继电器等负载。
当输入5VTTL电平时,输出可达500mA/50V。
如果ULN2003的达林顿管输入端输入低电平使其截止,其驱动的元件是感性元件,则电流不能突变,此时会产生一个高压;
如果没有二极管,达林顿管会被击穿,所以这个二极管主要起保护作用。
由于ULN2003是集电极开路输出,为了让这个二极管起到续流作用,必须将COM引脚(pin9)接在负载的供电电源上,只有这样才能够形成续流回路。
五、系统工作原理
1.步进电机工作原理
步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;
同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图所示:
(a)(b)(c)
步进电机的工作方式时序图
步进电机的驱动电路根据控制信号工作,控制信号由单片机产生,其基本原理作用如下:
(1)控制换相顺序
通电换相这一过程称为脉冲分配。
例如:
四相步进电机的八拍工作方式,其各相通电顺序为A—AB—B—BC—C—CD—D—DA,通电控制脉冲必须严格按照这一顺序分别控制A,AB,B,BC,C,CD,D,DA相的通断。
(2)控制步进电机的转向
如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
(3)控制步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。
两个脉冲的间隔越短,步进电机就转得越快。
调整单片机发出的脉冲频率,就可以对步进电机进行调速。
2.采样原理
步进电机根据单片机发出的脉冲序列来决定其工作方式为单四拍、双四拍和八拍,并能将脉冲信号转换成角位移。
根据步进电机接收到的脉冲序列的不同,决定其自身的通电相序。
3.数据存放单元安排
单片机将立即数存放到相应的工作寄存器中,不同的延时子程序里,将不同的立即数存放到相应的工作寄存器中,以实现不同长度的延时,进而控制电机运行速度,具体数据分配如下表:
工作寄存器
十进制立即数
十六进制立即数
R4
40
28H
R5(低速)
250
FAH
R5(中速)
120
78H
R5(高速)
50
32H
4.按键和显示处理
键盘在单片机应用系统中能实现向单片机输入数据、传送命令等功能,是人工干预单片机的主要手段。
键盘实质是一组按键开关的集合。
键盘所用开关为机械弹性开关,利用了机械触点的合、断作用。
一个电压信号在机械触点的断开、闭合过程中,都会产生抖动,一般为5—10ms;
两次抖动之间为稳定的闭合状态,时间由按键动作所决定;
第一次抖动前和第二次抖动后为断开状态。
系统采用4个拨码开关用来控制步进电机状态转换,分别是总开关、转向控制、中速档和高速档,拨码开关接通时,电源通过上拉电阻和开关到单片机I/O口形成通路,给单片机送入一个高电平,高电平即为有效电平。
状态指示采用6个发光二极管分别表示步进电机的启动停止、正转、反转、低速运行、中速运行和高速运行状态,发光二极管正极接电源,负极接单片机I/O口,同时,每个发光二极管需要接限流电阻起保护作用。
为了确保单片机对一次按键动作只确认一次按键,必须消除抖动的影响。
消除按键抖动通常采用硬件、软件两种方法。
由于硬件消抖电路设计复杂,本设计中没有采用,在此不再详细叙述;
软件消抖适合按键较多的情况,方便简单。
其原理是在第一次检测到有键按下时,执行一段延时10ms的子程序后在确认该键电平是否仍保持闭合状态电平,如果保持闭合状态电平则确认为真正有键按下,从而消除了抖动的影响。
其原理图如图所示:
键盘控制模块原理图
采用LED数码管动态显示数据与个项参数,方法简单,容易控制,成本低。
设计如下图
P00
P01
P02
P03
P04
P05
P06
P07
P25
P26
P27
AT89C51
Stc
P24
IN1
IN2
IN3
IN4
OUT4
OUT3
OUT2
OUT1
ULN2803
a
b
f
c
g
d
e
[LED1]
h
[LED2]
[LED3]
[LED4]
5.中断处理(定时器中断0服务程序流程图)
当CPU检测到与拨码开关相连引脚电平的变化时,停止当前执行的程序,转而跳至标号处去执行中断请求所对应的程序,当执行完中断程序后,CPU跳回先前所执行的程序。
开始
设置T0时间参数
判断转动方向控制位的值
有控制位查询输出脉冲
退出
改变方向控制变量值
是
六、程序框图
七、程序清单
根据单片机外围电路的设计,单片机的P00、P01作为开关输入,P02、P03、P04为按键输入,主程序根据键盘扫描的结果进行相应的操作,并由定时器0产生定时中断,输出控制步进电机的正反转(利用给步进电机送入与原来相反的脉冲即可)、步进电机的高低速控制(修改T0的初值)。
#include<
reg52.h>
//头文件程序定义及变量声明
#defineuintunsignedint//宏定义
#defineucharunsignedchar//宏定义
ucharcodeZF[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
//正转编码表
ucharcodeFF[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
//反转编码表
ucharcodeSM[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数码表
sbitk1=P3^2;
//定义K1为启动/停止按键
sbitk2=P3^3;
//定义K2为加速按键
sbitk3=P3^4;
//定义K3为减速按键
sbitk4=P3^5;
//定义K4为正/反转按键
ucharj=0;
uinttime=12000;
//time//为每两拍之间的间隔时间
uinttemp2;
uchartemp1,h,w,p,q,f;
//1ms延时函数(12M晶振下)
voiddelay(ucharz)//延时函数
{
uchars,v;
for(s=0;
s<
z;
s++)
for(v=0;
v<
125;
v++);
//一个for循环8个机器周期(125*8*1us=1ms)
}
voiddisplay(uchara,ucharb,ucharc,uchard)//显示函数
{
if(f%2)
{P2=0xfe;
P0=0xbf;
//f为奇数时代表反转,则第一个数码管显示“-”,否则不显示
delay
(1);
P0=0xff;
}//消隐
P2=0xfd;
P0=SM[a];
//显示十位
//消隐
P2=0xfb;
P0=SM[b]&
0x7f;
//显示个位(带小数点)
P0=0xff;
P2=0xf7;
P0=SM[c];
//显示小数点后第一位小数
//消隐
P2=0xef;
P0=SM[d];
//显示小数点后第二位小数
}
voiddispose()//数值处理函数
temp1=14648/time;
h=temp1/10;
//十位
w=temp1%10;
//个位
temp2=14648%time;
p=temp2/1000;
//小数点后第一位小数
q=temp2%1000*10/1000;
//小数点后第二位小数
voidmain()//主函数
uchark;
TMOD=0x01;
//定义定时器0工作方式1
EA=1;
//开总中断
ET0=1;
//开定时器0中断
TH0=(65536-time)/256;
TL0=(65536-time)%256;
//装定时器初值
TR0=1;
//开定时器0
while
(1)
{
if(k1==0){delay(5);
//延时消抖
if(k1==0){TR0=~TR0;
k++;
}//启动/停止
}while(!
k1);
//等待按键释放
if(k2==0){delay(5);
//延时消抖
if(k2==0)time=time-150;
}//加速while(!
k2);
if(k3==0){delay(5);
if(k3==0)time=time+150;
}//减速while(!
k3);
//等待按键释放
if(k4==0){delay(5);
if(k4==0)f++;
}//正/反转while(!
k4);
dispose();
if(k%2)
display(0,0,0,0);
//停止时显示00.00
else
display(h,w,p,q);
//正常运转时调用显示函数
}
voidtimer0()interrupt1//定时器0中断处理函数
{
if(f%2)
{if(j==8)j=0;
P1=FF[j++];
}//f为奇数时代表反转,则送反转编码到P1口
else
P1=ZF[j++];
}//否则送正转编码到P1口
//重新装初值
八、设计体会
这一学期我们学习了单片机原理及其应用这门课程,作为一名自动化专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
在课程设计环节中,我觉得最困难的是程序设计,首先要理解原理,然后进行流程设计,转化为程序,进行调试,我们在调试的时候出现很多错误,改错的过程是非常痛苦的,好在我们耐心的一一克服了,最后敲定了合理的程序。
但问题并没有因此结束,当我们装上步进电机后,转速等级之间的转速差别,是否能够带动电机,显示闪烁快慢,转速变慢时出现转动打嗝和颤抖的情况,往往让我感到手足无措,但是在老师的指导和同学的帮助下我们小组都一一克服了,最后得到了较为满意的结果,在此感谢老师的悉心指导。
还有一点体会就是要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便,通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 步进 电机 控制 课程设计