这是一个工业级别的步进闭环伺服驱动,最高稳定转速800RPM,带磁偏转校准,带光电隔离,使用Stm32。

暂未开源

我的博客:https://yltzdhbc.top/SmartDrive-Stepper/

Github: https://github.com/yltzdhbc/SmartDrive-Stepper/

Gitee: https://gitee.com/yltzdhbc/SmartDrive-Stepper/

驱动简介

硬件参数

名称 参数
主控芯片 意法半导体STM32F030C8T6
驱动芯片 两颗A4950(最大电流3.5A)
编码器芯片 英飞凌15位工业级TLE5012B

性能参数

名称 参数
工作电压 12-30V
工作电流 额定1.3A 最大2.5A
控制精度 0.08度
软件细分 4/8/16/32可选

步进伺服原理

步进电机本身是一个开环伺服系统,因为开环就能实现伺服的效果,因此运用广泛,但我们对电机的精度要求越来越高,有些场合不适用于开环系统,因为开环系统会造成丢步、控制精度降低、不稳定等一系列因素。闭环对于步进电机来说也十分重要。

以下来源于HyperCNC杨工的开源网站

  • 首先讲一下二相步进电机闭环驱动和开环驱动的区别。假设现在上位机主机发DIR/STEP指令给步进驱动器的指令角度是90.5度。开环的驱动器收到指令后即根据细分电流表调整步进电机的两相电流,将电流矢量也指向90.5度,然后步进电机永磁转子就会在电磁力作用下运动到90.5度这个位置上了,这其中步进电机AB两相的驱动电流在设置好后就不变了,只要接下来没有新的角度指令那就一直保持原样不改变。闭环控制器则不然,当闭环控制器收到90.5度的指令角度时,首先利用角度传感器(编码器)测出步进电机现在的实际角度假设是90度,然后跟开环的驱动器一样根据细分电流表调整步进电机的两相电流,但是要将电流矢量指向91.8度(指令角度比实际角度大那就在实际角度上加1.8度,反之减1.8度),与开环控制器不同的是闭环的驱动电流大小不是恒定不变的,而是根据角度误差经过PID算法计算出来的,简单的讲就是指令角度和实际角度的误差大那驱动电流就大相反误差小驱动电流就小,误差为0那驱动电流就为0(这就是闭环步进低发热省电的原因)。闭环驱动和开环驱动的最大区别大体上就是这样,当然想要了解具体的细节的还得看源程序,这里限于篇幅就不再多说。

  • 接下来讲一下我自己做的这个闭环步进和原版的区别,先讲硬件上的。主控芯片用价格4.5块的STM32F030C8T6代替了价格25块钱的ATSAMD21G18A,省钱的同时性能有增无减。驱动芯片用两颗最大驱动电流为3.5A的A4950代替了原来的最大驱动电流为2A的单颗A4954芯片,原版的这颗A4954驱动芯片标的最大驱动电流可以达到2A,实际测试最大也就1.2A左右只能勉强用来驱动3D打印机用的42小步进。因为这颗芯片内部驱动MOS管内阻过大有0.8欧姆以上,导致发热非常严重,电流一大芯片温度就飙升,然后芯片就停机过热保护了,有一次上机测试过程中Z轴就因此停机导致直接撞坏了一把4mm的铣刀。编码器方面用英飞凌的TLE5012B代替了原版的AS5047D,原版的这款编码器芯片货源很不稳定经常会买不到,代替用的TLE5012B是15位更高一级精度的,而且是汽车工业标准的,可靠性和工作容许温度比消费级标准的来的更高。然后加入高速隔离光耦TLP2168,没光耦作隔离的话万一步进驱动器出问题连带烧了雕刻器的驱动板那就得不偿失了。还有一些稳压芯片也作了调整,基本上硬件方面的芯片算是全换了遍。

  • 软件方面也是完全重新编写,编程软件用官方专业软件KEIL-MDK替代了玩具级编译软件ARDUINO。程序里加入了开环模式,虽然闭环优点多多但开环也非一无所长,这样即使编码器坏了还可以切到开环模式继续使用。然后加入了拨码盘的细分选择项,可以利用拨码选择不同细分选向。不管是原版的还是我这修改版的驱动器在初次安装或者二次安装后都要就行编码器芯片的角度校正,因为这种磁编码器芯片都有近2度的非线性误差所以不能直接使用需要二次校正才行,校正的另外一个作用是让编码器的0度位置和步进电机的电位角0度位置对齐。校正的原理是让步进电机在开环的情况下以整步跑1到2圈,因为现在市面上的步进电机都能做到整步5%以下(0.09度)的精度,据此就可以校正编码器芯片。原版的校正过程非常麻烦,需要连着电脑通过串口发指令然后还要二次编程烧录程序等等,我这边程序优化直接拨码盘拨好位置后上电,其它工作全部由程序自动完成。为了加强产品的可靠性,程序中加入看门狗,工控产品没看门狗怎么能行呢。

  • 上叙的都是一些程序中的小升级部分,相应的增加了一部分功能和提高了使用便捷性。除此之外程序中最大的升级优化则在于精度、速度的提高和噪声、振动的减小。国外版的编码器校正程序有一个大的BUG,校正完后编码器的0度位置和步进电机的电位角0度之间有0.3度以上的误差。这个误差值对闭环步进的实际使用性能影响非常大,理论上越接近0度越好,误差值大了导致步进电机左转和右转性能不一,往往一边转动时很平顺但向另一边转动时振动就很大,两边转动时的最高转速和扭矩也不一样,极限情况下甚至会导致步进电机向一个方向乱转无法正常工作。我这边重新改写了编码器校正程序,新的校正程序可以将误差角度值降低到0.1度以下。顺便再说一下现在市面上现在的闭环步进用的是光电编码器(1000线为主),这一对齐编码器的0度位置和步进电机的电位角0度位置的活是在出厂前用专业设备(编码器相位检测器)配合专门的电机驱动来完成的,所以千万不要乱拆闭环步进的编码盘。程序中另外一个大的升级之处是采用了可变PID控制角代替了原版固定的1.8度PID控制角。固定的1.8度PID控制角会产生两个非常严重的问题,第一是步进电机低速运行时振动非常大甚至比开环驱动器驱动时振动更大,另外一个问题是高速时转速上不去,原版的程序驱动普通48mm长度的42步进电机实测最高转速400RPM都达不到,再高的话就会因为电机实际转速跟不上指令转速而导致失步。采用升级后的可变PID控制角算法则可以将转速提高到近800RPM而不失速,与此同时在低速时振动和噪声可以做得很小几乎可以跟伺服电机的振动和噪声程度相媲美。

  • 最后再总结一下闭环步进和开环步进的优缺点吧:闭环步进的优点是扭矩大、振动小、精度高不易失步缺点是可靠性稳定性低价格贵;开环步进的优点是可靠性稳定性高价格便宜。这里再着重讲一下转速这个问题,很多淘宝商家都宣称他们的闭环步进转速比一般开环步进高很多可以工作在1500RPM,其实两相闭环步进相较与开环步进在工作转速上基本是只低不高,现在市面上卖的加长两相57闭环步进最高工作转速也就600RPM左右,再高就会失步。想要更高工作转速的就必须花更多的钱买3相的闭环步进或者5相闭环步进。

国内外开源项目

Mechaduino

链接:https://github.com/jcchurch13/Mechaduino-Firmware

这个国外的一个基于Arduino的驱动,使用AVR芯片,项目已经进3年没有更新了,有些期间国内很耐买到,成本较高,性能、稳定性方面达不到工业级别。

HyperStepper

链接:http://www.zuojiaju.com/thread-894162-1-1.html

这是国内HyperCNC杨工基于Mechaduino改的,虽说是参考了上一个项目,但无论是从硬件底层,还是到软件上,都几乎是重新写了一遍,使用STm32,加入光耦,换用A4950驱动等等,使得该项目真正的可以被工业上所使用的,性能与稳定都达到了不错的水准,杨工在淘宝上也有卖,可以买回来学习。

本项目基于杨工的开源版本,重绘PCB,硬件完全兼容。在杨工的基础上优化了软件结构,暂时还未成熟。

软件部分还在更新中~