步进机控制课程设计.docx
《步进机控制课程设计.docx》由会员分享,可在线阅读,更多相关《步进机控制课程设计.docx(21页珍藏版)》请在冰点文库上搜索。
步进机控制课程设计
清华大学单片机课程设计
步进机控制
姓名:
学号:
院系:
指导老师:
第1章课程设计的目的和要求
1.1课程设计的目的和要求
《单片机应用基础》课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的就是配合本课程的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。
1.2课程设计的预备知识及步骤
1.了解如何使用keilc与proteus软件
2.分析设计任务,构思需要达到的效果,了解步进电机的一些知识。
3.设计系统工作原理图,利用PROTEUS软件绘制系统工作原理图;
4.购买电路所需的电子元件。
5.系统控制程序设计、调试及实现:
(1)根据要求,写出完整的程序流程图;
(2)了解C51编写语句,将设计程序输入、汇编,排除语法错误,生成*.OBJ文件;
(3)按所设计的原理图,焊接电路板,检查无误;
(4)将目标文件传送到AT89S52芯片上,执行并运行调试该程序,最终实现控制要求.
单片机的应用系统随着用途不同,它们的硬件和软件结构差别很大,但系统设计的方法和步骤基本上是相同的。
一般包括总体设计、硬件设计、软件设计、仿真调试、固化程序、应用系统独立运行等步骤。
1.3课程设计的任务
根据给定的任务要求选择合适的单片机和其他电子元器件,进行系统硬件电路设计和软件编程,根据系统制作并调试系统电路板,使之实现任务要求。
有关参数选择要求符合国家标准。
具体设计内容如下:
1.能观察到电机加速减速,通过发光二极管显示。
2.能观察到电机的正反转,并通过五个发光二极管的亮灭显示。
第2章步进电机的原理介绍
2.1步进电机的工作原理
步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
本次设计是采用步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。
当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。
每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。
当通电状态的改变完成一个循环时,转子转过一个齿距。
四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。
。
。
),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。
。
。
),八拍(A-AB-B-BC-C-CD-D-DA-A。
。
。
)
其相序分配表如下:
2.2步进电机24BYJ48的主要参数
1.额定电压:
12VDC(另有电压:
5V、6V、24V)
2.相数:
4
3.减速比:
1/64(另有减速比:
1/16、1/32)
4.步距角:
5.625°/64
5.驱动方式:
4相8拍
6.空载牵入频率:
≥600Hz
7.空载牵出频率:
≥1000Hz
8.牵入转矩:
≥34.3mN.m(120Hz)
2.3步进电机的基本概念
2.3.1相数
产生不同对极N、S磁场的激磁线圈对数,常用m表示。
2.3.2拍数
完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,比如说本次设计中使用的24BYJ48有单(单相绕组通电)四拍(A-B-C-D-A。
。
。
),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。
。
。
),八拍(A-AB-B-BC-C-CD-D-DA-A。
。
。
)
2.3.3步距角
对应一个脉冲信号,电机转子转过的角位移用θ表示。
θ=360度(转子齿数J*运行拍数),以常规二相,转子齿为50齿电机为例。
四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。
2.3.4信号分配
四相步进电机按照其通电方式的不同,可以分为单四拍,双四拍和双八拍三种工作方式。
单四拍与双四拍的步距角相等,均为11.25度,而八拍的步距角则是单四拍与双四拍的一半,5.625度。
单(单相绕组通电)四拍(A-B-C-D-A。
。
。
),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。
。
。
),八拍(A-AB-B-BC-C-CD-D-DA-A。
。
。
)。
这里选取的是双相八拍的工作方式。
第3章总体设计思路
3.1方案与设计思路
因为步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。
所以怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。
用单片机来产生这个脉冲信号,通过单片机的P1口输出脉冲信号,因为所选电机是四相的,所以只需要P1口的低四位P1.0~P1.3分别接到电机的四根电线上。
定时器定时来调整电机的转速,通过键盘的按钮,就可以改变定时初值从而改变了电机的转速,单片机上P0.0~P0.4连的是按键,这里键盘上的K1键为启动,K2键为正转键,K3键为反转键,K4键为减速键,K5为加速键。
P0口接LED,可以显示当前的电机的各种状态。
具体结构见3-1框图。
3.2总框图
第四章硬件的设计与选取
4.1步进电机的驱动
步进电机的驱动采用ULN2003A,接到单片机的P1.0~P1.3,uln2003的作用:
ULN2003A是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。
可直接驱动继电器等负载。
输入5VTTL电平,输出可达500mA/50V。
ULN2003A是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
具体如图5-1
图5-1步进电机驱动及其接口图
驱动电路与步进机的连接:
4.2单片机的选取
目前市面上的通用型单片机种类很多,且适合不同应用场合的新产品不断出现,但目前的应用状况,以8位中档MCS-51系列单片机的应用最为普遍。
基于这次课程设计的要求不高,我们可以选用51系列或52系列单片机,其有可靠性高,易于扩展以及实用性好等特点,完全可以满足我们的控制要求。
其图如下5-2:
图5-2AT89C52单片机
4.3LED显示模块
P0接液晶的数据传送口.
其接线图如下图5-3:
图5-3LED与单片机接口原理图
4.4按键电路设计
此次设计只用到了五个按键,故采用独立按键,P0.0~P0.4分别接到K1~K5。
其原理图如下图5-4:
图5-4按键与单片机接口原理图
4.5最小系统
单片机最小系统或者称为最小应用系统,素质用最少的元件组成的单片机可以工作的系统,对51系列单片机来说,最小系统一般应该包括:
单片机、复位电路、晶振电路。
复位电路:
使用了独立式键盘,单片机的P1口键盘的接口。
复位电路采用手动复位,所谓手动复位,是指通过接通一按钮开关,使单片机进入复位状态,晶振电路用30PF的电容和一12M晶体振荡器组成为整个电路提供时钟频率。
如图3示。
晶振电路:
8051单片机的时钟信号通常用两种电路形式电路得到:
内部震荡方式和外部中断方式。
在引脚XTAL1和XTAL2外部接晶振电路器(简称晶振)或陶瓷晶振器,就构成了内部晶振方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
内部振荡方式的外部电路如图5示。
其电容值一般在5~30pf,晶振频率的典型值为12MHz,。
图3复位及时钟振荡电路
4.6硬件的总体电路连接
图总体原理图
第五章软件设计
流程图如下:
5.2步进电机控制系统原理
5.2.1脉冲序列的生成
图4.2脉冲的生成
接通和断开时间可用延时的办法控制。
要求:
确保步进到位。
延时时间计算举例:
voiddelay()
{
uchari,j;
for(i=2;i>0;i--)
{for(j=250;j>0;j--);}
}
//i=1000时,结果是输出周期为234ms的方波,即delay(1000)=117ms
//延时时间=i*(j*2T+2T)+iT+T,T为及其周期,其中i、j小于255,
大于则只取16进制的后8位。
计算方法不是此种方法
//i=100j=250时,T=1微妙时,延时时间=50.301ms,通过示波器验证
//i=1000,则转为十六进制为03E8,取i=0xe8=232
//则此时延时时间为116697微秒,116.697ms
5.2.2方向控制
步进电机旋转方向与内部绕组的通电顺序相关。
四相八拍,通电顺序为:
正转:
AABBBCCCDDDA
反转:
AADDDCCCBBBA
改变通电顺序可以改变步进电机的转向
5.2.3脉冲分配
通过单片机控制软件实现脉冲分配:
软件法是完全用软件的方式,按照给定的通电换相顺序,通过单片机的IO向驱动电路发出控制脉冲。
四相八拍控制字如下表所示:
表4-1四相八拍工作方式的控制字
通电状态
P0.3
P0.2
P0.1
P0.0
A
0
0
0
1
AB
0
0
1
1
B
0
0
1
0
BC
0
1
1
0
C
0
1
0
0
CD
1
1
0
0
D
1
0
0
0
注:
0代表使绕组断电,1代表使绕组通电
在程序中,只要依次将这8个控制字送到P1口,步进电机就会转动一个齿距角,每送一个控制字,就完成一拍,步进电机转过一个步距角。
改变通电顺序可以改变步进电机的转向。
C语言程序如下:
#include
#include
#defineucharunsignedchar
sbitrun=P0^0;
sbitZ_key=P0^1;
sbitF_key=P0^2;
sbitDEC_key=P0^3;
sbitADD_key=P0^4;
ucharm,i;
intnum=30;
voiddelay(uchari)/*延时函数*/
{
ucharj,k;
for(j=i;j>0;j--)
for(k=100;k>0;k--)
{};//延时i*k*(1/晶振频率)*12μS
}
voidkey(void)/*加减速按键检测处理函数*/
{
if(run==0)
{
delay(5);/*加速键按下*/
}
if(ADD_key==0)
{
delay(5);/*加速键按下*/
num=num+1;/*速度标示加1*/
}
if(DEC_key==0)
{
delay(5);/*减速键按下*/
num=num-1;/*速度标示减1*/
if(num<1)
{
num=0;
}/*达到最小0则保持*/
}
}
voidqudongZ()/*电机正转*/
{
P1=0xfe;
delay(num);
P1=0xfc;
delay(num);
P1=0xfd;
delay(num);
P1=0xf9;
delay(num);
P1=0xfb;
delay(num);
P1=0xf3;
delay(num);
P1=0xf7;
delay(num);
if(DEC_key==0||ADD_key==0)
{
key();
}
if(F_key==0&&Z_key==1)
{
voidqudongF();
}
if(run==1)
{
P1=0xff;
}
}
voidqudongF()/*电机反转*/
{
P1=0xf7;
delay(num);
P1=0xf3;
delay(num);
P1=0xfb;
delay(num);
P1=0xf9;
delay(num);
P1=0xfd;
delay(num);
P1=0xfc;
delay(num);
P1=0xfe;
delay(num);
if(DEC_key==0||ADD_key==0)
{
key();
}
if(F_key==1&&Z_key==0)
{
voidqudongZ();
}
if(run==1)
{
P1=0xff;
}
}
voidmain()//主程序
{
{
while
(1)
{
if(run==0)
{
if(Z_key==0&&F_key==1)
{
qudongZ();
}
if(Z_key==1&&F_key==1)
{
qudongZ();
delay(num);
}
if(Z_key==1&&F_key==0)
{
qudongF();
}
}
if(run!
=0)
{
P1=0xff;
}
}
}
}
第六章程序的仿真与调试
程序在keilC51下的编译图
protues中的硬件模拟图
第7章总结
参考文献:
:
: