yangkun1981 发表于 2006-11-9 15:52:03

如何用PWM方式实现步进电机的升频-恒速-降频过程?

如何用PWM方式实现步进电机的升频-恒速-降频过程?

我们用ATmega162的定时器T1!

急用!谢谢!

xwyjianghu 发表于 2006-11-10 09:26:15

帮你顶一下.

关注中............

sbdpjx 发表于 2008-1-11 16:32:53

222

luhuaren 发表于 2008-1-11 17:17:44

unsigned long move_axis1(unsigned long pulse,unsigned int start_speed,unsigned int add_speed)
{
        unsigned int check_status;

        unsigned int pulse_w,pulse_adjust=0;
        unsigned long temp_pulse,i;

        i=0;
        check_status = 0;
        pulse_w = start_speed;
        temp_pulse = pulse/3;
       
        while(1)
        {
                switch(check_status)
                {
                case 0:
                        for(i=0;i<temp_pulse;i++)
                        {
                                if(pulse_w < 100)
                                {
                                        check_status++;
                                        break;
                                }
                                else if(pulse_w < 102)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 99)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 105)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 97)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 108)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 95)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 111)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 93)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 114)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 91)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 117)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 88)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 120)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 85)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 124)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 82)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 128)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 78)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 132)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 74)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 136)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 70)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 140)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 65)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 145)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 60)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 150)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 55)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 155)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 50)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 160)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 45)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 166)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 35)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 172)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 25)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 180)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 22)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 188)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 21)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 196)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 20)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 205)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 19)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 215)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 18)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 225)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 17)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 235)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 16)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 245)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 16)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 255)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 15)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 265)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 14)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 275)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 13)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 285)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 13)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 295)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 12)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 305)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 11)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 315)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 10)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 335)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 9)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 355)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 8)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 375)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 7)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 395)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 6)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 415)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 6)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 435)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 6)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 450)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 3)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 550)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 1)
                                        {
                                                pulse_w -= add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 650)
                                {
                                        pulse_w -= (add_speed);
                                }
                                else if(pulse_w < 750)
                                {
                                        pulse_w -= (add_speed+1);
                                }
                                else if(pulse_w < 850)
                                {
                                        pulse_w -= (add_speed+2);
                                }
                                else if(pulse_w < 950)
                                {
                                        pulse_w -= (add_speed+3);
                                }
                                else if(pulse_w < 1050)
                                {
                                        pulse_w -= (add_speed+4);
                                }
                                else if(pulse_w < 1150)
                                {
                                        pulse_w -= (add_speed+5);
                                }
                                else if(pulse_w < 1250)
                                {
                                        pulse_w -= (add_speed+6);
                                }
                                else if(pulse_w < 1350)
                                {
                                        pulse_w -= (add_speed+7);
                                }
                                else if(pulse_w < 1450)
                                {
                                        pulse_w -= (add_speed+8);
                                }
                                else if(pulse_w < 1550)
                                {
                                        pulse_w -= (add_speed+9);
                                }
                                else if(pulse_w < 1650)
                                {
                                        pulse_w -= (add_speed+10);
                                }
                                else if(pulse_w < 1750)
                                {
                                        pulse_w -= (add_speed+11);
                                }
                                else if(pulse_w < 1850)
                                {
                                        pulse_w -= (add_speed+12);
                                }
                                else if(pulse_w < 1950)
                                {
                                        pulse_w -= (add_speed+13);
                                }
                                else if(pulse_w < 2050)
                                {
                                        pulse_w -= (add_speed+14);
                                }
                                else if(pulse_w < 2150)
                                {
                                        pulse_w -= (add_speed+15);
                                }
                                else if(pulse_w < 2250)
                                {
                                        pulse_w -= (add_speed+16);
                                }
                                else
                                {
                                        pulse_w -= (add_speed+17);
                                }
                        }
                        break;               
                case 1:
                        for(i=0;i<temp_pulse;i++)
                        {
                                if(pulse_w < 95)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 100)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 102)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 99)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 105)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 97)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 108)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 95)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 111)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 93)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 114)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 91)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 117)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 88)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 120)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 85)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 124)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 82)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 128)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 78)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 132)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 74)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 136)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 70)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 140)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 65)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 145)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 60)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 150)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 55)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 155)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 50)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 160)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 45)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 166)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 35)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 172)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 25)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 180)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 22)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 188)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 21)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 196)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 20)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 205)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 19)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 215)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 18)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 225)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 17)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 235)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 16)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 245)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 16)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 255)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 15)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 265)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 14)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 275)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 13)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 285)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 13)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 295)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 12)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 305)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 11)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 315)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 10)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 335)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 9)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 355)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 8)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 375)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 7)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 395)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 6)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 415)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 6)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 435)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 6)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 450)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 3)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 550)
                                {
                                        pulse_adjust++;
                                        if(pulse_adjust++ > 1)
                                        {
                                                pulse_w += add_speed;
                                                pulse_adjust = 0;
                                        }
                                }
                                else if(pulse_w < 650)
                                {
                                        pulse_w += (add_speed+1);
                                }
                                else if(pulse_w < 750)
                                {
                                        pulse_w += (add_speed+5);
                                }
                                else if(pulse_w < 850)
                                {
                                        pulse_w += (add_speed+8);
                                }
                                else if(pulse_w < 950)
                                {
                                        pulse_w += (add_speed+11);
                                }
                                else if(pulse_w < 1050)
                                {
                                        pulse_w += (add_speed+21);
                                }
                                else if(pulse_w < 1150)
                                {
                                        pulse_w += (add_speed+31);
                                }
                                else if(pulse_w < 1250)
                                {
                                        pulse_w += (add_speed+41);
                                }
                                /*
                                else if(pulse_w < 1350)
                                {
                                        pulse_w += (add_speed+51);
                                }
                                else if(pulse_w < 1450)
                                {
                                        pulse_w += (add_speed+61);
                                }
                                else if(pulse_w < 1550)
                                {
                                        pulse_w += (add_speed+61);
                                }
                               
                                else if(pulse_w < 1650)
                                {
                                        pulse_w += (add_speed+61);
                                }
                                else if(pulse_w < 1750)
                                {
                                        pulse_w += (add_speed+71);
                                }
                               
                                else if(pulse_w < 1850)
                                {
                                        pulse_w += (add_speed+71);
                                }
                                else if(pulse_w < 1950)
                                {
                                        pulse_w += (add_speed+71);
                                }
                               
                                else if(pulse_w < 2050)
                                {
                                        pulse_w += (add_speed+81);
                                }
                                else if(pulse_w < 2150)
                                {
                                        pulse_w += (add_speed+81);
                                }
                                else if(pulse_w < 2250)
                                {
                                        pulse_w += (add_speed+91);
                                }
                                else if(pulse_w < 3050)
                                {
                                        pulse_w += (add_speed+91);
                                }*/
                                else
                                {
                                        return i;
                                }
                        }
                        break;
                default:
                        break;                       
                }
        }       
}





//=======================================================
//功能描述: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 long sub_pulse)
{
        unsigned long i,j,k;
        unsigned int pulse_w,pulse_adjust=0;
        unsigned long temp_pulse,temp_pulse1,add_pulse,temp_pulse2,        temp_pulse3;
        temp_pulse = pulse/3;
       
        temp_pulse2 = pulse;
        add_pulse = 0;
        temp_pulse3 = 0;
       
        pulse_w = start_speed;
        if(axis == 1)
        {
                if(dir == 1)
                {
                        SET_X_DIR();
                }                       
                else if(dir == 0)
                {
                        CLR_X_DIR();
                }                       
        }
        else if(axis == 2)
        {
                if(dir == 1)
                {
                        SET_Y_DIR();
                }                       
                else if(dir == 0)
                {
                        CLR_Y_DIR();
                }                       
        }
        i=0;
       
        pulse_w = start_speed;
       
       
        for(i=0;i<pulse;i++)
        {
                if(i < temp_pulse)
                {
                        if(pulse_w < 115)
                        {
                        }
                        /*else if(pulse_w < 102)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 99)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                       
                        else if(pulse_w < 105)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 97)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 108)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 95)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 111)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 93)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 114)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 91)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }*/
                        else if(pulse_w < 117)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 88)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 120)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 85)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 124)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 82)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 128)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 78)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 132)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 74)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 136)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 70)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 140)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 65)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 145)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 60)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 150)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 55)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 155)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 50)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 160)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 45)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 166)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 35)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 172)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 25)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 180)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 22)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 188)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 21)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 196)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 20)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 205)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 19)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 215)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 18)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 225)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 17)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 235)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 16)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 245)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 16)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 255)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 15)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 265)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 14)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 275)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 13)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 285)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 13)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 295)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 12)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 305)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 11)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 315)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 10)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 335)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 9)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 355)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 8)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 375)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 7)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 395)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 6)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 415)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 6)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 435)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 6)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 450)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 3)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 550)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 1)
                                {
                                        pulse_w -= add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 650)
                        {
                                pulse_w -= (add_speed);
                        }
                        else if(pulse_w < 750)
                        {
                                pulse_w -= (add_speed+1);
                        }
                        else if(pulse_w < 850)
                        {
                                pulse_w -= (add_speed+2);
                        }
                        else if(pulse_w < 950)
                        {
                                pulse_w -= (add_speed+3);
                        }
                        else if(pulse_w < 1050)
                        {
                                pulse_w -= (add_speed+4);
                        }
                        else if(pulse_w < 1150)
                        {
                                pulse_w -= (add_speed+5);
                        }
                        else if(pulse_w < 1250)
                        {
                                pulse_w -= (add_speed+6);
                        }
                        else if(pulse_w < 1350)
                        {
                                pulse_w -= (add_speed+7);
                        }
                        else if(pulse_w < 1450)
                        {
                                pulse_w -= (add_speed+8);
                        }
                        else if(pulse_w < 1550)
                        {
                                pulse_w -= (add_speed+9);
                        }
                        else if(pulse_w < 1650)
                        {
                                pulse_w -= (add_speed+10);
                        }
                        else if(pulse_w < 1750)
                        {
                                pulse_w -= (add_speed+11);
                        }
                        else if(pulse_w < 1850)
                        {
                                pulse_w -= (add_speed+12);
                        }
                        else if(pulse_w < 1950)
                        {
                                pulse_w -= (add_speed+13);
                        }
                        else if(pulse_w < 2050)
                        {
                                pulse_w -= (add_speed+14);
                        }
                        else if(pulse_w < 2150)
                        {
                                pulse_w -= (add_speed+15);
                        }
                        else if(pulse_w < 2250)
                        {
                                pulse_w -= (add_speed+16);
                        }
                        else
                        {
                                pulse_w -= (add_speed+17);
                        }
                        wait_pulse(pulse_w);
                        SET_X_AXIS();
                        wait_pulse(pulse_w);                       
                        CLR_X_AXIS();
                        temp_pulse3++;                               
                }
                //else if(i> (temp_pulse2 - temp_pulse3+25000)/*30700*/)unsigned long sub_pulse
                else if(i> (temp_pulse2 - sub_pulse))
                {
                        if(pulse_w < 98)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 100)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 102)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 99)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 105)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 97)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 108)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 95)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 111)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 93)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 114)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 91)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 117)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 88)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 120)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 85)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 124)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 82)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 128)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 78)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 132)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 74)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 136)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 70)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 140)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 65)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 145)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 60)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 150)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 55)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 155)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 50)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 160)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 45)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 166)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 35)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 172)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 25)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 180)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 22)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 188)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 21)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 196)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 20)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 205)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 19)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 215)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 18)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 225)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 17)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 235)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 16)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 245)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 16)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 255)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 15)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 265)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 14)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 275)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 13)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 285)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 13)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 295)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 12)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 305)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 11)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 315)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 10)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 335)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 9)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 355)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 8)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 375)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 7)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 395)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 6)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 415)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 6)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 435)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 6)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 450)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 3)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 550)
                        {
                                pulse_adjust++;
                                if(pulse_adjust++ > 1)
                                {
                                        pulse_w += add_speed;
                                        pulse_adjust = 0;
                                }
                        }
                        else if(pulse_w < 650)
                        {
                                pulse_w += (add_speed+1);
                        }
                        else if(pulse_w < 750)
                        {
                                pulse_w += (add_speed+5);
                        }
                        else if(pulse_w < 850)
                        {
                                pulse_w += (add_speed+8);
                        }
                        else if(pulse_w < 950)
                        {
                                pulse_w += (add_speed+11);
                        }
                        else if(pulse_w < 1050)
                        {
                                pulse_w += (add_speed+21);
                        }
                        else if(pulse_w < 1150)
                        {
                                pulse_w += (add_speed+31);
                        }
                        else if(pulse_w < 1250)
                        {
                                pulse_w += (add_speed+41);
                        }
                        else if(pulse_w < 1350)
                        {
                                pulse_w += (add_speed+51);
                        }
                        else if(pulse_w < 1450)
                        {
                                pulse_w += (add_speed+61);
                        }
                        else if(pulse_w < 1550)
                        {
                                pulse_w += (add_speed+61);
                        }
                        /*
                        else if(pulse_w < 1650)
                        {
                                pulse_w += (add_speed+61);
                        }
                        else if(pulse_w < 1750)
                        {
                                pulse_w += (add_speed+71);
                        }
                        else if(pulse_w < 1850)
                        {
                                pulse_w += (add_speed+71);
                        }
                        else if(pulse_w < 1950)
                        {
                                pulse_w += (add_speed+71);
                        }
                       
                        else if(pulse_w < 2050)
                        {
                                pulse_w += (add_speed+81);
                        }
                        else if(pulse_w < 2150)
                        {
                                pulse_w += (add_speed+81);
                        }
                        else if(pulse_w < 2250)
                        {
                                pulse_w += (add_speed+91);
                        }
                        else if(pulse_w < 3050)
                        {
                                pulse_w += (add_speed+91);
                        }
                        */
                        else
                        {
                       
                        }
                        wait_pulse(pulse_w);
                        SET_X_AXIS();
                        wait_pulse(pulse_w);                       
                        CLR_X_AXIS();       
                }
               
                else
                {
                        wait_pulse(pulse_w);
                        SET_X_AXIS();
                        wait_pulse(pulse_w);
                        CLR_X_AXIS();       
                }
        }
}



void wait_pulse(unsigned int t)
{
        while(t--);
//        while(T2CNT < t);
}

feitian215 发表于 2008-1-12 10:14:48

晕死,这么长!佩服佩服!

收藏起来

icefog 发表于 2008-1-14 00:18:57

我靠,这是什么程序,干嘛不用查表

lzlym182 发表于 2008-1-14 09:02:28

简单

aohuahua 发表于 2009-8-31 09:53:55

看上去挺吓人的

powerwjc 发表于 2009-8-31 20:06:16

看上去挺吓人的

ylei12 发表于 2009-8-31 20:41:10

相当吓人,收藏

TRINAMIC 发表于 2009-9-20 18:47:29

使用ATmega+TMC428来做吧TMC428是专用运动控制芯片,运动控制可由TMC428来完成,加速,减速都集成在TMC428里面了
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_483087.gif
(原文件名:2.gif)

lllll 发表于 2009-9-21 19:52:40

雷人

cj85 发表于 2012-1-14 10:46:56

MARK

lktdm 发表于 2012-5-1 18:15:46

线性加速,确定好步进频率、每个频率运行步数,然后从最低起跳频率开始,根据相应频率算出octn做个加速表,程序中调用皆可,加速控制方向相反。

lovencj001 发表于 2012-5-2 23:31:18

你要做步进电机驱动是不,没你想得那么简单,首先你要的是梯形曲线还是“S”曲线,在就是你电机每次走的距离都相同吗?
如果要做,你要做个函数,而不是简单的在某个时刻去加减速。
类似于工控中运动控制卡。

ralfak 发表于 2012-5-3 03:05:01

用xmega很容易解决
把定时器的周期改一下就可以
每个周期都可以更新
溢出中断累计脉冲数
升频减小计数周期
恒频固定计数周期
降频增大计数周期
搞个50%的pwm
没用过步进电机

li780713 发表于 2012-5-3 07:04:55

做个标记,学习一下

haoye 发表于 2012-8-31 17:16:14

程序也太长了吧,简化点。。。

dcqq88 发表于 2012-10-12 20:29:39

没看懂!

zl_123 发表于 2013-2-1 23:07:14

TRINAMIC 发表于 2009-9-20 18:47 static/image/common/back.gif
使用ATmega+TMC428来做吧TMC428是专用运动控制芯片,运动控制可由TMC428来完成,加速,减速都集成在TMC428里 ...

请问这个芯片怎么用的?

jz701209李 发表于 2013-2-5 20:36:19

学习一下.....

wzhscj 发表于 2013-2-6 16:57:53

留个记号

John_123 发表于 2013-2-20 08:22:53

long long speech!!

redtom 发表于 2013-2-22 23:21:53

这个我做个,步进电机加减速的东东,我用STM32做的,调起来还是有些复杂的,容易出错

geiter001 发表于 2013-2-28 02:49:12

redtom 发表于 2013-2-22 23:21 static/image/common/back.gif
这个我做个,步进电机加减速的东东,我用STM32做的,调起来还是有些复杂的,容易出错 ...

你好,可否聊聊STM32控制步进电机呢?我的的仿真都对了,但是电机就不转。想向你学习。QQ272082892

erpao 发表于 2013-2-28 08:49:06

关注,学习.貌似开环不靠谱吧,需要电流闭环进行负载动态调整加速曲线!

kcfoo1 发表于 2013-3-3 20:49:24

lovencj001 发表于 2012-5-2 23:31 static/image/common/back.gif
你要做步进电机驱动是不,没你想得那么简单,首先你要的是梯形曲线还是“S”曲线,在就是你电机每次走的距 ...

对的,从起始坐标x y到目的坐标x y,两轴应同时到达,x y速度是不一样的,随着坐标改变,速度也改变,如果走的是z 或s型路线,运动体就会给人发抖的感觉。要两轴联动才有用

redtom 发表于 2013-3-10 23:17:02

geiter001 发表于 2013-2-28 02:49 static/image/common/back.gif
你好,可否聊聊STM32控制步进电机呢?我的的仿真都对了,但是电机就不转。想向你学习。QQ272082892 ...

我用stm32做的步进电机加减速和16楼的思路是一样的。你电机不转可能是步进电机的接线不对,或驱动模块不好

lu976046395 发表于 2013-4-10 15:58:00

要是程序能够简单点就好了

lu976046395 发表于 2013-4-10 15:58:58

有没有人知道,加速度的时候每个频率走多少步之后再切换到别的频率比较好?步进电机的

jimmyfan 发表于 2013-4-12 16:46:27

这个看到我没信心了,先copy下来

avrway 发表于 2013-6-4 16:47:44

好长的程序
页: [1]
查看完整版本: 如何用PWM方式实现步进电机的升频-恒速-降频过程?