ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于STM32的3D打印机控制方案:运动控制与PID调参实践

基于STM32的3D打印机控制方案:运动控制与PID调参实践 去年工作室接了个小项目客户手头有一台老掉牙的3D打印机主板烧了原厂停产、二手板子比机器还贵。我们盘了一下决定直接用STM32重写一套控制方案顺便把控制逻辑、温度闭环、运动规划这些都梳理成自己的代码。做完之后效果出人意料地稳这篇文章就把整个基于STM32的3D打印机控制项目的选型思路、运动控制、PID调参、G代码解析、踩坑过程全部摊开来讲适合想在单片机层面自己做打印机控制、或者想脱离Marlin/成品固件搞一套可定制方案的工程师和硬核玩家参考。1. 为什么不用Marlin成品固件自研STM32控制方案的取舍逻辑1.1 成品方案解决的问题和留下的限制现在市面上的3D打印机控制板绝大多数跑的是开源的Marlin固件或者是Marlin的魔改分支。Marlin对于标准的三轴笛卡尔结构CoreXY、UM轴结构除外支持得已经很完善了梯形加减速、温度PID、SD卡打印、自动调平这些功能全部内置。如果只是想把一台机器修好、能打印刷Marlin确实是最省事的路径。但自研方案的价值不在于能不能打印而在于能不能按自己的想法控制。我们这台机器是双Z轴改装的龙门结构还加了一个独立控制的第二挤出头Marlin对这种非标结构的支持需要在配置里反复调引脚映射和运动学参数有时改了配置还得看源码改编译宏。更麻烦的是Marlin的实时性并不是强实时它把运动规划和温度控制放在同一个主循环里机械结构稍微复杂一点中断优先级稍有不慎就会出现打印过程中一模一样的指令第一次成功、第二次莫名丢步。所以这个项目的定位从一开始就不是单纯修好一台打印机而是用STM32设计一套端口开放、运动控制和温度控制解耦的小型打印控制系统。这个定位决定了我们不用Marlin而是自己从协议、计划、驱动三层往下写。Marlin就像一台自带全套家具的精装房拎包入住当然便利但我们想改户型、砸承重墙就会到处受限。自研方案更像毛坯房设计和施工都自己来虽然累但每一根线都门儿清。1.2 系统架构总览从G代码到机械运动的完整链路一套基于STM32的3D打印机控制系统可以拆分成四个层次指令层接收G代码来源包括SD卡文件、串口指令、无线模块转发过来的指令解析层把G代码文本解析成结构化的运动命令例如G0/G1对应直线插补运动M104/M109对应设定喷头温度并等待规划层对运动命令做速度前瞻和梯形加减速规划对温度命令做目标值和PID参数绑定执行层定时器中断产生步进脉冲ADC采集温度GPIO控制风扇、加热棒、热床MOS管等。我们的核心主控选了STM32F407VET6168MHz主频内置定时器丰富有浮点运算单元做运动前瞻计算时比F103系的硬算快很多。驱动芯片用HR4988A4988的国产替代驱动X/Y轴Z轴用TMC2209做静音驱动挤出机暂时用A4988改装的低速驱动板。温控部分热床用大功率MOS管直接PWM控制喷头加热棒用另一个MOS管感温元件一律NTC 100K热敏电阻。整体结构图大家脑补成这样一个链路SD卡或串口 → 文件系统读取 → G代码指令行缓冲 → 解析器 → 运动规划器 → 定时器/中断 → 步进电机驱动 → 机械运动。温度链路独立并行NTC采集 → ADC → 数字滤波 → PID计算 → PWM占空比 → 加热棒/热床。把运动控制和温度控制彻底分开处理是这次设计的关键决定。打印机最怕的情况是喷头运动过程中温度中断抢占步进脉冲中断导致脉冲时序抖动失控。STM32F407的NVIC可以分优先级我们把步进脉冲定时器中断放到最高优先级PID温度计算放在低优先级温度采样丢失一两个周期没关系但脉冲周期绝对不能乱。2. 步进电机运动控制定时器中断、梯形加减速与驱动芯片的配合2.1 为什么步进脉冲必须用硬件定时器而不是延时函数很多人写步进控制第一版喜欢用HAL_GPIO_TogglePin加delay_us的方式产生脉冲。在空转测试时看起来没问题一装到打印机上就故障频发。原因是delay_us依赖CPU死等只要有任何中断插入包括SysTick、串口接收、温度ADC脉冲周期就会被拉长。打印机步进电机靠的是一步一个脉冲周期抖动超过10%就可能引起电机振动噪声增大甚至失步。所以我们的步进脉冲全部由定时器输出比较/ PWM模式生成。以X轴为例STM32F407的TIM1是高级定时器有4个通道但各轴脉冲需要不同的频率更适合的做法是每个轴独占一个通用定时器的PWM输出通道。X轴用TIM1_CH1Y轴用TIM1_CH2Z轴用TIM2_CH1挤出机E轴用TIM2_CH2。每产生一个脉冲周期即PWM的上升沿时刻在定时器更新中断里判断目标脉冲数是否完成来决定是继续给脉冲还是关闭PWM停止运动。脉冲频率由定时器分频和自动重装载值计算。比如TIM1挂在APB2总线时钟168MHz。若预分频PSC设置为83则定时器计数频率为168MHz/(831)2MHz。要产生1000Hz的脉冲频率自动重装载值ARR就是2MHz/1000-11999。改变ARR就能调速不过在实际代码里直接改ARR会丢失当前计数周期更稳的方法是用定时器的重复计数或缓冲寄存器在特定事件点再更新ARR保证加减速过程平滑过渡。注意方向电平必须在脉冲之前提前稳定。我们规定先拉高/拉低DIR引脚至少延时1微秒再开始脉冲。挤出机还要特别考虑换向瞬间的反向间隙如果减速后立刻反转齿轮箱间隙会让丝料瞬间松掉影响回抽补偿。2.2 梯形加减速的实现加速段、匀速段、减速段的离散计算3D打印机的步进电机启动频率一般不能超过每秒400到800步如果直接给一个较高的脉冲频率电机会嗡一声后失步。所以每次运动都需要速度规划。最常用的是梯形加减速目标速度对应一个平台段加速段从启动速度线性升到目标速度减速段线性降到目标速度。我用的是一种查表实现的简易梯形规划。运动开始前根据目标位移量脉冲总数、目标速度Hz、加速度Hz/s计算三个关键点假设启动速度v_start800Hz目标速度v_target2000Hz加速度a1000Hz/s那么加速时间t_acc(v_target-v_start)/a1.2s加速段脉冲数n_acc(v_startv_target)*t_acc/2(8002000)*1.2/21680个。减速段对称的话同样的距离。若总脉冲数n_total小于加速段减速段之和则说明达不到目标速度也就是三角运动整个运动只有加速和减速没有匀速段。实际代码里每产生一个脉冲就更新一次速度公式是v_next v_current a / v_current相当于每个脉冲周期加一个固定增量。这个公式来自梯形速度曲线的离散形式相邻两个脉冲的时间间隔是速度的倒数单位时间速度变化量等于加速度。把加速度换算成每脉冲速度增量delta_v a / v_current频率越高每个脉冲间隔越短速度增量越小呈现自然平滑的加速。我之前踩过一个坑直接把加速度写成a没有除以当前速度导致加速中后期频率增量过大电机从某个点开始狂振。正确的代码逻辑是// 每产生一个步进脉冲调用一次 // speed 为当前脉冲频率目标值单位 Hz // accel 为加速度单位 Hz/s float delta_v accel / speed; speed delta_v; if (speed v_target) { speed v_target; phase CRUISE; } // 用新的 speed 计算下一次定时器ARR uint32_t arr (TIMER_CLOCK / speed) - 1;当速度变化量很小例如加速末期但每次仍更新ARR会产生精度损失。解决办法是使用定时器的预装载寄存器同时累计误差当累计误差超过一个计数周期时做一个补偿调整。这个细节决定加减速是否平滑认真处理起来对打印表面的上海浪纹其实是速度波动造成的挤出量不均有明显改善。2.3 驱动芯片选型与电流配置HR4988、A4988、TMC2209的对比驱动芯片是步进电机系统的执行终端。我们这一版用了三种驱动分别对应不同轴的载荷和噪音要求驱动型号电流范围细分范围特性应用轴A4988最大约2A需散热1/1~1/16经典易烧噪声大E轴挤出机HR4988最大约2A1/1~1/16与A4988引脚兼容国产替代价格更低X/Y轴TMC2209最大约2A最高1/256静音、带UART模式Z轴细分设置通过驱动板上的MS1、MS2、MS3引脚组合。比如HR4988MS10、MS21、MS30对应1/8细分。细分越大步进电机旋转越平滑但需要的脉冲频率也越高。若打印速度要求100mm/s假定皮带轮步距为每步0.0125mm200步/圈电机1/16细分80mm周长同步轮100mm/s的线速度换算成脉冲频率是100/0.01258000Hz配合1/16细分会让电机噪声明显降低但也要考虑定时器的中断负担。电流限制是关键。驱动板上有可调电位器通常标VR调节参考电压Vref来设定电流。参考电压与电流的关系大约是I_max Vref / (R_sense * 8)。HR4988的采样电阻通常是0.1欧姆设Vref0.8V时电流为0.8/(0.1*8)1A我们X/Y轴电机额定电流1.3A把Vref调到约1.0V比较稳妥。电流太大电机会高温失磁电流太小在回抽时挤出力不足冷料回抽会直接把柔性丝拉断。TMC2209的电流配置走UART寄存器可以用单独的STM32串口连接发送配置指令。我们Z轴用静音模式是因为机箱放在客户办公桌旁边Z轴在层间移动时的吱吱声最恼人。TMC2209的1/256细分配合插值功能能在不大幅提高脉冲频率的前提下降低振动收益明显。3. 温度闭环系统NTC采集、数字滤波与喷头PID实现细节3.1 打印机温控和普通恒温控制的四个差异点3D打印机的温度控制和普通恒温箱PID调法差别不小总结起来有四个特点喷头加热棒功率大、热容量小升降温很快纯比例控制会产生非常大的超调喷头从室温冲到230度再掉回200度打印第一层就粘不上平台热床的热容量大、升温慢但同时散热也慢PID参数和喷头完全不同温度采样周期不能太短一般100到200毫秒采样一次太快反而把热噪声和传感器噪声一起放大喷头工作时会接触冷丝材材料不断带走热量相当于一个持续的干扰输入如果只用普通PID温度会维持在某个偏置误差附近无法真正稳定。所以我们的温度控制实现分了两层底层是标准的位置式PID负责调节MOS管的PWM占空比上层加了一个温度误差前馈和挤出补偿——当挤出机开始送料时根据送料速度乘以一个经验系数提前增加一个加热占空比偏置抵消冷料吸热。这个思路类似级联PID里的前馈支路但实现起来比真正的级联简单得多效果却直逼高级方案。3.2 NTC热敏电阻的温度采集分压电路、查表法与滑动滤波温度传感器用的是NTC 100K热敏电阻B值3950。100K在25度时是100k欧姆在230度时只有约1.2k欧姆阻值和温度的对应关系是非线性的。STM32的ADC引脚通过一个10k欧姆串联电阻接3.3V与NTC形成分压热敏电阻两端电压随温度升高而降低。ADC采集的数值经过计算得到的电压值再反推NTC阻值。阻值Rt与ADC值的关系是Rt 10k * ADC_value / (4095 - ADC_value)得到Rt之后用B值公式反算温度T 1 / (1/T0 ln(Rt/R0) / B) - 273.15其中T0298.15K25度R0100kB3950。这个公式在150到280度范围内误差在2度以内够用。为了提高精度我把常见阻值对应的温度做成了一张1024项的查表实际运行时不计算对数直接查表插值。温度采样需要滤波。ADC本身有噪声加热棒开关产生的电磁干扰也会耦合到模拟输入端。我用了两步处理硬件上在ADC引脚对地并联一个100nF电容滤除高频软件上采用滑动平均滤波加中值滤波二合一——每次连续采样5次去掉最大值和最小值取剩下3次的平均。每200毫秒采样一次就得到一个足够平滑的实时温度值。这里要特别提醒PID周期和采样周期必须匹配。如果采样周期是200毫秒PID计算周期也设成200毫秒。如果采样快而PID慢会导致输入变化被漏掉反过来采样慢而PID快PID输出会抖动因为同一个温度值被重复计算了好几次。我们把PID计算放到一个定时器中断里周期200毫秒。3.3 离散PID公式与串口在线调参位置式PID离散化公式如下u(k) u_base Kp*e(k) Ki*Σe(i) Kd*(e(k)-e(k-1))这里u_base是稳态占空比基准。230度喷头在静止空气中的稳态占空比大约是35%直接输出到MOS管。比例项Kp*e(k)对应当前误差的响应积分项Ki*Σe(i)消除静态误差微分项Kd抑制超调。关键问题是Kp、Ki、Kd怎么定我们的调参顺序是先把Ki、Kd设为0Kp从很小的值开始往上加。观察温度响应曲线的斜率如果升温太慢就增加Kp当温度到达目标值附近出现轻微超调时记录当前KpKd从0开始加让超调减小但不要加过头否则会失去响应速度Ki从非常小的值大约是Kp的1/100开始加直到温度回复到目标值的速度足够快、且不会产生持续的振荡环每次调参都通过串口发送类似M303 S230 P0.2的自定义指令程序收到后自动做阶跃测试并回报超调量和稳定时间。现场实测的一组参数供参考喷头230度采样周期200毫秒Kp45Ki2.5Kd20稳态温度波动在±0.5度以内送料开始后的瞬态跌落不超过3度回复时间大约4秒。热床60度Kp120Ki8Kd50波动在±0.3度以内。但注意每台机器传热、散热条件不同直接抄参数大概率不匹配还是得按上面顺序现场调。串口调参的实现方式很重要。我定义了自定义G代码命令M303专门做PID自整定和参数查询。核心代码如下void process_custom_gcode(char *cmd) { if (strncmp(cmd, M303, 4) 0) { float target parse_float(cmd, S); float cycle parse_float(cmd, P); pid_autotune(target, cycle); } else if (strncmp(cmd, M304, 4) 0) { float kp parse_float(cmd, P); float ki parse_float(cmd, I); float kd parse_float(cmd, D); pid_set_param(kp, ki, kd); } }自整定执行的是经典的Ziegler-Nichols开环阶跃法先让加热棒以固定占空比工作记录温度曲线用拐点切线法求出滞后时间和时间常数然后查表得到Kp/Ki/Kd。这个办法对打印机喷头这种一阶惯性加纯滞后对象还比较有效比手工试凑省时间。4. 打印流程控制G代码解析、SD卡读取与运动状态机设计4.1 从一行文本到一次运动的解析流程G代码文件就是一堆文本指令例如G28 ; 回原点 M104 S200 ; 喷头加热到200度 M109 S200 ; 等待喷头温度到达200度 G28 Z0 ; Z轴回零 G90 ; 绝对坐标模式 G1 X10 Y10 F1800 ; 直线插补运动到(10,10)速度1800mm/min解析流程拆成四步从SD卡或串口缓冲区读取一行字符串过滤掉分号后面的注释判断开头的命令字G、M、T命令分别交给对应处理函数用strtok遍历字母数字的参数字段字母是参数名X、Y、Z、E、F、S、P数字是参数值G命令进入运动规划器M命令直接执行如温度设定、风扇控制、回零。最容易出错的是坐标单位。切片软件默认输出公制单位毫米但G代码里可能有G20英寸模式和G21毫米模式的切换指令。我们自己的解析器遇到G20/G21会设置一个全局单位因子。更隐蔽的问题是G92坐标系偏移指令——很多机器用G92 L0这类指令重置坐标偏移。如果漏了G92的处理打印完第一层后所有后续坐标全部错位喷头会撞到模型边缘。运动规划器接收的是目标位置期望速度的结构体。规划器先检查当前坐标与目标坐标的差值用勾股定理算三维空间直线距离再结合设定的最大速度、加速度算出梯形速度曲线。在同一个缓冲区里最多缓存8条运动指令这样打印机可以连续运动而不是走一条停一下这种流水线式的预缓存对打印质量影响非常大——每停顿一次挤出头停留处的耗材会熔化堆积形成凸点。4.2 打印流程状态机从待机到打印完成的完整切换程序整体是一台状态机状态包括IDLE、PRE_HEAT、HOME、LEVELING、PRINTING、PAUSED、ERROR。状态机的意义在于所有外部输入串口指令、SD卡拔出、急停信号都作为事件通过事件函数切换状态而不是随意跳转。一个非常典型的坑是打印过程中人为暂停。客户在打印到一半时想暂停挂断看一下层高如果直接把运动停掉、加热棒断电喷头会继续贴在成品上余热把PLA软化暂停回来再继续打两层之间就出现一道明显的接缝。我们的暂停流程是记录当前坐标和挤出机绝对位置运动规划器完成当前运动指令Z轴抬升5毫米防止喷头压到模型关闭加热棒但保持热床温度等待用户发送M601恢复命令。恢复时先等待喷头温度回到目标值再按暂停前坐标回撤继续执行缓冲里的下一条指令。打印暂停的G代码流程、急停逻辑、SD卡热插拔检测都在这套状态机里实现。SD卡插入中断时状态机从IDLE进入FILE_SELECT才开始扫描根目录下的.gcode文件并显示在屏幕上。4.3 回抽处理Retraction怎么影响层间质量与挤出补偿切片软件生成的G代码里每次换层或空移前会加入回抽指令通常是G1 E-5 F1200把丝从热端倒抽5毫米防止熔融材料在空移时滴落。回抽看起来简单但对运动控制系统的要求非常高回抽动作的速度比正常挤出快得多E轴必须独立于XYZ做快速运动且不触发XYZ轴联动回抽结束后再恢复挤出时如果速度切换太急会让挤出机齿轮跳动丝料前端形成应力影响材料直径回抽长度和速度必须能通过参数配置不同材料差异很大。PLA回抽1.5到2.5毫米ABS回抽2到4毫米TPU这种弹性材料甚至不适合大量回抽。我们在E轴运动规划里特意把回抽作为快速瞬态运动处理——忽略正常的梯形加减速约束直接以固定高速执行但必须等上一个挤出运动完全结束后才开始。另一个提醒如果用了马林里的回抽补偿extra restart功能在恢复挤出时多送一小段料来抵消回抽产生的负压补偿值一般设在0.1到0.2毫米之间设置过大会在接缝处产生一个小鼓包。5. 实测踩坑记录丢步、复位干扰、发热导致的隐性故障5.1 丢步问题排查链路从结构共振到电流不足打印过程中偶尔出现一层错位很多人第一反应是电机丢步。但丢步的原因排查链路往往比想象中长。我们遇到的一台机器在打到第3个小时左右Y轴会出现一次约2毫米的整体偏移然后后面所有层都偏移。排查过程记录如下检查驱动电流用万用表测VrefY轴只有0.65V对应电流约0.8A而电机额定电流是1.5A。加大到1.2A问题没完全消失但偏移频率降低了检查加速度设置回抽后的快速移动加速度是1500mm/s²龙门结构在Y轴快速反向时产生共振偶然触发丢步。把加速度降到800mm/s²同时把Y轴最大速度从180mm/s降到120mm/s偏移不再出现检查皮带张力Y轴皮带在行程中点偏松高速往复时皮带跳齿不仅丢步还会让位置累计误差。同步带应该调到能按压产生约10毫米下垂的张力太紧会加剧电机负载太松跳齿。丢步问题的本质位置是开环的。步进电机系统没有位置反馈只要一次丢失后面所有运动全部偏移。所以一切预防手段都围绕留足力矩余量、避免共振、避免皮带打滑展开。如果有预算推荐在Y轴加一块磁编码器做位置反馈但STM32这边需要额外预留一个SPI接口读取编码器数据并在检测到偏差后触发报警。我们后来给机器加了简单的限位开关逻辑至少回原点时能校准一次绝对位置。5.2 热床继电器干扰与单片机复位EMC实践的一堂课热床功率比较大我们用了固态继电器控制220V供电。机器在热床开启瞬间单片机偶尔会死机或复位。用示波器测3.3V电源发现在继电器合闸瞬间有一个接近5V的尖峰脉冲通过电源串入单片机的复位引脚。解决方案做了三层硬件层面热床电源走单独一路220V供电与单片机24V开关电源分开固态继电器控制线用双绞线并套磁环电源层面STM32电源入口加LC滤波器电感用铁硅铝磁环绕10匝再加22uF钽电容和0.1uF陶瓷电容并联吸收高频噪声固件层面外部复位功能暂时禁用仅用上电复位。同时使能独立看门狗IWDG即使发生复位也能快速恢复并继续加热流程而不至于完全停机。另外发现一个细节TH1、TH2热敏电阻引脚与加热MOS管驱动线交叉布线加热棒开关瞬间的电磁干扰会让温度读数跳变20度以上。重新布板时把模拟信号线路用包地隔离温度跳变降到1度以内。5.3 固件烧录与Bootloader不再每次插SWD下载线开发阶段用ST-Link调试很方便但机器交付后在客户现场没法反复插下载线。所以我们在STM32F407里烧录了一段自定义Bootloader上电后检测串口/无线模块是否有升级指令如果没有就跳转到应用程序区运行。Bootloader设计要点占用Flash前16KB应用程序从0x08004000开始烧录协议采用Ymodem通过串口接收HEX/BIN文件应用程序里设置一个软复位跳转指令当接收到特殊M命令时跳回Bootloader等待新固件。这样现场升级固件只需要一根USB转TTL线甚至后续接ESP8266后可以局域网无线升级。这个功能在Marlin里通常叫串口刷写或者OTA自研方案里实现起来并不复杂但对后期维护的帮助极大。至少在这台交付的机器上客户反馈一个bug我改了源代码通过串口五分钟就完成了远程升级不用跑去现场。5.4 调试工具组合逻辑分析仪与串口PID配合使用调试3D打印机控制系统工具组合很关键。我用的是16通道逻辑分析仪几十块钱的USB版本用来抓步进脉冲波形、DIR信号时序、限位开关信号检查加速曲线是否按预期变化串口调试助手配合自定义监控指令实时读取PID输出、当前位置、温度值、电机速度等内部状态上位机示波器比如Python Matplotlib脚本从串口收数绘图可以看到温度曲线和速度曲线的动态变化。有一次排查E轴挤出时断时续逻辑分析仪抓到挤出脉冲规律地每隔一段时间停止约100毫秒定位到是温度PID计算占用了太多CPU时间导致定时器中断里步进脉冲被迫暂停。修复方法是把PID计算放到低优先级中断里且只保留增量计算方式不在一轮内做除法和浮点大量运算。优化后CPU负载从85%降到40%打印过程稳定多了。6. 可扩展方向无线控制、自动调平与联动上位机6.1 ESP8266无线指令转发远程监控的基础这套系统预留了一个UART接口用于连接ESP8266无线模块。ESP8266工作在透明传输模式把WiFi收到的指令直接通过串口转发给STM32。在服务器端跑一个简单的Python脚本监听TCP端口把收到的G代码文本送入串口。实际扩展之后可以实现手机端发送M105实时返回温度、发送G指令控制喷头移动。虽然这个功能在Marlin生态里早就有了OctoPrint等但自研协议的好处是可以把状态查询和指令下发分别封装比如定义M117 pause这种带参数的显示命令屏幕及时反馈。注意点ESP8266的电源要单独稳压直接从STM32的3.3V取电可能导致电流不足、频繁重启。我们给ESP8266加了一个AMS1117-3.3V从5V电源取电串口电平通过电平转换后与STM32对接。6.2 自动调平方案直接探测与软件补偿的取舍自动调平是3D打印机使用体验的核心功能。我们在Z轴限位处装了一个BLTouch探针实现三层探测回原点后移动到热床四个角加中心测量五点高度拟合平面补偿矩阵把测量偏差换算成Z轴高度补偿值打印时每个运动指令的Z目标值先加上补偿值再做梯形规划。这种方式比单纯硬件调平省事得多但要注意补Z速度不能超过Z轴电机最大速度否则补平过程中Z轴会丢步。软件补偿矩阵的精度受热床受热变形的影响实测ABS热床升温到110度后中心点会凸起约0.15毫米所以最好在热床温度稳定后再执行自动调平。6.3 从能打到打得好还有哪些路可以走这套STM32控制方案目前稳定打印PLA、PETG和ABS层高0.2毫米打印速度60mm/s时表面质量与成品商业机相当。再往下打磨的方向包括用ADXL345加速度计做共振频率测量自动抑制某段速度下的振动类似Marlin的input shaping加入挤出机压力反馈传感器做闭环挤出补偿减少回抽造成的压力波动上位机通过局域网实时记录打印进度、温度历史曲线形成一套完整的生产日志方便批量打印时追溯质量。硬件上预留了SPI2接口和两路ADC输入未来接加速度计或者压力传感器都不用重新改板。这个项目从开始到稳定运行大概用了三周第一周搭硬件和基础运动第二周补温度和G代码解析第三周专门做稳定性测试和参数调优。最大的收获不是那一堆代码而是对为什么打印机固件要这样设计有了直接的体感比如运动规划和温控为什么要抢CPU、为什么脉冲抖动影响这么大、为什么回抽速度必须单独设置。如果谁也想用自己的方案做一台我的建议是先从小型结构开始把三轴运动跑顺了再碰热端和挤出不然同时遇到丢步和温度失控排查起来真的头大。
返回列表