步进电机控制器方案目前的进展和问题请教
大家好,我刚开始接触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可用。
请朋友们提供意见。
谢谢 定时器中断方案不行,我们公司以前试过,CPU开销太大,吃不消。 目前在用第一种方法,已经感觉到mcu频繁中断带来的压力了,尤其是在大细分下,速度不敢太快,还好我带的电机不多。 表示关注 这么多电机,完美配合好,那就很不错了,不懂这一行,帮顶 把运动控制功能集成到驱动器里面去吧。
主CPU通过一定的总线协议,发送运动命令到驱动器,这样比较可行 本帖最后由 zf12862177 于 2014-8-13 10:53 编辑
两种方案:
1:定制驱动器,不需要你控制器进行加减速控制,有很多行业用驱动器发脉冲是直接引出编码器,像这种根本就没有加减速的控制。但是有的步进电机驱动器自带加减速,可以帮你完成加减速。
2:用带总线的驱动器,直接RS232或者Can发送驱动命令,走多少步,多少速度都没问题。当然前提是选的电机有足够的推力
最后做一点生意,我就是做电机控制的,我的驱动器能满足你的应用。你的1个主控芯片,直接发脉冲就行了,不需要加减速控制,能发多少路脉冲,方向信号,就能控制多少路电机驱动器,总线,脉冲都可以。(不过目前我们总线只支持RS232)如果量大可以定制can版。 {:sweat:}前几天去赛格买L297 ,拆机片都给你报价¥15,,,,神马世道了,,,,{:titter:} 配合CPLD应该可行吧! 用TI的8824Q1,具有片上 1/32 微步进分度器(步进/方向控制)的汽车类 1.6A 双极步进电机驱动器 另外,求一份定时器级联方式驱动步进电机的例程 回复7楼,你的建议不错,不过我还是想做成通用的,这样的话成本会低很多,若是用stm32f407做的话可以同时控制15个电机,并且满足要求的话就碉堡了 这么多电机是独立运行的么?没有任何关联么? 基于你的电机很多且用于医疗设备,讲下我的经验。最好分模块设计,每个模块里包含1个或几个电机,这样便于后续生产和现场维护,因为现场维护人员通常是做板级维护的,不要搞成某个电机驱动有故障得将整块主板换掉。每个模块有单独的控制器。各个模块的控制器通过总线和主控制器通信。 14楼说得对,我也是考虑每块主控控制4个步进电机,然后有个中央控制芯片与5个主控通信,这样利于维护和接线。 步进电机的驱动频率一般都不超过2K,你搞60K有多大的意义? dongfangjian 发表于 2014-8-14 08:52
步进电机的驱动频率一般都不超过2K,你搞60K有多大的意义?
脉冲外接 驱动器,驱动器调成64细分的话,最大的速度能用到40k 原理你都整理出来了嘛,挺不错的,你的电机都是小电机啊,不需要通用驱动器的,莫大用过A3977就可以了,要便宜的话rohm有款BD63860efv,基本兼容,价格更加便宜去看看吧 myxiaonia 发表于 2014-8-14 09:02
原理你都整理出来了嘛,挺不错的,你的电机都是小电机啊,不需要通用驱动器的,莫大用过A3977就可以了,要 ...
这个支持细分吗,没有细分的话电机噪音很大 guoxiong1986 发表于 2014-8-14 11:12
这个支持细分吗,没有细分的话电机噪音很大
就这么小的电机噪声也不会太大,最大8细分,网上找找看呗 myxiaonia 发表于 2014-8-14 11:16
就这么小的电机噪声也不会太大,最大8细分,网上找找看呗
我试过,发热好严重,电机有点烫,64细分,不转也发烫 楼主,计算新的buffer值是在dma中断里计算的吗? 我刚做完个类似的项目,不过我的是用linux ARM9+fpga的方式的。测试后还是很稳定的。 用一STM32F103R8搞定20个步进电机毫无压力的飘过 每个电机独立控制,64细分 本帖最后由 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楼建议不错 看到一个淘宝店,里面是STM32+THB6128的,可以参考下
http://item.taobao.com/item.htm?spm=a230r.1.14.1.2IhwrU&id=39062295240&ns=1#detail 要控制20个步进电机, 我在网上找到一个PCI转8串口卡,可以用每个串口和每个主控芯片直接通信,每个芯片控制4个轴,这样的话也方便更换,不需要一个主控控制5个从控,然后主控和PC通信了,大家觉得呢? AVR_USER 发表于 2014-8-26 14:59
用一STM32F103R8搞定20个步进电机毫无压力的飘过
大哥,能否给点思路??!! AVR_USER 发表于 2014-8-26 14:59
用一STM32F103R8搞定20个步进电机毫无压力的飘过
大神的节奏。。 还是用fpga合理 我也在玩步进电机。顶一下。。。。。 {:smile:}我也在做 也在头疼这个多个步进电机的是,我们涉及的是12个步进电机,要有加减速度。哎,有没有比较牛的mcu,发PWM脉冲,同时能自动记录脉冲数的
页:
[1]