chenyuqiu 发表于 2011-5-19 19:49:10

做舞台灯光的或驱动步进电机的有福了(有图)

本来一直都不敢发表什么,也不敢回复什么,怕误人子弟,但是最近有很多网友与我共同讨论步进电机的驱动问题。其实我对电机的了解也是很有限的,由于在舞台灯光行业工作,所以会接触到驱动步进电机方面。以下是我最近的最新作品:
http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641125O0TUGJ.jpg
(原文件名:这个是一个大摇头灯,头部是铸铝的,很重。驱动是用L6205,57电机,跑起来很静音。基本上听不到有声音,低速时很平稳,128细分。这款是我最得意的作品.jpg)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641126V6JG7D.jpg
(原文件名:这款是最近舞台灯光行业比较火的一个产品,驱动是用A3992,效果还不错.jpg)

chenyuqiu 发表于 2011-5-19 19:55:24

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641127OURDKP.jpg
(原文件名:L6205驱动电路.jpg)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641128CCGFQ8.jpg
(原文件名:A3992驱动电路.jpg)

czhaii 发表于 2011-5-19 20:13:21

欣赏

liss 发表于 2011-5-19 20:25:10

mark

flyhouse 发表于 2011-5-19 20:30:03

1、神马福?L6203、L6205,都是集成电机驱动芯片吧

amazing030 发表于 2011-5-19 20:44:00

我用L6219做高速球,和这个差不多吧……一毕业就是做这个

chenyuqiu 发表于 2011-5-19 20:57:23

回复【4楼】flyhouse 丷_丷
1、神马福?l6203、l6205,都是集成电机驱动芯片吧
-----------------------------------------------------------------------

难道现在用驱动电机还想自己用元器件搭起来用啊?那样你觉得性能会很好吗?

newhz 发表于 2011-5-19 21:05:31

楼主有步进电机加速算法吗?

chenyuqiu 发表于 2011-5-19 21:12:20

回复【7楼】newhz
楼主有步进电机加速算法吗?
-----------------------------------------------------------------------
加减速算法肯定有的啦,整个产品的软件都是我弄的,电机部分最难搞

ywl0409 发表于 2011-5-19 21:14:18

电机是哪家的?

chenyuqiu 发表于 2011-5-19 21:16:34

回复【5楼】amazing030
我用l6219做高速球,和这个差不多吧……一毕业就是做这个
-----------------------------------------------------------------------

其实驱动电机并不难,难的是运用到产品上时细节上处理好才是关键,比如电机噪音很大,很响,运行时抖动,低速时不平滑,启动加速和刹车减速算法不合理等等这些细节上的技术处理才是驱动步进电机的难点,也是重要要点。

chenyuqiu 发表于 2011-5-19 21:18:04

回复【9楼】ywl0409 老黄牛
电机是哪家的?
-----------------------------------------------------------------------

电机是用小厂家的,我用过比较好的是上海鸣志的,其次是宁波飞宏的。

newhz 发表于 2011-5-19 21:21:40

刚开始玩电机,以后多向楼主请教。

chenyuqiu 发表于 2011-5-19 21:22:22

回复【12楼】newhz
刚开始玩电机,以后多向楼主请教。

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

大家相互学习,共同进步!!!

ylei12 发表于 2011-5-19 21:49:19

这两款芯片能驱动多大的电机

chenyuqiu 发表于 2011-5-19 22:25:54

L6205最大的相电流输出是5.6A,PWM驱动细分,我做的是128细分。
A3992最大的相电流输出是1.5A,64细分

dmxfeng 发表于 2011-5-20 00:11:35

记号!

sunicecream 发表于 2011-5-20 00:19:50

记号一下,看不到图了

wkman 发表于 2011-5-20 01:51:12

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

光一个厂家pdf里面都有的图纸,能说明什么???

chenyuqiu 发表于 2011-5-20 08:03:48

回复【18楼】wkman 鱼片
回复【6楼】chenyuqiu 小陈
-----------------------------------------------------------------------
光一个厂家pdf里面都有的图纸,能说明什么???
-----------------------------------------------------------------------

别急,猛料还在后头呢!!

chenyuqiu 发表于 2011-5-20 08:17:26

什么都不说,先上料。A3992的底层驱动程序:

// 头文件////////////////////////////////////////////////////////////////////////////////////////////
#ifndef __MOTOR_H__
#define __MOTOR_H__



#include "StepMotor.h"
#include "Pan.h"
#include "Tilt.h"
#include "PanTiltEncode.h"

#define EFFECT_LEFT_ROTATION                  0
#define EFFECT_RIGHT_ROTATION                   1
#define EFFECT_LOCATION                         2




#define DRIVE_LOW_CURRENT                     0
#define DRIVE_HIGH_CURRENT                  !DRIVE_LOW_CURRENT

// A3972
#define PinA3972Latch_0                     3
#define PORTpinA3972Latch_0                   PORTC
#define DDRpinA3972Latch_0                  DDRC
#define PinA3972Latch_1                     2
#define PORTpinA3972Latch_1                   PORTC
#define DDRpinA3972Latch_1                  DDRC




typedef struct _MOTRO
{
        unsigned char
                cDmxValue,
                cEffect,
                cDrivePosition,
                cSpeed,
                cResetState,
                bDirection,
                cDecreaseSpeedCount;
        unsigned int
                wPosition;
} MOTOR, *P_MOTOR;

extern MOTOR Motor;

void MotorReset(void);
void MotorProcStep(void);
void MotorProcDmxValue(unsigned char cValue);





void A3972Initial(void); // (A3972)接口初始化 :SPI / PinA3972Latch
void A3972Drive_0(DOUBLE_BYTE wDriveValue); // 向(A3972)驱动缓冲区写入数值
void A3972WriteMode_0(void); // 设置(A3972)工作模式
void A3972WriteValue_0(unsigned char cCurrent); // 把驱动缓冲区的数值写入(A3972)
void A3972Drive_1(DOUBLE_BYTE wDriveValue);
void A3972WriteMode_1(void);
void A3972WriteValue_1(unsigned char cCurrent);

void MotorDrive(void);
void MotorProcPositionValue(void);


#endif

//驱动源代码//////////////////////////////////////////////////////////////////////////////////////////
#include "Main.h"
#include "motor.h"


       
MOTOR Motor;



#define ClearPinA3972Strobe_0()             PORTpinA3972Latch_0 &= ~(1 << PinA3972Latch_0)
#define SetPinA3972Strobe_0()               PORTpinA3972Latch_0 |= (1 << PinA3972Latch_0)

#define ClearPinA3972Strobe_1()             PORTpinA3972Latch_1 &= ~(1 << PinA3972Latch_1)
#define SetPinA3972Strobe_1()               PORTpinA3972Latch_1 |= (1 << PinA3972Latch_1)

unsigned char code cTbDriveCurrent0[] = // CP2(62:103) CP3(153:236)
{
   0,   1,   3,   4,   6,   7,   9,11,12,13,15,16,18,19,21,22,
   23,24,26,28,29,30,31,32,34,35,36,37,38,39,41,42,
   43,44,45,45,46,47,48,49,50,51,52,53,53,54,55,55,
   56,57,58,58,59,59,60,60,61,61,61,62,62,63,63,63,

};

unsigned char code cTbDriveCurrent1[] = // CP2(46:80) CP3(139:213)
{
      0,   0,   1,   2,   3,   4,   4,   5,   6,   6,   7,   8,   9,10,10,11,
   12,12,13,14,14,15,16,16,17,17,18,19,19,20,20,21,
   22,22,23,23,23,24,24,25,25,26,26,27,27,28,28,28,
   29,29,29,29,30,30,30,31,31,31,31,32,32,32,32,32,

      0,   0,   1,   1,   2,   3,   3,   4,   4,   5,   5,   6,   7,   7,   7,   8,
      9,   9,   9,10,11,11,11,12,12,13,13,14,14,14,15,15,
   16,16,16,17,17,17,18,18,18,19,19,19,20,20,20,20,
   21,21,21,22,22,22,22,23,23,23,23,23,24,24,24,24,
};

unsigned char code cTbDriveLowCurrent[] = // CP2(46:80) CP3(139:213)
{
      0,   0,   1,   2,   3,   4,   4,   5,   6,   6,   7,   8,   9,10,10,11,
   12,12,13,14,14,15,16,16,17,17,18,19,19,20,20,21,
   22,22,23,23,23,24,24,25,25,26,26,27,27,28,28,28,
   29,29,29,29,30,30,30,31,31,31,31,32,32,32,32,32,
};

struct
{
        unsigned char
                cDriveValue;
} A3972;


void A3972Initial(void)
{
        DDRB |= (1 << PinSpiSck) | (1 << PinSpiMosi) | (1 << PinSpiSs);
        SPCR = (1 << SPE) | (1 << MSTR);
        SPSR = (1 << SPI2X);
       
        DDRpinA3972Latch_0 |= (1 << PinA3972Latch_0);
        SetPinA3972Strobe_0();
       
        DDRpinA3972Latch_1 |= (1 << PinA3972Latch_1);
        SetPinA3972Strobe_1();
}


void A3972Drive_0(DOUBLE_BYTE i)
{
        unsigned char c;

        c = i.dByte;
        i.dByte &= 0x07f;
        if (i.dByte < 64)
        {
                i.dByte = 63 - i.dByte;
        }
        else
        {
                i.dByte = i.dByte - 64;
                i.dByte = 127 - i.dByte;
        }
       
        //if (Pan.StepMotor.wNowSpeed < 250)
        {
                i.dByte = pgm_read_byte(cTbDriveCurrent0 + i.dByte);
                i.dByte = pgm_read_byte(cTbDriveCurrent0 + i.dByte);          
        }
        //else
        {
                //i.dByte = pgm_read_byte(cTbDriveLowCurrent + i.dByte);
                //i.dByte = pgm_read_byte(cTbDriveLowCurrent + i.dByte);          
        }

       
        i.dByte <<= 1;
        if (i.dByte & 0x01)
        {
                i.dByte |= 0x80;
        }
        A3972.cDriveValue = i.dByte;

        i.dByte >>= 1;

        if (c & 0x80)               
        {
                i.dByte |= 0x20;                     // 马达控制方向
               
                if (c & 0x40)
                {
                        i.dByte &= 0xbf;
                }
                else
                {
                        i.dByte |= 0x40;
                }
        }
        else
        {
                i.dByte &= 0xdf;                     // 马达控制方向
               
                if (c & 0x40)
                {
                        i.dByte |= 0x40;
                }
                else
                {
                        i.dByte &= 0xbf;
                }
        }
       
        A3972.cDriveValue = i.dByte;
        A3972.cDriveValue = 0x04;
}


#define FAST_DECAY_TIME_0   0x04 // 0x01 - 0x0f
#define FIXED_OFF_TIME_0    0x03 // 0x01 - 0x1f
#define BLABK_TIME_0      0x03 // 0x01 - 0x03

void A3972WriteMode_0(void)
{
        Disable();
        ClearPinA3972Strobe_0();
        SPDR = 0x04;
        Delay(1);
        SPDR = FAST_DECAY_TIME_0;
        Delay(1);
        SPDR = (FIXED_OFF_TIME_0 << 3) | (BLABK_TIME_0 << 1) | 1;
        Delay(1);
        SetPinA3972Strobe_0();
        Enable();
}

void A3972WriteValue_0(unsigned char bCurrent)
{
        unsigned char c;
       
        c = A3972.cDriveValue;
        if (bCurrent == DRIVE_LOW_CURRENT)
        {
                c &= 0xfb;
        }
        else
        {
                c |= 0x04;
        }
        Disable();
        ClearPinA3972Strobe_0();
        SPDR = c;
        Delay(1);
        SPDR = A3972.cDriveValue;
        Delay(1);
        SPDR = A3972.cDriveValue;
        Delay(1);
        SetPinA3972Strobe_0();
        Enable();
}




void A3972Drive_1(DOUBLE_BYTE i)
{
        unsigned char c;

        c = i.dByte;
        i.dByte &= 0x07f;
        if (i.dByte < 64)
        {
                i.dByte = 63 - i.dByte;
        }
        else
        {
                i.dByte = i.dByte - 64;
                i.dByte = 127 - i.dByte;
        }
       
        i.dByte = pgm_read_byte(cTbDriveCurrent1 + i.dByte);
        i.dByte = pgm_read_byte(cTbDriveCurrent1 + i.dByte);
       
        i.dByte <<= 1;
        if (i.dByte & 0x01)
        {
                i.dByte |= 0x80;
        }
        A3972.cDriveValue = i.dByte;

        i.dByte >>= 1;

        if (c & 0x80)               
        {
                i.dByte |= 0x20;                     // 马达控制方向
               
                if (c & 0x40)
                {
                        i.dByte &= 0xbf;
                }
                else
                {
                        i.dByte |= 0x40;
                }
        }
        else
        {
                i.dByte &= 0xdf;                     // 马达控制方向
               
                if (c & 0x40)
                {
                        i.dByte |= 0x40;
                }
                else
                {
                        i.dByte &= 0xbf;
                }
        }
       
        A3972.cDriveValue = i.dByte;
        A3972.cDriveValue = 0x04;
}


#define FAST_DECAY_TIME_1   0x03 // 0x01 - 0x0f
#define FIXED_OFF_TIME_1    0x02 // 0x01 - 0x1f
#define BLABK_TIME_1      0x03 // 0x01 - 0x03

void A3972WriteMode_1(void)
{
        Disable();
        ClearPinA3972Strobe_1();
        SPDR = 0x04;
        Delay(1);
        SPDR = FAST_DECAY_TIME_1;
        Delay(1);
        SPDR = (FIXED_OFF_TIME_1 << 3) | (BLABK_TIME_1 << 1) | 1;
        Delay(1);
        SetPinA3972Strobe_1();
        Enable();
}

void A3972WriteValue_1(unsigned char bCurrent)
{
        unsigned char c;
       
        c = A3972.cDriveValue;
        if (bCurrent == DRIVE_LOW_CURRENT)
        {
                c &= 0xfb;
        }
        else
        {
                c |= 0x04;
        }
        Disable();
        ClearPinA3972Strobe_1();
        SPDR = c;
        Delay(1);
        SPDR = A3972.cDriveValue;
        Delay(1);
        SPDR = A3972.cDriveValue;
        Delay(1);
        SetPinA3972Strobe_1();
        Enable();
}

void MotorReset(void)
{
    PanReset();
    TiltReset();
}
void MotorProcStep(void)
{
        PanProcStep();
        TiltProcStep();
}

void MotorProcPositionValue(void)
{
        if (Pan.cPositionDmxValue != Pan.cDriveValue)
        {
                PanProcPositionDmxValue(Pan.cDriveValue);
        }
        if (Pan.cSpeedTempValue != Pan.cSpeedDmxValue)
        {
      PanProcSpeedDmxValue(Pan.cSpeedDmxValue);
    }

        if (Tilt.cPositionDmxValue != Tilt.cDriveValue)
        {
                TiltProcPositionDmxValue(Tilt.cDriveValue);
        }
        if (Tilt.cSpeedTempValue != Tilt.cSpeedDmxValue)
        {
      TiltProcSpeedDmxValue(Tilt.cSpeedDmxValue);
    }       
}

qfmcu 发表于 2011-5-20 08:26:17

看不到图。

xintrone 发表于 2011-5-20 09:05:41

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

看不到图啊

chenyuqiu 发表于 2011-5-20 09:11:20

回复【22楼】xintrone
回复【20楼】chenyuqiu 小陈
-----------------------------------------------------------------------
看不到图啊
-----------------------------------------------------------------------

回复【21楼】qfmcu 清风徐徐
看不到图。
-----------------------------------------------------------------------

是你们的网速慢还是???
我昨晚发上来的时候都可以看到啊。
现在在上班网速不行我也看不到的

eworker 发表于 2011-5-20 09:15:56

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

LZ好像前段时间发过一个驱动步进电机的程序.

chenyuqiu 发表于 2011-5-20 09:34:02

回复【24楼】eworker
回复【23楼】chenyuqiu 小陈
-----------------------------------------------------------------------
lz好像前段时间发过一个驱动步进电机的程序.
-----------------------------------------------------------------------

呵呵,是的。
STC11F16XE驱动4个步进电机(软件实现16细分)
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4440711&bbs_page_no=1&search_mode=3&search_text=chenyuqiu&bbs_id=9999

littlepig 发表于 2011-5-20 09:39:24

楼主把资料打个包,好分享撒

kbdcj2000 发表于 2011-5-20 09:59:02

mark

monlika 发表于 2011-5-20 11:48:16

图挂了~~

chenyuqiu 发表于 2011-5-20 12:47:36

回复【28楼】monlika 电子钟
图挂了~~
-----------------------------------------------------------------------
不知道为什么,重新上传也上传不了,过一会我再上传试试看

chenyuqiu 发表于 2011-5-20 14:06:06

汗,试了一个中午都上传不了
./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif./emotion/em010.gif

flyhouse 发表于 2011-5-20 14:42:31

回复【20楼】chenyuqiu 小陈
-----------------------------------------------------------------------
allegro的步进ic也挺诡异的,有好些个市面上有卖有大量应用,就是没有pdf

这个能找到pdf么   a6628sedtplcc44封装。。。。

yulongkui 发表于 2011-5-20 14:46:07

./emotion/em003.gif

chenyuqiu 发表于 2011-5-20 15:22:52

回复【31楼】flyhouse 丷_丷
回复【20楼】chenyuqiu 小陈
-----------------------------------------------------------------------
allegro的步进ic也挺诡异的,有好些个市面上有卖有大量应用,就是没有pdf
这个能找到pdf么   a6628sedtplcc44封装。。。。

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

网上都有的,今天我的电脑都上传不了东西,怪死了

chenyuqiu 发表于 2011-5-20 16:16:45

怪了,图片又可以显示出来了
./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif ./emotion/em011.gif

flyhouse 发表于 2011-5-20 17:02:15

回复【33楼】chenyuqiu 小陈

网上都有的,今天我的电脑都上传不了东西,怪死了
-----------------------------------------------------------------------

有???赶紧又上google搜索了,翻了3页,点开所有链接。。。。都是广告,号称有pdf的,也是假链接死链接。。。

不瞒你说,这个ic的pdf,偶找了6年。。。哈哈哈哈

xinzhi1986 发表于 2011-5-20 17:28:21

果然是好东西~mark了~

z0586mj 发表于 2011-5-20 17:28:42

mark

hu7215 发表于 2011-5-20 21:51:52

谢谢分享

chenyuqiu 发表于 2011-5-21 12:34:57

回复【38楼】hu7215
谢谢分享
-----------------------------------------------------------------------

不用客气!!
./emotion/em018.gif./emotion/em018.gif./emotion/em018.gif./emotion/em018.gif./emotion/em018.gif./emotion/em018.gif./emotion/em018.gif

wayhe 发表于 2011-5-21 12:45:34

MARK

plc_avr 发表于 2011-5-21 13:01:34

MARK!!!

mugangqin 发表于 2011-5-30 17:40:30

我想问一下,
4个IO口控制电机4根信号线
你是如何给信号产生16细分的呢,
能不能说说你的给信号的思路?

mugangqin 发表于 2011-5-30 17:41:07

我想问一下,
4个IO口控制电机4根信号线
你是如何给信号产生16细分的呢,
能不能说说你的给信号的思路?

winkle 发表于 2011-5-30 18:44:01

关键的关键应该是马达的加减速控制

chenyuqiu 发表于 2011-5-30 20:24:52

回复【42楼】mugangqin
我想问一下,
4个io口控制电机4根信号线
你是如何给信号产生16细分的呢,
能不能说说你的给信号的思路?

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

你好,关于你这个问题请你查看一下我发表的一个帖子:
STC11F16XE驱动4个步进电机(软件实现16细分),里面有原理图和驱动代码,加减速算法也有在里面.

yansuoqinlou 发表于 2011-5-31 17:16:01

犀利

abcdezh 发表于 2011-5-31 17:28:41

好东东

xrwf_2009 发表于 2011-5-31 17:45:50

权威

chenyuqiu 发表于 2011-6-1 12:00:34

回复【48楼】xrwf_2009
权威
-----------------------------------------------------------------------

谢谢,权威这个就不敢当啊!!!

chushichongyu 发表于 2011-6-1 12:17:42

经典

zbb8637 发表于 2011-6-1 12:29:26

cool

eric_wang 发表于 2011-6-1 17:33:12

學習了,多謝!

jack_yu 发表于 2011-6-2 14:14:26

谢谢!受教了。

lixingling 发表于 2011-6-2 15:05:44

真的难看懂

chenyuqiu 发表于 2011-6-2 21:58:49

回复【54楼】lixingling
真的难看懂

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

技术上的东西不是看一下就能懂的,很多东西都是得靠慢慢钻研出来的

luoxi 发表于 2011-6-2 23:03:11

谢谢小陈同志给我们带来帮助,我们支持你!!

carlon 发表于 2011-6-3 08:19:52

记号+膜拜

zjm520 发表于 2011-6-3 17:57:22

4个io口控制电机4根信号线(电机为双极型步进电机)
你是如何给信号产生16细分的呢,
能不能说说你的给信号的思路?

能不能用语句描述一下这个用软件做16细分的思路呢?
可以加我Q1352529817
你也可以给你Q我加你
谢谢!

Bicycle 发表于 2011-6-3 19:53:22

学习中

chenyuqiu 发表于 2011-6-3 21:21:46

回复【58楼】zjm520
4个io口控制电机4根信号线(电机为双极型步进电机)
你是如何给信号产生16细分的呢,   
能不能说说你的给信号的思路?
能不能用语句描述一下这个用软件做16细分的思路呢?
可以加我q1352529817
你也可以给你q我加你
谢谢!
-----------------------------------------------------------------------

A3992内部有一个64细分的PWM,我们可以通过写入相应的数据就可以了。你可以先去看看A3992的DataSheet.在结合我的驱动程序看就会明白的了,如果你的英文能力没问题的话那更好了,那样更容易理解我的驱动程序。
另:即使看不懂的话也可以直接用我上面的驱动代码,把驱动接口配置好就OK了。A3992是用SPI驱动的。所以接口很方便

chenyuqiu 发表于 2011-6-3 21:23:45

感觉大家对电机这方面的资料很缺乏。

outt60777 发表于 2011-6-3 22:02:21

mark!

liukan 发表于 2011-6-3 22:30:47

正在学习步进电机,谢谢了

zjm520 发表于 2011-6-4 09:07:57

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

电机细机到底是怎么个思路?
不方便留个Q或电话什么的吗?
我现在用的是MD-123来做步进电机的驱动IC

zjm520 发表于 2011-6-4 09:16:47

在书上看那些细分方式都很笼统,所以想听听你对电机细分的具体思路。

chenyuqiu 发表于 2011-6-5 12:48:31

回复【65楼】zjm520
在书上看那些细分方式都很笼统,所以想听听你对电机细分的具体思路。
-----------------------------------------------------------------------

现在都是用专用的驱动IC来做细分的啦。

yanrz 发表于 2011-6-6 17:22:44

不错,呵呵,到时候学习下!
要给空调厂做一个测试步进电机测试的小东西!

lees 发表于 2011-6-15 19:36:22

陈哥,有没有L6205N,加减速的代码。我想的都头疼了,希望向陈哥学习学习。283105876我的QQ。zhi_cheng_li@126.com

zprs 发表于 2011-6-16 19:09:51

mark

luck851 发表于 2011-6-16 19:21:31

mark

chenyuqiu 发表于 2011-6-24 17:32:08

回复【68楼】lees
陈哥,有没有l6205n,加减速的代码。我想的都头疼了,希望向陈哥学习学习。283105876我的qq。zhi_cheng_li@126.com

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

加减速算法在我另一个帖子
”STC11F16XE驱动4个步进电机(软件实现16细分) “已经有共享出来了,你可以去看看,希望能帮得到你

yangsan123 发表于 2011-6-30 09:30:08

回复【20楼】chenyuqiu 小陈
-----------------------------------------------------------------------
陈哥
L6205驱动怎用的呀?
能否贴出来分享下呀!最近在弄

lee345 发表于 2011-6-30 10:32:33

不错有时间好好参考下

wind2100 发表于 2011-6-30 10:43:06

6205这种接法 没 DEADTIME 怎么行?

chenyuqiu 发表于 2011-6-30 11:30:15

回复【74楼】wind2100
6205这种接法 没 deadtime 怎么行?
-----------------------------------------------------------------------

L6205芯片内部已经有自带衰减功能了。

hncjs 发表于 2011-6-30 11:32:07

不错顶一下

luck851 发表于 2011-6-30 11:56:54

mark

Andy22 发表于 2011-7-5 12:38:21

回复【10楼】chenyuqiu小陈
回复【5楼】amazing030
我用l6219做高速球,和这个差不多吧……一毕业就是做这个
-----------------------------------------------------------------------
其实驱动电机并不难,难的是运用到产品上时细节上处理好才是关键,比如电机噪音很大,很响,运行时抖动,低速时不平滑,启动加速和刹车减速算法不合理等等这些细节上的技术处理才是驱动步进电机的难点,也是重要要点。
-----------------------------------------------------------------------

毕业前,毕业后一两年,或者再久,同样是把一个模块跑起来,但回去看一下以前写的代码,画的板子,
就会发现以前什么都不是。

charlie2008 发表于 2011-7-5 20:50:59

mark!

ddapw 发表于 2011-7-19 19:17:09

这个要顶,mark慢慢看。

mayiqing888 发表于 2011-7-20 16:07:13

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

小陈,你好~我也有几个关于步进驱动的问题想请教你一下。可不可以留给我你的QQ或者邮箱?这样好交流一些~非常感谢!!!!

chenyuqiu 发表于 2011-7-20 16:09:41

回复【82楼】mayiqing888
回复【75楼】chenyuqiu小陈
-----------------------------------------------------------------------
小陈,你好~我也有几个关于步进驱动的问题想请教你一下。可不可以留给我你的qq或者邮箱?这样好交流一些~非常感谢!!!!
-----------------------------------------------------------------------

你好,我觉得还是在这里交流就行了,之前我有留下自己的QQ号码,但是现在不想再加人,有问题在这里讨论就行了。不好意思!!

mayiqing888 发表于 2011-7-20 16:21:56

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

好的~~
我的步进驱动器没有用专用芯片,是用FPGA+DA+MOS驱动+MOS+比较器做的~
目前来看,低速的时候振动比较厉害,不管是低细分还是高细分,但高速的时候(力矩下降),此时细分不再起作用,这时候电机就转的很好,几乎完全不会振动。

后来我又把脉冲频率调低,细分调到64,把锡丝固定在电机轴上,我发现,每完成1.8度的时候,就会停顿一下,并会有些抖动,手摸电机,也会有咯噔咯噔的感觉。后来看其他的帖子,有的网友说是因为电机在走这1.8度的过程中,会有加速-减速的过程。走完1.8度,这时A+为最大电流,B+为0,这一瞬间力矩是垂直于轴的,所以这时速度降为0,就会有电机停顿的现象。

我用的斩波做的,采样电阻采到相电流,经过D触发器,定频斩波,返回FPGA处理,然后输出4路信号控制4路MOS的开关。
你说有可能是换相没处理好,但我的换相是根据查表的地址值来分的。0-127输出A相,128-255输出B相,感觉没什么问题。
不知道你有没有什么好的办法可以解决这个停顿的问题,谢谢你了~~~

mayiqing888 发表于 2011-7-21 10:30:31

顶起来

chenyuqiu 发表于 2011-7-22 16:52:42

回复【84楼】mayiqing888
-----------------------------------------------------------------------

我用2803的时候也遇到跟你类似的现象,至今为止还无解。

xoneftws_123 发表于 2011-7-22 18:53:32

这个对于步进电机的学者来说,真的不错

Onsunsl 发表于 2011-7-22 20:27:37

回复【楼主位】chenyuqiu 小陈
-----------------------------------------------------------------------

用来驱动LED到是不错的想法,能否有适合载波通信的,
电流在1.5A,开关速率在1.2MHz左右的?

416446891 发表于 2011-7-22 21:08:47

MARK

chenyuqiu 发表于 2011-7-26 15:55:19

回复【88楼】Onsunsl 金平合吾
回复【楼主位】chenyuqiu 小陈
-----------------------------------------------------------------------
用来驱动led到是不错的想法,能否有适合载波通信的,

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

你的想象能力也太丰富了吧?一般的大功率LED都是用恒流驱动IC来的,"电流在1.5a,开关速率在1.2mhz左右的"建议你看看LM3404合适你不

wind2100 发表于 2011-7-27 00:07:28

回复【75楼】chenyuqiu 小陈
回复【74楼】wind2100
6205这种接法 没 deadtime 怎么行?
-----------------------------------------------------------------------
l6205芯片内部已经有自带衰减功能了。
-----------------------------------------------------------------------

你的意思就是说不需要插入死区了?你的那个板子稳定吗 烧过6205没?

chenyuqiu 发表于 2011-7-28 09:51:00

回复【92楼】wind2100
-----------------------------------------------------------------------

这个倒是一个问题哦,如果IC不短路的话就不会烧,我有试过只要IC一短路就会烧的情况。请问92楼的你有用过L6205的吗?能不能把你的电路图发给大家看看?

gusigusi 发表于 2011-7-28 11:31:00

谢谢楼主

largeboss 发表于 2011-7-28 12:22:02

mark

wind2100 发表于 2011-7-28 12:24:05

据我所知 L6025 是意法半导体的 步进电机H桥驱动电路 不带死区时间 需要自己插入
在步进电机 内阻比较小 或是电流比较大的情况下 会烧H桥的。 当然 你可以选择内阻比较大的电机 从而(就算磁饱和了 也可以)达到电阻限流的作用。

hpyanghua 发表于 2011-7-28 13:53:55

MARK

chenyuqiu 发表于 2011-7-28 16:58:14

回复【97楼】wind2100
据我所知 l6025 是 步进电机h桥驱动电路 不带死区时间 需要自己插入
在步进电机 内阻比较小 或是电流比较大的情况下 会烧h桥的。 当然 你可以选择内阻比较大的电机 从而(就算磁饱和了 也可以)达到电阻限流的作用。
-----------------------------------------------------------------------

L6205是意法半导体的,但是我用了这么久基本上是没因为电流过大而烧IC,只不过感觉这个IC是比较脆弱点,一短路就很容易烧。
还有就是很想请问wind2100如何自己手动插入死区时间?

wind2100 发表于 2011-7-28 22:05:50

死区时间这个需要MCU来处理也有MOS管驱动 有这个死区时间的 但是是固定的。

chenyuqiu 发表于 2011-7-29 13:43:41

回复【100楼】wind2100
死区时间这个需要mcu来处理也有mos管驱动 有这个死区时间的 但是是固定的。
-----------------------------------------------------------------------

能不能具体举个例子说明一下呢?谢谢!!

joing2000 发表于 2011-7-29 14:58:19

有个好几个客户做这玩意的,上面的液晶都是我们公司做的。
页: [1] 2 3
查看完整版本: 做舞台灯光的或驱动步进电机的有福了(有图)