这一篇文章里会深入的对步进电机控制方法进行论述
如何避免步进电机丢转的问题
1.机械结构:排查一下传动的问题,举个例子,我的毕设里大臂机械臂的步进电机有时会有丢转问题,造成无法运动到指定位置,后面发现是因为皮带轮传动,皮带绑的不紧,造成步进电机的小直齿轮无法很好的带动大齿轮。
2.看一下供电的电流和电压:使用步进电机驱动器控制时,电源最好选用开关电源。如果其中有使用DCDC或者LDO降压的操作,要保证可以完成稳定的电流供应。
3.看一下是不是负载太大,造成末端或者是部分关节难以移动
4.进行速度变化控制,先调节一下驱动器的细分数,尝试运行条件下最快且不丢转的速度,定下此时的arr与psc值。之后再试一下运行条件下最慢且可以完成任务的速度,记录为arr2和psc2。让步进电机在一个运动周期内,先加速,后匀速,再减速,这就是一般会说到的梯型速度控制/S型速度控制方法,另外也可以使用阶梯调速的方法
5.进行闭环PID速度控制,可使用matlab仿真
6.写位置插补,或者是速度插补函数,补足运行的距离
如果上述方法还是有些误差,可以减少每次步进电机运动的脉冲数,让步进电机多运行几次,以此达到相应的距离
阶梯调速原理及代码解析
这个想法同样来自毕设,当时毕设使用脉冲数控制运动距离,发现梯型速度和S型速度控制方法都很难融入到实际成品里,也是我当时不太会写公式,索性将每次运动的总脉冲数pulse_we_need分为n份,每份脉冲结束后都会对arr和psc加/减,以此完成减速/加速的运动控制。
把总共需要运行的脉冲数分成相对应的十份,pulse1_speed4被设置为从加速到匀速的临界点脉冲,pulse1_speed7被设置为从匀速到减速的临界点脉冲。
设置定时器的句柄后,通过if判断改变十份脉冲间隔时的arr和psc值,重新设置,再打开定时器继续运行。arr和psc值越小,运行速度越快,arr和psc值越大,运行速度越慢。
定时器中断内的pulse计数大于pulse_we_need时,pulse重新置0,arr和psc值设置为工作范围内运行速度最慢的值,重新设定定时器后关闭定时器的中断。