Skip to content

yuanzhongqiao/g2

 
 

Repository files navigation

g2核心

构建状态

这是什么

g2core 是一款 9 轴 (XYZABC+UVW) 运动控制系统,专为中小型机器的高性能而设计。

  • 数控系统
  • 3D打印
  • 激光切割
  • 机器人技术

我们的默认目标是Arduino Due,尽管它也可以与其他板一起使用。

一些特点:

  • 9轴运动(XYZABC+UVW)。
    • 注意edge- UVW目前仅在分支中。
  • 用于加速规划的急动控制运动(三阶运动规划)
  • 状态显示(“?”字符)
  • USB 串行上的 XON/XOFF 和 RTS/CTS 协议
  • 使用 JSON 的 RESTful 接口

邮件列表

对于 g2core 的用户和开发人员讨论,我们最近创建了一个邮件列表:

欢迎大家踊跃参加。😄

g2core - 边缘分支

G2 Edge是用于测试正在开发的新功能的分支。新功能在功能分支中开发并合并到边缘分支中。定期将边缘提升为(稳定)主控。

Edge 适合喜欢冒险的人。不能保证稳定,但我们会尽力实现这一点。对于生产用途,我们建议使用Master 分支

固件版本 101{fb:101.xx}

功能增强

添加了新功能。有关详细信息,请参阅链接的问题和拉取请求

内部变更和错误修复

对于这个非常大的拉取请求,内部发生了很多变化。以下列表重点介绍了其中一些更改,但并不全面。

  • 向 JSON 变量添加了显式类型和类型测试。
  • 作为上述内容的一部分,32 位整数不是浮点类型转换,因此保留完整的精度。行数现在可以可靠地达到 2,000,000,000
  • 作为重构大表的初始阶段,转向 getter 和 setter :)
  • 错误修复:修复了进给出口速度计算中的求根问题
  • 错误修复:修复了坐标旋转代码中 B 轴和 C 轴分配的错误
  • PR #334 A、B、C 轴半径默认使用电机 4、5、6
  • PR #336,问题 #336 冷却液初始化的部分解决方案
  • PR #299、问题 #298 修复了读取嵌套 JSON 值错误的问题

功能增强

固件版本 101{fb:101.xx}

fb:101 版本主要是 fb:100 分支的内部更改。以下是重点内容,每个项目的更多详细信息如下:

  • 将分段(最小)级别的运动执行更新为线速度而不是恒定速度,从而使运动更加平滑并更忠实地执行加加速度限制。 (顺便说一下,电机的声音也稍微安静一些,更“自然”。)
  • 更新了 JT(连接点集成时间,又名“转弯”)处理,使其更加优化,并将最后一个移动视为没有活动轴的移动的拐角。这允许基于允许的急动度和有效 JT 值的非零停止速度。
  • 探测增强。
  • 添加了对 gQuintic(版本 B)的支持并修复了 gQuadratic 板支持的问题。 (这主要发生在莫泰特。)
  • 温度控制增强
    • 温度输入在编译时配置不同。 (正在进行中。)
    • PID控制已调整为PID+FF(比例、积分和微分,带前馈)。在这种情况下,前馈是当前温度与环境温度之差的乘数。由于目前没有环境温度的温度传感器,因此使用理想的室温 21°C。
  • 通过添加更多用于实时反馈和配置的 JSON 控件,对 TMC2130 提供更完整的支持。
  • 初步支持 Core XY 运动学。
  • 董事会可以更好地控制规划器设置。
  • 实验设置为使移动 (G0) 使用“高加加速度”轴设置。
  • 现在,输出在电路板初始化时(及以后)进行配置,以更忠实地遵循设置。这包括尽快将引脚设置为高电平或低电平。

固件版本 100{fb:100.xx}

fb:100 版本是 fb:089 及更早版本分支的重大更改。它经历了大约一年的开发,并具有许多主要功能增强,总结如下。本自述文件的其余部分和链接的 wiki 页面对这些内容进行了更详细的描述。

  • 新的 Gcode 和 CNC 功能
  • 3D 打印支持,包括Marlin 兼容性
  • GPIO 系统增强
  • 规划器增强功能和其他操作改进以实现高速操作
  • 对新处理器的初步支持,包括 ARM M7

项目变更

该项目现在称为 g2core(即使存储库仍然是 g2)。从此版本开始,g2core 代码库从 TinyG 代码库中分离出来。 TinyG 将继续支持 Xmega 8 位平台,并将添加新功能,特别是与 CNC 铣削应用的持续支持相关的功能。 g2core项目将像目前一样专注于各种ARM平台,并添加8位平台上不可能的功能。

在此版本中,Motate 硬件抽象层已拆分为一个单独的项目,并作为 git 子模块包含在 g2core 中。该版本还为跨平台/跨目标编译提供了更好的支持。下面提供了项目更改的摘要,本自述文件和链接的 wiki 页面中有详细信息。

  • 移动子模块
  • 跨平台/跨目标支持
  • 多处理器支持 - ARM M3、M4、M7 内核
  • 设备树/多种电机类型
  • 简化的主机对板通信协议(线路模式)
  • 用于主机到板通信的 NodeJS 主机模块

更多即将推出

fb:100 版本是正在进行和计划中的许多其他增强功能的基础,包括:

  • GPIO系统的进一步增强
  • 额外的 JSON 处理和 UI 支持
  • 增强 3D 打印机支持,包括简化的 g2 打印机语言

Edge 分支的变更日志

边缘分支,构建 101.xx

此版本主要侧重于支持基于 Atmel SamS70 系列的新主板,以及完善运动控制和期待已久的功能增强。随着开发的进行,该列表将被添加到其中。

边缘分支,构建 100.xx

Build 100.xx 有许多变化,主要与扩展 Gcode 支持和支持使用 g2core 的 3D 打印有关。其中包括温度控制、自动床调平、规划器性能改进和 Gcode 中的活动 JSON 注释。

通信已取得进展,支持线路模式协议,从而大大简化主机通信和非常快速的 Gcode 流的流量控制。请阅读通讯页面了解详细信息。如果您正在构建 UI 或主机控制器,另请参阅 NodeJS 通信模块文档。

Build 100.xx 还显着改进了项目结构,以在同一代码库中支持多种处理器架构、硬件配置和机器配置。 Motate 已被分成自己的子项目。如果您正在编码或编译,我们建议您仔细阅读开发页面。

功能变化:

注意:单击箭头旁边的标题可展开并显示详细信息。

线速度段执行
  • The overall motion is still jerk-controlled and the computation of motion remains largely the same (although slightly simplified). At the smallest level above raw steps (what we call "segments," which are nominally 0.25ms to 1ms in duration) we previously executed the steps at a constant velocity. We now execute them with a linear change from a start velocity to an end velocity. This results in smoother motion that is more faithful to the planned jerk constraints.
  • This changed the way the forward differences are used to compute the segment speeds as well. Previously, we were computing the curve at the midpoint (time-wise) of each segment in order to get the median velocity. Now that we want the start and end velocity of each segment we only compute the end (time-wise) of each segment, and use that again later as the start-point of the next segment.
探测增强功能
  • Added {"prbs":true} to store the current position as if it were to position of a succesful probe.
  • Added {"prbr":true} to enable and {"prbr":false} to enable and disable (respectively) the JSON {prb:{...}} report after a probe.
gQuintic 支持
  • Support for the gQuintic rev B was added. Support for rev D will come shortly.
温度控制增强
  • Added the following settings defines:
    • HAS_TEMPERATURE_SENSOR_1, HAS_TEMPERATURE_SENSOR_2, and HAS_TEMPERATURE_SENSOR_3
    • EXTRUDER_1_OUTPUT_PIN, EXTRUDER_2_OUTPUT_PIN, and BED_OUTPUT_PIN
    • Added BED_OUTPUT_INIT in order to control configuration of the Bed output pin settings.
    • Defaults to {kNormal, fet_pin3_freq}.
    • EXTRUDER_1_FAN_PIN for control of the temperature-enabled fan on extruder 1. (Only available on extruder 1 at the moment.)
  • (Experimental) Analog input is now interpreted through one of various ADCCircuit objects.
    • Three are provided currently: ADCCircuitSimplePullup, ADCCircuitDifferentialPullup, ADCCircuitRawResistance
    • Thermistor and PT100 objects no longer take the pullup value in their constructor, but instead take a pointer to an ADCCircuit object.
  • Thermistor and PT100 objects no longer assume an ADCPin is used, but now take the type that conforms to the ADCPin interface as a template argument.
  • TODO: Make more of these configurable at runtime. Separate the ADC input from the consumer, and allow other things than temperature to read it.
  • PID+FF control adds feed-forward (FF) to adjust the output to a reasonable minimum based on heat loss dues to room temperature.
    • This can be effectively disabled, making the controller a PID controller, by setting the F value to 0.0.
    • Warning setting this value too high can cause thermal runaway. Set this value conservatively (low), since there's currently no ambient temperature, and the actual heat loss may be less than computed. This will be magnified by another heater (such as that on a heat bed of a 3D printer) in close proximity.
TMC2130 JSON 控件
  • Added the following setting keys to the motors (1 - 6):
    • ts - (R) get the value of the TSTEP register
    • pth - (R/W) get/set the value of the TPWMTHRS register
    • cth - (R/W) get/set the value of the TCOOLTHRS register
    • hth - (R/W) get/set the value of the THIGH register
    • sgt - (R/W) get/set the value of the sgt value of the COOLCONF register
    • sgr - (R) get the SG_RESULT value of the DRV_STATUS register
    • csa - (R) get the CS_ACTUAL value of the DRV_STATUS register
    • sgs - (R) get the stallGuard value of the DRV_STATUS register
    • tbl - (R/W) get/set the TBL value of the CHOPCONF register
    • pgrd - (R/W) get/set the PWM_GRAD value of the PWMCONF register
    • pamp - (R/W) get/set the PWM_AMPL value of the PWMCONF register
    • hend - (R/W) get/set the HEND_OFFSET value of the CHOPCONF register
    • hsrt - (R/W) get/set the HSTRT/TFD012 value of the CHOPCONF register
    • smin - (R/W) get/set the semin value of the COOLCONF register
    • smax - (R/W) get/set the semax value of the COOLCONF register
    • sup - (R/W) get/set the seup value of the COOLCONF register
    • sdn - (R/W) get/set the sedn value of the COOLCONF register
  • Note that all gets retrieve the last cached value.
核心 XY 运动学支持
  • Enabled at compile-time by setting the KINEMATICS define to KINE_CORE_XY
    • The default (and only other valid value) for KINEMATICS is KINE_CARTESIAN
  • Note that the X and Y axes must have the same settings, or the behavior is undefined.
  • For the sake of motor mapping, the values AXIS_COREXY_A and AXIS_COREXY_B have been created.
  • Example usage:
#define M1_MOTOR_MAP                AXIS_COREXY_A           // 1ma
#define M2_MOTOR_MAP                AXIS_COREXY_B           // 2ma
从板文件控制规划器设置
  • The defines PLANNER_QUEUE_SIZE and MIN_SEGMENT_MS are now set in the board/*/hardware.h files.
  • PLANNER_QUEUE_SIZE sets the size of the planner buffer array.
    • Default value if not defined: 48
  • MIN_SEGMENT_MS sets the minimum segment time (in milliseconds) and several other settings that are comuted based on it.
    • Default values if not defined: 0.75
    • A few of the computed values are shown:
    #define NOM_SEGMENT_MS              ((float)MIN_SEGMENT_MS*2.0)        // nominal segment ms (at LEAST MIN_SEGMENT_MS * 2)
    #define MIN_BLOCK_MS                ((float)MIN_SEGMENT_MS*2.0)        // minimum block (whole move) milliseconds
高冲击力实验横动
  • The new define TRAVERSE_AT_HIGH_JERK can be set to true, making traverse (G0) moves (including E-only moves in Marlin-flavored gcode mode) will use the jerk-high (jh) settings.
    • If set to false or undefined G0 moves will continue to use the jerk-max (jm) settings that feed (G1) moves use.
PID+FF - 添加前馈
  • There is a new JSON value f in each pidn object (read-only, for reporting) as well as an f setting in the hen objects (for control).
    • This is controlled in the settings file via Hn_DEFAULT_F, such as H1_DEFAULT_F. Default value is 0.0.
    • This is a value that is multiplied to by current temp - 21 and added to the current computed output.
    • Warning! Setting this value too high can result in thermal runaway. Set it conservatively (low) or disable it completely if in doubt.
    • Set the henf value to 0.0 to effectively disable feed-forward.
尽快设置输出
  • At board initialization, the output value on each of the out objects is set to whatever the pin is configured to be "inactive." This is based on the settings file DOn_MODE setting.
  • For example, if DO10_MODE == IO_ACTIVE_LOW then the pin at DO10 is initialized as HIGH at board setup. This happen even before the main() function starts, shortly after the GPIO clocks are enabled for each port.

About

g2core - 下一代

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 57.1%
  • C 39.8%
  • Pascal 1.3%
  • Python 0.6%
  • Makefile 0.6%
  • GDB 0.2%
  • Other 0.4%