金牌会员
 
- 积分
- 1132
- 金钱
- 1132
- 注册时间
- 2015-7-31
- 在线时间
- 155 小时
|
5金钱
新手求教 步进电机 开环控制 精确控制脉冲数
情况是这样的:
1、控制5个步进电机,开环,控制光闸开合
2、只有单侧有极限检测,只在闭合的时候有光电开关可以检测到位并给出信号,打开的时候没有光电开关检测打开极限,得用软限位
3、按键控制步进电机正反转,也就是光闸开合
4、有定值模式,比如按下某一个按键,电机会带着负载自动移动到相应的位置停下
大概就是以上的情况
现在虽然做出来了,但是有的地方还是感觉不妥,而且有一处缺陷
先说下做出来的思路
PWM控制步进电机的最高频率是:72M/8000 =9000,应该是这么算吧....
因为是开环控制,按键的时候光闸打开或闭合需要记住输出过多少脉冲,预先先确定了多少个脉冲能开到位,把这个值赋值给DMA作为软限位打开极限值。我用的是定时器比较模式输出PWM,然后更新事件请求给DMA,DMA能得到已经发出多少脉冲
然后将DMA剩余值赋值给一个变量。
打开的时候会得到一个数值Count,然后将DMA关闭并把这个Count赋值给DMA作为闭合时用的脉冲个数限位,这样打开闭合软限位的问题算解决了(虽然我不知道这么搞对不对,但是结果表示没问题 )
定值的时候重新光闸重新回一下零位,然后给DMA赋值,步进电机开始运行,到位停止。
现在的缺陷是,打开光闸需要开关并赋值一次DMA,闭合的时候也一样,问题就来了,不一定什么时候就会出现问题,问题是这样的:
定值模式是有加减速的,想让它更快到位,DMA剩余值分成3个阶段,在第一段时间加速,第二段时间到达最高速,第三段时间也就是快到位了减速。正常用不会出现问题,但是频繁开关光闸的时候(正常情况不会这么用,我只是为了检查BUG就做了写破坏性的动作)问题就来了,光闸会一个速度的缓慢打开,这个速度应该和手动打开时的速度是一样的,到位之后停了,然后自己就恢复了正常带有加减速的情况,再次反向动作就正常了。5个电机基本都是这个控制模式,都出现这个情况。于是我特意将一路电机取消DMA,用中断的方式计数,不管多频繁的赋值它都不会出现上述问题...
我一定是在哪个部分理解的不对请大神们指点
还有频繁对DMA进行开启关闭是不是导致这个错误发生的根源呢 ?
补充:我试过中断计数的方式,TIM更新事件出发中断,单独将一个电机用这种方式没问题,但是我怕5轴同时动的时候过于频繁的中断会对整体代码造成影响,比如计数不准或者中断飞了等等奇怪的问题,当然只是我想象的,具体会不会出现我也不清楚,但是总觉得很不靠谱,而且以后要是加入通讯后又要加一个中断请求,CPU没事净中断,太占资源应该会出问题吧?不知道我这个担心是不是多余..... |
|