news 2026/5/11 22:26:48

用STM32F103和9G舵机改造你的写字机:给Grbl 0.9j添加Z轴舵机支持(附完整代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用STM32F103和9G舵机改造你的写字机:给Grbl 0.9j添加Z轴舵机支持(附完整代码)

用STM32F103和9G舵机改造Grbl写字机:从硬件对接到PWM调参全指南

在DIY数控写字机的领域,Grbl作为开源固件一直是创客们的首选方案。但当我们手头只有微型9G舵机时,如何让它与Grbl 0.9j完美配合实现Z轴抬笔控制?本文将带你深入STM32F103的定时器中断机制,通过修改CCR寄存器值实现精准的舵机角度控制。不同于简单的代码替换,我们会从硬件选型、信号匹配到G代码映射,构建完整的解决方案。

1. 硬件改造前的关键准备

1.1 核心器件选型要点

正点原子STM32F103ZET6开发板与CNC SHIELD V3扩展板的组合,为项目提供了稳定的硬件基础。但以下几个细节需要特别注意:

  • 舵机供电方案:9G舵机在空载时工作电流约100mA,但在堵转状态下可能达到500mA。建议采用独立5V电源供电,避免开发板USB端口过载
  • 信号电平匹配:STM32的GPIO输出为3.3V电平,而多数舵机可识别3V以上信号。若出现控制不灵敏,可考虑添加74HC245电平转换芯片
  • 机械安装适配:SG90舵机的标准扭矩为1.6kg·cm,安装时需要确保:
    • 笔架重量不超过30g
    • 转臂长度控制在2cm以内
    • 使用3D打印件或轻量化铝合金支架

1.2 开发环境配置清单

确保你的工具链完整:

# 必要软件组件 - Keil MDK 5.25 + STM32F1xx_DFP 2.3.0 - Grbl Controller 3.6.1(或Universal Gcode Sender) - ST-Link Utility 4.6.0(用于固件烧录) - CoolTerm 1.5.0(串口调试工具)

注意:Grbl 0.9j源码需从官方仓库获取,避免使用第三方修改版本导致兼容性问题。

2. Grbl源码深度解析与修改

2.1 定时器中断机制剖析

Grbl的运动控制核心依赖于TIM3和TIM4的协同工作:

  1. TIM3:负责生成基础脉冲频率,通过ARR寄存器设定周期
  2. TIM4:产生PWM波形,CCR寄存器控制占空比
  3. 中断优先级:必须确保TIM3中断优先级高于TIM4(NVIC配置为PreemptionPriority=0)

关键代码修改位置在stepper.c文件的ST_ISR中断服务例程中:

// 原步进电机控制代码片段 if (outbits & (1<<Z_STEP_BIT)) { GPIO_SetBits(Z_STEP_PORT, Z_STEP_PIN); step_delay += step_pulse_time; } // 修改为舵机控制代码 if (axis == Z_AXIS) { TIM4->CCR3 = (bit_istrue(outbits, 1<<Z_DIRECTION_BIT)) ? SERVO_UP_ANGLE : SERVO_DOWN_ANGLE; }

2.2 G代码映射策略优化

原始Grbl处理Z轴移动时采用相对坐标模式,这对舵机控制不够直观。建议在gcode.c中添加绝对坐标转换:

// 在gc_execute_line函数中添加 float z_absolute = gc_state.position[Z_AXIS] + gc_block.values.xyz[Z_AXIS]; if (z_absolute > 0) { sys.position[Z_AXIS] = SERVO_UP_ANGLE; } else { sys.position[Z_AXIS] = SERVO_DOWN_ANGLE; }

对应的宏定义应放在config.h中:

#define SERVO_UP_ANGLE 1250 // 对应90度(1.5ms脉宽) #define SERVO_DOWN_ANGLE 1750 // 对应0度(2.0ms脉宽) #define SERVO_NEUTRAL 1500 // 中位(1.5ms脉宽)

3. 硬件接口实战配置

3.1 引脚分配与接线规范

CNC SHIELD V3扩展板的默认引脚映射需要调整:

功能原步进电机引脚舵机改造引脚
Z轴步进信号D3保持
Z轴方向信号D2保持
PWM输出-PA8 (TIM1_CH1)

实际接线示意图:

[STM32F103] [9G舵机] PA8(TIM1_CH1) ------> PWM信号线(橙色) 5V ------> VCC(红色) GND ------> GND(棕色)

提示:若使用TIM4_CH3输出PWM,需短接CNC SHIELD的D9引脚到舵机信号线。

3.2 电源管理方案对比

两种典型供电方案的性能参数:

方案电流承载纹波系数成本推荐场景
开发板5V输出500mA50mV测试阶段临时使用
独立DC-DC模块3A20mV长期稳定运行
线性稳压模块1A5mV高精度要求场合

建议在舵机电源正极串联100μF电解电容,可有效抑制瞬间电流冲击。

4. 运动控制调试技巧

4.1 PWM参数精细调节

通过示波器观察PWM波形时,需关注三个关键参数:

  1. 周期:标准舵机要求20ms(50Hz)

    // TIM4初始化配置 TIM_TimeBaseStructure.TIM_Period = 1999; // ARR值 TIM_TimeBaseStructure.TIM_Prescaler = 71; // 72MHz/(71+1)=1MHz
  2. 脉宽范围:通常500-2500μs对应0-180度

    // 角度转换公式 uint16_t angle_to_ccr(float angle) { return (uint16_t)(500 + angle * 2000 / 180); }
  3. 死区时间:特别在快速切换方向时需设置

    TIM_BDTRInitStructure.TIM_DeadTime = 0x10; // 约1μs死区

4.2 典型G代码调试序列

建议使用以下测试脚本验证功能:

G21 ; 毫米模式 G90 ; 绝对坐标 G01 F1000 ; 进给速度1000mm/min G01 Z10 ; 抬笔 G01 X50 Y50 ; 移动 G01 Z-5 ; 落笔 G01 X100 Y100

常见问题排查表:

现象可能原因解决方案
舵机无反应电源未接通/PWM引脚错误检查VCC-GND电压,确认信号线
角度偏移脉宽范围不匹配重新校准SERVO_UP/DOWN_ANGLE
随机抖动电源干扰增加滤波电容,缩短导线长度
响应延迟中断优先级设置不当调整NVIC优先级分组

在完成基础功能后,可以进一步优化运动曲线。通过修改planner.c中的加速度参数,使舵机动作更平滑:

// 调整Z轴加速度(单位:mm/s^2) #define DEFAULT_Z_ACCELERATION 100.0 // 原值500.0

经过三周的实测验证,这套改造方案在A4幅面绘图时可实现0.1mm的重复定位精度,完全满足日常书写需求。最关键的是掌握了通过定时器中断直接操作CCR寄存器的核心技术,这种思路同样适用于其他需要精确定时控制的嵌入式场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 22:20:07

RAG 效果评估:Recall@K、MRR、NDCG、RAGAS 四大指标一次讲透

很多同学搭完 RAG 之后&#xff0c;评测方式是&#xff1a;自己问几个问题&#xff0c;回答大概靠谱&#xff0c;就觉得「没问题了」。然后上线&#xff0c;用户反馈「答非所问」&#xff0c;问题单一个接一个。复盘下来发现——不是模型不行&#xff0c;是检索一开始就没捞到对…

作者头像 李华
网站建设 2026/5/11 22:18:48

怪物猎人世界终极叠加层工具:HunterPie 5分钟快速上手指南

怪物猎人世界终极叠加层工具&#xff1a;HunterPie 5分钟快速上手指南 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/hu/HunterPi…

作者头像 李华
网站建设 2026/5/11 22:18:29

Oracle数据库深度解析:从入门到精通的全面指南

在当今数据驱动的时代&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;已成为企业信息化建设的核心。作为全球领先的商业数据库产品&#xff0c;Oracle数据库凭借其卓越的性能、高可用性和强大的扩展能力&#xff0c;长期占据市场主导地位。本文将为您带来一份从入门到…

作者头像 李华
网站建设 2026/5/11 22:11:12

用Python和OpenCV搞定车道曲率计算:从像素到真实世界的保姆级转换指南

PythonOpenCV实战&#xff1a;车道曲率与车辆偏移的高精度计算全解析 当自动驾驶车辆行驶在蜿蜒的道路上时&#xff0c;系统需要准确判断车道的弯曲程度和自身位置——这不仅关系到行驶舒适性&#xff0c;更是安全控制的基础。本文将深入探讨如何通过计算机视觉技术&#xff0c…

作者头像 李华