chenyuqiu 发表于 2010-12-8 08:50:24

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

用STC11F16XE驱动4个2803带动4个步进电机,每个电机都是用软件实现16细分,有图片:
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_603107N91302.jpg
(原文件名:1.jpg)

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_603108OCRXVA.jpg
(原文件名:2.jpg)

eworker 发表于 2010-12-8 09:19:36

学习

intentydh 发表于 2010-12-8 12:09:06

mark.

lwg998 发表于 2010-12-8 12:40:44

关键的代码及如何实现的还望楼主能详细介绍,谢谢

chenyuqiu 发表于 2010-12-8 14:38:43

回复【3楼】lwg998
-----------------------------------------------------------------------

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

ccdavid 发表于 2010-12-8 23:14:10

关注。。。

cgbabc 发表于 2010-12-9 00:15:05

回复【3楼】lwg998
关键的代码及如何实现的还望楼主能详细介绍,谢谢
-----------------------------------------------------------------------

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

chenyuqiu 发表于 2010-12-9 16:51:03

想知道的话可以留下联系方式

liuguang 发表于 2010-12-9 16:51:10

很需要,希望楼主能讲讲课!

chenyuqiu 发表于 2010-12-9 16:53:08

我现在就在用四个步进电机做产品,效果很好,上面那个图就是我们刚刚开发的电机方面的

liuguang 发表于 2010-12-9 17:05:12

liuguang1958@163.com
   QQ:364801797

wayhe 发表于 2010-12-9 21:33:18

很不错,想了解细分思路。

cgbabc 发表于 2010-12-9 22:48:33

cwcbacmwk@21cn.com
QQ:176534519

chenyuqiu 发表于 2010-12-10 08:32:50

先上传关键代码先
ourdev_603668MNBQGC.txt(文件大小:1K) (原文件名:StepMotor.txt)

lloovve 发表于 2010-12-10 08:37:57

楼主还是把所有代码发上来,要不大家怎么研究,你这个电路谁都会画关键是算法啊,你只给一个函数我们怎么知道怎么个意思!

eworker 发表于 2010-12-10 09:12:18

萍踪侠影

chenyuqiu 发表于 2010-12-10 09:21:43

我再上传一个
ourdev_603678RIWDFW.txt(文件大小:234字节) (原文件名:StepMotor1.txt)
后面的就要由你们自己去理解啦,根据我给的原理图结合我的关键代码各位高手应该都是能够看出算法的

chenyuqiu 发表于 2010-12-10 09:23:18

如果还有不明白的话我再讲解一下,这样你们先思考更能够理解这个算法

chenyuqiu 发表于 2010-12-10 09:26:38

不好意思,ourdev_603678RIWDFW.txt(文件大小:234字节) (原文件名:StepMotor1.txt)是错误的,我更改为下面这个
ourdev_603683P029LI.txt(文件大小:203字节) (原文件名:StepMotor1.txt)

eworker 发表于 2010-12-10 09:31:43

#include "Uln2803Drive.h"               


SUln2803Drive Uln2803;

volatile unsigned char idata       
    cPwmDriveBuffer;




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;       
        cPhaseValueLeft= cTableUnl2803DrivePhase[(cPosition / 16) + (cPort * 5)];
        cPhaseValueRight = cTableUnl2803DrivePhase[(cPosition / 16) + (cPort * 5) + 1];               
        cShieldValue   = cTableUnl2803DriveMask;

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



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

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

        P0 = cPwmDriveBuffer;                               

           ++ Uln2803.cCount;
}

czzhouyun 发表于 2010-12-10 09:34:37

MARK

chenyuqiu 发表于 2010-12-10 09:38:05

这个函数void Uln2803Drive(unsigned char cPort, unsigned char cPosition) 中“unsigned char cPort”是指第几个电机端口,数据只能是0到3,“unsigned char cPosition”就是驱动电机是步数值,这个可以放在你们自己的电机模块中,整个函数都可以被四个电机驱动模块调用,只要把端口区分开来就可以了

chenyuqiu 发表于 2010-12-10 09:39:30

还有不明白的地方吗?

eworker 发表于 2010-12-10 09:46:55

8US中断一次,单片机可够累得!

chenyuqiu 发表于 2010-12-10 10:04:33

还可以的,关键就是得看你怎么处理你的程序咯

wayhe 发表于 2010-12-10 12:37:33

步进的加减速怎么实现呢?

luhuaren 发表于 2010-12-10 12:47:46

没看出来哪好

czhxp 发表于 2010-12-10 12:53:48

mark

chenyuqiu 发表于 2010-12-10 13:08:59

回复【26楼】luhuaren
没看出来哪好
-----------------------------------------------------------------------

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

chenyuqiu 发表于 2010-12-10 13:11:03

回复【24楼】chenyuqiu 小陈
还可以的,关键就是得看你怎么处理你的程序咯
-----------------------------------------------------------------------

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

xiaowu191 发表于 2010-12-10 13:57:45

又看到楼主的作品,晚上学习学习。
谢谢了

chenyuqiu 发表于 2010-12-10 14:12:08

回复【30楼】xiaowu191
又看到楼主的作品,晚上学习学习。
谢谢了
-----------------------------------------------------------------------

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

lloovve 发表于 2010-12-10 14:48:23

收藏,晚上催眠用

xiaowu191 发表于 2010-12-10 16:26:08

回复【31楼】chenyuqiu小陈
-----------------------------------------------------------------------

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

xiaowu191 发表于 2010-12-10 16:54:09

好像相电流是这样?

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_603790FV4PZN.JPG
(原文件名:未命名.JPG) </center>

lloovve 发表于 2010-12-10 16:58:15

懂了,挺简单的,这个函数不错

NE555 发表于 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细分啦。

xiaowu191 发表于 2010-12-10 17:31:02

那个应该是PWM的分辨率,

到时搭个电路效果,

grant-liao 发表于 2010-12-10 18:02:33

崇拜
但是看不懂
最好详细详细再详细
新手没办法理解

lwg998 发表于 2010-12-10 20:00:29

加减速控制是步进电机不丢步的关键,那么你这四个电机最大驱动速度可以到多少呢

chenyuqiu 发表于 2010-12-10 20:18:46

回复【39楼】lwg998
加减速控制是步进电机不丢步的关键,那么你这四个电机最大驱动速度可以到多少呢

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

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

chenyuqiu 发表于 2010-12-10 20:21:25

回复【34楼】xiaowu191
好像相电流是这样?

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

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

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

chenyuqiu 发表于 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步是补偿的,不加这一步的话效果不理想。所以还请大家想想更好的细分方法

chenyuqiu 发表于 2010-12-11 08:11:13

自己顶一下

NE555 发表于 2010-12-11 09:11:54

我也来顶一下。

longquan 发表于 2010-12-11 09:21:44

马克

NE555 发表于 2010-12-11 10:22:58

哈哈。终于大致看懂啦。
谢谢楼主。
觉得楼主风格有点与众不同。

chenyuqiu 发表于 2010-12-11 10:26:20

回复【46楼】NE555
哈哈。终于大致看懂啦。
谢谢楼主。
觉得楼主风格有点与众不同。
-----------------------------------------------------------------------

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

ym7205 发表于 2010-12-11 11:07:59

我也来顶一下。

eworker 发表于 2010-12-11 11:16:49

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

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

chenyuqiu 发表于 2010-12-11 11:25:48

回复【49楼】eworker
-----------------------------------------------------------------------

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

luhuaren 发表于 2010-12-11 11:59:15

有几百K?

chenyuqiu 发表于 2010-12-11 12:08:20

呵呵,没有啦。想要的话可以留下联系方式

wgjwgj 发表于 2010-12-11 12:44:22

强烈想要,楼主不要藏着掖着啦,逗大家胃口。

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

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

邮件:wgj_king@163.com
QQ:372215923

wjhhh 发表于 2010-12-11 12:56:30

想要。
请“小陈”有空发一份到 c118124@sina.com
谢谢

chenyuqiu 发表于 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))
                {
                        c = 0;
                }
                else if ((i.word < wTableBrakeSpace211_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();
}

chenyuqiu 发表于 2010-12-11 14:57:54

没人顶,自己再顶一下。

SystemARM 发表于 2010-12-11 15:14:33

这是梯形,还是S形 加减速呀! 没有仔细看.

最好用一个应用接口.

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

SystemARM 发表于 2010-12-11 15:18:16

再帮你顶一下.


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

chenyuqiu 发表于 2010-12-11 16:13:25

回复【57楼】SystemARM
-----------------------------------------------------------------------

是梯形的

chenyuqiu 发表于 2010-12-11 18:11:38

wo ding

chenyuqiu 发表于 2010-12-13 08:35:20

我再顶

exploer 发表于 2010-12-13 08:39:55

谢谢楼主的资料,觉得楼主的姿态有点高。

chenyuqiu 发表于 2010-12-13 09:22:15

回复【62楼】exploer
谢谢楼主的资料,觉得楼主的姿态有点高。
-----------------------------------------------------------------------

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

ccdavid 发表于 2010-12-15 01:22:17

谢谢楼主的东东,不如都放出来!

chenyuqiu 发表于 2010-12-15 10:17:59

呵呵,上面的东西已经很有参考价值的啦!!

28182900 发表于 2010-12-22 18:45:55

make

z0586 发表于 2010-12-22 19:13:29

mark

BINGSHUIHUO 发表于 2010-12-24 00:34:13

我也留个记号

chenyuqiu 发表于 2010-12-30 15:20:43

我自己再顶!!!

jackielau 发表于 2010-12-30 16:38:26

我顶一顶,mark一下

GZLJZ 发表于 2010-12-30 16:58:59

支持楼主,步进电机细分真不错,有空学习下了

winkle 发表于 2010-12-30 17:24:48

急停功能如何实现的?或 需求当按下停止键后,当前步执行完后再停止, 如何实现, 谢谢

croal 发表于 2010-12-30 17:31:05

您好:
楼主能否给我发一份?我的邮箱是1dychen_04@163.com

windingway 发表于 2010-12-30 18:17:46

元旦放假仔细看看,感谢楼主提供思路

xiaobendan 发表于 2010-12-30 19:22:23

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

hhdslb 发表于 2010-12-30 20:22:39

谢谢,这个有用的上,过两天仔细看看

jhz7785 发表于 2010-12-30 21:47:28

mark

cuikai12345 发表于 2010-12-30 23:05:16

mark

dmxfeng 发表于 2010-12-31 02:09:12

Mark

chenyuqiu 发表于 2010-12-31 15:20:04

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

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

chenyuqiu 发表于 2010-12-31 15:25:04

回复【72楼】winkle
急停功能如何实现的?或 需求当按下停止键后,当前步执行完后再停止, 如何实现, 谢谢
-----------------------------------------------------------------------

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

chenyuqiu 发表于 2010-12-31 15:55:25

回复【79楼】dmxfeng
mark
-----------------------------------------------------------------------

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

liujing0146 发表于 2010-12-31 15:58:35

我也做了STC控制4步进,比起楼主来惭愧了,我用的是TB6560,细分硬件完成了,速度只能到1000rpm。有兴趣的看下视频吧
http://v.youku.com/v_show/id_XMTY1MjYzMjEy.html

chenyuqiu 发表于 2010-12-31 17:02:30

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

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

kouxiangtang 发表于 2010-12-31 21:55:16

ding

winkle 发表于 2011-1-2 09:40:55

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

xml2028 发表于 2011-1-2 13:25:25

mark一下

chenyuqiu 发表于 2011-1-3 09:03:53

回复【86楼】winkle

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

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

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

winkle 发表于 2011-1-3 13:30:22

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

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

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

chenyuqiu 发表于 2011-1-3 14:07:25

回复【89楼】winkle
请问一下你是把步进马达运用在哪方面的呢?

winkle 发表于 2011-1-3 15:04:15

回复【90楼】chenyuqiu 小陈
回复【89楼】winkle
请问一下你是把步进马达运用在哪方面的呢?

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

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

chenyuqiu 发表于 2011-1-3 15:18:21

回复【91楼】winkle
回复【90楼】chenyuqiu 小陈
回复【89楼】winkle   
请问一下你是把步进马达运用在哪方面的呢?
-----------------------------------------------------------------------
消费电子行业, 生产线.
可否交流一下:我的qq 344891192 (公司禁止上qq,只有下班在家)
-----------------------------------------------------------------------

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

chenyuqiu 发表于 2011-1-5 17:00:53

我自己再顶~~~~~~

liuguang 发表于 2011-1-6 22:44:29

楼主还是讲讲细分思路吧!不然新手很难理解

zhuyi25762 发表于 2011-1-6 23:02:11

楼主风格有点与众不同

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

ccmj4708 发表于 2011-1-7 08:22:37

顶一下

chenyuqiu 发表于 2011-1-7 09:08:27

回复【95楼】zhuyi25762
楼主风格有点与众不同
但我没看出来这种风格有什么好的,很别扭
-----------------------------------------------------------------------

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

xxiangj 发表于 2011-1-10 01:52:22

顶下.
小弟也想进舞台灯光行业,但无从下手.望楼主给一个舞台灯光的小项目给小弟参考.
DMX512部分和步进电机的.
邮箱:xxiangj@tom.com.QQ:344820687
多谢!

chenyuqiu 发表于 2011-1-10 13:44:03

回复【98楼】xxiangj
顶下.
小弟也想进舞台灯光行业,但无从下手.望楼主给一个舞台灯光的小项目给小弟参考.
dmx512部分和步进电机的.
邮箱:xxiangj@tom.com.qq:344820687
多谢!
-----------------------------------------------------------------------

呵呵,你之前就已经加我QQ啦~~~~
页: [1] 2 3 4
查看完整版本: STC11F16XE驱动4个步进电机(软件实现16细分)