shui1985 发表于 2007-7-26 18:53:26

怎么控制步进电机速度?

怎么控制步进电机速度?请大家指教一下

fengxianjin 发表于 2007-7-27 09:31:21

慢慢加速,,把A-B-C-D-A这样输出的速率加快,,要慢慢加快,不然会产生失步的现象!

luhuaren 发表于 2007-7-27 13:54:07

慢慢加速慢慢减速

luhuaren 发表于 2007-7-27 13:56:37

//=======================================================

//功能描述:X轴或Y轴运动控制函数

//                         dir:                运动方向        

//                        pulse:               要发送的脉冲的个数

//                         start_speed: 初速度

//                        end_speed: 末速度

//                        add_speed: 加速度

//                        axis            : 选择哪个轴运动

//                        采用比较简单的间加速算法

//=======================================================

void move_axis(unsigned int dir,unsigned long pulse,unsigned int start_speed,

                                unsigned int end_speed,unsigned int add_speed,unsigned int axis)

{

        unsigned int i,add_status;

        unsigned int pulse_w;

        unsigned long temp_pulse,temp_pulse1,add_pulse,temp_pulse2;

        unsigned long add_time;

        add_time = 0;

        temp_pulse = pulse/3;

        temp_pulse2 = pulse;

        add_pulse = 0;

        add_status = 0;

       

        pulse_w = start_speed;

        if(axis == 1)

        {

                if(dir == 1) SET_X_DIR();

                else if(dir == 0)SET_X_DIR();

        }

        else if(axis == 2)

        {

                if(dir == 1)SET_Y_DIR();

                else if(dir == 0)SET_Y_DIR();

        }

        if(axis == 0)

        {

                while(1)

                {

                        if(add_pulse < temp_pulse)                                //加速,限制加速长度

                        {

                                if(pulse_w > end_speed)                                //限制速度上限

                                {

                                        pulse_w -= add_speed;

                                        temp_pulse1 = (temp_pulse2 - add_pulse);

                                }       

                        }

                        else

                        {

                                if(add_pulse > temp_pulse1)                        //减速

                                        if(pulse_w < start_speed)                //限制速度下限

                                        {

                                                pulse_w += add_speed;

                                                temp_pulse1 = temp_pulse1;

                                        }

                                }

                        }

                        if(pulse)

                        {

                                //CLR_X_AXIS();

                                PEDATDIR = 0XFFFF;

                                T2CNT = 0;

                                wait_pulse(pulse_w);

                                i = T2CNT;

                                //SET_X_AXIS();

                                PEDATDIR = 0XFF00;

                                T2CNT = 0;

                                wait_pulse(pulse_w);

                                pulse--;

                                add_pulse++;

                        }

                        else

                        {

                                break;

                        }

                }

        }

        else if(axis == 1)

        {

                while(1)

                {

                        if(add_pulse < temp_pulse)                                //加速,限制加速长度

                        {

                                if(pulse_w > end_speed)                                //限制速度上限

                                {

                                        pulse_w -= add_speed;

                                        temp_pulse1 = (temp_pulse2 - add_pulse);

                                }       

                        }

                        else

                        {

                                if(add_pulse > temp_pulse1)                        //减速                                {                                        if(pulse_w < start_speed)                //限制速度下限

                                        {

                                                pulse_w += add_speed;

                                                temp_pulse1 = temp_pulse1;

                                        }

                                }

                        }

                        if(pulse)

                        {

                                //CLR_X_AXIS();

                                PEDATDIR = 0XFFFF;

                                T2CNT = 0;

                                wait_pulse(pulse_w);

                                i = T2CNT;

                                //SET_X_AXIS();

                                PEDATDIR = 0XFF00;

                                T2CNT = 0;

                                wait_pulse(pulse_w);

                                pulse--;

                                add_pulse++;

                        }

                        else

                        {

                                break;

                        }

                }

        }

}





void wait_pulse(unsigned int t)

{

        while(T2CNT < t);

}
页: [1]
查看完整版本: 怎么控制步进电机速度?