EasonLiem 发表于 2021-8-19 14:02:53

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

本帖最后由 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
[*]…


EasonLiem 发表于 2021-8-19 14:25:29

若有大牛分享经验,万分感激!

EasonLiem 发表于 2021-8-19 17:54:40


[*]3 Marlin 文件分组

EasonLiem 发表于 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也放在硬盘根目录---终于运行成功了!

EasonLiem 发表于 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软件

EasonLiem 发表于 2021-8-23 20:10:47

4Marlin固件代码分析    通过Marlin运作架构进行分析。
[*]4.1 固件配置架构ConfigurationLib
      4.1.1 Configuration.h、Configuration_adv.h      这两个文件网络上很多中文版解析。      4.1.2 pins.h   初步分析要用到的引脚,上图:

EasonLiem 发表于 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 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.cppvoid 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软件连接成功,输出信息如下:

页: [1]
查看完整版本: 3D打印机固件Marlin精读记录