zhuisuoji 发表于 2012-6-30 19:54:24

请教一下ada1983,还有坛友高手们,步进驱动控制问题

本帖最后由 zhuisuoji 于 2012-6-30 21:40 编辑

首先感谢一下坛友ada1983,目前正在使用ada1983提供的步进电机加速曲线,来做步进电机的控制,已实现8细分时的最高脉冲频率是20.4KHz,在我的机架上能运转正常不失步.总体架构是:电脑利用串口发出指令(为了能运行G代码,所以采用G代码格式),比如:G0 X300.12345 Y300.12345\-->单片机接收后只提取当前轴数据(其它轴的忽略),然后进行计算得出所需脉冲总数-->运行(运行时不接收串口数据)-->运行完毕后再开启串口.
目前已实现上述功能.
现在想问的问题是:我想用一个单片机同时控制二个轴出现中断反应来不及,低速时还可以,8细分最高脉冲频率在14KHz时,勉强实现二轴同时控制,因为当二轴中断很接近时出现波型延时.这肯定跟我采用定时器中断产生脉冲方式有关系.所以不能很好的同时实现二轴控制.
请问坛友高手们和ada1983,你们是采用什么方式来产生脉冲的?谢谢了~~~

zhuisuoji 发表于 2012-6-30 20:07:00

还有就是我买了二种驱动,一种是A3977,另一种是TB6560,发现二者之间是有差别的.
在同等机械硬件条件下有以下不同之处(都是8细分的情况下):
A3977(2.5A):电机运行时声音很小,负重时一样运转正常
TB6560(2.2A):电机运行时声音比较大,负重时电机堵转
TB6560(3A):电机运行时声音比较大,负重时一样运转正常

ada1983 发表于 2012-7-2 17:30:26

抱歉,刚看到:)

1.驱动器做的好一些的话,可以降细分,这样最高频率就下来了........

2.提高MCU主频(提高晶振或者直接换MCU了 )

3.优化中断中的程序,尽量少做运算,程序写完了可以试试多种写法,看最终汇编代码量,中断里的程序越短越好.......

集成芯片做出来的驱动器,只是做了个外围,性能特性芯片决定了。

可以考虑性能好点的驱动器,国内也就那几家,这里不多说,免得有广告嫌疑:)

ada1983 发表于 2012-7-2 17:31:46

本帖最后由 ada1983 于 2012-7-2 18:13 编辑

用MEGA16,单轴的话应该能到60K以上,两轴再去掉主定时器,都在10K以上应该没问题,我试过的:)


---------------------------------------------------------------
呃,用STC那种1T的单片机也试过,24M晶振,两个电机同时跑,20KHz以上没什么问题:)

zhuisuoji 发表于 2012-7-2 19:24:09

ada1983 发表于 2012-7-2 17:30 static/image/common/back.gif
抱歉,刚看到:)

1.驱动器做的好一些的话,可以降细分,这样最高频率就下来了........


谢谢~~~{:handshake:}

1.我是直接采用25MXL的同步轮加皮带方式走行程的,所以同步轮的周长(50.8mm)就是我的机架每转行程,8细分的话,每个脉冲的行程是0.03175mm,采用四舍五入的话精度就是0.015875mm左右.
综上所述驱动器细分级别直接影响到最小精度,所以我还想改用16细分的.降看来是不行了,呵呵{:smile:}

2.提高MCU晶振,换MCU可以考虑

3.中断优化确实很重要,由于我现在是用T0跟T1分别产生二个轴的脉冲输出,频率高的话是不行的了,因为中断会相互之间干扰,也考虑其它方式(懒啊,以后再说...),现在只能是一个MCU控制一个轴比较合适了

4.驱动器也只能用现有的了,不想花钱了,穷人一个{:funk:}

5.MEGA16,以前用过,现在手上没有了这个芯片了

6.STC,1T的正在用,二轴同时能跑20KHz,这个我得考虑一下方式方法了{:dizzy:}

zhuisuoji 发表于 2012-7-2 19:28:20

对了,手上的LGT倒是可以一试{:victory:}{:lol:}

ada1983 发表于 2012-7-2 21:03:21

1.我是直接采用25MXL的同步轮加皮带方式走行程的,所以同步轮的周长(50.8mm)就是我的机架每转行程,8细分的话,每个脉冲的行程是0.03175mm,采用四舍五入的话精度就是0.015875mm左右.

---------------------------------------------------------------------------------------------------------------------------------------
这只是分辨率,不是精度,你是用的同步轮,整个机械精度在0.05mm就很不错了............

若果最终要求精度在0.1mm左右完全可以降细分的........

只要电机不丢步,机械上的误差是主要的误差........

zhuisuoji 发表于 2012-7-2 21:18:31

ada1983 发表于 2012-7-2 21:03 static/image/common/back.gif
1.我是直接采用25MXL的同步轮加皮带方式走行程的,所以同步轮的周长(50.8mm)就是我的机架每转行程,8细分的话 ...

呵呵~~~不是搞机械出来的,这些名词用得不对,分辨率倒是知道的,正因为每个脉冲就会一个尺寸与之相对应,所以我才这样说.应该也不会太离谱吧{:lol:}
现在我的机架想移动0.1mm的尺寸是不可能的了,但移动0.03175mm的尺寸倒是完全可以的

zhuisuoji 发表于 2012-7-2 21:55:29

现在我终于体会到什么叫累计误差了.
我用串口发出如下指令:
G0 X100
G0 X100
G0 X100
G0 X-300
按理说最后一条指令是回到原起始点的.但反复运行上述指令后,最后的起点跟原来的起点偏移了,运行次数越多偏移就越大

ada1983 发表于 2012-7-3 07:55:24

先看看是不是累计误差造成的..........

你先算了三次x100,看看每次的具体脉冲数是多少,三次加起来一共多少脉冲

再以 X300 算一次脉冲数,看看这里的总脉冲数是多少,然后比较两次是否相等。

由于MCU计算四舍五入的原因,这两次的脉冲总和有可能有偏差的.......

如果两次脉冲数不等,那么修正下程序就可以了,如果相等,从机械上找原因吧..........

zhuisuoji 发表于 2012-7-3 16:36:02

ada1983 发表于 2012-7-3 07:55 static/image/common/back.gif
先看看是不是累计误差造成的..........

你先算了三次x100,看看每次的具体脉冲数是多少,三次加起来一 ...

嗯,算过了,也是因为分辨率的缘故.
G0 X100
100/0.03175=3149.6(除不完的数) 约等于3150个脉冲

G0 X-300
300/0.03175=9448.8(除不完的数), 约等于9449个脉冲,

3150*3=9450
9450-9449=1 (刚好是一个脉冲的误差)

118139 发表于 2013-6-8 13:20:13

zhuisuoji 人在不在,我买了块跟你一样的a3977驱动器,请教一下接口用法




1.这两个引脚要设成怎样电平才能使用

使能脚
EN-
EN+
方向
DIR-
DIR+

要00,10,01,10,11?

2.这块板上没有细分调节开关,我看了一些A3977说明,
然道这块板是根据CLK脚输出频率的快慢自动细分,还是说已经硬件都固定好了细分数

3.板上跟外面的单片机供地脚应该还需要接一根吧

zhuisuoji 发表于 2019-6-3 02:41:55

118139 发表于 2013-6-8 13:20
zhuisuoji 人在不在,我买了块跟你一样的a3977驱动器,请教一下接口用法




天哪,6年了,现在才看到,真是不好意思.{:shy:}{:sweat:}

jxyctwt 发表于 2022-2-21 20:58:11

哈哈哈,又过了三年,我挖起来了
页: [1]
查看完整版本: 请教一下ada1983,还有坛友高手们,步进驱动控制问题