新一代全能选手:Octopus Max EZ
前言
本文感谢必趣 (BigtreeTech) 赞助的 Octopus MAX EZ 主板,据说是美女一手自用。既往没有系统了解过必趣系的主板,这次和网友们一起一探究竟。
<img src="https://www.klipper3d.org/img/sponsors/BTT_BTT.png" style="zoom: 25%;" />
【KlipperBoxConfigs 配置文件数据库】已加入 btt-maxez-723
主板支持,提供引脚定义文件和一键编译、升级固件功能。
原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。
文章如有更新请访问 DFRobot 社区 或者 cnblogs 博客园。
欢迎对 Klipper 固件,以及对改版 CNC 加工的 Voron 三叉戟、v0、v2.4 感兴趣的朋友加群交流(QQ Group:490111638)。
我们约定:上位机
——运行Klipper系统的设备,主板
——3D打印机主板,工具板
——热端工具板
【2023年3月7日 更新】bigtreetech 的最新代码提交已经解决了 spi4 的问题,效率很高:stm32h7: Restore the RCC set in the bootloader to the default value
本文主要内容:
- Octopus Max EZ 主板软硬件资源与注意点
- 主板固件烧录升级方式
- spi4 的排障过程
- 如何使用 console.py 与 mcu 直接通讯
0、文档资料
1、外观对比
尺寸:160*100mm,对比 MKS 的怪兽8 主板和它自家的 Octopus。比Monster8稍长,和Octopus同样尺寸。主要空间是把EXP1和EXP2换成了FPC座,缩小部分元件挤出来的。
·
2、硬件规格、部分芯片及备注
2.1 核心亮点
- 高性能主控芯片 STM32H723
- 10轴 EZ 驱动系统
- eFuse 智能电子熔丝,支持自恢复
2.2 接口概览
- 10个高压驱动接口
- 10路风扇,其中8路可控
- 5路热敏接口,4路支持PT1000
- 4路加热接口+1路独立热床加热接口
- 6路限位开关接口
- 1个接近开关、1个BLtouch接口
- CANBus 接口
- 断料检测、断电检测、打完关机模块接口
- FPC 12864接口和TFT串口屏接口
- ESP32WiFi 模块接口,2个RGB接口
2.3 高性能 MCU
主控芯片采用 STM32H723ZET6,主频 550MHz 的单核处理器(显示为400MHz,实际也是,原因如下)。目前H723的CoreMark跑分达到2500+,是F4系列的4倍多,也是目前STM32性能最强的MCU之一,甚至可以运行Linux操作系统,和预想的不同,H723比H743性能更强。
番外:
2.4 EZ 驱动系统
这是必趣带来的全新系统,宣称的主要特点如下:
2.4.1 外观变化
- 防呆防反插设计
- 确实很方便,但是插座比较紧,正反插是否插到底反馈不明显,还无法达到盲插的水平
- 驱动散热二合一,外观也更漂亮,不需要自己贴散热片
- EZ 驱动和传统驱动价格差距不大,优化后值得推广,减少插反烧主板的惨案
【图】包括两枚内测版 EZ2209 (银色散热片)
2.4.2 自动识别 TMC 通讯模式
Max EZ 主板支持自动识别 TMC 驱动通讯方式,UART 和 SPI 模式不再需要手动调整跳帽,富源盛 (Fysetc) 的 蜘蛛King 主板通过额外的 mcu 来实现,Max EZ 还未公布原理图,具体实现方式未知。
2.4.3 灵活的电压选择
Max EZ 板载 10 个驱动都支持高压使用,可以通过 VBB 和 HV 跳线帽切换。
关于这个说一下,VBB 指的是从主板取电,支持 12/24V 输入,比如主板 24V 它就是 24V;HV 则使用专门的 MOTOR POWER
端子供电,支持 24/48V 高压输入。也就是如果仅使用24V 驱动电机,则不需要接 MOTOR POWER
端子供电。这样做比起 XY 电机单独供电以支持高压的方式,如果都使用 24V 情况下更方便一些,少接线。
2.4.4 驱动信号电压提升
由于 STM32 的信号电平为 3.3v,主板驱动信号电平升至 5v,信号更稳定,理论上抗干扰更强。
2.4.5 支持功能拓展
板载10驱动,支持冗余,支持功能拓展。除了 EZ 步进电机驱动,未来还将有更多模块,比如 EZ31865 等,当然,这种转变会导致手中的传统外形拓展模块无法使用。
2.4.6 支持外置驱动和无限位归零
主板还引出了 step/dir/en/gnd 信号,用于外置驱动使用。DIAG 采用跳帽形式。
2.4.7 !spi4 使用的问题(已解决)
另外测试发现驱动所使用的 spi4
通讯有问题,目前的临时解决方法是使用软件定义 SPI,例如:
[tmc5160 stepper_x]
cs_pin: PG14
#spi_speed:
#spi_bus: spi4
spi_software_sclk_pin: PE12
spi_software_mosi_pin: PE14
spi_software_miso_pin: PE13
# 是否启用细分差值
interpolate: True
run_current: 1.0
# 采样电阻,一般采用默认
#sense_resistor: 0.075
# 低于以下速度采用静音模式,99999 意即始终启用静音模式
stealthchop_threshold: 99999
且无论是否插入 5160 驱动,都无法连接主板。除此之外,查看文档可知LCD-FPC SPI、板载SD卡插槽、拓展SPI引脚以及TMC SPI通讯都共用spi4,其中TMC信号转换为5V。一旦驱动使用softSPI,则其他的也要使用,具体原因等待工程师反馈。
- Onboard SD card, expansion SPI pin header and TMC driver SPI, 4 features multiplexing the same hardware SPI4, and is converted to 5V to TMC driver
2.5 风扇子系统
甚至可以接 13 个风扇。
- 常开恒压散热风扇(FAN) * 2 | 一般用于驱动散热,供电电压 VIN
- 可控可调电压风扇(MFAN) * 1 | 一般用于主板散热,电压和 FAN6 相同
- 可控可调电压 2Pin 风扇 * 4
- PWM 可调电压 3/4Pin KF2510 风扇 *3(电脑风扇接口,支持PWM测速调速,可以检测风扇故障,调速范围更大,可以实现更静音)
- 合计10路风扇,如果挤出机热端仅用 1 路,则剩下 3 路也可以连接可控风扇(VIN),也就是日常最大13路风扇
- PC FAN 采用电脑风扇接口,也就是KF2510,默认线序 GND-VCC-测速-调速,其中测速因为输入电压,有隔离芯片,默认上拉有电压。使用时请注意电压,以及有些风扇线序与标准不同。使用可以参考我的文章 【思兼-Klipper 篇17】基于 Klipper 的必趣 Manta 牌夏日降温电风扇
- 每路风扇电流 1A,峰值 1.5A
2.6 eFuse 智能电子熔丝
eFuse 智能电子熔丝 M335EF05,优点包括迅速断电,短路保护,自恢复,反向电流截断,过压、过流保护,反极性保护等。更多介绍:eFuse,自动驾驶成就的“小人物”
2.7 传感器子系统
- 5路NTC,其中4路可选PT1000,1路用于热床温敏
- NTC 不用插跳帽,使用 PT1000 时插跳帽,配置文件里修改上拉电阻,此精度低于 MAX31865。不使用 4k7 欧姆的原因是当 PT1000 到达日常打印温度时,其阻值更接近 2k/1k(可能说的不对)。
- 接近开关支持PNP和NPN(三种电压可选),再也不怕买错型号了
- BLTouch 接口
- 打完关机接口 PS_ON
- 断电检测接口 PWR-DET
- FWS 4Pin 线宽检测或新式断料检测: 默认用于连接 耗材直径检测霍尔传感器(hall_filament_width_sensor),也可以连接新款断料检测传感器。
2.8 其他子系统
- 最大 4 个热端加热棒及配套热敏接口,支持换头机,也可以使用多个加热棒同时加热提升效率
- 支持 CANBus 通讯,板载 TI SN65HVD1050DR (VP1050) 高速CAN收发器芯片,最高速率可达1M/s,是经典的 TJA1050 升级版。
- 1路独立 spi4 接口,可用于连接ADXL345加速度计等
- 支持 ESP32 模块(默认不包含),支持RRF固件
- 使用 FPC 连接 12864 屏幕,取消 EXP1 和 EXP2 拓展接口
- 支持 USB Type-A 接口供电,使用 TI TPS5450-5v 降压转换芯片,支持5A高电流输出,可以为树莓派等上位机提供稳定供电
- 支持 TFT 彩色串口屏幕,搭配 Marlin 使用
- 两路 RGB 灯带接口,也可以连接其他设备。如果支持可调电压就好了,有带 12v 大灯板的需求
2.9 硬件接口备注
- 板载 Reset、Boot0 和 Boot1 按钮,一般 Boot1(PB2) 都是另有他用,不过 zet6 引脚多,任性。同时独立的boot1 也可以用于各种BootLoader,如 hid-bootloader、canboot 等,这里不展开了。
- reset 按钮旁边的排针是 SWD 调试接口
- VUSB 使用跳帽短接可以使用 USB 供电调试用,正常上机请断开,避免混合供电导致可能的信号干扰不稳定等问题
- 注意驱动和限位开关从1开始编号,为1-10。风扇等从0开始编号,注意别搞混了
3、固件编译与烧录
硬件谈完,我们来介绍下软件,默认支持多种方式更新固件:
- SD 卡升级固件
- DFU 在线升级固件
- Canboot 在线升级固件
- SD 卡在线升级固件(SDCard_Updates, "伪线刷")
首次烧录Klipper固件推荐使用 sd 卡,后续可以直接使用 dfu 方式在线升级固件,无需打开电器仓手动进入 dfu 模式。
编译参数:
- 其中 USB_ids 可以设置为
btt-maxez-723
3.1 SD 卡刷
下载 klipper.bin 并重命名为 firmware.bin
拷贝到格式化为 FAT32 文件系统的 SD卡中插入主板,断电或者按下RESET按钮,稍等片刻即可完成烧录,之后文件名称会变成 FIRMWARE.CUR
3.2 DFU 线刷
-
按住boot0按钮,再按下reset按钮,稍等片刻设备进入DFU烧录模式
cd ~/klipper
sudo dfu-util -p 1-1 -R -a 0 -s 0x8020000:leave -D out/klipper.bin
-
(推荐)如果系统已经烧录了新版 Klipper 系统,则无需使用boot0按钮即可自动进入dfu模式,编译后直接烧录
cd ~/klipper
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32h723xx_btt-maxez-723-if00
-
注意dfu烧录固件并不会破坏sd卡升级功能
-
目前支持自动进入DFU更新固件的MCU
通过查询 klipper/src/
文件,搜索 usb_reboot_for_dfu_bootloader
可知如下芯片支持烧录新版 Klipper 后自动进入DFU升级固件,无需使用 boot0 手动进入升级。
- H7、G0、F4、F0
- lpc176x 也有 dfu bootloader
3.3 SDCard_Updates 伪线刷
需要插一张SD卡,然后Klipper将固件传输到SD卡,重置主板后完成传统升级模式,通过检校文件名称确定升级成功。
修改 ~/klipper/scripts/spi_flash/board_defs.py
定义如下,遇到同样的问题,只能使用软件定义SPI。
# cat .config | grep CONFIG_MCU
# miso,mosi,sclk: PE13,PE14,PE12
# ./scripts/flash-sdcard.sh -b 115200 /dev/serial/by-id/usb-Klipper_stm32h723xx_btt-maxez-723-if00 btt-maxez-h723-sw
'btt-maxez-h723-sw': {
'mcu': "stm32h723xx",
'spi_bus': "swspi",
'spi_pins': "PE13,PE14,PE12",
'cs_pin': "PB12",
'skip_verify': True
},
# 使用硬件spi4时初始化SD卡失败
# 'btt-maxez-h723-hw': {
# 'mcu': "stm32h723xx",
# 'spi_bus': "spi4",
# 'cs_pin': "PB12",
# 'skip_verify': True
# },
3.4 Canboot 升级固件 [TODO]
适用 CANBus 桥接固件。
4、与 mcu 直接通讯:以探析 spi4 问题为例
Klipper 默认将 Gcode 命令转换为机器语言,当然我们也可以直接与下位机主板通讯。这与 /tmp/printer 不同。参考文档包括:
4.1 简单示例:控制LED亮灭(设置数字输出引脚值)
我们先演示一个简单的例子,通过 console.py 控制 LED 灯亮灭:
sudo systemctl stop klipper
cd klipper
~/klippy-env/bin/python ~/klipper/klippy/console.py /dev/serial/by-id/usb-Klipper_stm32h723xx_btt-maxez-723-if00
SUPPRESS stats
# 设置 PE9 引脚值为 1,即输出高电平,点亮设备
set_digital_out pin=PE9 value=1
4.2 启用硬件 spi 设备
# 停止 klipper 服务,解除设备占用,查看 console.py 工具帮助信息
sudo systemctl stop klipper
cd klipper
~/klippy-env/bin/python ./klippy/console.py -h
# 与下位机 mcu 直接建立通讯,注意修改设备地址
~/klippy-env/bin/python ~/klipper/klippy/console.py /dev/serial/by-id/usb-Klipper_stm32h723xx_btt-maxez-723-if00
# 通过 LIST 命令可以查看主频和帮助信息
LIST
Available local variables:
clock: 360005514289
freq: 400000000.0
# 屏蔽干扰信息
SUPPRESS stats
# 为对象分配内存空间,示例分配3个对象
allocate_oids count=3
# 配置 spi 信息并尝试传输数据
config_spi oid=0 pin=PF14 cs_active_high=1
spi_set_bus oid=0 spi_bus=spi4 mode=0 rate=2000000
spi_transfer oid=0 data=1234
ERROR:root:b'Got EOF when reading from device'
## 语法参考
config_spi oid=%c pin=%u cs_active_high=%c
spi_set_bus oid=%c spi_bus=%u mode=%u rate=%u
spi_send oid=%c data=%*s
spi_transfer oid=%c data=%*s
## 定义softwareSPI
spi_set_software_bus oid=%c miso_pin=%u mosi_pin=%u sclk_pin=%u mode=%u rate=%u
小记及测试结果:
- Klipper 文档未更新,config_spi 语法有变动,请以 LIST 输出结果为准
- 基本概念:创建oid,分配空间,c语言概念,变量格式化参考printf
- MCU 主频确实是 400Mhz
- 创建spi,设置spi参数,向spi传输数据,其中1-3a正常,spi4报错,证明不仅驱动问题,整条 SPIBus 都有问题
进一步测试比如使用示波器等就没时间了,将此问题反馈给 btt 的工程师,很快就解决了。思路如下(引用):
-
不用引导程序,直接把klipper写到芯片的 0x08000000 ,发现完全正常,烧了引导程序之后就出现异常了,就从引导程序开始排查
-
引导程序里面在可能的地方屏蔽掉部分程序,依次烧录芯片里面,慢慢找到是哪部分导致的。
-
引导程序跳转到klipper之前,我们有把所有的时钟都reset的,gpio那些时钟都被正常reset了,但是 RCC_APB2ENR 的spi4时钟还是使能的状态, 导致https://github.com/Klipper3d/klipper/blob/master/src/stm32/stm32h7_spi.c#L90这里压根没进去gpio初始化的部分
5、建议与问题
- 驱动和限位开关编号从1开始,和其他从0开始不一样,历史遗留问题,请注意不要接错了。
- 建议增加一路电压可选RGB,方便使用 12V 等牛逼的灯板(WS2812 氛围灯 + 暖色/白色照明灯)
- USB连接接口与 USB-Type-A 供电接口使用同一跳帽,是否有混合供电干扰信号的问题
- CAN接口优化下位置,方便接线?
- 独立驱动输入电压,pdf说明书是24-48v,产品介绍页面12-60(56)v,希望介绍说明保持一致,虽然也没错
- Klipper 目前最大仅支持 400Mhz 主频,希望以后能完全发挥 H723 的威力
小结
组装机器的时候会根据自己需求购买刚刚合适的主板,当然也可以有另一种选择: