szhking19 发表于 2012-2-14 12:05:51

有空玩玩

lixingling 发表于 2012-3-1 08:20:16

他那个加减速是多少细分的

lixingling 发表于 2012-3-4 10:51:02

【239楼】 chenyuqiu 小陈


大家都知道我的硬件电路接法只能跑单四拍? 是双四季拍吧

hncjs 发表于 2012-3-4 17:06:50

不错呀,看看stc驱动步进细分

lixingling 发表于 2012-3-11 18:01:08

这个加减速,没看懂

sky5566 发表于 2012-3-25 09:33:17

好东西啊!{:titter:}{:titter:}

txzfw 发表于 2012-4-9 20:32:14

本帖最后由 txzfw 于 2012-4-9 20:35 编辑

请问楼主:
unsigned int code wTableUnl2803DriveValue[] =
{0x0000, 0x0080, 0x0820, 0x1110, 0x2244, 0x2492, 0x4a52, 0x5554, 0xaaaa, 0xabaa, 0xbaae, 0xbbba, 0xeeee, 0xeefe, 0xf7f7, 0x7fff,};
这个数据表是逐渐增加 下一相数据出现的频率(b'1次数从0到15);以wTableUnl2803DriveValue (0x2244)可不可以改为0x1111或者其它的数据(只要有4个bit为1,以均分bit 1为原则插入bit 0)还请楼主不惜赐教!

syouien 发表于 2012-4-17 17:36:13

楼主,有个项目看看能不能合作。+Q 378301943

887799 发表于 2012-4-24 11:51:30

细分驱动实现比较巧妙,想请教小陈这电流保护部分是否有做?是怎样实现的?

muxue123_ 发表于 2012-4-27 20:44:21

QQ:836582587

dory_m 发表于 2012-4-28 14:09:24

学习!!!{:smile:}

蓝色的风 发表于 2012-4-30 09:34:58

果然不错哦

zooky 发表于 2012-4-30 10:37:30

楼主是IT雷锋

xiaoben817 发表于 2012-5-7 15:53:38

首先很佩服楼主,其次希望能与您合作,QQ:360483758。
不知道MPC82G516AE+MA8032AE2+TLC7226N+LM324+L6129的108颗3W LED摇头灯控制系统是你做的不?

hyc07209 发表于 2012-5-23 00:04:24

楼主你好,我刚开始弄舞台灯的电机。最近有个项目类似楼主的作品,需要对电机进行16细分。按我的理解是,速度上升到正常速度时,就把细分数变为2细分或不细分,这样就可以快速转动。不知道这样理解对不对?还望赐教,如果可以的话,希望楼主把你的资料发我一份,hyc07209@163.com 在此先谢过!!

hyc07209 发表于 2012-5-27 00:07:52

貌似楼主很久没到这里来了哦,我还想参考一下楼主的程序呢。!根据楼主在贴里的提示,我写了段伪代码,希望楼主和各位大侠帮我看看:

/*
最小细分数=|设定位置和现在位置的绝对值|÷255×速度设定值;
switch(State)
{
        case 空闲:
                时间片计数器=0;
                象限计数器=0;
                开始细分数初始=16;
                if(有位置差)State=启动;
                break;
        case 启动:
                if((时间片计数器==0)||(时间片计数器==现在细分数))
                {
                        象限计数器++;
                        if(象限计数器==3)
                        {
                                象限计数器=0;
                                距离差--;
                        }

                        if(现在细分数!=最小细分数)
                        {
                                现在细分数--;
                                if(象限计数器&0x01)//如果象限值是单数,sin值从90°开始取
                                        时间片计数器=现在细分数;
                                else 时间片计数器=0;
                        }
                        else
                                State=匀速;       
                }
                if(象限计数器&0x01)时间片计数器--;
                else 时间片计数器++;
                正弦值=tab[现在细分数][时间片计数器];
                余弦值=tab[现在细分数][现在细分数-时间片计数器];
                break;
        case 匀速:
                if((时间片计数器==0)||(时间片计数器==现在细分数))
                {
                        象限计数器++;
                        if(象限计数器==3)
                        {
                                象限计数器=0;
                                距离差--;
                                if(距离差剩下不多了)//留一点距离用来减速
                                        State=减速;
                        }

       
                        if(象限计数器&0x01)//如果象限值是单数,sin值从90°开始取
                                时间片计数器=现在细分数;
                        else 时间片计数器=0;
                }
                if(象限计数器&0x01)时间片计数器--;
                else 时间片计数器++;
                正弦值=tab[现在细分数][时间片计数器];
                余弦值=tab[现在细分数][现在细分数-时间片计数器];
                break;
        case 减速;
                if((时间片计数器==0)||(时间片计数器==现在细分数))
                {
                        象限计数器++;
                        if(象限计数器==3)
                                象限计数器=0;

                        if(现在细分数!=16)
                        {
                                现在细分数++;
                                if(象限计数器&0x01)//如果象限值是单数,sin值从90°开始取
                                        时间片计数器=现在细分数;
                                else 时间片计数器=0;
                        }
                }
                if(象限计数器&0x01)时间片计数器--;
                else 时间片计数器++;
                正弦值=tab[现在细分数][时间片计数器];
                余弦值=tab[现在细分数][现在细分数-时间片计数器];
                break;
        default:
                break;
}//end switch(State)
*/
很晚了,没来得及细查,欢迎各位拍砖

hyc07209 发表于 2012-5-29 22:25:23

本帖最后由 hyc07209 于 2012-5-29 22:29 编辑

这个帖子就这样沉了吗,哈哈,可惜啊

我在一块比较成熟的步进电机控制板上,用示波器捕获了一些电压值,如下面图片:
D:\motor.bmp
图片中的前面 3 个波形是成熟的步进电机控制板上捕获的波形。3个波形的周期是一样的,可以看出即使是相同周期的波形,相邻波形上面的电压值也是不一样的。在测量时发现,在触发后的第一个电压值有时是0,有时是-1,有时是-11,按一定的规律变化。。
不知道楼主的程序是不是也是这样子的,是怎么做到的,还希望指点一下。{:biggrin:}

图片中的第四个波形是我按照上一楼的伪代码写出的程序所捕获的波形,波形完全对称。但是实际应用发觉效果并不是很好。
所以如果楼主能指点一下就太好了{:smile:}

hyc07209 发表于 2012-5-29 22:28:00

怎么图片不见了啊

hamipeter 发表于 2012-5-31 00:24:10

顶一下!

startwar0418 发表于 2012-6-7 22:01:27

hyc07209 发表于 2012-5-29 22:28 static/image/common/back.gif
怎么图片不见了啊

你的图片没传上来啊

236719016 发表于 2012-7-17 09:47:12

楼主好人,我最近在弄电机的程序,想交流一下QQ1342954356,谢谢

236719016 发表于 2012-7-17 09:56:18

电机加减速是有一个软件可以自动计算的,只需要调整S型线,自动出数据,看到别人用过,但是他们不给。强烈请求楼主共享,谢谢{:tongue:}

unifax001 发表于 2012-7-17 10:38:13

马克思密达

foxpro2005 发表于 2012-7-17 12:02:07

很好的帖子,不能沉下去。

zj_871112 发表于 2012-7-18 16:32:49

mark~回去仔细研究研究~~

ZXWZXW88 发表于 2012-7-30 00:09:34

楼主能不能赐教,正准备研究电机方面的东西,QQ:120850991,公司不能上QQ,只能晚上上网,非常谢谢!

a4446570 发表于 2012-7-30 15:50:13

{:cry:}看到这里就没了..晕死

hlfqzy 发表于 2012-8-2 14:51:41

楼主怎么都不出来指点下的呀{:sad:}

hamipeter 发表于 2012-8-14 00:02:43

mark-----------

hlfqzy 发表于 2012-9-21 09:24:49

236719016 发表于 2012-7-17 09:56 static/image/common/back.gif
电机加减速是有一个软件可以自动计算的,只需要调整S型线,自动出数据,看到别人用过,但是他们不给。强烈 ...

你好,想问下你现在有那个电机的加减速软件吗?有的话能给一份吗?

ming1172848 发表于 2012-11-19 22:59:07

陈工,高风亮节

youxin2004 发表于 2013-1-18 14:21:54

不错{:lol:}

lcmdw 发表于 2013-1-18 16:37:36

mark{:smile:}

Alan.Z 发表于 2013-1-18 18:44:11

看看,慢慢理解!

jsluen 发表于 2013-3-23 18:29:10

学习,学习!

marshallemon 发表于 2013-3-23 18:37:10

带梯形增减速不

yangbing2020 发表于 2013-3-23 20:59:21

MARK一下

YS126 发表于 2013-3-23 22:43:44

收藏了,慢慢研究~

ltj6111 发表于 2013-5-21 15:33:36

步进电机在很慢转动时(大概是一分钟一圈),为什么会出现一抖一抖的现象呢?请问楼主这该如何解决呢?
若楼主能给思路不胜感激。

jlian168 发表于 2013-5-27 14:38:45

Sir:

Can you upload the all source code.

Thank you.

Jmhh247 发表于 2013-6-4 21:57:46

MARK,顶帖

ZYBing 发表于 2013-7-13 19:41:56

不错,谢谢分享

drz2146 发表于 2013-7-15 21:28:41

你可以参考一下

robin林 发表于 2013-8-6 14:56:35

chenyuqiu 发表于 2011-11-20 20:26 static/image/common/back.gif
回复【284楼】liyuguang
-----------------------------------------------------------------------



楼主 这么久了 还有在阿莫吗?能否加我qq 240623125 小弟刚开始学习步进电机

10xjzheng 发表于 2013-8-17 21:31:22

mark!!!

yeksw206 发表于 2013-9-8 05:06:22

学习步进电机

dwiller_ARM 发表于 2013-12-9 13:30:37

好东西啊

dwiller_ARM 发表于 2013-12-10 15:39:24

重新看了一下楼主的程序,没有算法说明,也没个注释,真的很难看懂,还不如给一个流程图来的实在

冰雪王爵 发表于 2013-12-10 21:31:09

zl_123 发表于 2013-12-15 22:01:00

{:smile:}                                                         

wlksos 发表于 2014-5-14 21:01:19

谢谢楼主的无私奉献!!

xz199264 发表于 2014-5-22 13:01:52

很久没见楼主了,感谢楼主的付出。

clarkewayne 发表于 2014-5-28 17:00:46

多謝分享,讚一個

llz0734 发表于 2014-5-28 22:53:00

支持,学习了!

gy54321 发表于 2014-8-10 19:09:17

非常好的贴子,就是LZ 好久没上线了。

dgdzas 发表于 2014-8-31 20:59:19

帖子看完了,还是没搞懂,哎。

Honey_comb 发表于 2014-8-31 21:07:28

步进驱动16细分,MARK

guoj 发表于 2014-8-31 22:21:33

步进电机细分控制

didadida 发表于 2014-9-16 09:26:56

本帖最后由 didadida 于 2014-9-16 09:28 编辑

传一个纯软件的“仿真”,就是看一下楼主的程序输出是什么样子的,还有简单的分析,供参考。其中只有第一列和第二列有数据是因为只选中了其中的一路,楼主的程序可以支持四路输出,四路的信号形式是一致的。

ZYBing 发表于 2014-11-15 08:37:07

谢谢分享!

omlarn 发表于 2014-11-15 17:25:49

不错,先留个记号。

brumby 发表于 2014-11-20 15:11:40

感觉这个不能叫细分吧,没有电流反馈的做不了两细分以上的吧?

linbin250 发表于 2014-11-21 10:03:34

brumby 发表于 2014-11-20 15:11
感觉这个不能叫细分吧,没有电流反馈的做不了两细分以上的吧?

我之前不知道有这个帖子,你翻出来,我认真看了一下,参考了“didadida”的解释,终于看明白了:)

就是在两个位置之间按照比例高速的来回运动,由于电动机转子的惯性,所以会比较稳定的在2个位置之间。

brumby 发表于 2014-11-21 11:51:47

linbin250 发表于 2014-11-21 10:03
我之前不知道有这个帖子,你翻出来,我认真看了一下,参考了“didadida”的解释,终于看明白了:)

就是 ...

如果是高速切换相邻的两拍,造成转子来回摆,这样电机很难提速呀,效果应该不好的。

brumby 发表于 2014-11-21 11:55:59

如果来回摆,两拍之间应该这样: 01 01 10   01 01 10   01 01 10   01 01 10 ... ,这样卷子停在 两个齿1/3位置,但楼主插入的是 11。

linbin250 发表于 2014-11-21 12:23:31

brumby 发表于 2014-11-21 11:55
如果来回摆,两拍之间应该这样: 01 01 10   01 01 10   01 01 10   01 01 10 ... ,这样卷子停在 两个齿 ...

看来你没有完全看懂:)
LZ的电动机是用2个线控制,被非门扩展成4线。
A,B 线直接控制
C,D 线是 A,B 线的反向。
“didadida”的分析结果是
A B C D 只有4中组合
1100
0110
0011
1001

你看到的拿一串是表示如何运动。引用楼主的数据表
unsigned int wTableUnl2803DriveValue[] =
{
    0x0000, 0x0080, 0x0820, 0x1110, 0x2244, 0x2492, 0x4a52, 0x5554,
        0xaaaa, 0xabaa, 0xbaae, 0xbbba, 0xeeee, 0xeefe, 0xf7f7, 0x7fff,
};

也就是说
0x0000,表示停在 0/16 的位置
0x0080,表示停在 1/16 的位置
0x0820,表示停在 2/16 的位置
......

举例来说,假定我们需要停到 5/16的位置,那么对应的数是 0x2492 -> b 0010 0100 1001 0010
这里的 0 表示电动机的当前位置。也就是 ABCD 组合(4种组合之一),假定当前的 ABCD 输出是 0110。
这里的 1 表示电动机的下一个位置。也是 ABCD 组合(4种组合之一),假定当前是正转 ABCD 输出应该是 0011(如果是反转 ABCD 应该是 1100)。

LZ 的 0x2492 -> b 0010 0100 1001 0010 是从右向左使用。
将 b 0010 0100 1001 0010 倒转 为 0100 1001 0010 0100
对应的 ABCD 输出是
0-> 0110
1-> 0011
0-> 0110
0-> 0110
1-> 0011
0-> 0110
0-> 0110
1-> 0011
0-> 0110
0-> 0110
1-> 0110
0-> 0110
0-> 0110
1-> 0011
0-> 0110
0-> 0110
按照这个序列循环输出,电动机就停到了 5/16 的位置。

brumby 发表于 2014-11-21 13:54:56

linbin250 发表于 2014-11-21 12:23
看来你没有完全看懂:)
LZ的电动机是用2个线控制,被非门扩展成4线。
A,B 线直接控制


感谢你的详细分析,这种用法在调速应用中见过,我画块电路板验证一下。

995971182 发表于 2014-11-24 16:18:32

学习一下.

qwaven 发表于 2015-1-3 11:49:32

学习了,这种细分思路很新颖,画块板子验证一下。

haiyulian 发表于 2015-1-14 21:45:31

楼主给我个完整版的吧!我需求求教的啊。很想学电机。1270444098@qq.com{:cry:}

zwcled 发表于 2015-4-17 09:32:46

这个不错,就是看不懂,楼主给我全部代码让我学习学习好吗?先谢了,zwcled@163.com

wtiechen1969 发表于 2015-4-17 22:40:26

步进电机驱动,记号一个

wsh 发表于 2016-1-8 17:01:21

chenyuqiu 发表于 2010-12-11 12:08
呵呵,没有啦。想要的话可以留下联系方式

楼主 麻烦也发我一份吧! 感激感激

myqiang1990 发表于 2016-1-17 17:03:50

本帖最后由 myqiang1990 于 2016-1-17 20:46 编辑

时隔4年,我来给大家解释一下楼主的代码是怎么加速的吧~其实楼主的加速方式是:定频率,变细分(改变步距角)的方式加速的~也就是说~楼的细分是在1-16细分之间变化,最高速是1细分,最低速是16细分,变速的方式是通过改变步距角方式实现的~那个表,只是楼主判断减速点的位置,就是减速的步数~并非是加速表!楼主根本没有通过改变定时器频率的方式进行加速,而是定频率,变步进角的方式实现加速的~

楼主判断升一个频率点或者将一个频率点的方法是:每当当前位置转过了一个步进角(1.8度,即16细分,即16微步后,会变一次速度~)代码如下,下面这句代码就是干这事的 >> 4 等于/16,即对16求正:
c = wPanMotorNowPosition >> 4;
                if (c != cPanDriveValue)
                {
                        cPanDriveValue = c;                        
                        Uln2803Drive(0, -c);
                }
   cPosition       &= 0x3f;//这句话是保证速度在16细分4周期内变化,16*4=64,因为一整完整的正弦波是4周期,16细分的话,就是64
wTemp            = wTableUnl2803DriveValue;//这句话是判断电机细分点在4周期中的,哪一个周期里~

后面的代码我也不理解,不过不太重要了~其他的代码都好理解~~
不是研究舞台灯光的,可能对楼主的加速方式不太了解,因为舞台灯光应用中,一个MCU要控制多路的步进电机,而且还得控制成本,所以一般MCU的得控制多达10几路的电机进行各自的加减速~所以~大家都去找一些另类的加速方式,其中定频率,变步距角的方式,是最简单,最有效,最省MCU时间,省MCU空间的,的一种梯形加速方式~~

ansion520 发表于 2016-4-29 21:39:13

这代码学习不错!

bygreencn 发表于 2016-4-29 22:30:30

学习   

tj00498 发表于 2016-10-18 10:26:12

本帖最后由 tj00498 于 2016-10-18 10:27 编辑

总算是看懂了楼主的细分思路,还是有个问题,unsigned int code wTableUnl2803DriveValue[],这个细分的数据不是一定要按楼主的数据,只要能达到16等分就行吧,比如最后的0x7fff,换成0xf7ff

qm9698 发表于 2016-10-23 15:23:11

357674916@qq.com谢谢

1069182055 发表于 2016-12-28 16:45:33

陈大哥现在应该有新的方法了吧{:lol:},有空要带带小弟啊{:lol:}

baisong3777 发表于 2016-12-30 13:15:32

谢谢楼主分享
学习了一下收货很大

1012421396@qq.c 发表于 2018-7-12 08:38:40

其实楼主讲的不咋地,姿态很高,但是评论的人却道出了真相,感谢楼主给评论的人机会去教大家

skype 发表于 2018-7-12 09:40:53

一时还看不明白,收藏起来有空抽时间看看

TKZXJ 发表于 2018-12-19 14:08:44

谢谢楼主

tangly2017 发表于 2019-4-18 10:27:22

学习ING!!!!!!!!!

bingshuihuo888 发表于 2019-5-4 09:33:47

这个有用的上,过两天仔细看看
页: 1 2 3 [4]
查看完整版本: STC11F16XE驱动4个步进电机(软件实现16细分)