guoxiong1986 发表于 2014-8-13 09:43:07

步进电机控制器方案目前的进展和问题请教

大家好,我刚开始接触stm32系列的芯片,目前有个项目需求是要控制20个步进电机用在公司的一款医疗设备上,目前用stm32f107做了4轴的控制器,带梯形的加减速,参考的avr的加减速方案资料,以前看过网友的方案,大致有2种,一种是在定时器溢出中断里面反转电平并计算加减速和当前轴位置,另一种是用定时器级联方式来做,说说这两种方案的弊端。

定时器中断方式来做固然简单但是缺点是频繁中断,浪费CPU的资源,若频率高的话会丢步,何况这么多个步进电机同时运作,取消。
级联方式简单,完全硬件来实现,但是计算加减速不方便,而且输出脉冲数大于65535不方便,而且中途若想变速或者反向的话不方便,取消。

DMA的原理就是开辟2个DMA缓冲器,每个3000 short,把加减速的delay计算出来填入到dma buffer中,用dma来传输,传输完3000个数据,dma才会中断,这时候选用另一个buffer,dma和tim继续跑,同时计算新的buffer中的delay,这样的话大大减少了CPU的负担,因为项目最多用60k的速度,我试了下,3轴同时输出60k不丢步。


目前的方案是买现成的驱动器,有没有网友做驱动器有经验,设备需要3个52系列电机,15个42系列电机,3个35系列电机。

还有就是stm32f107的timer最多可以有6个可用,也就是最多可以同时6个步进电机工作,我在想换成stm32f407,主频高,有17个tim可用。

请朋友们提供意见。

谢谢

BrightWang 发表于 2014-8-13 09:51:40

定时器中断方案不行,我们公司以前试过,CPU开销太大,吃不消。

wqtslove 发表于 2014-8-13 09:58:53

目前在用第一种方法,已经感觉到mcu频繁中断带来的压力了,尤其是在大细分下,速度不敢太快,还好我带的电机不多。

soos 发表于 2014-8-13 10:05:57

表示关注

DiaoMao_Huang 发表于 2014-8-13 10:06:15

这么多电机,完美配合好,那就很不错了,不懂这一行,帮顶

流氓马 发表于 2014-8-13 10:17:40

把运动控制功能集成到驱动器里面去吧。
主CPU通过一定的总线协议,发送运动命令到驱动器,这样比较可行

zf12862177 发表于 2014-8-13 10:49:18

本帖最后由 zf12862177 于 2014-8-13 10:53 编辑

两种方案:

1:定制驱动器,不需要你控制器进行加减速控制,有很多行业用驱动器发脉冲是直接引出编码器,像这种根本就没有加减速的控制。但是有的步进电机驱动器自带加减速,可以帮你完成加减速。

2:用带总线的驱动器,直接RS232或者Can发送驱动命令,走多少步,多少速度都没问题。当然前提是选的电机有足够的推力

最后做一点生意,我就是做电机控制的,我的驱动器能满足你的应用。你的1个主控芯片,直接发脉冲就行了,不需要加减速控制,能发多少路脉冲,方向信号,就能控制多少路电机驱动器,总线,脉冲都可以。(不过目前我们总线只支持RS232)如果量大可以定制can版。

wkman 发表于 2014-8-13 11:02:59

{:sweat:}前几天去赛格买L297 ,拆机片都给你报价¥15,,,,神马世道了,,,,{:titter:}

gonboy 发表于 2014-8-13 11:47:26

配合CPLD应该可行吧!

hxhz123456 发表于 2014-8-13 12:42:39

用TI的8824Q1,具有片上 1/32 微步进分度器(步进/方向控制)的汽车类 1.6A 双极步进电机驱动器

wqtslove 发表于 2014-8-13 15:05:48

另外,求一份定时器级联方式驱动步进电机的例程

guoxiong1986 发表于 2014-8-13 15:35:25

回复7楼,你的建议不错,不过我还是想做成通用的,这样的话成本会低很多,若是用stm32f407做的话可以同时控制15个电机,并且满足要求的话就碉堡了

kaomantou 发表于 2014-8-13 16:25:29

这么多电机是独立运行的么?没有任何关联么?

jamesyu 发表于 2014-8-13 16:52:25

基于你的电机很多且用于医疗设备,讲下我的经验。最好分模块设计,每个模块里包含1个或几个电机,这样便于后续生产和现场维护,因为现场维护人员通常是做板级维护的,不要搞成某个电机驱动有故障得将整块主板换掉。每个模块有单独的控制器。各个模块的控制器通过总线和主控制器通信。

guoxiong1986 发表于 2014-8-13 17:20:58

14楼说得对,我也是考虑每块主控控制4个步进电机,然后有个中央控制芯片与5个主控通信,这样利于维护和接线。

dongfangjian 发表于 2014-8-14 08:52:51

步进电机的驱动频率一般都不超过2K,你搞60K有多大的意义?

guoxiong1986 发表于 2014-8-14 08:55:20

dongfangjian 发表于 2014-8-14 08:52
步进电机的驱动频率一般都不超过2K,你搞60K有多大的意义?

脉冲外接 驱动器,驱动器调成64细分的话,最大的速度能用到40k

myxiaonia 发表于 2014-8-14 09:02:39

原理你都整理出来了嘛,挺不错的,你的电机都是小电机啊,不需要通用驱动器的,莫大用过A3977就可以了,要便宜的话rohm有款BD63860efv,基本兼容,价格更加便宜去看看吧

guoxiong1986 发表于 2014-8-14 11:12:21

myxiaonia 发表于 2014-8-14 09:02
原理你都整理出来了嘛,挺不错的,你的电机都是小电机啊,不需要通用驱动器的,莫大用过A3977就可以了,要 ...

这个支持细分吗,没有细分的话电机噪音很大

myxiaonia 发表于 2014-8-14 11:16:46

guoxiong1986 发表于 2014-8-14 11:12
这个支持细分吗,没有细分的话电机噪音很大

就这么小的电机噪声也不会太大,最大8细分,网上找找看呗

guoxiong1986 发表于 2014-8-14 15:15:05

myxiaonia 发表于 2014-8-14 11:16
就这么小的电机噪声也不会太大,最大8细分,网上找找看呗

我试过,发热好严重,电机有点烫,64细分,不转也发烫

bluelxd 发表于 2014-8-17 11:13:22

楼主,计算新的buffer值是在dma中断里计算的吗?

nishuizhou 发表于 2014-8-26 14:37:00

我刚做完个类似的项目,不过我的是用linux ARM9+fpga的方式的。测试后还是很稳定的。

AVR_USER 发表于 2014-8-26 14:59:10

用一STM32F103R8搞定20个步进电机毫无压力的飘过

AVR_USER 发表于 2014-8-26 15:00:08

每个电机独立控制,64细分

hellolinux 发表于 2014-8-26 15:28:02

本帖最后由 hellolinux 于 2014-8-26 15:30 编辑

定时中断为什么不可以?
相对于步进电机步进时间而言,定时器绰绰有余。
定时器+细分驱动板我觉得可以
每个电机定义一个结构体
motoa.switch
motoa.direction
motoa.clock

motob.switch
motob.direction
motob.clock
......
在定时中断中只要做比较就可以
        motoa_clock++;
        if{motoa.switch==ON}
        {
                if(motoa.direction==AAA)
                        \\设置驱动正转
                else
                        \\设置驱动反转
                       
                if(motoa_clock>motoa.clock)
                {
                        \\给驱动一个CLOCK
                        motoa_clock = 0;
                }
        }



另觉得14楼建议不错

李文翔 发表于 2014-8-27 10:52:08

看到一个淘宝店,里面是STM32+THB6128的,可以参考下
http://item.taobao.com/item.htm?spm=a230r.1.14.1.2IhwrU&id=39062295240&ns=1#detail

guoxiong1986 发表于 2014-9-1 15:40:08

要控制20个步进电机, 我在网上找到一个PCI转8串口卡,可以用每个串口和每个主控芯片直接通信,每个芯片控制4个轴,这样的话也方便更换,不需要一个主控控制5个从控,然后主控和PC通信了,大家觉得呢?

hkjabcd 发表于 2014-9-7 09:24:21

AVR_USER 发表于 2014-8-26 14:59
用一STM32F103R8搞定20个步进电机毫无压力的飘过

大哥,能否给点思路??!!

a249637628 发表于 2014-10-28 16:20:11

AVR_USER 发表于 2014-8-26 14:59
用一STM32F103R8搞定20个步进电机毫无压力的飘过

大神的节奏。。

cnzhoujin 发表于 2018-2-15 11:38:00

还是用fpga合理

codefish 发表于 2018-2-15 23:46:18

我也在玩步进电机。顶一下。。。。。

wendajie123 发表于 2018-3-19 14:37:16

{:smile:}我也在做

jym20030037 发表于 2018-4-1 00:30:53

也在头疼这个多个步进电机的是,我们涉及的是12个步进电机,要有加减速度。哎,有没有比较牛的mcu,发PWM脉冲,同时能自动记录脉冲数的
页: [1]
查看完整版本: 步进电机控制器方案目前的进展和问题请教