搜索
bottom↓
回复: 384

STC11F16XE驱动4个步进电机(软件实现16细分)

  [复制链接]

出0入0汤圆

发表于 2010-12-8 08:50:24 | 显示全部楼层 |阅读模式
用STC11F16XE驱动4个2803带动4个步进电机,每个电机都是用软件实现16细分,有图片:

(原文件名:1.jpg)


(原文件名:2.jpg)

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2010-12-8 09:19:36 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-12-8 12:09:06 | 显示全部楼层
mark.

出0入0汤圆

发表于 2010-12-8 12:40:44 | 显示全部楼层
关键的代码及如何实现的还望楼主能详细介绍,谢谢

出0入0汤圆

 楼主| 发表于 2010-12-8 14:38:43 | 显示全部楼层
回复【3楼】lwg998
-----------------------------------------------------------------------

呵呵,这个很简单的,如果有需要的话我可以说说

出0入0汤圆

发表于 2010-12-8 23:14:10 | 显示全部楼层
关注。。。

出0入0汤圆

发表于 2010-12-9 00:15:05 | 显示全部楼层
回复【3楼】lwg998
关键的代码及如何实现的还望楼主能详细介绍,谢谢
-----------------------------------------------------------------------

强烈需要呀,希望楼主能详细说说呀

出0入0汤圆

 楼主| 发表于 2010-12-9 16:51:03 | 显示全部楼层
想知道的话可以留下联系方式

出0入0汤圆

发表于 2010-12-9 16:51:10 | 显示全部楼层
很需要,希望楼主能讲讲课!

出0入0汤圆

 楼主| 发表于 2010-12-9 16:53:08 | 显示全部楼层
我现在就在用四个步进电机做产品,效果很好,上面那个图就是我们刚刚开发的电机方面的

出0入0汤圆

发表于 2010-12-9 17:05:12 | 显示全部楼层
liuguang1958@163.com
   QQ:364801797

出0入0汤圆

发表于 2010-12-9 21:33:18 | 显示全部楼层
很不错,想了解细分思路。

出0入0汤圆

发表于 2010-12-9 22:48:33 | 显示全部楼层
cwcbacmwk@21cn.com
QQ:176534519

出0入0汤圆

 楼主| 发表于 2010-12-10 08:32:50 | 显示全部楼层
先上传关键代码先
ourdev_603668MNBQGC.txt(文件大小:1K) (原文件名:StepMotor.txt)

出0入0汤圆

发表于 2010-12-10 08:37:57 | 显示全部楼层
楼主还是把所有代码发上来,要不大家怎么研究,你这个电路谁都会画关键是算法啊,你只给一个函数我们怎么知道怎么个意思!

出0入0汤圆

发表于 2010-12-10 09:12:18 | 显示全部楼层
萍踪侠影

出0入0汤圆

 楼主| 发表于 2010-12-10 09:21:43 | 显示全部楼层
我再上传一个
ourdev_603678RIWDFW.txt(文件大小:234字节) (原文件名:StepMotor1.txt)
后面的就要由你们自己去理解啦,根据我给的原理图结合我的关键代码各位高手应该都是能够看出算法的

出0入0汤圆

 楼主| 发表于 2010-12-10 09:23:18 | 显示全部楼层
如果还有不明白的话我再讲解一下,这样你们先思考更能够理解这个算法

出0入0汤圆

 楼主| 发表于 2010-12-10 09:26:38 | 显示全部楼层
不好意思,ourdev_603678RIWDFW.txt(文件大小:234字节) (原文件名:StepMotor1.txt)  是错误的,我更改为下面这个
ourdev_603683P029LI.txt(文件大小:203字节) (原文件名:StepMotor1.txt)

出0入0汤圆

发表于 2010-12-10 09:31:43 | 显示全部楼层
#include "Uln2803Drive.h"                 


SUln2803Drive Uln2803;

volatile unsigned char idata       
    cPwmDriveBuffer[17];




unsigned char code cTableUnl2803DriveMask[]=
{
    0xfc, 0xf3,  0xcf,  0x3f,        
};
unsigned char code cTableUnl2803DrivePhase[] =   
{
  0x03, 0x01, 0x00, 0x02, 0x03,
  0x0c, 0x08, 0x00, 0x04, 0x0c,  
  0x30, 0x10, 0x00, 0x20, 0x30,  
  0xc0, 0x40, 0x00, 0x80, 0xc0,  
};

unsigned int code wTableUnl2803DriveValue[] =
{
    0x0000, 0x0080, 0x0820, 0x1110, 0x2244, 0x2492, 0x4a52, 0x5554,
        0xaaaa, 0xabaa, 0xbaae, 0xbbba, 0xeeee, 0xeefe, 0xf7f7, 0x7fff,


};


void Uln2803Drive(unsigned char cPort, unsigned char cPosition)
{
    unsigned long int
                wTemp;               
        unsigned char
            c,
            cDriveValue,
                cPhaseValueLeft,
                cPhaseValueRight,
                cShieldValue;

        cPosition       &= 0x3f;
        wTemp            = wTableUnl2803DriveValue[cPosition & 0x0f];       
        cPhaseValueLeft  = cTableUnl2803DrivePhase[(cPosition / 16) + (cPort * 5)];
        cPhaseValueRight = cTableUnl2803DrivePhase[(cPosition / 16) + (cPort * 5) + 1];               
        cShieldValue     = cTableUnl2803DriveMask[cPort];

        for (c = 0; c != 16; c ++)
        {               
                if (wTemp & 0x0001)
                        cDriveValue = cPhaseValueRight;
                else
                    cDriveValue = cPhaseValueLeft;         
                cPwmDriveBuffer[c] &=  cShieldValue;                  
                cPwmDriveBuffer[c] |=  cDriveValue;
                wTemp >>= 1;
        }
        cPwmDriveBuffer[16] &=  cShieldValue;                  
        cPwmDriveBuffer[16] |=  cPhaseValueRight;       
}



               
void Timer0_IRQHandler(void) interrupt 1             //8us中断一次
{

    if (Uln2803.cCount > 16)
                Uln2803.cCount = 0;

        P0 = cPwmDriveBuffer[Uln2803.cCount];                               

           ++ Uln2803.cCount;
}

出0入84汤圆

发表于 2010-12-10 09:34:37 | 显示全部楼层
MARK

出0入0汤圆

 楼主| 发表于 2010-12-10 09:38:05 | 显示全部楼层
这个函数void Uln2803Drive(unsigned char cPort, unsigned char cPosition) 中“unsigned char cPort”是指第几个电机端口,数据只能是0到3,“unsigned char cPosition”就是驱动电机是步数值,这个可以放在你们自己的电机模块中,整个函数都可以被四个电机驱动模块调用,只要把端口区分开来就可以了

出0入0汤圆

 楼主| 发表于 2010-12-10 09:39:30 | 显示全部楼层
还有不明白的地方吗?

出0入0汤圆

发表于 2010-12-10 09:46:55 | 显示全部楼层
8US中断一次,单片机可够累得!

出0入0汤圆

 楼主| 发表于 2010-12-10 10:04:33 | 显示全部楼层
还可以的,关键就是得看你怎么处理你的程序咯

出0入0汤圆

发表于 2010-12-10 12:37:33 | 显示全部楼层
步进的加减速怎么实现呢?

出0入0汤圆

发表于 2010-12-10 12:47:46 | 显示全部楼层
没看出来哪好

出0入0汤圆

发表于 2010-12-10 12:53:48 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-12-10 13:08:59 | 显示全部楼层
回复【26楼】luhuaren
没看出来哪好
-----------------------------------------------------------------------

呵呵,等你用过才知道它的好处

出0入0汤圆

 楼主| 发表于 2010-12-10 13:11:03 | 显示全部楼层
回复【24楼】chenyuqiu 小陈
还可以的,关键就是得看你怎么处理你的程序咯
-----------------------------------------------------------------------

加减速处理得由各位自己处理咯,我只是提供思路,不过想知道的话也是可以留下联系方式的,我这里有步进电机加减速的处理程序

出0入0汤圆

发表于 2010-12-10 13:57:45 | 显示全部楼层
又看到楼主的作品,晚上学习学习。
谢谢了

出0入0汤圆

 楼主| 发表于 2010-12-10 14:12:08 | 显示全部楼层
回复【30楼】xiaowu191
又看到楼主的作品,晚上学习学习。
谢谢了
-----------------------------------------------------------------------

小巫同志,那个软件会不会用啊?电机调试好了吗?还会不会抖啊?

出0入0汤圆

发表于 2010-12-10 14:48:23 | 显示全部楼层
收藏,晚上催眠用

出0入0汤圆

发表于 2010-12-10 16:26:08 | 显示全部楼层
回复【31楼】chenyuqiu  小陈
-----------------------------------------------------------------------

还真是不会用啊,你有空,指导一下才行

出0入0汤圆

发表于 2010-12-10 16:54:09 | 显示全部楼层
好像相电流是这样?


(原文件名:未命名.JPG) </center>

出0入0汤圆

发表于 2010-12-10 16:58:15 | 显示全部楼层
懂了,挺简单的,这个函数不错

出0入0汤圆

发表于 2010-12-10 17:16:08 | 显示全部楼层
回复【22楼】chenyuqiu 小陈
还有不明白的地方吗?
-----------------------------------------------------------------------

有。
这个就是十七细分吗?
if (Uln2803.cCount > 16)
Uln2803.cCount的值分别可以是0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  
加上0 就17细分啦。

出0入0汤圆

发表于 2010-12-10 17:31:02 | 显示全部楼层
那个应该是PWM的分辨率,

到时搭个电路效果,

出0入0汤圆

发表于 2010-12-10 18:02:33 | 显示全部楼层
崇拜
但是看不懂
最好详细详细再详细
新手没办法理解

出0入0汤圆

发表于 2010-12-10 20:00:29 | 显示全部楼层
加减速控制是步进电机不丢步的关键,那么你这四个电机最大驱动速度可以到多少呢

出0入0汤圆

 楼主| 发表于 2010-12-10 20:18:46 | 显示全部楼层
回复【39楼】lwg998
加减速控制是步进电机不丢步的关键,那么你这四个电机最大驱动速度可以到多少呢

-----------------------------------------------------------------------

其实速度还要看你用什么电机,不同电机有不同的性能的,效果肯定比没细分的好

出0入0汤圆

 楼主| 发表于 2010-12-10 20:21:25 | 显示全部楼层
回复【34楼】xiaowu191
好像相电流是这样?

(原文件名:未命名.jpg)

-----------------------------------------------------------------------

看这个图一应该是你的电机的相电流太低了,你的电路驱动所设置的最高电流高过你当前所用电机的最大相电流。所以你得换换电机,找一个相电流更大的。

出0入0汤圆

 楼主| 发表于 2010-12-10 20:22:58 | 显示全部楼层
回复【36楼】NE555
回复【22楼】chenyuqiu 小陈
还有不明白的地方吗?
-----------------------------------------------------------------------
有。
这个就是十七细分吗?
if (uln2803.ccount &gt; 16)
uln2803.ccount的值分别可以是0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16   
加上0 就17细分啦。
-----------------------------------------------------------------------

呵呵,是的,第17步是补偿的,不加这一步的话效果不理想。所以还请大家想想更好的细分方法

出0入0汤圆

 楼主| 发表于 2010-12-11 08:11:13 | 显示全部楼层
自己顶一下

出0入0汤圆

发表于 2010-12-11 09:11:54 | 显示全部楼层
我也来顶一下。

出0入0汤圆

发表于 2010-12-11 09:21:44 | 显示全部楼层
马克

出0入0汤圆

发表于 2010-12-11 10:22:58 | 显示全部楼层
哈哈。终于大致看懂啦。
谢谢楼主。
觉得楼主风格有点与众不同。

出0入0汤圆

 楼主| 发表于 2010-12-11 10:26:20 | 显示全部楼层
回复【46楼】NE555
哈哈。终于大致看懂啦。
谢谢楼主。
觉得楼主风格有点与众不同。
-----------------------------------------------------------------------

我的风格是一位很厉害的软件工程师教我的,对比其他人写的程序风格我觉得还是自己的风格比较好,呵呵。这种风格很容易让其他人看得懂,程序模块化性很强等等

出0入0汤圆

发表于 2010-12-11 11:07:59 | 显示全部楼层
我也来顶一下。

出0入0汤圆

发表于 2010-12-11 11:16:49 | 显示全部楼层
回复【47楼】chenyuqiu 小陈
回复【46楼】ne555  
哈哈。终于大致看懂啦。  
谢谢楼主。  
觉得楼主风格有点与众不同。
-----------------------------------------------------------------------
我的风格是一位很厉害的软件工程师教我的,对比其他人写的程序风格我觉得还是自己的风格比较好,呵呵。这种风格很容易让其他人看得懂,程序模块化性很强等等
-----------------------------------------------------------------------

LZ放一个完整的工程出来,学习一下!

出0入0汤圆

 楼主| 发表于 2010-12-11 11:25:48 | 显示全部楼层
回复【49楼】eworker
-----------------------------------------------------------------------

呵呵,我一个工程文件很大的哦

出0入0汤圆

发表于 2010-12-11 11:59:15 | 显示全部楼层
有几百K?

出0入0汤圆

 楼主| 发表于 2010-12-11 12:08:20 | 显示全部楼层
呵呵,没有啦。想要的话可以留下联系方式

出0入0汤圆

发表于 2010-12-11 12:44:22 | 显示全部楼层
强烈想要,楼主不要藏着掖着啦,逗大家胃口。

俺的神啊,俺下周就开始捣鼓电机,不过我同事已经做好了一个,也是用STC的,最近由我接手软件,算法方面正在钻研。

楼主是否放出全部工程参考一下。

邮件:wgj_king@163.com
QQ  :372215923

出0入0汤圆

发表于 2010-12-11 12:56:30 | 显示全部楼层
想要。
请“小陈”有空发一份到 c118124@sina.com
  谢谢

出0入0汤圆

 楼主| 发表于 2010-12-11 13:59:04 | 显示全部楼层
今天我大开杀戒,把我最珍贵的步进电机加减算法公布出来,大家好好收藏!!!!


unsigned int code wTableBrakeSpace211_1[] =
{
            0,    2,    5,    9,   14,   20,   27,   35,   44,   54,   65,   77,   90,  104,  119,  135,
          152,  170,  189,  209,  230,  252,  275,  299,  324,  350,  377,  405,  434,  464,  495,  527,
          560,  594,  629,  665,  702,  740,  779,  819,  860,  902,  945,  989, 1034, 1080, 1127, 1175,
         1224, 1274, 1325, 1377, 1430, 1484, 1539, 1595, 1652, 1710, 1769, 1829, 1890, 1952, 2015, 2079,
         2144, 2210, 2277, 2345, 2414, 2484, 2555, 2627, 2700, 2774, 2849, 2925, 3002, 3080, 3159, 3239,
         3320, 3402, 3485, 3569, 3654, 3740, 3827, 3915, 4004, 4094, 4185, 4277, 4370, 4464, 4559, 4655,
         4752, 4850, 4949, 5049, 5150, 5252, 5355, 5459, 5564, 5670, 5777, 5885, 5994, 6104, 6215, 6327,
         6440, 6554, 6669, 6785, 6902, 7020, 7139, 7259, 7380, 7502, 7625, 7749, 7874, 8000, 8127, 8255,
         8384, 8514, 8645, 8777, 8910, 9044, 9179, 9315, 9452, 9590, 9729, 9869,10010,10152,10295,10439,
        10584,10730,10877,11025,11174,11324,11475,11627,11780,11934,12089,12245,12402,12560,12719,12879,
        13040,13202,13365,13529,13694,13860,14027,14195,14364,14534,14705,14877,15050,15224,15399,15575,
        15752,15930,16109,16289,16470,16652,16835,17019,17204,17390,17577,17765,17954,18144,18335,18527,
        18720,18914,19109,19305,19502,19700,19899,20099,20300,20502,20705,20909,21114,21320,21527,21735,
        21944,22154,22365,22577,22790,23004,23219,23435,23652,23870,24089,24309,24530,24752,24975,25199,
        25424,25650,25877,26105,26334,26564,26795,27027,27260,27494,27729,27965,28202,28440,28679,28919,
        29160,29402,29645,29889,30134,30380,30627,30875,31124,31374,31625,31877,32130,32384,32639,32895,
        65535
};

#include "Motor.h"
#include "Pan.h"


bit
    bPanMotorMove,       
        bPanMotorDirection,
        bPanPositionInverse;

unsigned char xdata
        cPanDmxValue,
    cPanPositionValue,

        cPanAutoSpeed,
        cPanOffsetValue,
        cPanDriveValue,
        cPanDriveDelay;

unsigned char xdata
       
        cPanMotorSpeed,
        cPanMotorNowSpeed,
        cPanMotorResetStep;

unsigned int xdata
        wPanMotorNowPosition,
        wPanMotorEndPosition;



void PanSetSpeed(void)
{
        if (cPanAutoSpeed < PAN_MAX_SPEED)                       
        {
                cPanMotorSpeed = cPanAutoSpeed;
        }
        else
        {
                cPanMotorSpeed = PAN_MAX_SPEED;
        }       
}

void PanGetAutoSpeed(unsigned int i)
{       
    cPanAutoSpeed = i / 350;

        PanSetSpeed();
}

void PanReset(void)
{
// initial
        cPanMotorNowSpeed    = 0;
        wPanMotorNowPosition = 30000;
// Dmx
        cPanDmxValue         = 0;
    cPanPositionValue    = 0;
// reset
        wPanMotorEndPosition = 0;
        cPanMotorSpeed       = 5;
// state
        cPanMotorResetStep   = 127;
// flag
        PanSetMoveFlag();

        Motor.wResetState   |= (1 << PAN);

}

void PanProcStep(void)
{
        unsigned char c;

        DOUBLE_BYTE i;

        if (wPanMotorNowPosition > wPanMotorEndPosition)
        {
            i.word = wPanMotorNowPosition - wPanMotorEndPosition;
                c = DECREASE;
        }
        else
        {
                i.word = wPanMotorEndPosition - wPanMotorNowPosition;
                c = INCREASE;
        }

        if ((i.word != 0) || (cPanMotorNowSpeed != 0))
        {
                if (c != bPanMotorDirection)
                {
                        bPanMotorDirection = c;

                        if (cPanMotorResetStep == 0)
                        {
                                PanGetAutoSpeed(i.word);
                        }
                }
        
                if ((c != bPanMotorDirection) || (i.word < wTableBrakeSpace211_1[cPanMotorNowSpeed]))
                {
                        c = 0;
                }
                else if ((i.word < wTableBrakeSpace211_1[cPanMotorNowSpeed + 1]) && (cPanMotorSpeed > cPanMotorNowSpeed))
                {
                        c = cPanMotorNowSpeed;
                }
                else
                {
                        c = cPanMotorSpeed;
                }

                if (cPanMotorNowSpeed != c)
                {
                        if (cPanMotorNowSpeed < c)
                        {
                                ++ cPanMotorNowSpeed;
                        }
                        else
                        {
                                -- cPanMotorNowSpeed;
                        }
                }
               
                c = cPanMotorNowSpeed;

                if (c == 0)
                {
                        c = 1;
                }
                       
                if (bPanMotorDirection)
                {
                        wPanMotorNowPosition += c;
                }
                else
                {
                        wPanMotorNowPosition -= c;
                }
               
                c = wPanMotorNowPosition >> 4;
                if (c != cPanDriveValue)
                {
                        cPanDriveValue = c;                       
                        Uln2803Drive(0, -c);
                }
        }
        else if (PanIsMove())
        {
                PanClearMoveFlag();               
        }       
        else if (cPanMotorResetStep)
        {
                wPanMotorNowPosition    = 0;
                wPanMotorEndPosition    = 0;

                cPanMotorResetStep = 0;
               
                Motor.wResetState &= ~(1 << PAN);
        }

}

void PanProcPositionDmxValue(unsigned char c)
{
    DOUBLE_BYTE i;

    cPanPositionValue = c;

       
        if (bPanPositionInverse)
        {
                c = 255 - c;
        }
       
        wPanMotorEndPosition = c* 100;

        if (wPanMotorNowPosition > wPanMotorEndPosition)
        {
            i.word = wPanMotorNowPosition - wPanMotorEndPosition;
                c = DECREASE;
        }
        else
        {
                i.word = wPanMotorEndPosition - wPanMotorNowPosition;
                c = INCREASE;
        }
        if ((c == bPanMotorDirection) || (cPanMotorNowSpeed == 0))
        {
                PanGetAutoSpeed(i.word);
        }
       
        PanSetMoveFlag();
}

出0入0汤圆

 楼主| 发表于 2010-12-11 14:57:54 | 显示全部楼层
没人顶,自己再顶一下。

出0入0汤圆

发表于 2010-12-11 15:14:33 | 显示全部楼层
这是梯形,还是S形 加减速呀! 没有仔细看.

最好用一个应用接口.

如: Moto(运行步数,最高频率,启动时间)

出0入0汤圆

发表于 2010-12-11 15:18:16 | 显示全部楼层
再帮你顶一下.


步进电机三轴联动的快速加减速算法研究ourdev_603986JAXL9A.pdf(文件大小:156K) (原文件名:步进电机三轴联动的快速加减速算法研究.pdf)

出0入0汤圆

 楼主| 发表于 2010-12-11 16:13:25 | 显示全部楼层
回复【57楼】SystemARM
-----------------------------------------------------------------------

是梯形的

出0入0汤圆

 楼主| 发表于 2010-12-11 18:11:38 | 显示全部楼层
wo ding

出0入0汤圆

 楼主| 发表于 2010-12-13 08:35:20 | 显示全部楼层
我再顶

出0入0汤圆

发表于 2010-12-13 08:39:55 | 显示全部楼层
谢谢楼主的资料,觉得楼主的姿态有点高。

出0入0汤圆

 楼主| 发表于 2010-12-13 09:22:15 | 显示全部楼层
回复【62楼】exploer
  谢谢楼主的资料,觉得楼主的姿态有点高。
-----------------------------------------------------------------------

我的姿态有点高???????????

出0入0汤圆

发表于 2010-12-15 01:22:17 | 显示全部楼层
谢谢楼主的东东,不如都放出来!

出0入0汤圆

 楼主| 发表于 2010-12-15 10:17:59 | 显示全部楼层
呵呵,上面的东西已经很有参考价值的啦!!

出0入0汤圆

发表于 2010-12-22 18:45:55 | 显示全部楼层
make

出0入0汤圆

发表于 2010-12-22 19:13:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-24 00:34:13 | 显示全部楼层
我也留个记号

出0入0汤圆

 楼主| 发表于 2010-12-30 15:20:43 | 显示全部楼层
我自己再顶!!!

出0入0汤圆

发表于 2010-12-30 16:38:26 | 显示全部楼层
我顶一顶,mark一下

出0入0汤圆

发表于 2010-12-30 16:58:59 | 显示全部楼层
支持楼主,步进电机细分真不错,有空学习下了

出0入0汤圆

发表于 2010-12-30 17:24:48 | 显示全部楼层
急停功能如何实现的?或 需求当按下停止键后,当前步执行完后再停止, 如何实现, 谢谢

出0入0汤圆

发表于 2010-12-30 17:31:05 | 显示全部楼层
您好:
  楼主能否给我发一份?我的邮箱是1dychen_04@163.com

出0入0汤圆

发表于 2010-12-30 18:17:46 | 显示全部楼层
元旦放假仔细看看,感谢楼主提供思路

出0入0汤圆

发表于 2010-12-30 19:22:23 | 显示全部楼层
软件细分?楼主的意思是PWM是由CPU直接产生?每个细分步都不用电流反馈吗?如此能达到多少转速?PWM的最小脉宽是否8uS?1000000/8=125000/16=7812.5HZ/(200整步)=2343.75,这样算来速度很高啊。那个2803会不会发热呢?

出0入0汤圆

发表于 2010-12-30 20:22:39 | 显示全部楼层
谢谢,这个有用的上,过两天仔细看看

出0入0汤圆

发表于 2010-12-30 21:47:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-30 23:05:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-31 02:09:12 | 显示全部楼层
Mark

出0入0汤圆

 楼主| 发表于 2010-12-31 15:20:04 | 显示全部楼层
回复【75楼】xiaobendan 仲跻东
软件细分?楼主的意思是pwm是由cpu直接产生?每个细分步都不用电流反馈吗?如此能达到多少转速?pwm的最小脉宽是否8us?1000000/8=125000/16=7812.5hz/(200整步)=2343.75,这样算来速度很高啊。那个2803会不会发热呢?
-----------------------------------------------------------------------

2803不会很热的,我是做舞台灯光这个行业的,驱动步进马达这部分我们一定是避免不了的,而且要求也是比较高的,具体的转速我就没测试过,但是用PWM做出来的效果是真的很好.

出0入0汤圆

 楼主| 发表于 2010-12-31 15:25:04 | 显示全部楼层
回复【72楼】winkle
急停功能如何实现的?或 需求当按下停止键后,当前步执行完后再停止, 如何实现, 谢谢
-----------------------------------------------------------------------

你好,当你需要执行完当前步再停止的话我那个程序就是这样处理的;当你需要立刻停止的话一般是不再发送脉冲信号给步进马达就好,不过这样有可能会失步.转速过快时有可能刹车不住的.

出0入0汤圆

 楼主| 发表于 2010-12-31 15:55:25 | 显示全部楼层
回复【79楼】dmxfeng
mark
-----------------------------------------------------------------------

请问你也是做舞台灯光这个行业的吧???

出0入0汤圆

发表于 2010-12-31 15:58:35 | 显示全部楼层
我也做了STC控制4步进,比起楼主来惭愧了,我用的是TB6560,细分硬件完成了,速度只能到1000rpm。有兴趣的看下视频吧
http://v.youku.com/v_show/id_XMTY1MjYzMjEy.html

出0入0汤圆

 楼主| 发表于 2010-12-31 17:02:30 | 显示全部楼层
回复【83楼】liujing0146
我也做了stc控制4步进,比起楼主来惭愧了,我用的是tb6560,细分硬件完成了,速度只能到1000rpm。有兴趣的看下视频吧
http://v.youku.com/v_show/id_xmty1mjyzmjey.html
-----------------------------------------------------------------------

视频我看过啦,很强悍!!!

出0入0汤圆

发表于 2010-12-31 21:55:16 | 显示全部楼层
ding

出0入0汤圆

发表于 2011-1-2 09:40:55 | 显示全部楼层
回复【81楼】chenyuqiu 小陈
回复【72楼】winkle  
急停功能如何实现的?或 需求当按下停止键后,当前步执行完后再停止, 如何实现, 谢谢
-----------------------------------------------------------------------
你好,当你需要执行完当前步再停止的话我那个程序就是这样处理的;当你需要立刻停止的话一般是不再发送脉冲信号给步进马达就好,不过这样有可能会失步.转速过快时有可能刹车不住的.
-----------------------------------------------------------------------
执行完当前步再停止的话我那个程序就是这样处理的, ---讨教一下是通过外部中断实现吗?如果是外部中断的话就会出现失步,过冲。

出675入8汤圆

发表于 2011-1-2 13:25:25 | 显示全部楼层
mark一下

出0入0汤圆

 楼主| 发表于 2011-1-3 09:03:53 | 显示全部楼层
回复【86楼】winkle

执行完当前步再停止的话我那个程序就是这样处理的, ---讨教一下是通过外部中断实现吗?如果是外部中断的话就会出现失步,过冲。

-----------------------------------------------------------------------

我的程序不是用外部中断的,只要程序处理得当(加减速算法处理得合理的话),应该不会有失步现象的.

出0入0汤圆

发表于 2011-1-3 13:30:22 | 显示全部楼层
回复【88楼】chenyuqiu 小陈
回复【86楼】winkle  
执行完当前步再停止的话我那个程序就是这样处理的, ---讨教一下是通过外部中断实现吗?如果是外部中断的话就会出现失步,过冲。  
-----------------------------------------------------------------------
我的程序不是用外部中断的,只要程序处理得当(加减速算法处理得合理的话),应该不会有失步现象的.
-----------------------------------------------------------------------

是不是通过硬件支持啊, 如停止键设计为常闭和键,按下后I/O被拉低;等待当前步完成后检测该flag,如果是低则保存当前状态后停机.

chenyuqiu 小陈:讲一下你的思路, open一下

出0入0汤圆

 楼主| 发表于 2011-1-3 14:07:25 | 显示全部楼层
回复【89楼】winkle
请问一下你是把步进马达运用在哪方面的呢?

出0入0汤圆

发表于 2011-1-3 15:04:15 | 显示全部楼层
回复【90楼】chenyuqiu 小陈
回复【89楼】winkle  
请问一下你是把步进马达运用在哪方面的呢?

-----------------------------------------------------------------------

消费电子行业, 生产线.
可否交流一下:我的QQ 344891192 (公司禁止上QQ,只有下班在家)

出0入0汤圆

 楼主| 发表于 2011-1-3 15:18:21 | 显示全部楼层
回复【91楼】winkle
回复【90楼】chenyuqiu 小陈
回复【89楼】winkle   
请问一下你是把步进马达运用在哪方面的呢?  
-----------------------------------------------------------------------
消费电子行业, 生产线.  
可否交流一下:我的qq 344891192 (公司禁止上qq,只有下班在家)
-----------------------------------------------------------------------

我已经加你了,欢迎大家多多交流!!!

出0入0汤圆

 楼主| 发表于 2011-1-5 17:00:53 | 显示全部楼层
我自己再顶~~~~~~

出0入0汤圆

发表于 2011-1-6 22:44:29 | 显示全部楼层
楼主还是讲讲细分思路吧!不然新手很难理解

出50入4汤圆

发表于 2011-1-6 23:02:11 | 显示全部楼层
楼主风格有点与众不同

但我没看出来这种风格有什么好的,很别扭

出0入0汤圆

发表于 2011-1-7 08:22:37 | 显示全部楼层
顶一下

出0入0汤圆

 楼主| 发表于 2011-1-7 09:08:27 | 显示全部楼层
回复【95楼】zhuyi25762
楼主风格有点与众不同
但我没看出来这种风格有什么好的,很别扭
-----------------------------------------------------------------------

呵呵,每个人写的程序风格都是属于自己喜欢的,能够让自己接受的,看别人写的时候可能一时就适应不过来,是不是这样的?

出0入0汤圆

发表于 2011-1-10 01:52:22 | 显示全部楼层
顶下.
小弟也想进舞台灯光行业,但无从下手.望楼主给一个舞台灯光的小项目给小弟参考.
DMX512部分和步进电机的.
邮箱:xxiangj@tom.com.QQ:344820687
多谢!

出0入0汤圆

 楼主| 发表于 2011-1-10 13:44:03 | 显示全部楼层
回复【98楼】xxiangj
顶下.
小弟也想进舞台灯光行业,但无从下手.望楼主给一个舞台灯光的小项目给小弟参考.
dmx512部分和步进电机的.
邮箱:xxiangj@tom.com.qq:344820687
多谢!
-----------------------------------------------------------------------

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

本版积分规则

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

GMT+8, 2024-4-27 11:06

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

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