极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16792|回复: 6

3D打印机固件Marlin精读记录

[复制链接]
发表于 2021-8-19 14:02:53 | 显示全部楼层 |阅读模式
本帖最后由 EasonLiem 于 2021-8-19 18:59 编辑

准备精读3D打印机固件Marlin,开帖记录过程。
Marlin的特色
  • 在中断中,处理步进电机马达的加减速(梯形)
有轨迹规划预览的功能
支持圆弧轨迹的规划
  • 在中断中,处理挤出头的温度控制
温度的侦测利用PID(比例、积分和微分)控制,精度较高,误差较少
  • Endstop trigger时,有中止运作的功能

1. Marlin系统架构

  • 1.1 Marlin 主函数流程图

  • 1.2 marlin 固件数据流

  • 1.3 marlin 固件泳道图

  • 1.4 Marlin 运作架构图

2. 硬件准备:
  • ATX电源
  • Arduino Mega 2560 开发板(需要批量采购,近期涨价的厉害,有便宜货源可以联系我
  • RAMPS 1.4
  • RepRapDiscount Smart Controller
  • A4988 X4
  • 42步进电机X4



本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2021-8-19 14:25:29 | 显示全部楼层
若有大牛分享经验,万分感激!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-19 17:54:40 | 显示全部楼层
  • 3 Marlin 文件分组

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 12:09:26 | 显示全部楼层
昨天各种不顺!
安装新版arduino 1.8.15 官方编译器,编译Marlin2.0.9一直出错。
主要问题是:1 编译大量出错 --》复制上级目录文件到arduino\hardware\tools\avr\avr\include\avr\interrupt.h,并修改该目录下另一个文件,大部分编译错误解决。
2 目录路径太长编译出错--》
2.1 win10 app arduino LLC,无文件权限,设置权限折腾半天放弃了,系统太多东西,几年没重装了,要是把系统搞崩了就惨了。
2.2 直接用安装包解压arduino IDE 1.8.15, 解压到硬盘根目录,按照上述1复制更改文件,Marlin2.0.9也放在硬盘根目录---终于运行成功了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 14:12:02 | 显示全部楼层
本帖最后由 EasonLiem 于 2021-8-23 14:14 编辑

3  软件准备
  • 3.1 arduino 官方IDE
  • 3.2 Marlin 开源代码
   3.2.1阅读代码编写规范有助于快速理解Marlin代码
   代码规范链接https://marlinfw.org/docs/development/coding_standards.html
        附图:
        3.2.2 Marlin固体初步设置链接
        https://marlinfw.org/docs/configuration/configuration.html


  • 3.3 Reptier软件

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 20:10:47 | 显示全部楼层
4  Marlin固件代码分析
    通过Marlin运作架构进行分析。
  • 4.1 固件配置架构ConfigurationLib
      4.1.1 Configuration.hConfiguration_adv.h
      这两个文件网络上很多中文版解析。
      4.1.2 pins.h
     初步分析要用到的引脚,上图:

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 21:48:39 | 显示全部楼层
本帖最后由 EasonLiem 于 2021-8-24 12:01 编辑

4.1.3 ConfigurationStore.h/ConfigurationStore.cpp代码解析
         ConfigurationStore代码功能为:针对默认的机器参数进行EEPROM的写入、读取、修改操作;机器参数串口信息的输出。
4.1.3.1 EEPROM信息存储
//Arduino 2560的EEPROM为4K
//EEPROM_SETTINGS
#define EEPROM_OFFSET 100
/*1。版本号写入初始为000
* 。。。
* end 版本号写入ver2[4] addr=2900/1024>1K
*/
4.1.3.2 串口信息输出的部分示例代码及在文件中的分布:
SERIAL_ECHOPAIR(name,value)
//Marlin.h
#define SERIAL_ECHOPAIR(name,value)(serial_echopair_P(PSTR(name),(value)))
//

//Marlin_main.cpp
void serial_echopair_P(const char *s_P, float v)
    {serialprintPGM(s_P); SERIAL_ECHO(v); }
void serial_echopair_P(const char *s_P, double v)
    {serialprintPGM(s_P); SERIAL_ECHO(v); }
void serial_echopair_P(const char *s_P, unsigned long v)
{ serialprintPGM(s_P);SERIAL_ECHO(v); }
//
上电、编译,烧录试机。
Mega2560裸板,Repetier软件连接成功,输出信息如下:


本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 06:45 , Processed in 0.040603 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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