GCode_interpreter解读

article/2025/9/17 7:55:41

关于GCode_interpreter

下学期要做课设,要徒手画a0的图,准备做个A0的绘图仪@_@

         122327_vPyC_3503462.jpg

    本来想用grbl来驱动,但了解之后发现它是用avr的c写的,而且代码量也挺大的,考虑到后面可能要加一些功能(换笔什么的),怕修改不来,就放弃了。后来又找了很多g代码解释器,最后发现了GCode_interpreter。GCode_interpreter是用Arduino语言写的,理论上支持所有的arduino,虽然性能和功能上不及grbl,但是结构简单,代码量少。唯一比较不好的就是没有加减速功能,容易导致步进电机过冲或者丢步。

程序说明

        GCode_interpreter主要由_init、GCode_interpreter、process_string、stepper_contorl四个文件组成(当然还有extruder,但是这里就不做解释了)_init文件是对一些基础参数的预定义,比如步进电机分辨率、针脚等;GCode_interpreter是主程序;process_string存放一些和指令处理有关的函数;stepper_contorl存放和步进电机运动有关的函数。

    

process_string中的函数说明

函数说明
init_process_string()初始化串口数据
process_string()处理指令
search_string()提取指令中某个字符后空格前的浮点数
has_command()判断指令中是否有某个字符

stepper_control中的函数说明

函数说明
init_steppers()初始化步进电机
dda_move()执行指定运动
can_step()判断步进电机是否可以运动
do_step步进电机走一步
read_switch()读取限位开关状态
to_step()计算需要的脉冲数
set_target()设定目标坐标
set_position()设定当前坐标
caculate_deltas()坐标计算(当前和目标的差值、当前已行走的步数、步数的差值、运动方向)
calculate_feedrate_delay()计算两个脉冲之间的延迟
getMaxSpeed()以最大速度运行(实为默认速度)

主要变量说明

变量说明
worda[]储存指令的数组
serial_count指令长度
current_units.x(/y/z)当前坐标
target_units.x(/y/z)目标坐标
deltas_units.x(/y/z)当前和目标坐标的差值
current_step.x(/y/z)当前步数坐标
target_step.x(/y/z)目标步数坐标
deltas_step.x(/y/z)到达目标位置还需要行走的步数
abs_modetrue为绝对坐标模式
x_units/y_units/z_units步进电机运动1mm需要的脉冲数
x_direction/y_direction/z_direction运动方向
feedrate速度
feedrate_micros脉冲间的延迟
x_can_step/y_can_step/z_can_steptrue允许运动

程序大致的流程图:

             124331_X088_3503462.png

代码注释

以下代码和原固件有些地方不太一样(比如:原固件有些变量名在我的ide中和关键字冲突了,被我改了)

GCode_interpreter

// Arduino G-code Interpreter
// v1.0 by Mike Ellery - initial software (mellery@gmail.com)
// v1.1 by Zach Hoeken - cleaned up and did lots of tweaks (hoeken@gmail.com)
// v1.2 by Chris Meighan - cleanup / G2&G3 support (cmeighan@gmail.com)
// v1.3 by Zach Hoeken - added thermocouple support and multi-sample temp readings. (hoeken@gmail.com)
#include <HardwareSerial.h>
#include <Servo.h>//我在原固件基础上加入了m03和m05来控制舵机
//our command string
#define COMMAND_SIZE 128 //单个指令的最大长度
char worda[COMMAND_SIZE];//储存指令的数组
byte serial_count;//指令长度
int no_data = 0;//0为串口有数据,>0为无数据
Servo a;
void setup()
{//Do startup stuff hereSerial.begin(115200);//波特率Serial.println("start");a.attach(12);//舵机//other initialization.init_process_string();//初始化init_steppers();init_extruder();
}void loop()
{char c;//keep it hot!extruder_manage_temperature();//有关extruder的将不作注释//read in characters if we got them.if (Serial.available() > 0)//如果串口可用{c = Serial.read();//读取一个字符no_data = 0;//串口有数据//newlines are ends of commands.if (c != '\n'){worda[serial_count] = c;//在接收到换行之前将字符存入数组serial_count++;//指令长度累加}}//mark no data.else{no_data++;delayMicroseconds(100);//累加并延迟}//if theres a pause or we got a real command, do itif (serial_count && (c == '\n' || no_data > 100))//如果指令长度不为0,且接收到换行或短时间内串口无数据{//process our command!process_string(worda, serial_count);//执行指令//clear command.init_process_string();//初始化}//no data?  turn off steppersif (no_data > 1000)//长时间无数据disable_steppers();//关闭步进电机
}

 

_init

//这个文件包含一些预定义
// define the parameters of our machine.
#define X_STEPS_PER_INCH 2540//走1英寸需要的脉冲数,以英寸为单位的时候使用,根据传动方式进行计算
#define X_STEPS_P

http://chatgpt.dhexx.cn/article/Zok9Ipd5.shtml

相关文章

05-gcode

MMIM: BAPI 货物移动的可能代码 SE16N 后台表 T158G 01 MB01 ------------ 02 MB31 ------------ 03 MB1A ------------ 04 MB1B ------------ 05 MB1C ------------ 06 MB11 ------------ 07 MB04 GT_GSMT-MVT_IND 只有…

GRBL分析:gcode解释器(二)

GCode解释器 - gc_execute_line函数解析 更新记录 2021-8-23 添加函数功能描述 2021-8-24 添加简单的流程绘制 函数功能描述 函数原型 uint8_t gc_execute_line(char *line);参数 char* line 在 protocol.c 文件的 protocol_main_loop 函数中&#xff0c;主循环内部会…

Marlin关于如何接收Gcode指令的详解

我研究的Marlin是1.0版本的.想用在的地方是stm32 Marlin关于接收Gcode命令最主要的函数就是: get_command() get_command()函数说实话对于我这样的学生来说程度还是挺复杂的. 为了节省大家理清代码和阅读文章的时间, 我全文用字力求精简, 别人已经写了的知识我就不会写 先上…

Gcode文件处理和执行

流程图&#xff1a; 1:SMC_OutQueue 不带参数>>>SMC_Interpolator 插补算法 2:CMC_CNC_REF 带参数>>>smc_NCDecoder 图型解析>>>ToolCorr 刀补>>>SmoothPath 圆弧>>>checkVelocities 速度 3:File 文件.txt/.cnc/.gcode>…

GCD简介

1. 什么是GCD GCD,全称是Grand Central Dispatch,它是C语言的API. GCD的核心 : 将block(任务)添加到queue(队列)中. 官方文档的描述: Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需定义想执行的任…

激光雕刻机的位图-GCode转换方法实践

Author:Gary Li Date:2019-5-2 1. 简介 现在有一部分3D打印机带有激光雕刻功能&#xff0c;自己组装一台专用的激光雕刻机也并不复杂成本也很低。但是当我们使用激光雕刻机时&#xff0c;激光雕刻下位机只能接受路径指令&#xff0c;所以我们需要把位图——也就是我们平时最常…

3d打印实用小工具--GCode Viewer在线预览GCODE文件

使用solidworks2018绘制了一个零件 使用simplify3d进行切片 然后点击保存了这个文件。 没想到打印的时候&#xff0c;竟然打印成了这个零件。 原因是拷贝错了文件&#xff0c;而自己切片成功之后的GCode文件也无法预览&#xff0c;最后造成了时间和材料的浪费。 那么怎么需要打…

三轴XYZ平台生成gcode文件

1. 生成gcode坐标文件 gcode文件中保存的是需要绘制图形的路径信息&#xff0c;这里我们采用开源矢量图形编辑软件 Inkscape并通过Unicorn G-Code插件来生成 gcode坐标文件。 将软件资料包\Inkscape.rar 压缩文件解压到电脑上任意磁盘&#xff0c;软件内已安装 Unicorn G-Code插…

GRBL三:gcode代码解析

GRBL三&#xff1a;gcode代码解析 1.G00X_Y_Z_ :快速定位指令&#xff0c;_代表具体数值 可以同时针对X轴Y轴Z轴移动&#xff0c;只快速定位&#xff0c;不切削加工&#xff0c;相当于快速的移动到那个点上去 数值代表绝对位置 2.G01X_Y_Z_F_:直线差补 F指定进给速度mm/min…

3D打印gcode命令大全及解析

*G0&#xff1a;快速移动 *G1&#xff1a;控制移动 坐标轴XYZE移动控制&#xff08;G0和G1一样&#xff09; 例子&#xff1a;G0 F2000 X30 Y30 Z30 E3 *G2&#xff1a;顺时针画弧 *G3&#xff1a;逆时针画弧 此命令有两种形式&#xff1a;IJ-form和R-form。I指定了X偏移…

GCode软件使用说明书

欢迎使用GCode软件&#xff0c;本软件仅为辅助生成G代码软件...... 操作说明&#xff1a; 1、打开软件GCode.exe&#xff0c; &#xff08;1&#xff09;点击“文件”即可选择“新建”、“打开”、“保存”等功能&#xff0c;或者点击主界面快捷键&#xff1b; &#xff08;…

在 VS Code 中阅读 G-code 及 3D 打印机 gcode 常用指令介绍

1. 在 VS Code 中阅读 G-code 直接以文本格式在 VS Code 中打开 .gcode 文件&#xff0c;会发现没有语法高亮。 安装插件实现语法高亮和悬浮显示命令解释。 1.1 安装插件「G-Code」 1.2 配置 settings.json 文件 1.2.1 打开 VS Code 设置(快捷键&#xff1a; Ctrl 逗号) 1…

二分图最大匹配及匈牙利、HK算法

二分图最大匹配 在二分图中&#xff0c;最大匹配是指选出尽可能多的边使得任意两边没有公共端点。 增广路 设 M M M为二分图 G G G已匹配的边的集合&#xff0c;若 P P P是图 G G G中一条连接两个未匹配顶点的路径&#xff08;起点终点分别在两个集合&#xff09;&#xff0…

用最大流解决二分图最大匹配 Bipartite Matching

有A B C三个老师&#xff0c;D E F三门课&#xff0c;A能教E, B能教D和F&#xff0c;C能教D和E。要求每个老师只能教一门课&#xff0c;求分配方案。 这是一个典型的二分图最大匹配问题&#xff0c;二分图是只graph的顶点可以分为两部分&#xff0c;每部分内部顶点直接无连接&…

二分图最大匹配-匈牙利算法

今天介绍 匈牙利算法 &#xff1a; 匈牙利算法&#xff0c;是基于Hall定理中充分性证明的思想&#xff0c;它是部图匹配最常见的算法&#xff0c;该算法的核心就是寻找增广路径&#xff0c;由匈牙利数学家Edmonds于1965年提出&#xff0c;因而得名。 先介绍一下增广路径&#x…

求解分配问题(二) 二分图最大匹配算法

我的前一篇文章介绍了对于分配问题的Kuhn-Munkre算法&#xff0c;该算法其实可以看作是邻接矩阵形式的匈牙利算法&#xff0c;如果更抽象地看这个算法&#xff0c;它可以看成是一个二分图匹配算法的变体算法&#xff0c;具体的说&#xff0c;是二分图最大权重匹配算法。我打算也…

二分图最大匹配(匈牙利算法,Dinic网络流算法)

二分图最大匹配 二分图最大匹配问题: 有两个集合A,B,两个集合间有多条边连接集合中的点,且单个集合中的点各不相连,求两集合的点能两两配对的最大匹配数. (参考:)二分图最大匹配——匈牙利算法 匈牙利算法: A集合记录各点与B集合相连的点,B集合记录某点与A集合中匹配的点.遍历…

二分图最大匹配与最大独立集

一.概念部分 1.什么是二分图&#xff1f; 通俗的说法&#xff1a;就是可以把图分成两部分&#xff0c;每一部分任意两点之间没有关系&#xff08;同一部落&#xff09;&#xff0c;两部分之间点可能存在多种关系。 2.怎么判断二分图&#xff1f; &#xff08;1&#xff09;…

二分图最大匹配及最大权匹配

二分图最大匹配学习 一.二分图的基本知识二.二分图最大匹配什么是二分图最大匹配怎么求二分图最大匹配 三.二分图最大权匹配四.例题训练三.最小点覆盖数 一位大佬的神级解释 本以为有了网络流&#xff0c;就不用再学匈牙利了&#xff0c;但在做题的过程中&#xff0c;发现有些…

二分图最大匹配问题(匈牙利算法)

什么是二分图 如果一个无向图的的顶点可以分为两个互不相交的子集A和B&#xff0c;那么它就是二分图。也就是说&#xff0c;A、B内部不存在连边&#xff0c;所有连边都一头连着A中的顶点&#xff0c;另一头连着B中的顶点。 什么是二分图最大匹配&#xff1f; 二分图最大匹配…