7
6ES7314-1AG14-0AB0安装调试
步进电机是一种能将数字输入脉冲转换成旋转或直线增量运动的电磁执行元件。每输入一个脉冲电机转轴步进一个步距角增量。电机总的回转角与输入脉冲数成正比例,相应的转速取决于输入脉冲频率。
步进电机是机电一体化产品中关键部件之一,通常被用作定位控制和定速控制。步进电机惯量低、定位精度高、无累积误差、控制简单等特点。广泛应用于机电一体化产品中,如:数控机床、包装机械、计算机外围设备、复印机、传真机等。
选择步进电机时,首先要保步进电机的输出功率大于负载所需的功率。而在选用功率步进电机时,首先要计算机械系统的负载转矩,电机的矩频特性能满足机械负载并有一定的余量保其运行可靠。在实际工作过程中,各种频率下的负载力矩必须在矩频特性曲线的范围内。一般地说较大静力矩Mjmax大的电机,负载力矩大。
选择步进电机时,应使步距角和机械系统匹配,这样可以得到机床所需的脉冲当量。在机械传动过程中为了使得有更小的脉冲当量,一是可以改变丝杆的导程,二是可以通过步进电机的细分驱动来完成。但细分只能改变其分辨率,不改变其精度。精度是由电机的固有特性所决定。
选择功率步进电机时,应当估算机械负载的负载惯量和机床要求的启动频率,使之与步进电机的惯性频率特性相匹配还有一定的余量,使之较高速连续工作频率能满足机床快速移动的需要。
选择步进电机需要进行以下计算:
(1)计算齿轮的减速比
根据所要求脉冲当量,齿轮减速比i计算如下:
i=(φ.S)/(360.Δ) (1-1) 式中φ ---步进电机的步距角(º/脉冲)
S ---丝杆螺距(mm)
Δ---(mm/脉冲)
(2)计算工作台,丝杆以及齿轮折算至电机轴上的惯量Jt。
Jt=J1+(1/i²)[(J2+Js)+W/g(S/2π)²] (1-2)
式中Jt ---折算至电机轴上的惯量(Kg.cm.s²)
J1、J2 ---齿轮惯量(Kg.cm.s²)
Js ----丝杆惯量(Kg.cm.s²) W---工作台重量(N)
S ---丝杆螺距(cm)
(3)计算电机输出的总力矩M
M=Ma+Mf+Mt (1-3)
Ma=(Jm+Jt).n/T×1.02×10¯² (1-4)
式中Ma ---电机启动加速力矩(N.m)
Jm、Jt---电机自身惯量与负载惯量(Kg.cm.s²)
n---电机所需达到的转速(r/min)
T---电机升速时间(s)
Mf=(u.W.s)/(2πηi)×10¯² (1-5)
Mf---导轨摩擦折算至电机的转矩(N.m)
u---摩擦系数
η---传递效率
Mt=(Pt.s)/(2πηi)×10¯² (1-6)
Mt---切削力折算至电机力矩(N.m)
Pt---较大切削力(N)
(4)负载起动频率估算。数控系统控制电机的启动频率与负载转矩和惯量有很大关系,其估算公式为
fq=fq0[(1-(Mf+Mt))/Ml)÷(1+Jt/Jm)] 1/2 (1-7)
式中fq---带载起动频率(Hz)
fq0---空载起动频率
Ml---起动频率下由矩频特性决定的电机输出力矩(N.m)
若负载参数无法精确确定,则可按fq=1/2fq0进行估算.
(5)运行的较高频率与升速时间的计算。由于电机的输出力矩随着频率的升高而下降,因此在较高频率 时,由矩频特性的输出力矩应能驱动负载,并留有足够的余量。
(6)负载力矩和较大静力矩Mmax。负载力矩可按式(1-5)和式(1-6)计算,电机在较大进给速度时,由矩频特性决定的电机输出力矩要大于Mf与Mt之和,并留有余量。一般来说,Mf与Mt之和应小于(0.2 ~0.4)Mmax.
由以上完整接口代码分析,内核共留给用户14个向量接口,但40点嵌入式PLC只使用了七个向量接口,每个接口就是调用一个C函数,共7个C函数。由于是汇编文件调用外部C函数,故要作外部函数声明。
2.关于驱动程序所能使用的单片机的资源
由于内核占用了大部分资源,驱动程序所使用的资源不能覆盖内核,因此在编写驱动程序时必须特别注意单片机资源的使用,以下列出若干注意事项,详细内容请参阅《EASY原理及应用》。
(1)驱动程序代码地址范围必须定义在0XE000-0XF7FF共6KB之间,否则会覆盖内核程序!解决方法:在工程项目属性的Code Range编辑框中输入0xe000-0xf7ff"。
(2)能使用的XDATA RAM地址范围为0X3600-0X3FFF,总共2560字节。解决方法:在工程项目属性的XDATA Range编辑框中输入"0x3600-0x3fff"。
(3)能使用的DATA RAM地址范围为0X58-0X67,总共16字节,解决方法:在工程项目属性的Data base编辑框里输入"0x58";由于可使用的data ram数量十分有限,因此在定义变量时当data ram不够,应将变量定义为xdata存储器类型。为了提高程序运行实时性,使用频繁的变量应**考虑安排为data 存储器型变量。
(4)能使用的BDATA RAM地址范围为0X20-0X23,总共4字节,解决方法:在工程项目属性的Bit base编辑框里输入"0x00";
(5)任何情况下,用户只能使用工作寄存器0组,不要修改非0组的寄存器的值。在中断函数中使用0组寄存器必须先保存个工作寄存器,并在函数结束前恢复。
3.关于头文件Easyplc.h分析
头文件仅列出如下和内核相关的变量来分析。
unsigned char xdata Ram_px[4] _at_ 0x240;//内核定义的接口变量,由驱动程序传递给内核的嵌入式PLC输入端口映射值。
unsigned char xdata Ram_py[2] _at_ 0x180;//内核定义的接口变量,由内核传递给驱动程序的嵌入式PLC输出端口映射值。
unsigned char bdata Corebd _at_ 0x027;//内核定义的接口变量,由内核传递给驱动程序的嵌入式PLC正常运行的位标志,和PLC出现运行错误的位标志所在的bdata地址.
sbit F_key_set=Corebd^7;//嵌入式PLC正常运行的位标志.
sbit F_plcerr=Corebd^5; //嵌入式PLC出现运行错误的位标志.
unsigned char data cpye_reg[8] _at_ 0x00;//定义这个**地址数组,其作用仅仅是在中断函数中保存0组工作寄存器。
4.关于Easyplc.c代码分析
(1)初始化函数:共有4个初始化函数,分别为用户端口初始化函数void InitStartc(void);用户上电初始化函数void Init_Startc(void);
用户设置初始化函数 void InitSetc(void);用户运行初始化函数void InitRunc(void)。这四个函数功能都是初始化用户定义的变量和配置c8051f040单片机的特殊寄存器。
(2)2.5ms周期扫描函数void Tmsc(void)代码分析:该函数代码如下
void Tmsc() using 0
{
unsigned char xdata len[8];
len[0]=cpye_reg[0];// code 1
len[1]=cpye_reg[1];
len[2]=cpye_reg[2];
len[3]=cpye_reg[3];
len[4]=cpye_reg[4];
len[5]=cpye_reg[5];
len[6]=cpye_reg[6];
len[7]=cpye_reg[7];// code 2
UserDisplay(Xlamp);// code 3
if(bbbbb_cnt-- >0)
{
UserSampl(bbbbb_cnt,Xbbbbb); //code 4
P1MDOUT=0xff;
}
cpye_reg[0]=len[0];// code 5
cpye_reg[1]=len[1];
cpye_reg[2]=len[2];
cpye_reg[3]=len[3];
cpye_reg[4]=len[4];
cpye_reg[5]=len[5];
cpye_reg[6]=len[6];
cpye_reg[7]=len[7];//code 6
}
由于该函数是被内核的定时中断函数所调用,属于中断程序的一部份,因此定义该函数时用关键字"using 0"来确定使用0组工作寄存器。
code 1-code 2:是将0组工作寄存器保存起来。
code 3:调用此函数实现LED动态扫描刷新。
code 4:调用此函数实现输入信号采样,每路输入信号连续采样8次。
code 5-code6:将0组工组寄存器恢复。
以上代码除了code 3和code4是由用户来根据实际硬件来编写外,其余部分可作为固定模式。需要特别注意:该函数代码运行总时间不要**过40us,以免影响内核的运行。另外,由于Tmsc()是运行于中断期间(内核定时中断所调用),所以Tmsc()以及它所调用的函数的局部变量数据段不能和其它函数局部变量数据段相覆盖,因此需要在项目编译连接属性的overlay列表框中输入:"*!Tmsc,"。
(3)演算周期扫描函数void Stepc(void)分析:
该函数是内核的主循环所调用的代码如下
void scanc()
{
if(bbbbb_cnt <= 0)
{
UserScanI(Ram_px); //code 1
bbbbb_cnt=8;
}
UserScanOut(Xoutput); //code 2
UserScanLamp(); //code 3
UserScanSignal(); //code 4
}
code 1:调用该函数实现对输入采样值滤波后赋给内核接口变量Ram_px。
code 2:调用该函数实现对输出值刷新。
code 3:该函数实现对输入输出LED刷新。
code 4:该函数实现对"RUN"LED和"ERR"LED刷新。
完成程序编辑,并设置好项目编译连接属性后,便可编译连接工程项目,然后可打看Easy.M51列表文件,查看程序所有的占用的数据存储器以及程序存储器和工作寄存器是否在允许使用范围之内。如有**出范围,应对程序作适当调整,直到完全符合后,生成的Easy.hex文件。利用Downhex.exe工具软件,通过串口0下载到40点嵌入式PLC中。
五.其他说明
笔者写的40点嵌入式PLC驱动程序没有开辟其他的中断,如果用户需要自己使用中断,如使用T4中断,须用关键字"interrupt 16"来定义T4中断函数。并且使用关键字"using 0"来确定使用0工作寄存器组。在项目属性的interrupt vector编辑框里将中断矢量由0改为0XEOOO,使中断矢量重定位为0XE000。并且同样需要将0工作寄存器保存。如以下是T4中断函数代码范例:
void int_t4c() interrupt 16 using 0
{
unsigned char xdata copy[8];
unsigned char adcount=0;
copy[0]=cpye_reg[0]; //code 1
copy[1]=cpye_reg[1];
copy[2]=cpye_reg[2];
copy[3]=cpye_reg[3];
copy[4]=cpye_reg[4];
copy[5]=cpye_reg[5];
copy[6]=cpye_reg[6];
copy[7]=cpye_reg[7]; //code 2
/* ...*/ //用户代码
cpye_reg[1]=copy[1]; //code 3
cpye_reg[2]=copy[2];
cpye_reg[3]=copy[3];
cpye_reg[4]=copy[4];
cpye_reg[5]=copy[5];
cpye_reg[6]=copy[6];
cpye_reg[7]=copy[7]; //code 4
}
六、总结:
对于习惯用C的读者,使用KEIL C来开发嵌入式PLC的驱动程序是十分轻松的,调试简单,维护方便,开发效。但需要注意的是由于驱动程序对硬件操作较多,而C对硬件的支持如涉及到寄存器的读写,代码的定位,堆栈的操作则没有汇编灵活,要充分考虑到C的不足之处。要保证程序编译连接之后所生成的代码,能满足内核对驱动程序使用资源的规约。要求用户须在熟悉uVsions开发环境,充分了解KEIL C编译连接的原理的基础上,再着手驱动程序的编写。Vector.asm接口文件可作为一固定模式,用户只须编写C语言模块文件,完成Vector.asm调用的相应的函数即可。


步进电机转矩的选择步进电机的保持转矩,近似于传统电机所称的“功率”。当然,有着本质的区别。步进电动机的物理结构,完全不同于交流、直流电机,电机的输出功率是可变的。因此在选择步动电机的时候,较好依据相关步骤来进行选型。
如何选择步进电机?
通常根据需要的转矩大小(即所要带动物体的扭力大小),来选择哪种型号的电机。大致说来,扭力在0.8N.m以下,选择20、28、35、39、42(电机的机身直径或方度,单位:mm);扭力在1N.m左右的,选择57电机较为合适。扭力在几个N.m或更大的情况下,就要选择86、110、130等规格的步进电机。
步过电机转速的选择对于电机的转速也要特别考虑。因为,电机的输出转矩,与转速成反比。就是说,步进电机在低速(每分钟几百转或更低转速,其输出转矩较大),在高速旋转状态的转矩(1000转/分--9000转)就很小了。
当然,有些工况环境需要高速电机,就要对步进电动机的线圈电阻、电感等指标进行衡量。选择电感稍小一些的电机,作为高速电机,能够获得较大输出转矩。反之,要求低速大力矩的情况下,就要选择电感在十几或几十mH,电阻也要大一些为好。
步进电机空载起动频率的选择步进电机空载起动频率,通常称为“空起频率”。这是选购电机比较重要的一项指标。如果要求在瞬间频繁启动、停止,并且,转速在1000转/分钟左右(或更高),通常需要“加速启动”。如果需要直接启动达到高速运转,较好选择反应式或永磁电机。这些电机的“空起频率”都比较高。
步进电机的相数选择步进电机的相数选择,这项内容,很多客户几乎没有什么重视,大多是随便购买。其实,不同相数的电机,工作效果是不同的。相数越多,步距角就能够做的比较小,工作时的振动就相对小一些。大多数场合,使用两相电机比较多。在高速大力矩的工作环境,选择三相步进电机是比较实用的。
针对步进电机使用环境来选择特种步进电机能够防水、防油,用于某些特殊场合。例如水下机器人,就需要放水电机。对于特种用途的电机,就要针对性选择了。
买家在选择步动电机的时候,较好根据自己的实际情况进行选择,可否需要特殊规格的步进电机,事先要和卖家沟通,在技术允许的范围内,加工订货。例如,出轴的直径、长短、伸出方向等。如有必要较好与厂家的技术工程师进一步沟通与确认型号。步进电机转速到底能达到多少转/分钟,一直是很多人心中的疑问。
所谓步进电机,就是根据控制信号运动,一个脉冲信号走一步,步进角则根据固有参数计算,比如以5相步进电机为例,采用基本步进角即无细分,则每给一个脉冲信号,步进电机运转0.72°,500脉冲一圈。所以当脉冲的频率越高时,步进电机的运转速度越快,比如脉冲频率为500赫兹,则一秒转一圈,依次计算即可。若牵涉到细分了,则根据细分后的步进角计算即可。
通过调节输入驱动器的脉冲频率以及驱动器的细分参数来达到调节步进电机转速,实际是控制单位时间内步进电机的步数。
相比于异步电机,步进电机1000转/分就相当于高速运转了,但是1000转/分对于步进电机而言到底有什么实际意义呢?
步进电机转速上升时伴随着扭矩的下降,当步进电机扭矩下降到一定程度时,自身的扭矩已经不能带动其自身的重量,导致电机停止。
我们通过实验实际测量了一款28步进电机的转速:
步进电机:28BYG250-34(0.06nm,3.9V,0.75A)
步进驱动器:ZD-8731(0-2A ,1、2、4、16细分)
控制器:MC-10(调速范围0-20K)
开关电源:S-35W-24V
测试:实际空载转速较大值:7600rpm(此为空载时较大转速)
这个型号的步进电机竟然能上7000转/分的速度,可见步进电机的空载转速与其扭矩和自重的关系是多么密切。
不同型号的步进电机使用不同的驱动器所能达到的较高转速是不一样的。
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。
步进电机区别于其他控制电机的较大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:
1)控制换相顺序
通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。
(2)控制步进电机的转向
如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
(3)控制步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。