步进电机位置控制合加、减速控制系统程序设计
步进电机的位置控制,指的是控制不及电机带动执行机构从一个位置精确地运行到另一个位置。对步进电机位置控制的一般作法是:步进电机每走一步,步数减1,如果没有失步存在,当执行机构到达目标位置时,步数正好减到0.因此,用步数等于0来判断是否移动到目标,作为步进电机停止运行的信号。
实际上,在速度控制中,速度并不是一次升到位。在位置控制中欧冠,执行机构的位移也不总是恒速进行的。它们对运行的速度都有一定的要求。在这当中,我们将讨论步进电机在运动中的加减速问题。
为了满足加、减速的要求,步进电机运行通常按照加、减速曲线进行。图5-1是加、减速运行曲线。加、减速运曲线没有一个固定的模式,一般根据经验和试验得到的。
图6-1
最简单的是匀加速合匀减速曲线,如图5-1(a)所示,其加、减速曲线都是直线,因此容易编程实现。按直线加速时,加速度是不变的,因此要求转矩也应该是不变的。
采用指数加、减速曲线或S形加、减速曲线是最好的选择,如图5-1(b)所示。因为电机的电磁转矩与转速的关系接近指数规律。
步进电机的运行还可根据距离的长短分如下3种情况处理。
(1)短距离
由于距离较短,来不及升到最高速,因此,在这种情况下,步进电机以接近启动频率运行过程没有加、减速。
(2)中、短距离
在这样的距离里,步进电机只有加、减速过程,而没有恒速过程。
(3)中、长距离
在这样的距离里,步进电机不久有加、减速过程,还有恒速过程。由于距离较长。要尽量缩短用时,保证快速反应性。因此,在加速时,尽量用接近启动频率启动;在恒速时尽量工作在最高速。
第七章 步进电机控制模块程序设计
(1)包含必要的头文件及定义程序用到的全局变量和宏。
#include <16F877.H>
#DEVICE ICD=TRUE
#DEVICE PIC16F877 *=16 ADC=10
#fuses XT,NONDT, NOPROTECT
#use delay(clock=4000000)
#byte PORTB=0x06
#byte PORTC=0x07
#byte PORTD=0x08
#byte OPTION=0x81
#byte INTCON=0x0B
#byte TICON=0x10
#byte PR2=0x92
#byte T2CON=0x12 //timer2 负责竖直方向运动
#byte TMR0=0x1 //timer0 负责水平方向运动
#byte TMR2=0x11
#byte PR2=0x92
#bit RB_1=0x6.1 //力旋钮开关地址
#bit RB_2=0x6.2
#bit RB_4=0x6.4
#bit RB_5=0x6.5
#bit RBPU=0x81.7
#bit TOIF=0x0B.2
#bit TMR2IF=0x0C.1
#bit TMR2ON=0x12.2
#bit RCIF=0xDC.5
#bit fward1=0x7.0 //脉冲发送脚地址
#bit bward1=0x7.1
#bit fward2=0x7.2
#bit bward2=0x7.3
#bit RC_4=0x7.4
#bit RC_5=0x7.5
#bit zflg=0x08.0 //光电开关信号
#bit yflg=0x08.2
#bit xflg=0x08.4
#bit sflg=0x08.6
long int I;
int j , k;
long str[12]; //接收到的字符串
char dir; //方向
int a;
long int pspeed,zspeed,distant; //运动参数
long int n_pulse; //完成运动电平变换次数
ctmr0; //水平方向电平变换,需timer0定时周期数
int ctmr2; //竖直方向电平变换,需timer2定时周期数
float c_tmr0,ctmr2; //所需周期数的计算值
(2)初始化子程序,包括定时器的设定及各个轴的初始化。
Void setup( )
{
RBPG=1;
OPTION=0b10000110; //TMR0定时方式,分频值取1:64
T2CON=0b00111001; //TMR2定时方式,分频值取1:32
enable_interrupts(CLOBAL);
enable_interrupts(int_rda);
RCIF=0;
set_tris_B (0b111111111);
set_tris_C (0b10000000);
set_tris_D (0b1111111);
}