基于单片机控制的步进电机毕业论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机控制的电机
摘要:介绍了步进电机和直流电机原理与其驱动程序控制控制模块,通过AT89S52单片机与脉冲分配器(又称逻辑转换器) L298完成步进电机和直流电机各种运行方式的控制。

实现步进电机的正反转速度控制并且显示数据。

整个系统采用模块化设计,结构简单、可靠,通过按键控制,操作方便,节省成本。

关键词:步进电机;单片机控制; AT89S52;
1、引言
随着数字化技术发展,数字控制技术得到了广泛而深入的应用。

步进电机是一种将数字信号直接转换成角位移或线位移的控制驱动元件, 具有快速起动和停止的特点。

因为步进电动机组成的控制系统结构简单,价格低廉,性能上能满足工业控制的基本要求,所以广泛地应用于手工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,投影仪、数码摄像机、大型望远镜、卫星天线定位系统、医疗器件以与各种可控机械工具等等。

直流电机广泛应用于计算机外围设备( 如硬盘、软盘和光盘存储器) 、家电产品、医疗器械和电动车上, 无刷直流电机的转子都普遍使用永磁材料组成的磁钢, 并且在航空、航天、汽车、精密电子等行业也被广泛应用。

在电工设备中的应用,除了直流电磁铁(直流继电器、直流接触器等)外,最重要的就是应用在直流旋转电机中。

在发电厂里,同步发电机的励磁机、蓄电池的充电机等,都是直流发电机;锅炉给粉机的原动机是直流电动机。

此外,在许多工业部门,例如大型轧钢设备、大型精密机床、矿井卷扬机、市电车、电缆设备要求严格线速度一致的地方等,通常都采用直流电动机作为原动机来拖动工作机械的。

直流发电机通常是作为直流电源,向负载输出电能;直流电动机则是作为原动机带动各种生产机械工作,向负载输出机械能。

在控制系统中,直流电机还有其它的用途,例如测速电机、伺服电机等。

他们都是利用电和磁的相互作用来实现向机械能能的转换。

1.电机的工作原理
1.步进电机原理
步进电机本质上是一个数字角度转换器。

以三相电机为例, 其结构原理见图1。

各相夹角为120°的定子磁极上均匀分布了5个矩形小齿, 没有绕组的转子圆周上也均匀的分布着40个小齿(相邻齿夹角为9°)。

利用电磁学的性质, 在某相绕组通电时, 相应的磁极产生磁场, 与转子形成磁路如此时定子的小齿与转子的小齿没有对齐, 则在磁场作用下, 转子就转动一定角度, 达到齿的对齐。

在单三拍控制方式下, 若A相通电, B、C相不通电, 在磁场作用下使转子齿和A相定子齿相对假设此时为初态并且令与A相中心对齐的转子齿为0号齿, 因为B相与A相相差120°,可知120°/9°=13 3⁄9, 不为整数, 即此时转子齿与B相不对齐, 只是13号齿靠近相的中心, 且相差3°。

如果此时突然变为B相通电, 而A、C相都不通电, 那么, 13号齿会在磁场的作用下转到与相中心对齐的位置, 这就是常说的走一步, 此时,转子转了。

这样, 按照A一B一C一A顺序通电次, 可以使转子转动9°。

那么步
进电机的步距角Q=(360/NZ)°(式中N=MC为运行拍数;M为控制绕组相数;C为状态系数, 单三拍或双三拍时C=1, 单六拍或双六拍时C=2为转子齿数)。

2.直流电机的原理
由直流电动机和发电机工作原理示意图可以看到,直流电机的结构应由定子和转子两大部分组成。

直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁场,由机座、主磁极、换向极、端盖、轴承和电刷装置等组成。

运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势,是直流电机进行能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成。

直流电机的结构:电机要实现机电能量变换,电路和磁路之间必须有相对运动。

所以旋转电机具备静止的和旋转的两大部分。

静止和旋转部分之间有一定大小的间隙,称为气隙。

静止的部分称为定子,作用是产生磁场和作为电机的机械支撑。

包括主磁极、换向极、机座、端盖、轴承、电刷装置等。

旋转部分称为转子或电枢,作用是感应电势实现能量转换。

包括电枢铁心,电枢绕组,换向器、轴和风扇等。

定子部分:1、主磁极:也称为主极。

作用是产生气隙磁场。

2、换向极:也称为附加极或间极。

作用是改善换向。

装在主极之间。

3、机座:由铸钢或厚钢板焊成。

是电机的机械支撑。

4、电刷装置:将直流电压、电流引入或引出的装置。

其组数与主极极数相等。

转动部分:(转子部分)1、电枢铁心:主磁路的主要部分与嵌放电枢绕组,由硅钢片迭压而成。

2、电枢绕组:由许多按一定规律联接的线圈组成。

用来感应电势和通过电流,是电路的主要部分。

3、换向器:由许多彼此绝缘的换向片构成。

2.硬件系统
1.原理流程
2.ULN2003
ULN是集成达林顿管IC,部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。

它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。

ULN是集成达林顿管IC,部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。

用户输出口的外接负载可根据以上参数估算。

采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。

通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。

ULN2003是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.资料的最后有引用电路,9脚可以悬空。

比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。

ULN2003的作用:ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。

可直接驱动继电器等负载。

输入5VTTL电平,输出可达500mA/50V。

ULN2003是高耐压、大电流达林顿列,由七个硅NPN达林顿管组成。

ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器。

ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。

ULN2003A引脚图与功能:
ULN2003 是高耐压、大电流、部由七个硅NPN 达林顿管组成的驱动芯片。

经常在以下电路中使用,作为显示驱动、继电器驱动、照明灯驱动、电磁阀驱动、伺服电机、步进电机驱动等电路中。

ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受 50V 的电压,
输出还可以在高负载电流并行运行。

ULN2003 的封装采用DIP—16 或SOP—16 。

ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。

每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力。

显示电路主要包括大型LED数码管BSI20-1(共阳极,数字净高12 cm)和高电压大电流驱动器ULN2003,大型LED数码管的每段是由多个LED发光二极管串并联而成的,因此导通电流大、导通压降高。

ULN2003是高压大电流达林顿晶体管阵列电路,他具有7个独立的反相驱动器,每个驱动器的输出灌电流可达500 mA,导通时输出电压约1 V,截止时输出电压可达50 V。

ULN2003的1~7脚为信号输入脚,依次对应的输出端为16~10脚,8脚为接地端。

当驱动电源电压为+12 V时,若要求数码管每段导通电流为40 mA,则每段的限流电阻为50Ω。

则一块ULN2003恰好驱动一个LED数码管的7段。

大数码管采用共阳极接法,低电平有效。

锁存器输出的电平经NPN三极管9014反相后,再由ULN2003放大后推动大数码管显示.
3.L298
L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,部同样包含4通道逻辑驱动电路。

可以方便的驱动两个直流电机,或一个两相步进电机。

L298是一款单片集成的高电压、高电流、双路全桥式电机驱动,设计用于连接标准TTL逻辑电平,驱动电感负载(诸如继电器、线圈、DC和步进电机)。

L298提供两个使能输入端,可以在不依赖于输入信号的情况下,使能或禁用L298器件。

L298低位晶体管的发射器连接到一起,而其对应的外部端口则可用来连接一个外部感应电阻。

L298还提供一个额外的电压输入,所以其逻辑电路可以工作在更低的电压下。

L298 特性:L298工作电压高达46V ;总DC电流达4A;低饱和电压;L298具有过温保护功能;逻辑“0”输入电压高达1.5V(高抗噪性) ;
4.74HC573
SL74HC573 跟LS/AL573 的管脚一样。

器件的输入是和标准CMOS 输出兼容的;加上拉电阻,他们能和LS/ALSTTL 输出兼容。

当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。

当锁存使能变低时,符合建立时间和保持
时间的数据会被锁存。

输出能直接接到CMOS,NMOS 和TTL 接口上;操作电压围:2.0V~6.0V;低输入电流:1.0Ua;CMOS 器件的高噪声抵抗特性。

5.软件系统
1、主程序
该系统采用多个模块的方式来实现对步进电机的控制。

控制模块采用单片机AT89S52 来控制L298,L298驱动电机转动。

2、直流电机驱动程序
#include <reg52.h>
sbit KEY0=P3^0; //控制按键,为高电平时,直流电机工作。

为0时启动步进电机;sbit KEY1 = P3^2; //控制直流电机调速按键
sbit KEY2 = P3^3; //控制步进电机正反转、停机按键
sbit PWM = P1^5; //定义直流电机PWM输出调速端口
unsigned char CYCLE; //定义周期该数字X基准定时时间如果是10 则周期是10 x 0.1ms
unsigned char PWM_Num=0;//直流电机速度档位;
unsigned char PWM_ON ;//定义高电平时间
unsigned char Flag;//定义步进电机正反转和停止标志位
unsigned char code F_Rotation[4]={0x1f,0x2f,0x4f,0x8f}; //步进电机正转表格unsigned char code B_Rotation[4]={0x8f,0x4f,0x2f,0x1f}; //步进电机反转表格
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void Delay(unsigned int i)//延时
{
while(--i);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
main()
{
unsigned char i;
EX0=1; //外部中断0开,控制直流电机
EX1=1; //外部中断1开,控制步进电机
IT0=1; //边沿触发
IT1=1; //边沿触发
EA=1; //全局中断开
P0=0x06 ; //开机显示直流电机1档位
TMOD|=0x01;//定时器设置 1ms in 12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
ET0=1; //打开中断
TR0=1;
CYCLE = 10;// 时间可以调整这个是10步调整周期10ms,PWM的周期不变,8位PWM就是256步
while(KEY0==1) //P3.0为高电平,则直流电机运转;
{
switch(PWM_Num){
case 0:P0=0x06;PWM_ON=0;break;//高电平时长,P0口段码为1;
case 1:P0=0x5B;PWM_ON=4;break;//P0口段码为2;
case 2:P0=0x4F;PWM_ON=6;break;//P0口段码为3
case 3:P0=0x66;PWM_ON=8;break; //P0口段码为4
case 4:P0=0x6D;PWM_ON=10;break; //P0口段码为停机S
default:break; }
}
while(KEY0==0) //KEY0按下,则步进电机工作。

{
while(Flag==0)
{
P0=0x71;//显示 F 标示正转
for(i=0;i<4;i++) //4相
{
P2=F_Rotation[i]; //输出对应的相可以自行换成反转表格
Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大 }
}
while(Flag==1)
{
P0=0x7C;//显示 b 标示反转
for(i=0;i<4;i++) //4相
{
P2=B_Rotation[i]; //输出对应的相
Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大 }
}
while(Flag==2) //停止
{
P0=0x6D;// 显示 S
P2=0x0F;
}
}
}
/******************************************************************/
/* 定时器中断函数,产生PWM波。

*/ /******************************************************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if (count==PWM_ON)
{
PWM = 1;
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0)
PWM = 0;
}
}
/******************************************************************/
/* 中断0入口函数,控制直流电机转速*/
/******************************************************************/
void ISR_Key1(void) interrupt 0 using 1
{
//定义档位
Delay(500);
if(!KEY1)
{
PWM_Num++; //s3按下触发一次
if(PWM_Num==5)
PWM_Num=0;
}
}
/******************************************************************/
/* 中断入口函数,控制步进正反转、停机*/
/******************************************************************/
void ISR_Key2(void) interrupt 2 using 1
{
Delay(500);
if(!KEY2)
{
Flag++; //s3按下触发一次
if(Flag==3)
Flag=0;
}
}
3、步进电机驱动程序
#include <reg52.h>
unsigned char Flag;//定义正反转和停止标志位
sbit KEY = P3^3;
unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正转表格
unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反转表格
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void Delay(unsigned int i)//延时
{
while(--i);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/ main()
{
unsigned char i;
EX1=1; //外部中断0开
IT1=1; //边沿触发
EA=1; //全局中断开
while(Flag==0)
{
P0=0x71;//显示 F 标示正转
for(i=0;i<4;i++) //4相
{
P1=F_Rotation[i]; //输出对应的相可以自行换成反转表格
Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大 }
}
while(Flag==1)
{
P0=0x7C;//显示 b 标示反转
for(i=0;i<4;i++) //4相
{
P1=B_Rotation[i]; //输出对应的相
Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大 }
}
while(Flag==2) //停止
{
P0=0x6D;// 显示 S
P1=0;
}
}
/******************************************************************/
/* 中断入口函数 */
/******************************************************************/
void ISR_Key(void) interrupt 2 using 1
{
Delay(500);
if(!KEY)
{
Flag++; //s3按下触发一次
if(Flag==3)
Flag=0;
}
}
6.结语
该系统设计通过单片机AT89S52来控制步进电机的运转状况, 实现了占用CPU时间少, 效率高; 易控制步进电机的转速; 易控制电机的转向; 提高了步进电机的步进精度等。

再有, 该设计过程考虑比较周全, 系统中除采用光电隔离电路有效地抑制电磁干扰, 以提高系统的可靠性外,还考虑到以下方面: 第一、在驱动回路中, 适当减缓MOSFET开关的开通速度,同时可以采用RCD 吸收回路, 抑制浪涌的产生, 减少电磁干扰的强度。

其次,合理的接地设计。

各单元回路的接地必须按照一定顺序连接。

同时步进电机各相通电显示只需在单片机的P2 口低三位外接3个发光二极管,在其高三位外接导线将环分后的信号引入单片机。

由软件根据高三位状态点亮与熄灭发光二极管。

7.参考文献。

相关文档
最新文档