2相步进电机PWM控制研究和分享
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2相步进电机PWM控制研究和分享
本人做步进电机的控制,只有2个月左右。
没有任何代码和完整资料可以参考,但因为市场不等人,必须做出来。
可以说是想破头白发都多了很多根。
最后还是勉强做出来了,但感觉不够好,这里分享一下,也希望有经验的高手能分享一下自己的经验甚至指点一下小弟。
控制芯片AVRMEGA168
电机 2相步进电机1.8度,200步,4线制
驱动芯片,保密。
(原因不是因为什么,是不想被某些人知道在什么行业工作甚至知道是什么厂家的,他们挺小心不愿透漏技术)
芯片性能,主要是有8位PWM定时器0,16位PWM定时器1,8位PWM定时器2.每个定时器都有2个脚能直接输出PWM波形。
正好能控制3个步进电机。
步进电机每组一头接一个pwm的脚,另一个脚用普通IO口。
这样通过控制普通IO的高低,还有PWM的脚,就能控制电机运行。
目前,我只需要控制2个电机。
用了定时器0和1,定时器2刚好用来定时用。
有些设备3个都用上,要用普通定时功能的话,计数到顶,就进入中断,也可以做到定时。
当然这样就不能非常精确的定时,但一般来说也没问题。
步进电机,太基础的就不说了,反正一个脉冲就是一步。
这样是我没法用的。
必须用细分。
没有细分驱动器,全靠cpu搞定。
用256细分。
正好8位PWM都用上了。
在直角坐标系,画一个圆圈。
x轴和y轴分别代表电机两个线圈,把一个象限的1/4圆,分成256等份。
每一条等分线和圈相交的点,对应的xy坐标,就是这些细分角度对应的力大小,还有方向。
也就是,圆半径乘以正弦,余弦。
这样自己做个excel表格,就能算出256细分对应的pwm电流数据,要改变力大小,改圆半径即可。
有了细分表,事情就解决了一半。
那么说说电机运行的要求:
要从转很慢(目前最慢是0.026圈/秒)到3.4圈/秒,开环控制,不能丢步,要平滑加减速不震荡,而且反应要很快,要在2秒内从0加速到最高,或者减速到0,或者掉头。
当然不是只有电机自己在转,他带动一个比较重的东西。
控制电机转速,只能控制每步走的间隔。
时间间隔,或者每次走步数不同(256细分,一次可以走任意步,但不能超过256)
搞了很久终于有2套方案:
第一个就是,每次都走一细分步,每步之间通过修改时间来产生加减速的效果第二个就是,每次走的时间一样,但每次走的步数不同,也能达到加减速效果还有个方案,两个同时修改,太复杂没认真想过算法。
还有个更变态的,时间,步数,连电流也即时改变,更复杂从没想过要去研究。
方案1的优点是,容易控制,但是,要控制时间,必须用定时器,如果只有一个定时器,就很难同时控制2个甚至3个电机。
定时器可以把定时值搞很小,
通过累加的办法,同时控制3个电机。
但这样做也有问题。
当定时值很小的时候,运动曲线会很硬,电机很容易丢步.而且电机速度达不到要求.3.4圈每秒,256细分。
等于174080步每秒,一步之间只有5.74微妙。
还是2个电机。
而且mcu不是只处理电机转动那么简单,还有通讯接收。
这个方案花了几乎一个月时间,否决了。
方案2,控制步数。
固定定时器值。
这样就能一个定时器同时控制很多个电机。
但也有个问题,因为每次走的步数不同,必须算每次走多少步。
加速,匀速,减速,要对加速部分进行积分(累加),达到最高速时就匀速运动,即将到达就要减速。
问题就是,快到时,减速距离不一定等于加速距离。
于是造成不能到达目标位置马上停下,有一点来回震荡。
这方法速度有了,反应也OK,就是不够平顺。
于是我把减速距离变成加速距离的3倍,加速很快,减速较慢,勉强能通过应用。
但是也有一个严重缺陷,就是当速度很慢的时候,会抖得厉害。