如何提高TMC5160编码器的检测精度

——雪山电子

     本文所使用的硬件测试环境是TMC5160步进电机开发板,链接如下:

https://item.taobao.com/item.htm?ft=t&id=875384867180

        硬件注意事项:首先将步进电机的A+、A-、B+、B-电机相线接入开发板输出的A+、A-、B+、B-端口,然后将编码器的5V、GND、A、B信号接入开发板的Encoder连接器的5V、GND、A、B引脚,N信号不用接,如果是差分编码器的,A-、B-不用接,只取A+、B+信号,最后将DC24V电源连接到+24V、GND端口,尤其要注意电源的正负极性。

        上回说到TMC5160的编码器检测功能,似乎正常了,好像又没正常,就是有亿点点误差而已,FAE说是正常的。以我使用步进电机十多年的经验来看,这绝对不是误差这么简单的事,且听我娓娓道来。  

        本文只针对如何提高编码器的检测精度进行分析,前提条件是你已经掌握了TMC5160的编码器检测功能,已经基本能采集到正确的编码器数据了,没有掌握的去回看上一章节,否则会云里雾里,不知所云。

        TMC5160编码器检测有误差的事,最开始怀疑过电机的编码器精度太低?好几年前使用东莞某浓的步进电机时,发现编码器输出信号毛刺挺大,信号过冲严重,还和他们掰扯过一段时间。现在不得不找出压箱底的漂亮国的步进电机,带US品牌的编码器,编码器的价格是电机本身的20倍都不止,质量没得说。可是测试了US的编码器后,结果仍然不理想,误差也有1%多。然后又分别测了东莞某浓、常州某智、东方某达、山洋某气、某志的步进电机,编码器检测的精度都不高,没有达到预期效果。

        倘若说国产步进电机质量不好,那漂亮国的US、岛国的东方某达电机质量还是很好的,这个锅就只有让TMC5160来背了吗?TMC5160可是德国佬设计的,不至于精度这么低吧,让我们开启一段提高TMC5160的编码器精度的旅程吧!

        首先注意到一个现象,每次上电的时候,电机都会发出“咔”的一个声音,这是由于电机内部的线圈刚从没电状态,变化为有电的状态,内部刚建立磁场,而上一时刻的转子可能处于一个随机的位置,刚建立的磁场会让转子重新回到最近的另一个角度,所以会发出“咔”的声音,那这个抖动对编码器的检测有没有影响呢?我做了一个实验对比:

        左边的数据是重新上电后,让电机正转51200,再反转回原点0位置时,编码器反馈的数据分别是50201、-960,和上一章提到的一样,只是有亿点点误差而已;右侧是上电后没有断电,按了一下单片机的复位,让程序重新跑起来,这样电机就不会发出“咔”的声音,可以看到TMC5160编码器检测的数据更接近于真实值了,电机实际走到了51200位置,编码器反馈的数据是51174,差了26步;电机再反向走到0位置时,编码器反馈的数据是12,大了12步。

        那我们每个产品都让老板安排一个人在机器旁边,专门负责按单片机的复位吧,啊哈哈,开个玩笑,这显然是不现实的,老板会让你直接出门右转。

        那该怎么解决呢?我们不妨在TMC5160初始化完毕后,电机正式运动之前,给他来个延时吧,稍作等待,避免电机刚上电抖动还没结束,就要开始运动了,有时候休息是为了更好的出发,电机也不例外。延时多少合适呢,管他三七四十九,先来个1000ms吧:
HAL_Delay(1000);   //延时1000ms再开始运动,消除电机上电抖动带来的影响

        我们来验证下结果:

        嘿,你还别说,还真他娘的有用,上面两个图看起来数据完全一样,你们以为我是用的一个图?其实左边是上电后按复位按钮的结果,右边是程序里加了1000ms延时的结果,达到了相同的效果。这个误差嘛,从最开始的(51200-50210)/51200=1.95%,提高到了现在的(51200-51174)/51200=0.05%。

        可是还是有26步或者12步的误差啊,做为一个完美主义者,还想要继续提高TMC5160的编码器检测精度,这期间一度怀疑过TMC5160的运动曲线参数没有调试好,把起始速度、加减速、转折速度、最高速度挨个慢慢调整,每一个参数的调整后都仔细测试,额,这里又得省略3万多字的废话,直接告诉大家一个扎心的事实,没有用!

        事情一度陷入僵局,除夕那天晚上,看到远处的花炮充上云霄,煞是好看,明明发了通知不让放炮,还是有人要放炮。突然一个灵感涌上心头,还没有调过细分这个参数呢,一直用的TMC5160的最高细分256,改变下细分试试吧。马上在客厅把笔记本电脑摆开,迅速搭建测试环境,边看春晚,边调试程序,春晚演了什么没有太多印象了,只记得许仙和白素贞上春晚了,其他的一概不知。原谅我又跑题了。

        分别测试了256、128、64、32、16、8、4细分条件下,电机分别运动1圈、5圈、10圈,TMC5160的编码器检测结果,当然了,前提条件延时1000ms仍然存在。测试多圈的原因是短行程、中等行程、长行程的运动都要照顾到,测试结果如下:

        当细分为256时,电机转起来像拖拉机一样慢慢悠悠,测试结果好像也不尽如人意,TMC5160的编码器反馈的结果误差还是挺大的,尤其是长行程的时候,比如5圈和10圈的运动,误差有正有负。

        当细分为128时,电机转动得更加顺畅,速度更快了,测试结果也大有改观,当运动一圈25600步时,只少了13步,反向归零时少了6步;当运动5圈和10圈时,正向运动编码器反馈的数据都少了52步,反向归零时多了32步。在向好的一面发展,让期待下面的数据吧。

        当细分为64时,电机启动像歼20一样迅速,测试结果更好了一点,当运动一圈12800步时,编码器检测多了9步,反向归零时少了19步;当运动5圈64000步时,编码器检测少了7步,反向归零时少了3步;当运动10圈128000步时,编码器检测少了4步,反向归零时少了63步。比128细分时,略有提高。

        当细分为32时,电机启动更加快速,更加丝滑流畅了,声音真美妙。从以上三张图中可知,电机运动1圈、5圈、10圈时,TMC5160的编码器反馈的数据都只少了4步,反向归零时都只少了1步。熟悉的感觉又回来了,这才是正常现象,相差个三五步的,可以认为是测量误差所导致。

        当细分为16时,电机启动更爽快了,干脆利落,声音悦耳。从以上三张图中可知,电机运动1圈、5圈、10圈时,TMC5160的编码器反馈的数据都只少了1步或者2步了,反向归零时做到一步不差。TMC5160的编码器检测精度越来越高,数据越来越稳定。

        当细分为8时, 电机运动1圈、5圈、10圈时,TMC5160的编码器反馈的数据都只少了1步或者完全相等;反向归零时,TMC5160的编码器反馈的数据都只少了1步或者完全相等。

        当细分为4时, 电机运动1圈、5圈、10圈时,TMC5160的编码器反馈的数据都只少了1步或者完全相等;反向归零时做到一步不差。

        可以看出,当电机的细分不同时,TMC5160的编码器检测的精度差异挺大,尤其是细分越高,编码器反馈的数据差距越大,当逐步降低细分时,TMC5160的编码器精度在逐步提高。当降低到32、16、8、4细分时,TMC5160的编码器检测精度达到一个比较稳定的状态,都只是相差一两个步数,这种状态才是正常的状态。

        后来又测试了东莞某浓、常州某智、东方某达、山洋某气、某志的带编码器步进电机,效果都是相差不大,为我们国产步进电机正名,啊哈哈!

        至此,提高TMC5160编码器检测精度的目的达到了,从最开始的相差八九百步,到最后的只相差一步,或者完全相等。这期间调试时每修改一个细分参数,就得重新计算编码器常数,然后重新编译、下载,付出了很多汗水,额,这好像是冬天,其实没有出汗,南方的冬天,虽然没有下雪,但是还是冷得很啊。

        好了这篇文章到这里就该告一个段落了,笔者文笔有限,或有错误,或者理解不周,欢迎向我指正,我的邮箱是595412008@qq.com,请勿加QQ,平时不登陆的,只用于查看邮件,谢谢!

                                                                                                                 ​​​​​​​  雪山电子

                                                                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        整理于2025年2月春节期间

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐