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, 串口烧录, 修复, 兼容性, 固件, 嵌入式开发, 开源硬件, 缓冲校准, 耗材系统, 自定义固件