数码之家

 找回密码
 立即注册
搜索
查看: 29973|回复: 28

折腾3D打印机(2-2)步进电机驱动TMC2208

[复制链接]
发表于 2019-12-13 21:21:10 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 dgpower 于 2019-12-17 19:36 编辑

TMC2208模块,现在一般是13-15块一片,比A4988/DRV8825可贵了不少。但它最大的优点是可以直接替换前者(16细分),不需要更改固件(主板或固件不开源),只需要简单将模块对应的步进电机,其中一组线圈的两根线,比如A+、A-对调一下,就可以了。带来的好处可是实实在在的:安静!它实际上是把主板16细分的驱动信号,通过芯片内部算法,模拟成256细分的信号,再输出来驱动步进电机。按广告说法,电机运行噪音可以降低10dB!

一、TMC2208的几种工作模式
它有三种工作模式:

第一种,常规模式。就是上面说的直接替换A4988/DRV8825的模式。在marlin固件里面,叫TMC2208_STANDALONE

这种模式最大的问题是带负载能力差。
我的测试结果,同样一个测试切片文件,A4988、DRV8825能顺利完成,但2208随着运行速度的增加,会逐渐出现丢步的现象。
在另外一个长方块的测试里,X方向正常,Y方向就随着层高的增加,逐步向一个方向偏移,很奇葩。

第二种模式是SPI。一般需要通过单独的硬件电路写芯片寄存器,比较复杂,用的人很少,就不详细介绍了。

第三种模式,叫UART模式。重点推介一下
这种模式下,可以实现TMC所有功能均通过软件在线设置:通过软件指令,直接调整驱动电流大小、驱动的硬件细分设置、改变驱动的工作模式;在驱动过热或者过载的时候,可以自动给出报告,提醒用户。

UART模式设置起来相对复杂,而且需要驱动、主板、固件三方面配合。但,复杂的代价是带负载能力强,更改灵活
举个例子,常规模块或者TMC2208_STANDALONE模式,想改变驱动电流大小,(搬动打印机)打开主板,用螺丝刀调整动模块上的电位器,然后用万用表测量电压,再计算出电流。这时候,你想把XY轴电机驱动电流都调成一样?!:sweat:。。。。这可是拼人品的事

而UART模式下就没有问题了,在固件或通过M指令直接写就可以了,想要啥数值就是啥数值,确保了两个电机的电流是一致的。:victory:

二、重点介绍一下UART模式
要实现这种模式,首先必须模块要支持UART模式,这里可以看上一篇文章  折腾3D打印机(2-1)步进电机驱动

第二是要主板支持。幸好现在好多主板,只要写清楚是支持marlin固件的,基本上就可以通过简单跳线来实现。比如MKS的SGENL V1.0、BIGTREE的SKR V1.3。不清楚的话,问问店家。

第三就是固件支持。开源的marlin固件,里面有专门的代码,参考主板说明书,一步一步设置下去,一般就能成功的。但如果出现TMC CONNECTION ERROR,那就表示有问题,需要查找原因。

在UART模式下,2208的带负载能力很强。原来在2208的普通模式下,测试切片文件,就算电流加大到900mA,还是通不过,老丢步。改为UART模式,默认800mA,顺利通过。:victory:而且,好处一箩筐:电流小了,电机发热大大降低。原来用DRV8825,Z/E轴的驱动电流是1300mA,现在840mA就可以了;XY轴电机驱动电流完全一样(数字调节),提升了打印质量;256细分带来了超级安静和打印质量大幅度提升。

普通模式下,2208一般工作在硬件16细分(内部模拟256输出),而UART模式,可以设定为32/64/128/256等多种模式。毕竟,内部模拟还是有误差的,硬件细分提高后,再用内部模拟到256细分输出。拍脑袋的想法是,输出的256细分信号应该更加的平滑和精确。

UART模式下,再打开HYBRID_THRESHOLD,根据运行速度,让2208在超级静音(ultra quiet stepping mode)和高速防抖动(spreadCycle stepping mode)两种模式下动态切换:低速时静音,速度超过一定值后自动切换到高速防抖动模式,防止电机在高速运转情况下出现抖动。但目前测试的结果,混合模式在高速下容易丢步。所以,不推荐打开混合模式。


打赏

参与人数 3家元 +42 收起 理由
全中文说明书 + 12 優秀文章
中心小学 + 20 謝謝分享
邢宝伟 + 10 以資鼓勵

查看全部打赏

本帖被以下淘专辑推荐:

发表于 2019-12-17 14:35:29 | 显示全部楼层
牛啊,学习了很多
回复 支持 反对

使用道具 举报

发表于 2019-12-18 09:16:36 | 显示全部楼层
提示信息关闭
已超出该会员当天被打赏总额,请多给其他会员打赏鼓励!
回复 支持 反对

使用道具 举报

发表于 2019-12-19 11:50:05 | 显示全部楼层
步进电机还有这么多玩法?
回复 支持 反对

使用道具 举报

发表于 2019-12-19 21:40:24 | 显示全部楼层
逐步向一个方向偏移,很奇葩。
我也遇到过
回复 支持 反对

使用道具 举报

发表于 2019-12-26 09:14:37 来自手机浏览器 | 显示全部楼层
2208个小时2209的区别是啥?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-26 12:35:40 | 显示全部楼层
w896307778 发表于 2019-12-26 09:14
2208个小时2209的区别是啥?

2209是2208的升级版,最直观的就是加大了驱动电流,2209好像最大可以支持2A
回复 支持 反对

使用道具 举报

发表于 2020-1-2 22:17:37 | 显示全部楼层
我现在就是TMC CONNECTION ERROR,M122报“READ: Testing X connection... Error: All LOW“和”
READ: Testing Y connection... Error: All LOW”,(我就给X,Y装了TMC2208驱动),,我还在google上找原因,不知老兄可否知道原因
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-3 06:58:13 | 显示全部楼层
黎明小升 发表于 2020-1-2 22:17
我现在就是TMC CONNECTION ERROR,M122报“READ: Testing X connection... Error: All LOW“和”
READ: Tes ...

这个初步看是2208跟主板通信没有对上。你要检查2208硬件版本、主板跳线还有固件设置。
回复 支持 反对

使用道具 举报

发表于 2020-1-3 09:13:16 | 显示全部楼层
dgpower 发表于 2020-1-3 06:58
这个初步看是2208跟主板通信没有对上。你要检查2208硬件版本、主板跳线还有固件设置。 ...

昨晚折腾到今天凌晨2点折腾出来了,原来可能是那几个rx、tx管脚可能被其他功能占用了,我换成其余空余管脚就行了。我是按照这个教程搞的https://www.instructables.com/id ... per-Motors-With-th/   按他的教程用64、40两个脚不能用,换成65、66这2个脚就行了。我用的是最新2.0固件,回头试试把下面可能起冲突的引脚定义都改为-1试试。其实我发现2.0版本还有一个坑,用国产12864屏幕会出现乱码,必须在配置文件里定义延时才能正常显示。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-3 15:11:46 | 显示全部楼层
黎明小升 发表于 2020-1-3 09:13
昨晚折腾到今天凌晨2点折腾出来了,原来可能是那几个rx、tx管脚可能被其他功能占用了,我换成其余空余管 ...

12864屏幕乱码,官网有提到。不知道你改了哪里,参数如何改?
我也是用12864,在1.1.5到1.1.8固件都正常,1.1.9就是花屏。在2.0又是正常的
回复 支持 反对

使用道具 举报

发表于 2020-1-3 16:37:45 | 显示全部楼层
本帖最后由 黎明小升 于 2020-1-3 16:44 编辑
dgpower 发表于 2020-1-3 15:11
12864屏幕乱码,官网有提到。不知道你改了哪里,参数如何改?
我也是用12864,在1.1.5到1.1.8固件都正常, ...

我在Marlin的github的issues上爬到了这个帖子https://github.com/MarlinFirmware/Marlin/issues/12003  这个提问也是说这种类型的12864屏幕显示乱码,下面有人提到了在Configuration.h文件里添加
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#define ST7920_DELAY_1 DELAY_NS(0)
#define ST7920_DELAY_2 DELAY_NS(400)
#define ST7920_DELAY_3 DELAY_NS(0)
这几行代码就好了,其实就是改LCD延时时长,你这个参数不行的话,就换255或其它值试一试就可以。我一开始就怀疑是延时问题,但是我在代码里一直没找到这个屏幕相关的延时函数,然后不停的在google上找原因,爬了几个小时才找到。国内没什么人去深入研究这些,百度压根就搜不出来关于marlin2.0什么像样的东西,折腾这东西还得靠谷歌和老外的网站。
回复 支持 反对

使用道具 举报

发表于 2020-3-30 00:39:13 来自手机浏览器 | 显示全部楼层
大神m代码怎么设置 我查看了资料 找不到m代码设置电压参数细分参数的 有没有q
回复 支持 反对

使用道具 举报

发表于 2020-3-31 10:54:06 | 显示全部楼层
我用A4988,i3结构的,xz方向从来没出过问题,倒是y轴,有时候就丢步,电流也调了,每次丢步时候Y轴都会咯噔一声,听声音就不正常,像是什么卡住了,我以为同步带定滑轮轴承有问题,换了。y轴光轴上的直线轴承也换了,还是会出现丢步现象,不知道是不是驱动或者步进电机有问题。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-31 20:38:59 | 显示全部楼层
水表君 发表于 2020-3-31 10:54
我用A4988,i3结构的,xz方向从来没出过问题,倒是y轴,有时候就丢步,电流也调了,每次丢步时候Y轴都会咯 ...

平台前后移动的就是Y轴吧?可能是负荷太重,2208带不起来。

所以建议用UART模式。
回复 支持 反对

使用道具 举报

发表于 2020-4-1 09:09:52 | 显示全部楼层
dgpower 发表于 2020-3-31 20:38
平台前后移动的就是Y轴吧?可能是负荷太重,2208带不起来。

所以建议用UART模式。 ...

我用的A4988。今天上厕所时候突然想到,会不会是平台太沉,电机电流不够。然后就把电流调满了,目前还没发现问题。而且A4988发热超级严重,我打了个支架在控制板上面架一个矿机风扇,手动调速,最后打完a4988散热片冰凉,哈哈。
回复 支持 反对

使用道具 举报

发表于 2020-4-1 19:09:29 | 显示全部楼层
设置URAT的步骤呢?能提供吗?谢谢 lern01@outlook.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 19:10:52 | 显示全部楼层
lern 发表于 2020-4-1 19:09
设置URAT的步骤呢?能提供吗?谢谢

要结合你所用的主板,做好硬件连接,然后配置固件
回复 支持 反对

使用道具 举报

发表于 2020-4-25 11:00:24 | 显示全部楼层
dgpower 发表于 2020-4-15 19:10
要结合你所用的主板,做好硬件连接,然后配置固件

主板MKS  Gen  L V1.0,我参照别人的设置,修改了固件,显示通信成功,但电机有“哒哒”声音。改回普通模式,一切正常。不知道是啥原因。
回复 支持 反对

使用道具 举报

发表于 2020-5-16 21:23:17 | 显示全部楼层
大佬,我换2208也遇到了Error: All LOW X Y Z E0全是,固件里面pin也改过,还是没解决,不清楚怎么排查
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-3-29 20:43 , Processed in 0.109201 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表