步进电机驱动调速显示Word格式.docx
《步进电机驱动调速显示Word格式.docx》由会员分享,可在线阅读,更多相关《步进电机驱动调速显示Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
1.1步进电机分类
步进电机在构造上有三种主要类型:
反应式(VariableReluctance,VR)、永磁式(PermanentMagnet,PM)和混合式(HybridStepping,HS)。
反应式:
定子上有绕组、转子由软磁材料组成。
结构简单、成本低、步距角小,可达1.2°
、但动态性能差、效率低、发热大,可靠性难保证。
永磁式:
永磁式步进电机的转子用永磁材料制成,转子的极数与定子的极数相同。
其特点是动态性能好、输出力矩大,但这种电机精度差,步矩角大(一般为7.5°
或15°
)。
混合式:
混合式步进电机综合了反应式和永磁式的优点,其定子上有多相绕组、转子上采用永磁材料,转子和定子上均有多个小齿以提高步矩精度。
其特点是输出力矩大、动态性能好,步距角小,但结构复杂、成本相对较高。
按定子上绕组来分:
共有二相、三相和五相等系列。
1.2步进电机工作原理通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。
该磁场会带动转子旋转一角度,使得
转子的一对磁场方向与定子的磁场方向一致。
当定子的矢量磁场旋转一个角度。
转子也随着该磁场转一个角度。
每输入一个电脉冲,电动机转动一个角度前进一步。
它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。
改变绕组通电的顺序,电机就会反转。
所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序
2
来控制步进电机的转动。
1)控制换相顺序通电换相这一过程称为脉冲分配。
例如:
四相步进电机的四拍工作方式,其各相通电顺序为A—B—C—D,通电控制脉冲必须严格按照这一顺序分别控制A、
B、C、D相的通断。
2)控制步进电机的转向如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
3)控制步进电机的速度如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。
两个脉冲的间隔越短,步进电机就转得越快。
调整单片机发出的脉冲频率,就可以对步进电机进行调速。
1.3步进电机主要特点
1、一般步进电机的精度为步进角的3-5%,且不累积。
2、步进电机外表允许的最高温度。
步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃至于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;
一般来讲,磁性材料的退磁点都在摄氏130度以上,有的甚至高达摄氏200度以上,所以步进电机外表温度在摄氏80-90度完全正常。
3、步进电机的力矩会随转速的升高而下降。
当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;
频率越高,反向电动势越大。
在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。
4、步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。
步进电动机以其显著的特点,在数字化制造时代发挥着重大的用途。
伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。
3
第二章硬件系统设计
2.1永磁步进电机的控制原理
本实验以常用的永磁式步进电机为例,实验采用四相步进电机,用单片
机控制步进电机。
其接线图如图所示:
从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有
5根引出线。
要使用步进电机转动,只要轮流
给各引出端通电即可。
将COM端标识为C,只
要AC、BC或/AC、/BC,轮流加电就能驱动步
进电机运转,加电的方式可以有多种,如果将
COM端接正电源,那么只要用开关元件(如三
极管),将A、B或/A、/B轮流接地。
2.2步进电机控制系统的组成步进电机控制系统共分为五个模块:
单片机最小系统模块、键盘控制模块、液晶显示模块、步进电机驱动模块和电源模块。
1)单片机最小系统主要由复位电路和时钟电路组成。
复位电路为单片机系统提供可靠复位,使单片机能正常启动。
时钟电路采用外部时钟方式,保证单片机个功能部件都是以时钟频率为基准,有条不紊地一拍一拍地工作。
2)键盘控制模块包括方向控制键、加速键和减速键、启停键,分别
与单片机的P3.4、P3.5、P3.6和P3.7相连。
实现对步进电机的控制。
并且键盘上连接有发光二极管,以指示键盘状态。
3)液晶显示模块采用LCD1602来动态显示步进电机的转动速度。
4)步进电机驱动模块选用七个NPN达林顿连接晶体管ULN2003为步
进电机提供脉冲信号,驱动步进电机转动。
该模块与单片机的P2.4—P2.7
相连。
5)电源模块是通过将市电220V转变交流9V后再转变为直流5V分别供给驱动模块和单片机模块。
原理图如下:
4
5
第三章软件设计步进电机控制系统的软件需要同时完成读取键盘、处理键盘、控制步进电机转动、控制数码管动态显示等任务,这就必须通过中断技术来实现。
主程序采用查询方式扫描键盘端口,检测按键动作是否发生,若有按键动作则处理键盘,根据按键值修改相应参数值,实现键盘的实时处理功能。
定时器0中断服务程序控制步进电机的转动。
3.1主程序流程图步进电机控制系统的主程序在对整个系统初始化后主要完成读键盘
和处理键盘的功能,控制液晶显示,如下图所示:
3.2定时器中断程序流程图
定时器中断0服务程序的中断时间为500us。
进入中断程序后,首先要重装初值,设置TH0和TL0的值。
然后判断根据转速档位判断中断次数,达到计时目的。
当判断为多次中断的时间满足当前档位时,判断旋转方向每一次满足条件的中断,依次给A-AB-B-BC-C-CD-D-D输出脉冲,实现定时步进。
定时器中断0服务程序流程图如下图所示:
6
第四章调试与改进
4.1调试在系统完成后测试系统,检查硬件和软件是否能够协调运行,并对系统出现的情况进行分析,看是否能够达到系统创作之初所设想的效果,如达不到则重新修改系统的硬件结构或者修改软件的程序部分,直到达到实验需要为止。
本系统的设计思路为:
首先从整体上划分出各功能模块,然后硬件和软件同时进行依次完成各个功能模块,最后将各个模块联系起来完成整个系统。
4.2运行结果
连接好硬件电路,上电复位,程序开始运行。
此时电机处于待机状态,按下开始按钮,点击开始转动,然后每按下
加速键一次,LCD液晶显示器显示数值加1档位,步进电机转动速度相应增加;
此时每按下减速键一次,LCD液晶显示器显示数值减1档位,步进
电机转动速度相应减少;
此时若按下方向控制键,步进电机立即向相反方向转动,转动速度保持不变,顺时针时LCD显示为“+”,逆时针时LCD显
示为“-”;
此时若按下启停键,步进电机停止转动,LCD液晶显示器停止
显示为“OFF”。
附录一源程序
#include&
lt;
reg52.h&
gt;
#include&
intrins.h&
sbitA1=P2A4;
//定义步进电机连接端口sbitB1=P2A5;
sbitC1=P2A6;
sbitD1=P2A7;
sbitRS=P2A0;
//定义LCD1602端口
sbitRW=P2A1;
sbitEN=P2A2;
sbitWEI=P2A7;
sbitDUAN=P2A6;
sbitPlus=P3A4;
//定义键盘加速
sbitSlow=P3A5;
//减速
sbitSwitch二P3A6;
//幵关
sbitDirection=P3A7;
//方向按键
#defineDataPortP1
#defineRS_CLRRS=0
#defineRS_SETRS=1
#defineRW_CLRRW=0
#defineRW_SETRW=1
#defineEN_CLREN=0
#defineEN_SETEN=1
#defineCoil_AB1{A1=1;
B1=1;
C1=0;
D1=0;
}//AB相通电,其他相断电
#defineCoil_BC1{A1=0;
C1=1;
}//BC相通电,其他相断电#define
Coil_CD1{A1=0;
B1=0;
D1=1;
}//CD相通电,其他相断电#define
Coil_DA1{A1=1;
}//D相通电,其他相断电#defineCoil_A1
{A1=1;
}//A相通电,其他相断电
#defineCoil_B1
{A1=0;
B1=1;
}//B相通电,其他相断电
#defineCoil_C1
}//C相通电,其他相断电
#defineCoil_D1
}//D相通电,其他相断电
#defineCoil_OFF
}//全部断电
chari;
unsignedchartemp,num,dire,ti,times;
unsignedcharcodetable[]="
0123456789"
;
unsignedcharcodeSpeed[5]={1,2,3,4,5};
unsignedcharcoderad[5]={13,8,6,5,4};
voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=z;
x&
0;
x--)
for(y=120;
y&
y--);
}
/*
uS延时函数
*/
voidDelayUs2x(unsignedchart)
while(--t);
mS延时函数
voidDelayMs(unsignedchart)
while(t--)
DelayUs2x(245);
8
/*判忙函数
*/bitLCD_Check_Busy(void){
DataPort=0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return(bit)(DataPort&
amp;
0x80);
/*
*/
写入命令函数
voidLCD_Write_Com(unsignedcharcom){
while(LCD_Check_Busy());
//忙则等待
RW_CLR;
DataPort=com;
写入数据函数
voidLCD_Write_Data(unsignedcharData){
RS_SET;
DataPort=Data;
/*清屏函数
9
voidLCD_Clear(void)
LCD_Write_Com(0x01);
DelayMs(5);
写入字符串函数
voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s)
if(y==0)
else
LCD_Write_Com(0xC0+x);
while(*s)
LCD_Write_Data(*s);
s++;
初始化函数*/voidLCD_Init(void)
LCD_Write_Com(0x38);
/*显示模式设置*/
LCD_Write_Com(0x08);
LCD_Write_Com(0x06);
LCD_Write_Com(0x0C);
}
/*显示关闭*/
/*显示清屏*/
/*显示光标移动设置*/
/*显示开及光标设置*/
10
显示变量
*/voiddisplay_var(unsignedcharx)
{unsignedcharshi,ge;
shi=x%10000%1000%100/10;
ge=x%10;
LCD_Write_Data(table[shi]);
LCD_Write_Data(table[ge]);
接后写入字符串函数*/while(*s)
TH0=0x00;
//
定时器初始化子程序
voidInit_Timer0(void)
TMOD|=0x01;
//使用模式1,16位定时器
给定初值
TL0=0x00;
EA=1;
//总中断打开
ET0=1;
//定时器中断打开
TR0=1;
//定时器开关打开
PT0=1;
//优先级打开
voidzz()
switch(ti)
case1:
Coil_AB1;
ti++;
break;
case2:
Coil_B1;
case3:
Coil_BC1;
case4:
Coil_C1;
case5:
Coil_CD1;
case6:
Coil_D1;
11
case7:
Coil_DA1;
ti=0;
default:
voidfz()
case0:
Coil_A1;
case1:
case
2:
case3:
4:
case5:
6:
case7:
voidkeyscan()
{if(Plus==0)
delay(5);
if(Plus==0){
while(!
Plus);
if(i&
4)
i++;
if(Slow==0)
if(Slow==0){
Slow);
0)
i--;
if(Switch==0)
if(Switch==0){12while(!
Switch);
if(ET0){ET0=0;
P1=0xff;
}if(Direction==0)
if(Direction==0){
Direction);
dire=!
dire;
主函数
main()
i=0;
times=0;
Init_Timer0();
Coil_OFF
WEI=O;
//位锁存置0电平,防止LED亮的时候数码管亮DUAN=1;
P0=0;
DUAN=O;
//段锁存置0电平,防止LED亮的时候数码管亮
LCD_Init();
P3=0xff;
dire=0;
ET0=0;
while
(1)
keyscan();
LCD_Clear();
LCD_Write_String(0,0,"
SPD:
"
);
if(ET0)
{if(!
dire)
LCD_Write_String_Follow("
+"
13
-"
display_var(rad[i]);
r/min"
}else
OFF"
LCD_Write_Com(0xC0+5);
DelayMs(250);
定时器中断子程序
voidTimer0_isr(void)interrupt1
TH0=(65536-500)/256;
TL0=(65536-500)%256;
if(times==Speed[i])
if(dire)
zz();
fz();
times++;
14