步进电机 文档.docx
- 文档编号:12282831
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:23
- 大小:221.57KB
步进电机 文档.docx
《步进电机 文档.docx》由会员分享,可在线阅读,更多相关《步进电机 文档.docx(23页珍藏版)》请在冰点文库上搜索。
步进电机文档
;电路接法:
P1.7P1.6P1.5P1.4分别接晶体管驱动器A,B,C,D输入端,
;相应输出端接步进电机的a,b,c,d四相,电机公共端接步进电机电源正。
ORG0000H;让编译程序从0地址开始
JMPSTAR
ORG0030H
STAR:
MOVSP,#30H ;堆栈指针设定
MOV21H,#00H;初始步调清零(0-7)有效
MOV20H,#4;速度选择1至255(1最大)
MOVA,#200;转200步
LOOP:
MOVR3,#4;执行4次
L1:
CALLBJDJ_4Z;;正转
DJNZR3,L1
MOVR3,#10;停止一秒
L2:
CALLYS_01S;延时2ms
DJNZR3,L2
MOVR3,#4;执行4次
L3:
CALLBJDJ_4F;正转
DJNZR3,L3
MOVR3,#10;停止一秒
L4:
CALLYS_01S
DJNZR3,L4
JMPLOOP
PROCYS_01S,YS_20MS;延时子程序定义
YS_01S:
MOVR7,#10;R7中送入数值10
LP3:
MOVR6,#100;R6中送入数值100
LP2:
MOVR5,#100;R5中送入数值100
LP1:
DJNZR5,LP1;R5减1不为0转LP1
DJNZR6,LP2;R6减1不为0转LP2
DJNZR7,LP3;R7减1不为0转LP3
RET;子程序返回
YS_20MS:
MOVR7,#1;R7中送入数值1
JMPLP3;转到LP3
END;子程序编译结束
;****************步进电机控制子程序*************************
;作用:
四相步进电机角度及速度控制
;使用方法:
先在速度寄存单元20H写入速度值1至255(1最快)
;将要转过的步数写入A(1-255),调用该正转或反转子程序。
;电路接法:
P1.7,P1.6,P1.5,P1.4分别接晶体管驱动器A,B,C,D输入端,
;相应输出端接步进电机的a,b,c,d四相,电机公共端接步进电机电源正。
;资源占用:
20H-速度,21H-步调,R0,B,DPTR
PROCBJDJ_4Z,BJDJ_4F
BJDJ_4Z:
PUSHA
MOVR0,A;步进数送R0
MOVDPTR,#MTAB;控制码地址送DPTR
MOVA,P1;P1口状态送A
ANLA,#0FH;清零高四位
MOVB,A;保存P1口低四位状态
LP2:
INC21H;步调数加1
MOVA,21H;步调数(0至7),每8步为一个周期,
CLRA
MOV21H,A
LP1:
MOVCA,@A+DPTR;查控制码到A
ORLA,B;P1口低4位状态送A
MOVP1,A;送出控制码
CALLYS_SD;根据速度参数延
DJNZR0,LP2;步进数减1不为0转LP2
MOVA,#0F0H;停止电机驱动
ORLA,B
MOVP1,A
POPA
RET;子程序返回
BJDJ_4F:
PUSHA
MOVR0,A;步进数送R0
MOVDPTR,#MTAB;控制码地址送DPTR
MOVA,P1;P1口状态送A
ANLA,#0FH;清零高四位
MOVB,A;保存P1口低四位状态
LP4:
DEC21H;步调数减1
MOVA,21H;步调数(0至7),每减8步为一个周期,
CJNEA,#0FFH,LP3;步调数不为8转
MOVA,#07H
MOV21H,A
LP3:
MOVCA,@A+DPTR;查控制码到A
ORLA,B;P1口低4位状态送A
MOVP1,A;送出控制码
CALLYS_SD;根据速度参数延时
DJNZR0,LP4;步进数减1不为0转LP4
MOVA,#0F0H;停止电机驱动
ORLA,B
MOVP1,A
POPA
RET;子程序返回
END;子程序编译结束
PROCYS_SD;速度延时子程序
YS_SD:
MOVR7,20H;速度参数送R7
LP2:
MOVR6,#0B0H
LP1:
NOP
NOP
DJNZR6,LP1
DJNZR7,LP2
RET
END
MTAB:
DB0E0H,0C0H,0D0H,90H,0B0H,30H,70H,60H
END
org00h
stop:
orlp1,#0ffh;步进电机停止
loop:
jnbp3.2,for2;如果p3.2按下正转
jnbp3.3,rev2;如果p3.3按下反转
jnbp3.4,stop1;如果p3.4按下停止
jmploop;反复监测键盘
for:
movr0,#00h;正转到tab取码指针初值
for1:
mova,r0;取码
movdptr,#table;
movca,@a+dptr
jzfor;是否到了结束码00h
cpla;把acc反向
movp1,a;输出到p1开始正转
jnbp3.4,stop1;如果p3.4按下停止
jnbp3.3,rev2;如果p3.3按下反转
calldelay;转动的速度
incr0;取下一个码
jmpfor1;继续正转
rev:
movr0,#05h;反转到tab取码指针初值
rev1:
mova,r0
movdptr,#table;取码
movca,@a+table
jzrev;是否到了结束码00h
cpla;把acc反向
movp1,a;输出到p1开始反转
jnbp3.4,stop1;如果p3.4按下停止
jnbp3.3,rev2;如果p3.3按下反转
calldelay;转动的速度
incr0;取下一个码
jmprev1;继续反转
stop1:
calldelay;按p3.4的消除抖动
jnbp3.4,$;p3.4放开否?
calldelay;放开消除抖动
jmpstop
for2:
calldelay;按p3.2的消除抖动
jnbp3.2,$;p3.2放开否?
calldelay;放开消除抖动
jmpfor
rev2:
calldelay;按p3.3的消除抖动
jnbp3.3,$;p3.3放开否?
calldelay;放开消除抖动
jmprev
delay:
movr1,#40;步进电机的转速20ms
d1:
movr2,#248
djnzr2,$
djnzr1,d1
ret
table:
db03h,09h,0ch,06h;正转表
db00;正转结束
db03h,06h,0ch,09h;反转
db00;反转结束
end
步进电机的速度调节方法
王玉琳1, 王 强2
(1.合肥工业大学机械与汽车工程学院,合肥 2.合肥工业大学材料科学与工程学院,合肥 )
摘 要:
提出了步进电机的几种速度调节方法。
脉冲频率的调节采用软件延时或硬件定时。
升降频采用直线升降法、指数曲线升降法或抛物线升降法。
给出了脉冲频率调节的实用程序,通过对步进电机矩频特性曲线的分析,得出了步进电机的升频表格,并提供了一个完整的软件升降频流程图。
几种调速方法应用在多种数控机床上,提高了步进电机的定位精度,改善了电机转动的平稳性,加速了电机的升降过程。
关键词:
步进电机;速度控制;升降频
0 引 言
步进电机是一种数字电机,在经济型数控机床及自动化设备中应用广泛。
控制步进电机的转动需要3个要素:
方向、转角和转速[1,2]。
对于含有硬件的驱动电源,方向取决于控制器送出的方向电平的高或低。
转角取决于控制器送出的步进脉冲的个数。
而转速则取决于控制器发出的步进脉冲之间的时间间隔[3,4]。
在步进电机的控制中,方向和转角控制简单,而转速控制则比较复杂。
步进电机工作时,失步或过冲直接影响其定位精度。
在设计系统的时候,除了应正确选择步进电机和驱动电源[5,6]之外,还必须对步进电机控制脉冲的频率进行调节。
由于步进电机的转速正比于控制脉冲的频率,所以调节步进电机脉冲频率,实质上就是调节步进电机速度。
本文将具体讨论步进电机的速度调节问题,并结合实例给出软件实现的方法。
1 步进脉冲的调频方法
对步进电机控制的一个中心问题就是速度调节。
即产生一系列频率可调的步进脉冲序列,送到驱动电源,控制电机绕组的轮流通电,实现电机的转动。
脉冲序列的产生用微处理器实现,有软件延时和硬件定时两种方法。
(1)软件延时:
通过调用标准的延时子程序来实现。
假定控制器基于AT89S52单片机[8],晶振频率为12MHz,那么可以编制一个标准的延时子程序如下:
该子程序的入口为(0E)(0D)两个字节,若需要20000μs的延时,则给(0E)(0D)两个字节赋值4E20H,即执行下面程序:
若要控制步进电机走100步,每两步之间延时20000μs,则汇编程序为:
可以看出,采用软件延时方法实现速度调节的优点是程序简单,思路清晰,不占用硬件资源。
缺点是浪费CPU的宝贵时间,在控制电机转动的过程中,CPU不能做其它事。
(2)硬件定时:
假定控制器仍为AT89S52单片机,晶振频率为12MHz,将AT89S52的T0作为定时器使用,设定T0工作在模式1(16位定时/计数器)。
今要求它能定时地发出步进脉冲,其定时中断产生的脉冲序列的周期(即步进电机的脉冲间隔)假定为20000μs,则可算出T0所对应的定时常数为B1EOH[8],CPU相应的程序如下:
本例中,只要改变T0的定时常数,就可实现步进电机的调速。
这种方法既需要硬件(T0定时器)又需要软件来确定脉冲序列的频率,所以是一种软硬件相结合的方法。
它的缺点是占用了一个定时器。
在比较复杂的控制系统中常采用定时中断的方法,这样可以提高CPU的利用率。
2 升降频方法及其实现
2.1 升降频方法
当步进电机的运行频率低于它本身的起动频率时,步进电机可以用运行频率直接起动,并以该频率连续运行,需要停止的时候,可以从运行频率直接降到零速。
此时,电机运行于恒速状态,无需升降频控制。
当步进电机的运行频率fb>fa(fa为步进电机有载起动时的起动频率)时,若直接用fb起动,由于频率太高,步进电机会丢步,甚至产生堵转。
同样,在fb频率下突然停止,步进电机会超程。
因此,当要求步进电机在运行频率fb下正常工作时,就需要采用升降频控制,以使步进电机从启动频率fa开始,逐渐加速升到运行频率fb,然后进入匀速运行,最后的降频可以看作是升频的逆过程[2,7]。
步进电机常用的升降频控制方法有3种:
(1)直线升降频。
如图1所示。
这种方法是以恒定的加速度进行升降,平稳性好,适用于速度变化较大的快速定位方式。
加速时间虽然长,但软件实现比较简单。
(2)指数曲线升降频。
如图2所示,这种方法是从步进电机的矩频特性出发,根据转矩随频率的变化规律推导出来的。
它符合步进电机加减速过程的运动规律,能充分利用步进电机的有效转矩,快速响应性能较好,升降时间短。
指数升降控制具有较强的跟踪能力,但当速度变化较大时平衡性较差,一般适用于跟踪响应要求较高的切削加工中[1,9]。
(3)抛物线升降频。
如图3所示,抛物线升降频将直线升降频和指数曲线升降频融为一体,充分利用步进电机低速时的有效转矩,使升降速的时间大大缩短,同时又具有较强的跟踪能力,这是一种比较好的方法[9]。
2.2 软件实现
步进电机在升降频过程中,脉冲序列的产生,即两个脉冲时间间隔的软件确定,有2种方法:
(1)递增/递减一定值[10]。
如线性升降频,
两脉冲频率的差值Δf=|fi-fi-1|是相等的,其对应的时间增量Δf也是相等。
时间的计算若采用软件延时的方法,可先设置一个基本的延时单元Te,不同频率的脉冲序列可由Te的不同倍数产生。
设起动时所用频率对应的时间常数为tNe,以后逐次递减Δt(设Δt=tMe),直到等于运行频率fb所对应的时间(tRe)为止。
这种方法编程简单,节省内存。
时间计算也可采用定时中断的方法,可将定时常数逐次递增/递减一定值,实现升降频控制。
因其定时不是连续的,所以升降速曲线不是一条直线,而是折线,但可近似看成直线。
(2)查表法[10]。
为了对步进电机实现最佳升降频控制,缩短电机的升降频时间,可从步进电机矩频特性出发进行分析。
由步进电机的矩频特性(见图4,130BC3100A电机)可知,转矩M是频率f的函数(即角加速度dω/dt=M(f)/J,J为电机的转动惯量),它随着f的上升而下降,所以它呈软的特性。
当频率较低时,转矩M较大,对应的角加速度dω/dt也较大,所以升频的脉冲频率增加率df/dt应取得大一些;当频率较高时,M较小,dω/dt也较小,此时,升频的脉冲频率增加率df/dt应取小一些,否则,会由于无足够的转矩而失步。
因此,根据步进电机的矩频特性,可以看出:
在步进电机的升频过程中,应遵循“先快后慢”的原则。
按此要求,从开始升频到升至fb之间,按最佳升频要求的频率取出f1,f2,⋯,fn,并将它们所对应的脉冲间隔时间t1,t2,⋯,tn,依次存于内存的一个数据区,如表1所示(称阶梯频率表)。
考虑到步进电机的惯性作用。
在升速过程中,如果速率变化太大,电机响应将跟不上频率的变化,出现失步现象。
因此,每改变一次频率,要求电机持续运行一定步数(称阶梯步长),使步进电机慢慢适应变化的频率,从而进入稳定的运行状态。
根据最佳升降频控制规律[9],可推出步进电机的“频率2步长”关系曲线如图5所示。
这样,升频时除需将阶梯频率表存于内存的一个数据区内外,还需建立另一个数据区,用来存放阶梯步长(如表2所示)。
在升频过程中,可用查表的方法,分别得到fi(ti)和所对应的ΔLi,实现升降频控制。
软件上的具体做法是:
将fi(ti)和ΔLi在EPROU中交替存放(如表3所示),程序执行时按顺序取数,每次取出一个频率和该频率对应的步长。
详细的步进电机升降频软件流程如图6所示。
V6继续导通60°;当t1时刻触发V2时,由于此时V2两端承受正向电压Ub2Uc而导通,一旦V2导能后ACFCB立刻熄弧,转子通过V2、V5及自身的电阻进行灭磁(灭磁电阻不起作用)。
由此看来,ACFCB的电弧持续时间(t1~t0)最长为120°电角度(在自然换相点开始燃弧时)。
而且,该电弧靠电流自然过零而熄灭,不象DCFCB那样,靠绝缘介质强度熄灭,这对开关触头的寿命有利。
当然,自然灭磁的时间较长,对于300MW的机组,L=0.87H,Rf=0.1253Ω,时间约为7s。
步进电机控制程序(c语言51单片机)
[日期:
2008-01-12][来源:
MCU博客作者:
nora][字体:
大中小](投递新闻)
#include
#defineuintunsignedint
#defineucharunsignedchar
#definems*77
//f=12M
#defineLEDLen4
#defineDj_star(){IE=0x81;pri_dj=0;}
#defineDj_stop(){IE=0x00;pri_dj=1;P1=0xff;shache="0";delay(800ms);delay(800ms);delay(400ms);shache=1;}
#defineChilun_Num8
/*齿轮数8个*/
#defineset_display_num(){LEDBuf[0]=tmp/1000;LEDBuf[1]=tmp/100%10;\
LEDBuf[2]=tmp/10%10;LEDBuf[3]=tmp%10;}
ucharLEDBuf[LEDLen]={0,0,0,0};
voidread_num();/*读播码盘到set_round_num*8*/
voiddisplay();
voiddelay(uintdelay_time){uinti;for(i=0;i voidrun(); voidfx_run(); uintround_num=0;/*记录已转的齿轮数,中断1次加1*/ uintset_round_num=0;/*播码盘设置圈数*/ uintset_pwm_width=0;/*播码盘设置步进电机正向速度*/ bitone_round_flg=0; sbitled_1000=P0^7;//usefordisplay sbitled_100=P0^6;//usefordisplay sbitled_10=P0^5;//usefordisplay sbitled_1=P0^4;//usefordisplay sbitkey_start=P3^0; sbitkey_puse=P3^0; sbitkey_clear=P3^1; /*P3^2接齿轮传感器中断*/ sbitbujin_zx_stop=P3^3;/*接步进电机,正向到位传感器,为0停机*/ sbitbujin_fx_stop=P3^4;/*接步进电机,反向到位传感器,为0停机*/ sbitshache=P3^5;/*接刹车控制继电器0电位有效*/ sbitpri_dj=P3^6;/*接主电机控制继电器0电位有效*/ voidmain(){ TCON=0x01; display(); while (1){ IE="0x00"; round_num=0; display(); if(bujin_fx_stop)fx_run(); while(key_start); delay(8ms); if(! key_start){ read_num(); //set_round_num=8; while(! key_start); run(); fx_run(); } } } voidrun(){ #defineDelay_time180 /*转一圈50次循环,每循环4步,50*4=200,200*1。 8=360*/ uchari; P1=0xff; set_pwm_width=15+set_pwm_width/10; while (1){ while(! shache|! key_start); Dj_star(); for(i="0";bujin_zx_stop&! pri_dj;i++){ P1=0xf9; delay(Delay_time);//bujin_zx_stop=P3^3; P1=0xfc;//bujin_fx_stop=P3^4; delay(Delay_time);//key_puse=P3^0; P1=0xf6;//key_clear=P3^1; delay(Delay_time);//shache=P3^5; P1=0xf3;//pri_dj=P3^6; delay(Delay_time); if(i==set_pwm_width){P1=0xff;i=0;one_round_flg=0;while(! one_round_flg&key_puse);} if(! key_puse){delay(4ms);if(! key_puse)break;} } P1=0xff; if(pri_dj)break; if(! key_puse){ delay(8ms); if(! key_puse){ Dj_stop(); while(! key_puse); //nextpreekey while(! shache); while (1){ while(key_puse&key_clear); delay(8ms); if(! key_clear){round_num=0;display();} if(! key_puse)break; } while(! key_puse); delay(8ms); while(! key_puse); } } } } voidext_int0(void)interrupt0{/*主电机齿轮中断*/ uinttmp; EA=0; if(! pri_dj){ round_num++; if(round_num%Chilun_Num==0){ one_round_flg=1; tmp=round_num/Chilun_Num; set_display_num(); P0=0xf0; P0=P0|LEDBuf[0]; led_1000=0; P0|=0xf0; P0=0xf0; P0=P0|LEDBuf[1]; led_100=0; P0|=0xf0; P0=0xf0; P0=P0|LEDBuf[2]; led_10=0; P0|=0xf0; P0=0xf0; P0=P0|LEDBuf[3]; led_1=0; P0|=0xf0; P0=0xf0; } if(round_num>=set_round_num)Dj_stop(); } EA=0x81; } voiddisplay(){ uchari; uinttmp=0; tmp=ro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进电机 文档 步进 电机