jarczakpawel/BMCU-C-PJARCZAK
GitHub: jarczakpawel/BMCU-C-PJARCZAK
针对Bambu Lab打印机BMCU 370C霍尔传感器模块的增强型第三方固件,提供完整的AMS兼容功能和稳定的耗材管理。
Stars: 135 | Forks: 13
# BMCU 固件 – 校准与兼容性说明
本 BMCU 固件已通过最新 Bambu Lab A1 固件的测试和验证。
重要提示:
打印机必须配置为 AMS,而不是 AMS Lite。
使用 AMS Lite 将导致兼容性问题。
# ❗ 重要提示 - 首次启动 (V10.3+) ❗
刷写后的首次启动时,**所有通道必须为空**。
从 **V10.3** 版本开始,固件会在首次启动时校准空通道检测。
如果您在插入耗材的情况下刷写了固件:
- 移除所有耗材
- 按住任意一个缓冲器约 **5 秒**以重新校准
# HMS 警告状态
此固件版本**会在打印机启动后立即触发 HMS 警告**。
重要说明:
- 此 HMS 警告**不会阻塞 BMCU 的运行**
- **不需要**重启打印机
- **不影响**打印
- 尽管有警告,打印机仍正常工作
- 该问题**纯粹是视觉/信息性的**(仅 HMS 图标)
目前,此 HMS 警告是该固件版本中的已知且可接受的行为。
如果 Bambu Studio 中的 HMS 警告让您感到困扰:
我制作了一个 Bambu Studio 构建版本,可以绕过此特定的 AMS 兼容性警告,这样您就不会再看到它了。
其他 HMS 警告仍然可见(如果发生的话),因此 HMS 依然有用。
## 支持的打印机
- Bambu Lab A1
- Bambu Lab A1 mini
- Bambu Lab P1S
- Bambu Lab X1C
其他打印机可能也适用,但尚未经过测试。
## 下载
请从 GitHub 页面右侧的 **"Releases"** 部分下载现成的固件。
所有固件变体都在那里生成,并附带了 **.txt 指南**,说明您应该选择哪个版本。
首先选择正确的打印机模式文件夹(standard(A1) 或 high_force_load(P1S)),然后照常选择 AUTOLOAD / RGB / 插槽。
## 刷写
如需在以下平台刷写任意版本的 BMCU(USB 或 TTL):
- Windows
- Linux
- macOS
- Android
请使用 **BMCU Flasher**:
**Releases** 部分提供了预编译的二进制文件。
刷写过程非常简单,**不需要 wchisptool**。
您可以通过两种方式刷写固件:
- 直接通过内置向导进行**在线刷写**(推荐)
→ 刷写工具会自动下载正确的固件,因此您**无需手动下载任何 .bin 文件**。
- 使用您自己下载的固件文件进行**本地刷写**。
该刷写工具还支持 **Android**,因此您甚至可以直接从**手机**刷写 BMCU 🙂
重要提示:
- 当 BMCU 连接到打印机时,**请勿**刷写 BMCU。
- 打印机通电时,**请勿**连接或断开 BMCU(否则有损坏 BMCU 和/或打印机主板的风险)。
## SOLO 固件
示例文件:
solo_0.095f.bin
此固件专为单个 BMCU(SOLO)操作设计。
- 推荐用于单 BMCU 设置
- 耗材回抽长度:9.5 厘米
## 耗材回抽说明
耗材回抽距离必须从打印机内部 AMS 分流器的末端开始计算
(即四根 PTFE 管进入的塑料 AMS 部分)。
示例:
- BMCU 到 AMS 分流器末端的距离:约 9.0 厘米
- SOLO 固件将耗材回抽至分流器内约 0.5 厘米处
- 总回抽长度:9.5 厘米
计算您自己的回抽长度时:
- 务必从 AMS 分流器末端开始测量
- 根据您的设置,加上所需距离以及约 9 厘米
## AMS_A / AMS_B / AMS_C / AMS_D 固件
这些固件版本适用于:
- 多 BMCU 设置
- 较长的耗材回抽距离
如果您想在更长的回抽距离下使用 SOLO 模式,请使用 AMS_A 代替 SOLO。
## 校准(首次启动)
正确的校准是强制性的。
没有正确的校准,BMCU 将无法正常工作。
校准过程如下视频所示:
请仔细按照视频中显示的校准步骤操作。
## 重新校准
您可以随时重新校准 BMCU。
步骤:
1. 移除所有通道中的耗材
2. 将任意一个缓冲器保持在原位约 5 秒钟
## 安全与使用注意事项
- BMCU 连接到打印机时请勿刷写
- 打印机通电时请勿断开 BMCU
- BMCU 连接时请勿更新打印机固件
- 仅在打印机完全断电(拔掉电源)时连接/断开 BMCU。在通电状态下操作可能会损坏 BMCU 和/或打印机主板。
这些建议基于社区反馈。
并非所有故障场景都经过了测试。
虽然测试表明,在连接 BMCU 的情况下将打印机模式从 AMS Lite 更改为 AMS 不会导致问题,但不建议这样做。
## 免责声明
使用此固件及进行任何修改的风险由您自行承担。
请确保您了解自己在做什么。
对于任何损坏、打印失败、硬件问题或数据丢失,我概不负责。
## 在提交错误报告之前
请先验证基本情况:
- 确保您刷写了正确的固件变体,并正确遵循了刷写教程。
- 确保您确实拥有**带霍尔传感器的 BMCU 370C**。
- 唯一可靠的验证方法是打开模块并检查 PCB。
- 一些卖家混合销售模块,试图处理旧的 **370x** 电路板——有时一套中会有 1-2 个模块是 370x。
- 如果您遇到打印机端的问题:
- 确认您使用的是最新的打印机固件
- 执行恢复出厂设置(这通常可以修复与 AMS 相关的异常行为)
- 如果耗材检测表现异常:
- 在不连接 BMCU 的情况下启动打印机一次
- 然后连接 BMCU 并再次测试
- 在发帖之前进行几次实际测试。
打印机可能存在不相关的问题(罕见但会发生)——有些用户甚至无法自动更新打印机固件,必须通过 SD 卡进行。
## 错误报告
如果您遇到真正的错误,可以提交报告。
此固件已经过严格测试,预计不会出现问题。
# 更新日志
## V10.3
### 用户可见的更改
- 新增固件模式:**soft_load(A1)**。
- 主要面向 **A1 / A1 Mini** 用户。
- 使用比 **standard(A1)** 更低的耗材进给力。
- 适用于一些杠杆弹簧较弱的 BMCU 单元,较强的进给力可能会导致耗材加载时出现咔嗒声/摩擦声。
- 改进了空通道检测校准。
- 固件现在会分别为每个通道校准并存储“无耗材”检测点。
- 这提高了在空闲检测电压因通道/模块而异的硬件变体上的可靠性。
- 改进了校准行为:
- 校准现在还会检测并保存**每个通道的霍尔极性**
- 磁铁极性在校准期间自动检测并存储,因此缓冲器中磁铁的插入方向不再重要
### 稳定性与行为改进
- 修复了所有电机通道上的 PWM 定时器预装载配置。
- PWM 更新现在在定时器更新事件之前被正确缓冲。
- 改进了 AS5600 更新时序。
- 传感器轮询现在的速率限制在约 **1 ms**
- 更稳定的速度计算
- 降低不必要的 CPU 负载
- 通过在主运动循环中重用共享的滴答快照,改进了内部时序路径。
- 减少时序抖动
- 更一致的运行时行为
- 改进了 on_use 期间的高负载/卡料时序逻辑。
- 高 PWM 积累现在使用**微秒级精度**,而不是毫秒级桶
- 改进了运动循环的时间步长处理。
- 使用防溢出的滴答增量
- 限制过大的时间步长
- 避免在无效的零步时序下运行电机控制
### 说明
- `soft_load(A1)` 并不是面向所有人的默认设置。
- 如果耗材因推力过弱而被拒绝,请切回 `standard(A1)` 并使用更强的杠杆弹簧。
- 在某些 A1 / A1 Mini 设备上,`soft_load(A1)` 效果很好,可以永久使用。
## V10.2
### 用户可见的更改
- 修复了**耗材耗尽可能错误触发卡料情况**的问题。
当耗材耗尽时,电机可能会持续运行并最终进入卡料保护状态,这会阻塞**自动续料**。
- 重构了卡料保护逻辑:
- 真正的耗材卡料现在与临时电机停止分开检测
- 单纯的高电机负载不再错误触发卡料
- 改进了 Flash 持久化系统(减少不必要的 Flash 重写)。
- 改进了 ADC/DMA 处理:
- 更快的数值更新
- 更低的 CPU 开销
- 更流畅的运行时行为
- 各种时序和稳定性改进。
### 技术更改
- **耗材元数据 Flash 存储重新设计。**
- 使用仅追加日志,而不是重写整个 Flash 页面
- 每条记录:**40 字节(10 个字)**
- **CRC32 校验**
- **每个 Flash 页面 6 条记录**
- 仅在页面变满时进行擦除
这显著减少了 Flash 磨损,并使写入具有防掉电安全性。
- 已加载通道持久化重新设计为轻量级的**插槽日志**,以减少擦除周期。
- 增加了**未更改则跳过**的逻辑,以避免不必要的 Flash 写入。
- 简化并优化了 **ADC DMA 更新/发布路径**。
- CRC 表移至**静态编译时表**(无运行时生成)。
- 使用**防溢出的 32 位定时器**清理时序路径。
- 其他几项较小的修复和内部优化。
## V10
### 用户可见的更改
- 改进了料盘卡料处理:立即检测到卡料,暂停打印,打印机等待您解决卡顿/缠绕问题,然后您可以正常恢复,而不会毁坏打印。
### Flash / 持久化(磨损 + 可靠性)
- 状态(已加载通道)持久化重新设计为仅追加插槽日志:每次更新 8 字节,任何页面擦除前最多 192 次更新(相比每次更新重写整个 256B 页面,擦除周期减少约 192 倍)。
- 耗材元数据持久化重新设计为小型受 CRC 保护的日志:每次更新 64B,每根耗材 2 页(8 条记录) -> 相比每次更改擦除整个 256B 页面,擦除周期减少约 8 倍。
- 每耗材保存:仅写入已修改的通道(减少不必要的 Flash 写入)。
- 防掉电安全提交:记录经过验证,部分写入的数据将被忽略。
## V9
### 用户可见的更改
- 增加了耗材进给力,提高了耗材插入期间的可靠性。
- 改进了某些材料(例如 **Sunlu PLA+** 和类似耗材)的耗材加载行为,这些材料的加载特性与标准 PLA/PETG 不同。
- 增加了对**料盘卡料**的保护:
- 如果打印期间缓冲器位置降得太低,锁定模式激活。
- 如果电机以高速连续运行约 8 秒,锁定模式也会激活。
- 一旦缓冲器回到中立位置,锁定自动释放。
- 防止耗材移动受阻时电机长时间过转。
## V8
### 用户可见的更改
- 支持打印机重置/断电后恢复打印(可以正确恢复打印)。
- 改进了 **P1S** 的行为(由于 PTFE 路径长/弯曲导致的加载问题)。
- 为**单开关 PCB** 板增加了 AUTOLOAD 支持:
- 通过按压缓冲器触发(“缓冲器轻触”)。
- 像外部开关触发一样,准确开始耗材加载。
- 整体加载过程更加稳定。
- 改进了对**低扭矩 BMCU** 变体的支持。
## V7
### 用户可见的更改
- **记住已加载的耗材(持久状态)。**
您可以加载耗材并安全关闭打印机。
这允许您在 G-code 中禁用结束时的自动卸载行为(如果您经常使用一种耗材打印),
使耗材保持加载状态,直到您真正需要更换它。
更多信息请见:
- **100% 解决了耗材加载问题。** 系统在硬件变体间稳定且一致。
- **耗材 RGB 颜色。** 模块/LED 可以显示配置的耗材颜色。
### AUTOLOAD(简述)
**AUTOLOAD 如何工作**
- **DM(两个微动开关):**
- 触碰第一个开关 → AUTOLOAD 开始(您可能需要轻轻手动推动,直到齿轮抓取)。
- BMCU 进给耗材,直到第二个开关(挤出机后方)确认**完全插入**。
- 然后进给 120 mm 使其准备打印。
- **卡顿保护:** 监控缓冲器位置;如果耗材卡在外壳/PTFE 边缘,它会回退到安全位置并重试(3 次重试)。
- **单开关板:**
- 第一阶段是手动的(没有第二个开关确认完全进入)。
- 一旦耗材完全进入挤出机,第二阶段行为相同(包括防卡顿保护)。
### 技术更改
- **ADC_DMA 升级(ADC1 + ADC2 并行):**
- 常规同步模式:ADC1+ADC2 并行扫描通道,以降低噪声并增加吞吐量。
- 较低的噪声使得更小的滤波和更快的稳定读数成为可能。
- 完全滤波更新时间:**约 5 ms 而非约 28 ms**。
- **AS5600 读取正确性提高**(读取的鲁棒性和稳定性)。
- **定时器/滴答安全性(溢出安全):** 审查所有时间比较,确保在溢出环绕情况下的正确性。
- 最终稳定化和清理:整体行为比以前的版本更快、更具确定性。
- V7 中还有更多修复;最简单的方法是检查提交历史。
**最后说明:** 所有已知问题最终都已解决。BMCU 完全稳定,并且比旧固件明显更快。
目前我不预期会有任何进一步的修复。
## V6
## 框架
- 放弃了 Arduino Core (PlatformIO: framework = arduino) - 整个固件被重写为纯 CH32 (WCH SDK / noneos)。
- 直接使用硬件定时器、DMA 和中断 - 没有 Arduino 延迟,没有随机时序,确定性的实时行为。
- 更快且正确的 Flash 操作 (WCH Fast API) - 稳定的写入,更快,不会破坏相邻数据。
## ADC_DMA
- 将 DMA 写入与 CPU 读取分离 - 以前读取发生在 DMA 覆盖缓冲区时。
- 在后台(DMA 半/满)计算滤波,而不是在读取期间 - 以前 `get_value()` 阻塞 CPU 并破坏时序。
- 恒定的 CPU 负载 - 以前较大的滤波窗口会减慢系统速度。
- DMA 错误处理
## BUS (BambuBus + AHUB)
- 修复了 RX/TX 缓冲区竞争(同时读取和覆盖同一缓冲区)。
- 基于快照的解析,而不是在活动缓冲区上操作
- 确定性的帧处理时序 - 恒定的 CPU 成本,与数据包长度无关。
- 对传输错误的鲁棒性 - 一个坏的数据包不会破坏整个系统状态。
## Flash / NVM
- Flash 逐页写入(256B),而不是擦除/编程整个扇区(4KB)
- 仅在数据实际更改时写入
- 用于 Flash 的硬件 CRC + 读取时验证
- AMS 数据拆分为单独的记录 - 更改一根耗材不会重写整个结构。
## Soft-I2C / AS5600
- 从 Arduino 重写,消除了时序错误和 Arduino 的“魔法”。
- 正确的 ACK/NACK, START/STOP, 恢复处理
- 对有错误的通道进行硬隔离
## 运动 / 力学
- 更平滑的电机控制
- 增加了校准缓冲区 - 耗材保持在中立位置,没有不必要的张力。
- 更好的状态转换 - 无急动和突然制动。
## 杂项
- CRC8 / CRC16 重写为简单的 C + 查找表 - 更快、确定性、无对象和无运行时初始化。
- 部分梳理了 include 结构
- 还有更多 - 固件为进一步开发做好准备
## 最后说明
这个固件最初是作为一个个人的 CH32 学习项目开始的。
在开发过程中,它的范围远远超出了最初的目标,因为在 BMCU 上工作确实令人愉快。
许多解决方案被有意过度设计。
一切主要是为了个人使用和实验而实现的。
该固件在开发过程中已被广泛使用,
并且在现实世界使用中未观察到实际问题。
标签:3D打印, 3D打印机改装, A1, AMS, Bambu Lab, Bambu Studio, BMCU, G代码, HMS, P1S, STM32, X1C, 串口烧录, 修复, 兼容性, 固件, 嵌入式开发, 开源硬件, 缓冲校准, 耗材系统, 自定义固件