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

2019-12-20 21:35发布

大家好,我刚开始接触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可用。

请朋友们提供意见。

谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
hellolinux
1楼-- · 2019-12-23 23:59
本帖最后由 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楼建议不错
李文翔
2楼-- · 2019-12-24 05:01
看到一个淘宝店,里面是STM32+THB6128的,可以参考下
http://item.taobao.com/item.htm? ... 240&ns=1#detail
guoxiong1986
3楼-- · 2019-12-24 10:09
 精彩回答 2  元偷偷看……
hkjabcd
4楼-- · 2019-12-24 10:45
AVR_USER 发表于 2014-8-26 14:59
用一STM32F103R8搞定20个步进电机毫无压力的飘过

大哥,能否给点思路??!!
a249637628
5楼-- · 2019-12-24 11:05
AVR_USER 发表于 2014-8-26 14:59
用一STM32F103R8搞定20个步进电机毫无压力的飘过

大神的节奏。。
cnzhoujin
6楼-- · 2019-12-24 11:46
还是用fpga合理

一周热门 更多>