OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12781|回复: 13

3D打印运动控制系统源码--移植marlin

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-4-2
在线时间
3 小时
发表于 2018-4-2 16:29:48 | 显示全部楼层 |阅读模式
本帖最后由 Logeektech 于 2018-4-3 08:08 编辑

开源的3D打印系统(marlin)主要是基于8位arduino控制板板卡。无法支持彩色触摸屏。为此本人花了为时3个月的时间,将marlin从arduino移植到STM32。并命名为Dlion。
3D打印运动系统的核心主要是步进电机驱动子系统,是由中断响应函数实现的。如果是恒定速度的步进电机驱动,实现就和这句话一样简单。不过对于3D打印机系统,x,y轴的运动往往速度变化非常频繁:不仅在每次更新位置的速度不同,而且每一段位移的速度也需要经历加速,恒速和减速阶段。这是由机械系统的惯性特征决定的:如果不同动作之间的速度衔接不好,会对电路系统造成强大的电流冲击。特别是3D打印过程,这种速度的变化每次打印任务都数以万计,这就意味着电路寿命将大打折扣。
步进电机驱动子系统系统的速度衔接,基于leibRamp Algorithm,这是一个支撑步进电机速度和控制器计数器频率关系的算法理论,由IBM的工程师于1994年发表并于2004年在控制器内实现。这里算法实现的关键在于路径规划器(planner)。路径规划器的设计意味着,程序在执行步进电机的动作之前,就已经计算好了整个过程的速度曲线。后面就只是Stepper模块准确地执行。在机器层面,这样的设计减少了中断响应函数中的运算量,这对于单片机来说非常友好。同时3D打印机的机械运动相比控制器的16M主频来说要慢很多,路径规划器相比直接驱动,增加了一个运动缓存。这样就能够有效的利用控制器的高频率,里面蕴藏着“空间换取时间”的思想。
在代码层面,planner的本质在于对于一个FIFO的管理。使用C的结构体指针数据结构能够非常优雅的实现这个缓存的创建和管理:planner.h:
[mw_shl_code=applescript,true]typedef struct {
  // Fields used by the bresenham algorithm for tracing the line
  long steps_x, steps_y, steps_z, steps_e;  // Step count along each axis
  unsigned long step_event_count;           // The number of step events required to complete this block
  long accelerate_until;                    // The index of the step event on which to stop acceleration
  long decelerate_after;                    // The index of the step event on which to start decelerating
  long acceleration_rate;                   // The acceleration rate used for acceleration calculation
  unsigned char direction_bits;             // The direction bit set for this block (refers to *_DIRECTION_BIT in config.h)
  float nominal_speed;                               // The nominal speed for this block in mm/sec
  float entry_speed;                                 // Entry speed at previous-current junction in mm/sec
  float max_entry_speed;                             // Maximum allowable junction entry speed in mm/sec
  float millimeters;                                 // The total travel of this block in mm
  float acceleration;                                // acceleration mm/sec^2
  unsigned char recalculate_flag;                    // Planner flag to recalculate trapezoids on entry junction
  unsigned char nominal_length_flag;                 // Planner flag for nominal speed always reached

  // Settings for the trapezoid generator
  unsigned long nominal_rate;                        // The nominal step rate for this block in step_events/sec
  unsigned long initial_rate;                        // The jerk-adjusted step rate at start of block  
  unsigned long final_rate;                          // The minimal rate at exit
  unsigned long acceleration_st;                     // acceleration steps/sec^2
  unsigned long fan_speed;
  #ifdef BARICUDA
  unsigned long valve_pressure;
  unsigned long e_to_p_pressure;
  #endif
  volatile char busy;
} block_t;

block_t block_buffer[BLOCK_BUFFER_SIZE];            // A ring buffer for motion instfructions
volatile unsigned char block_buffer_head;           // Index of the next block to be pushed
volatile unsigned char block_buffer_tail;[/mw_shl_code]


volatile 关键字确保了队列头和队列尾被不同函数访问过程中,编译器不会因为优化和丢失更改行为。block_t类型的指针可以方便的方位结构体内任何元素。在后面的planner规划动作plan_buffer_line()中,代码可以用非常优雅的结构体指针来完成。

     每当3D打印机解析到位移指令的时候,plan_buffer_line()函数就被调用。在里面新的block_t首先被创建,并且排入队列的队尾;然后执行calculate_trapezoid_for_block(),计算新的block_t的关键速度节点及其对应的step数目;接着更新队列里面所有block_t的连接速度:之前队尾的block_t的收尾速度和相关速度节点会被更新。最后调用st_wake_up()保证stepper执行的中断打开。

    而在%steppper中,ISR函数负责在主循环之外,执行队列里可能存在的所有block_t。在ISR中,首先由plan_get_current_block()读取队列首的block_t,然后按照结构成员的step数,调用STEP_ADDSTEP_IF_COUNTER两个宏来执行x,y,z三轴的运动。ISR每执行一次,三路各发出一个脉冲,并通过lamp ramp算法更新,根据下一个速度值来更新OCR1A寄存器来设定下一次中断响应的周期。

main.png
消化一段代码的最有效方法是对其移植或者重写。换言之,仅仅是走马观花的浏览一遍,除非自己曾经编写过类似程序,很难能透彻的领会固件代码的精髓。所以这里我决定把它分享出来给大家!

更多交流可以进3D二进制创客开源社区:523118188。
关注微信公众号获取更多源码
qrcode_for_gh_49cf119988cb_258.jpg

Dlion-开源固件源码.rar (171 Bytes, 下载次数: 703)
宣传活动.jpg

Dlion-开源固件源码V03版本及说明.rar

11.15 MB, 下载次数: 3920

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

41

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
626
金钱
626
注册时间
2016-12-16
在线时间
222 小时
发表于 2018-4-2 16:55:28 | 显示全部楼层
本帖最后由 五花肉老乌龟 于 2018-4-2 16:58 编辑

关键算法
直线和圆弧插补算法。
路径前瞻算法
Bresenham算法
PID算法
步进电机梯形加减速算法。

移植到F3不如f4主频快有浮点运算和DSP。还带USB功能
https://shop298719590.taobao.com/
回复 支持 反对

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-4-2
在线时间
3 小时
 楼主| 发表于 2018-4-2 17:04:25 | 显示全部楼层
五花肉老乌龟 发表于 2018-4-2 16:55
关键算法
直线和圆弧插补算法。
路径前瞻算法

是的。分享给大家就是为了大家能方便改成F4版本
回复 支持 反对

使用道具 举报

41

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
626
金钱
626
注册时间
2016-12-16
在线时间
222 小时
发表于 2018-4-3 08:58:08 | 显示全部楼层
楼主,请把原理图分享给大家看看吧。
https://shop298719590.taobao.com/
回复 支持 反对

使用道具 举报

31

主题

147

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2182
金钱
2182
注册时间
2014-6-30
在线时间
341 小时
发表于 2018-4-3 10:09:35 | 显示全部楼层
你的实物演示图了,只发源码和说明谁知道你这代码奏效没
在电路上充实自己
回复 支持 反对

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-4-2
在线时间
3 小时
 楼主| 发表于 2018-4-4 12:54:25 | 显示全部楼层
greatxiaoguzi 发表于 2018-4-3 10:09
你的实物演示图了,只发源码和说明谁知道你这代码奏效没

加群就知道了
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2019-3-6
在线时间
6 小时
发表于 2019-3-9 19:13:56 | 显示全部楼层
你好,楼主,请问那个这个32是驱动打印的,那SD卡里放什么格式的文件,他才能脱机打印呢,还有那个群号码是多少呢?
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2019-3-6
在线时间
6 小时
发表于 2019-3-14 15:18:50 | 显示全部楼层
五花肉老乌龟 发表于 2018-4-2 16:55
关键算法
直线和圆弧插补算法。
路径前瞻算法

你好,请教下,这么大的一个程序代码 我该怎样从F1移植到F4呢
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-7-14
在线时间
0 小时
发表于 2019-3-25 10:24:22 | 显示全部楼层
开源的运动控制器技术,8轴联动插补,支持G代码,并且支持API函数方式进行二次开发,全部开源,有样品。

Open source motion controller technology, 8 axis interpolation, support G code, and support API function mode for two development, all open source, there are samples

扣扣:六五四七七七六九四
购买连接: mach3.taobao.com
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-5-13
在线时间
4 小时
发表于 2019-5-13 17:16:23 | 显示全部楼层
必须点赞
回复 支持 反对

使用道具 举报

42

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-7-21
在线时间
35 小时
发表于 2019-7-2 09:17:59 | 显示全部楼层

楼主,我有全套 量产的3D打印机方案(原理图 + 源码,BootLoader),有需要的加我 微信了解:15920001748
狗一样的学,猪一样的玩
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-11-21
在线时间
5 小时
发表于 2019-11-27 20:50:20 | 显示全部楼层
汗,楼主不出来冒泡了
回复 支持 反对

使用道具 举报

8

主题

156

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1553
金钱
1553
注册时间
2016-11-21
在线时间
411 小时
发表于 2019-11-30 18:00:39 | 显示全部楼层
https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x, Marlin2.0,  支持各种平台,从8位到32位MCU, 从M3到M7
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2020-5-12
在线时间
1 小时
发表于 2021-10-27 12:41:57 | 显示全部楼层
学习了,感谢大神
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 16:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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