大家好,我刚开始接触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通过一定的总线协议,发送运动命令到驱动器,这样比较可行
两种方案:
1:定制驱动器,不需要你控制器进行加减速控制,有很多行业用驱动器发脉冲是直接引出编码器,像这种根本就没有加减速的控制。但是有的步进电机驱动器自带加减速,可以帮你完成加减速。
2:用带总线的驱动器,直接RS232或者Can发送驱动命令,走多少步,多少速度都没问题。当然前提是选的电机有足够的推力
最后做一点生意,我就是做电机控制的,我的驱动器能满足你的应用。你的1个主控芯片,直接发脉冲就行了,不需要加减速控制,能发多少路脉冲,方向信号,就能控制多少路电机驱动器,总线,脉冲都可以。(不过目前我们总线只支持RS232)如果量大可以定制can版。
一周热门 更多>