北华航天工业学院华航微机控制技术计算机控制技术课程设计步进电机Word文档下载推荐.docx
《北华航天工业学院华航微机控制技术计算机控制技术课程设计步进电机Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北华航天工业学院华航微机控制技术计算机控制技术课程设计步进电机Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
4.要求每组选择的步进电机控制字不同;
5.用单片机做控制微机;
三、设计原理分析
1、步进工作电机原理
1.1步进电机的特点:
(1)一般步进电机的精度为步进角的3-5%,且不累积。
。
(2)步进电机的力矩会随转速的升高而下降。
当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;
频率越高,反向电动势越大。
在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。
(3)步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。
步进电机有一个技术参数:
空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。
在有负载的情况下,启动频率应更低。
如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。
1.2步进电机的工作原理:
步进电机是一种用电脉冲进行控制,将电脉冲信号转换成相位移的电机,其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比,每一个脉冲信号可使步进电机旋转一个固定的角度.脉冲的数量决定了旋转的总角度,脉冲的频率决定了电机运转的速度.当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;
同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
四相步进电机有两种运行方式1.四相四拍;
2.四相八拍。
(1)拍数:
完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即A-B-C-D-A。
(2)步距角:
对应一个脉冲信号,电机转子转过的角位移用θ表示。
θ=360度(转子齿数J*运行拍数),以常规二、四相,转子齿为50齿电机为例。
四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。
计算转速#以基本步距角1.8°
的步进电机为例(现在市场上常规的二、四相混合式步进电机基本步距角都是1.8°
),四相八拍运行方式下,每接收一个脉冲信号,转过0.9°
,如果每秒钟接收400个脉冲,那么转速为每秒400X0.9°
=360°
,相当与每秒钟转一圈,每分钟60转。
1.3步进电机详细调速原理:
步进电机的调速一般是改变输入步进电机的脉冲的频率来实现步进电机的调速,因为步进电机每给一个脉冲就转动一个固定的角度,这样就可以通过控制步进电机的一个脉冲到下一个脉冲的时间间隔来改变脉冲的频率,延时的长短来具体控制步进角来改变电机的转速,从而实现步进电的调速。
具体的延时时间可以通过软件来实现。
这就需要采用单片机对步进电机进行加减速控制,实际上就是改变输出脉冲的时间间隔,单片机控制步进电机加减法运转可实现的方法有软件和硬件两种,软件方法指的是依靠延时程序来改变脉冲输出的频率,其中延时的长短是动态的,软件法在电机控制中,要不停地产生控制脉冲,占用了大量的CPU时间,使单片机无法同时进行其他工作;
硬件方法是依靠单片机内部的定时器来实现的,在每次进入定时中断后,改变定时常数,从而升速时使脉冲频率逐渐增大,减速时使脉冲频率逐渐减小,这种方法占用CPU时间较少,在各种单片机中都能实现,是一种比较实用的调速方法。
型号为MP28GA的步进电机和ULN2003APG的驱动芯片步进电机的驱动信号必须为脉冲信号,转动的速度和脉冲的频率成正比!
本步进电机步进角为5.625度.一圈360度,需要64个脉冲完成。
2、总体原理分析
使用AT89C51单片机作为核心控制部件,采用12M晶体振荡器及微小电容构成振荡电路;
采用四相双四拍步进电机作为驱动机构;
用一个四位一体共阳极数码显示管作为显示部分,构成步进电机控制系统的主体结构,配合独立式键盘和外部中断按键完成步进电机控制系统的启动、停止、正转、反转、加速、减速等各项功能;
两个LCD指示灯实现正反转运行状态显示的功能。
LED数码显示器采用共阳极接法以及动态扫描的形式。
P0输入输出口输出数据显示段码,P2口实现3个LED数码管位选的功能;
采用p3.6和p3.7口分别与二极管组成的电路来驱动LCD指示灯。
键盘控制采用独立式按键,每个按键的一端均接地,另一端直接和P3口相连。
键盘通过检测输入线的电平状态就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单,比较适合按键较少或操作速度较高的场合。
通过编写程序使用单片机的定时计数器,以及软件延时,中断资源来实现步进电机的相关控制。
软件主程序主要完成程序显示区的清零、中断初始化(外部中断、定时中断)、调用显示子程序和键盘扫描程序构成;
外部中断子程序实现步进电机的加减控制;
显示子程序实现段码输送和位选的功能,
此步进电机控制系统的硬件整体结构如图1-1所示。
图1-1步进电机控制系统的硬件结构图
四、硬件原理图
五、程序流程图
1、主程序流程图
六、程序清单
#include<
reg51.h>
#defineucharunsignedchar
#defineDataPortP0//数码管段选控制端
#defineCtrlPortP2//数码管位选控制端
sbitzf=P3^1;
//正反转控制;
sbiton_off=P3^0;
//启动,停止
sbitzl=P3^6;
、//LCD翻转指示灯控制口
sbitfl=P3^7;
//LCD正转指示灯控制口
ucharSpeed,tem,tem_1;
//速度变量定义
ucharflag;
//运行状态控制变量
ucharbiao[2][4]={{0x09,0x03,0x06,0x0c},{0x0c,0x06,0x03,0x09}};
//正,反转表格
ucharconstDuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳数码管显示段码值0123456789
ucharcodeWeiMa[]={0xf8,0xf4,0xf2,0xf0};
//共阳数码管位码
ucharTempData[3];
//存储显示值的全局变量,用于暂存数码管显示的数字
voidDisplay(void);
//数码管显示函数声明
voidInit_Timer0(void);
//定时器0初始化
voidDelayMs(ucharm);
voidDelayUs2x(uchart);
//微妙延时函数声明
/*-****************************************************
主函数
********************************************************/
voidmain()
{
uchari;
EA=1;
//全局中断开
IT0=1;
//1表示边沿触发
IT1=1;
Init_Timer0();
Speed=80;
while
(1)
{
if(on_off==0)
{
TempData[0]=DuanMa[(15000/Speed)%10];
TempData[1]=DuanMa[(1500/Speed)%10];
TempData[2]=DuanMa[(150/Speed)%10];
EX0=1;
EX1=1;
if(zf==1)//正转
zl=1;
fl=0;
for(i=0;
i<
4;
i++)//4相
P1=biao[zf][i];
//输出对应的相可以自行换成反转表格
DelayMs(Speed);
//改变这个参数可以调整电机转速,数字越小,转速越大
}
}
else//反转
zl=0;
fl=1;
{
P1=biao[zf][i];
//输出对应的相可以自行换成正转表格
DelayMs(Speed);
}
}
}
else
IT0=0;
IT1=0;
TempData[0]=DuanMa[0];
TempData[1]=DuanMa[0];
TempData[2]=DuanMa[0];
/****************************************************************************
外部中断0子程序(实现减速)
****************************************************************************/
voidISR_INT0(void)interrupt0
{
if(!
INT0)
DelayMs
(1);
//去抖动
while(!
INT0)//等待按键释放
tem=Speed;
if(tem>
=150)
tem=tem;
tem=tem+10;
Speed=tem;
}
/*****************************************************************************
外部中断1程序(实现加速功能)
*****************************************************************************/
voidISR_INT1(void)interrupt2
INT1)
INT1)//等待按键释放
tem_1=Speed;
if(tem_1<
=50)
tem_1=tem_1;
else
tem_1=tem_1-10;
Speed=tem_1;
定时器0初始化子程序
voidInit_Timer0(void)
TMOD=0x01;
//使用模式1,16位定时定时器
ET0=1;
//定时器中断打开
TR0=1;
//定时器开关打开
}
定时器0中断子程序
voidTimer0_isr(void)interrupt1
TH0=(65536-2000)/256;
//重新赋值2ms
TL0=(65536-2000)%256;
PT0=1;
//优先级打开
Display();
数码管显示子程序
voidDisplay(void)
staticuchark;
DataPort=0;
//清空数据,防止有交替重影
for(k=0;
k<
k++)
CtrlPort=WeiMa[k];
//取位码
DataPort=TempData[k];
//取显示数据,段码
DelayUs2x(40);
}
uS延时函数,大致延时长度T=t*2uS
voidDelayUs2x(uchart)
while(--t);
mS延时函数
voidDelayMs(ucharm)
while(m--)
DelayUs2x(250);
七、调试运行
1、步进电机正转启动,转速为187rad/min(蓝色指示灯显示)
2、按下减速键,正转减速到125rad/min
3、按下加速键,正转加速到214rad/min
4、按下电机正反转向控制键,电机反向旋转187rad/min(红色指示灯显示)
八、设计心得体会
通过此次步进电机控制系统课程设计使我们受益匪浅,不仅使我们对说学的单边机的理论知识有了更深刻的理解和体会,而且对步进电机的工作原理有了进一步了解(步进电机的转向和转速分别有电流相序和延时参数设置)。
在步进电机控制系统的设计过程中对单边机定时器0中断和外部中断的开启、设置和应用;
LED数码管的动态显示(LED段码输出、位选功能);
单片机I/O端口读取、输出的知识有更深刻得学习;
同时在程序编写过程中锻炼了的分模块思考问题的思维方式和有序书写的良好习惯。
在此次课程设计过程使我们充分认识到认真、严谨、负责、团结、坚持不懈的学习工作态度的重要性,虽然在课程设计中我们会遇到某些困难但是只要不放弃,并积极的面对问题想办法去解决,问题最终一定能得到解决。
总之,此次课程的各方面能力得到了很好锻炼。
九、参考文献
[1]李朝青.单片机原理及接口技术[M].北京:
北京航空航天大学出版社,1988.[2]李勋等.单片机实用教程[M].北京:
北京航空航天大学出版社,2000
[3]王幸之等.单片机应用系统抗干扰技术[M].北京:
北京航空航天大学出版社,1999
[4]何为民.低功耗单片微型计算机系统设计[M].北京:
北京航空航天大学出版社,1994
[5]李杏春等.8090单片机原理及实用接口技术[M].北京:
北京航空航天大学出版社,1996