搜索
bottom↓
回复: 3

怎么控制步进电机速度?

[复制链接]

出0入0汤圆

发表于 2007-7-26 18:53:26 | 显示全部楼层 |阅读模式
怎么控制步进电机速度?请大家指教一下

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2007-7-27 09:31:21 | 显示全部楼层
慢慢加速,,把A-B-C-D-A这样输出的速率加快,,要慢慢加快,不然会产生失步的现象!

出0入0汤圆

发表于 2007-7-27 13:54:07 | 显示全部楼层
慢慢加速  慢慢减速

出0入0汤圆

发表于 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);

}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-8 12:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表