XY2-100-E接口深度解析:20位帧、10MHz时钟与41条命令实战
简介振镜协议XY2-100是激光加工设备中控制振镜的核心通信标准广泛应用于激光打标机、切割机等场景。这份资料面向激光设备研发、调试与维护工程师以及需要理解振镜接口时序的嵌入式开发者帮助解决针脚定义、时钟采样、命令集与状态指示等实际问题。资源包为1个PDF文档约466KB内容源自RAYLASE AG的SS-III XY2-100-E接口说明涵盖电气接口与针脚定义、与其他厂商的差异、数据帧结构独立帧与连贯帧时序、偏转单元与控制卡帧类型、16位与18位反馈通道、XY2-100-E命令集如SetMode等以及LED状态指示说明。文档配有精确时序图便于对照硬件调试与协议实现。目前已有513人学习下载适合作为激光振镜控制开发的案头参考。1. 拆开一份振镜 XY2-100-E 接口文档20 位帧、10 MHz 时钟和 41 条命令到底怎么落地激光打标机跑着跑着突然丢轴或者振镜回传的温度、位置数据全是乱码很多时候不是振镜坏了而是 XY2-100 这条链路没吃透。我手里这份 SS-III XY2-100-E 接口文档把物理层、数据帧、命令集和状态 LED 全串起来了它解决的就是「控制卡和振镜之间到底怎么对话」这件事。适合做激光控制卡、振镜驱动、运动控制固件的工程师也适合手里有振镜但只会调现成库、想自己写底层时序的人。文档里最值钱的部分不是命令列表而是 20 位帧结构、SYNC 锁存规则和回传通道那半拍延迟——这三处没对齐后面所有命令都是玄学。2. 电气接口与针脚25 针 DSUB 怎么接才不烧板子2.1 差分对、时钟极性与线驱动选型XY2-100-E 每个轴X、Y、Z都有一路去振镜的数据通道和一路回控制卡的数据通道加上共用的时钟线和同步线全部走差分、无隔离。文档里写得很直白最大时钟 10 MHz推荐 4 MHz。这个数字不是随便给的4 MHz 下 20 位帧周期 5 µs留给线驱动和线接收的建立保持余量比较舒服拉到 10 MHz 时线缆长度和终端匹配稍微不对回传通道就开始翻车。线驱动推荐 UA9638CD线接收推荐 MAX3096 或 UA9637备选 AM26LV32。这几颗都是差分收发里比较稳的型号选型时注意共模范围和供电别拿单端收发器硬顶。差分对必须走双绞负端和正端成对屏蔽层在连接器端接 GND。提示文档明确写了某些 DIG1 振镜头的部分针脚是内部电源保留脚绝对不能接到控制卡。上电前拿万用表把线缆逐针量一遍比烧一块控制卡便宜得多。2.2 针脚定义与 X/Y 轴互换的坑连接器是标准 25 针 DSUB 母头振镜端和控制卡端都用它线缆一对一。核心针脚如下信号振镜端针脚控制卡端针脚方向CLK-114控制卡输出CLK141控制卡输出SYNC-215控制卡输出SYNC152控制卡输出X- 位置与命令316控制卡输出X 位置与命令163控制卡输出Y- 位置与命令417控制卡输出Y 位置与命令174控制卡输出Z- 位置与命令518控制卡输出Z 位置与命令185控制卡输出Y_stat-619振镜回传Y_stat196振镜回传Z_stat-720振镜回传Z_stat207振镜回传X_stat-821振镜回传X_stat218振镜回传GND10、11、23、2410、11、23、24—这里有个血泪经验文档专门用一节讲「与其他厂商的差异」。这份文档定义的 X 轴是激光最先打到的轴所以 X 镜是小镜有些厂商把激光先打到的轴叫 Y 轴。结果就是两家的 X/Y 通道针脚是反的。好消息是正因为反着定义别家振镜可以直接换成这份文档对应的 SS-III 头不用改线序。但如果你拿这份文档去接别家控制卡X 和 Y 就会对调打出来的图形直接镜像。2.3 上电前的检查步骤接线不是插上就行我一般按这个顺序走断电状态下量线缆通断确认 1-14、2-15、3-16 这种交叉对应关系别做成直通。确认 9、12、13、22、25 这些针脚没有意外短接标准 SS-III 下它们不接。检查差分对是否双绞屏蔽层是否单端接地。先只上控制卡电用示波器看 CLK 和 SYNC 有没有输出再上振镜电。首次通信先用 4 MHz 时钟别一上来就 10 MHz。3. 20 位帧结构与时钟时序SYNC 锁存和半拍延迟3.1 一帧 20 位SYNC 下降沿锁存XY2-100-E 的一帧固定 20 位。SYNC 线对充当锁存信号一帧的最后一位用 SYNC 上的 0 表示。数据变化规则很关键CLK 上升沿时去振镜的 X、Y、Z 线对上数据变化。CLK 下降沿时从振镜回来的 X_stat、Y_stat、Z_stat 线对上数据变化。这意味着回传通道相对去程通道延迟了半个时钟周期。很多自己写时序的人只盯着上升沿采样忘了回传是下降沿更新结果读回来的状态字总是差一位查半天以为是振镜固件问题。# 用逻辑分析仪抓 XY2-100-E 时的典型触发设置以 sigrok 为例 sigrok-cli -d fx2lafw --config samplerate24m \ --channels CLK,SYNC,X,X_stat \ --trigger SYNCfall \ --samples 2000 -o capture.sr这段命令把采样率设到 24 MHz是 4 MHz 时钟的 6 倍足够看清 20 位帧的每一位。触发设在 SYNC 下降沿正好抓一帧的结束点。抓到的波形里数一下 SYNC 低电平之前 CLK 有几个完整周期正常应该是 20 个。如果只有 16 个说明控制卡还在发老式 16 位帧。3.2 三种去程帧类型怎么区分去振镜方向的帧有三种16 位目标位置帧兼容不带 -E 的 XY2-100。16 位目标位置帧来自 RAYLASE SuperScan 和 SS-II 振镜。命令帧8 位命令加 8 位参数。这三种帧靠结构静态区分。目标位置按无符号整数解释D0 是最低位D15 或 D17 是最高位。命令帧传一个命令字节 C7-C0 和一个参数字节 P7-P0参数含义随命令变。这里有个容易忽略的点18 位目标位置帧和命令帧靠奇偶校验区分。文档原话是「这可能导致振镜无法再识别奇偶校验错误」。也就是说如果你混发 18 位位置帧和命令帧校验位被借用了出错时振镜不一定报得出来。常见做法是固定帧类型序列别在高速扫描中间插命令帧。3.3 回传帧类型由控制卡定义回传通道 X_stat、Y_stat、Z_stat 上的帧彼此无法从数据本身区分因为控制卡定义了每个回传通道的数据类型所以格式对控制卡来说是已知的。文档列了三种回传帧16 位向下兼容回传帧16 位回传帧18 位回传帧这意味着你写控制卡固件时必须自己维护一张「当前回传通道配置表」知道每个轴现在回的是哪种帧。配置错了读出来的角度、电流、温度全是错的但帧本身看起来完全合法。4. XY2-100-E 命令集SetMode 和 41 条子命令怎么用4.1 命令帧结构与 SetMode 入口命令帧是 8 位命令加 8 位参数。文档里最核心的是 SetMode0x05它下面挂了 41 条子命令覆盖状态字、角度位置、电流、温度、序列号、固件版本、校准、孔径、波长等。SetMode 的参数字节就是子命令编号。import serial import struct def build_command_frame(cmd: int, param: int) - int: 构造 20 位 XY2-100-E 命令帧。 cmd: 8 位命令字节如 0x05 表示 SetMode param: 8 位参数字节SetMode 下为子命令编号 返回: 20 位整数bit19..bit0 对应帧的 20 位 frame 0 frame | (cmd 0xFF) 12 # C7-C0 放在 bit19..bit12 frame | (param 0xFF) 4 # P7-P0 放在 bit11..bit4 # bit3..bit0 为帧类型/校验相关位按具体控制卡定义填 return frame 0xFFFFF def send_setmode(ser, subcmd: int): 通过串口转 XY2-100 控制卡发送 SetMode 子命令 frame build_command_frame(0x05, subcmd) # 控制卡通常接收 3 字节大端 payload frame.to_bytes(3, byteorderbig) ser.write(payload)这段代码里命令字节放高 8 位参数字节放中间 8 位低 4 位留给帧类型和校验。实际控制卡的低位定义要看具体硬件有的用 bit0 区分命令帧和位置帧。send_setmode把 20 位帧塞进 3 字节大端发送这是很多控制卡 USB/串口转 XY2-100 的常见封装。4.2 常用子命令与参数含义SetMode 下几个高频子命令子命令编号含义数据宽度状态字0x00振镜当前状态16 位实际角度位置0x01当前角度16 位设定角度位置0x02目标角度16 位位置误差0x03跟随误差16 位实际电流0x04电机电流16 位相对振镜控制0x05相对运动16 位实际角速度0x06角速度16 位振镜温度0x14扫描头温度16 位伺服板温度0x15驱动板温度16 位AGC 电压0x16自动增益控制16 位DSP 核心电压0x17核心供电16 位模拟段电压0x18模拟供电16 位AD 转换供电0x1AADC 供电16 位AGC 电流0x1BAGC 电流16 位序列号低/高0x1E/0x1F设备序列号各 16 位货号低/高0x20/0x21产品货号各 16 位固件版本0x22固件版本号16 位校准0x23校准数据16 位孔径0x24振镜孔径16 位波长0x25适用波长16 位调谐号0x26调谐编号16 位数据类型选择0x27回传帧类型16 位运行状态低/高0x28/0x29运行状态各 16 位停止事件码0x2A停止原因16 位停止标志低/高0x2B/0x2C停止标志各 16 位运行时间秒/分/时/天0x2F-0x32累计运行时间各 16 位位置值缩放设置0x3F缩放系数16 位兼容状态字0x80老式状态字16 位18 位实际角度0x81高精度角度18 位18 位设定角度0x82高精度目标18 位18 位位置误差0x83高精度误差18 位插值配置0x90插值设置16 位Setpos 应答电平0x40应答阈值16 位除了 SetMode还有几条独立命令UpdatePermanentMemory0x0A把参数写永久存储SelectControlDefinition0x11选控制定义SetPositionScale0x12设位置缩放SetPosAcknowledgeLevel0x15设应答电平StoreRestoreTransmissionMode0x17存取传输模式SetEchoMode0x21设回显模式SetInterpolation0x90设插值。4.3 读温度、读位置、写永久存储的实操顺序我一般按这个顺序做首次联调发 SetMode(0x00) 读状态字确认振镜在线。发 SetMode(0x22) 读固件版本记录基线。发 SetMode(0x14) 和 SetMode(0x15) 读振镜温度和伺服板温度确认散热正常。发 SetMode(0x01) 读实际角度手动转一下镜片看数值变不变。发 SetMode(0x02) 写设定角度看镜片动不动。确认无误后发 UpdatePermanentMemory(0x0A) 把需要保留的参数写进去。注意UpdatePermanentMemory 不要频繁发。永久存储有擦写寿命调试阶段先用 RAM 参数跑通最后定型再写一次。5. 避坑与排查LED 状态、奇偶校验和回传错位5.1 现象通信完全没反应LED 不亮原因供电没到或者 25 针线缆做成了直通而不是交叉。文档里针脚表明确写了 1 对 14、2 对 15 这种交叉关系直通线缆插上去 CLK 和 SYNC 全反。解决断电量线缆确认交叉对应。再量振镜端供电针脚标准 SS-III 下 9、12 针不接别把 ±15 V 误接上去。5.2 现象位置数据偶尔跳变图形边缘毛刺原因时钟拉到 10 MHz线缆太长或终端没匹配好回传通道在下降沿采样时数据还没稳定。解决降到 4 MHz 先跑通再逐步往上试。检查差分对是否双绞、屏蔽层是否接好。用逻辑分析仪抓 X_stat 在 CLK 下降沿附近的数据眼图看建立保持时间够不够。5.3 现象读回来的状态字总是差一位原因忘了回传通道相对去程延迟半个时钟。去程在 CLK 上升沿变化回传在 CLK 下降沿变化采样点选错就整体错位。解决控制卡接收逻辑里回传数据用下降沿采样或者把采样点往后推半个周期。抓一帧完整波形数清楚 SYNC 低电平前有多少个 CLK 周期确认是 20 位帧。5.4 现象混发 18 位位置帧和命令帧后振镜不报错但行为异常原因文档明确说这两种帧靠奇偶校验区分混发时振镜可能无法再识别奇偶校验错误出错被吞掉。解决固定帧序列高速扫描段只发位置帧命令帧在扫描间隙发。如果必须混发在控制卡侧自己做超时和状态轮询别指望振镜报错。5.5 现象X 和 Y 打反图形镜像原因这份文档定义 X 轴是激光最先打到的轴X 镜是小镜有些厂商把先打到的轴叫 Y 轴针脚定义相反。解决换振镜时先确认轴定义。如果拿这份文档接别家控制卡X/Y 通道对调要么改线序要么在软件里交换 X/Y 输出。6. 进阶技巧用回传通道做闭环监控和寿命预警把命令集跑通只是第一步真正省事的是用回传通道做在线监控。我习惯在控制卡固件里开一个低频轮询任务每 100 ms 读一次 SetMode(0x14) 振镜温度、SetMode(0x15) 伺服板温度、SetMode(0x04) 实际电流和 SetMode(0x03) 位置误差。这四个量放一起看能提前发现很多问题。温度缓慢爬升但没超限可能是散热风道堵了位置误差在同样扫描速度下逐渐变大可能是轴承磨损或调谐漂移实际电流异常升高可能是电机阻力变大。这些趋势比单次报警有用得多。import time def monitor_loop(ser, interval0.1): 低频轮询振镜关键状态做趋势监控 history [] while True: temp_galvo read_setmode(ser, 0x14) # 振镜温度 temp_servo read_setmode(ser, 0x15) # 伺服板温度 current read_setmode(ser, 0x04) # 实际电流 pos_err read_setmode(ser, 0x03) # 位置误差 history.append((time.time(), temp_galvo, temp_servo, current, pos_err)) # 只保留最近 5 分钟数据 cutoff time.time() - 300 history [h for h in history if h[0] cutoff] # 简单阈值预警 if temp_galvo 45 or temp_servo 55: print(温度预警, temp_galvo, temp_servo) if pos_err 200: print(位置误差偏大, pos_err) time.sleep(interval)这段监控循环每 100 ms 读四个量保留最近 5 分钟历史。阈值 45°C 和 55°C 是经验值具体看振镜型号和散热条件。位置误差阈值 200 也是经验值16 位角度下这个数对应多少微弧度要看缩放设置建议先跑基线再定。还有一个技巧是用 SetMode(0x2F) 到 SetMode(0x32) 读运行时间秒、分、时、天。这四个寄存器拼起来就是累计运行时长做维护提醒很方便。比如每 2000 小时提醒换散热滤网每 5000 小时提醒检查轴承。SetMode(0x2A) 停止事件码和 SetMode(0x2B)/0x2C 停止标志也值得读。振镜一旦触发停止这两个寄存器会记录原因。我遇到过位置误差超限触发停止读出来事件码才定位到是扫描速度设太高。最后说个习惯每次改完参数先读一遍 SetMode(0x27) 数据类型选择确认回传帧类型和你固件里配置的一致。这个寄存器被意外改掉后面所有回传数据都是错的但帧本身完全合法查起来非常费劲。从那以后我每次上电初始化都强制走一遍「读状态字 → 读固件版本 → 读数据类型选择 → 读温度」这四步确认基线正常再开始跑扫描。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Flutter图片宽高获取:异步解耦下的稳定方案与工程实践

Flutter图片宽高获取:异步解耦下的稳定方案与工程实践

1. 项目概述:为什么Flutter里拿不准一张图的宽高,会卡住整个UI流程? 在Flutter开发中,“图片宽高获取”这六个字看似简单,但背后藏着大量新手栽过跟头、老手也常临时翻文档的实操痛点。我带过的几个跨端项目里&#xf…

2026/10/15 10:58:03 阅读更多 →
往复式压缩机环状阀计算标准:从经验画图到公式校核的工程实践

往复式压缩机环状阀计算标准:从经验画图到公式校核的工程实践

简介:这份《往复式压缩机环状阀计算标准》是沈阳气体研究所内部使用的企业标准,面向压缩机设计、维护工程师及气阀研发人员,用于指导往复式压缩机环状气阀的设计计算。标准系统梳理了气阀直径、阀隙马赫数、阀片升程、气阀压力损失、阀隙流速…

2026/10/15 10:58:03 阅读更多 →
机器人日志系统架构设计与实操:从记录、关联到回放

机器人日志系统架构设计与实操:从记录、关联到回放

1. 机器人日志系统到底在解决什么问题做机器人开发的人都有一个共同的痛:机器人跑起来之后,你根本不知道它内部发生了什么。传感器数据在飞、决策模块在算、执行机构在动,但一旦出现异常行为——比如突然停住、路径偏移、动作抖动——你只能靠…

2026/10/15 10:56:57 阅读更多 →

最新新闻

SpringBoot游戏周边商城实战:电商系统开发全解析

SpringBoot游戏周边商城实战:电商系统开发全解析

1. 项目概述与核心价值 作为一名在Java全栈开发领域摸爬滚打多年的老手,我见过太多毕业设计项目沦为"玩具级"演示品。但这个基于SpringBoot的游戏周边商城设计,却是个能真实锻炼工程能力的实战项目。它完整覆盖了电商系统核心模块:…

2026/10/15 11:46:34 阅读更多 →
DreamZero:14B视频世界模型如何实现零样本机器人实时闭环控制

DreamZero:14B视频世界模型如何实现零样本机器人实时闭环控制

1. 从"看懂视频"到"动手干活":DreamZero 到底在解决什么断层第一次看到"把 14B 视频世界模型变成可实时闭环执行的零样本机器人策略"这个说法,我脑子里冒出来的第一个念头是:视频生成模型和机器人控制之间&…

2026/10/15 11:46:34 阅读更多 →
STM32 SPI例程详解:轮询、中断与DMA实现

STM32 SPI例程详解:轮询、中断与DMA实现

简介:STM32 SPI通信例程,面向嵌入式开发者,用于快速掌握SPI外设的配置、收发与调试流程,代码经实际测试通过。资源包共2个文件(1个C源文件、1个头文件),压缩后仅约2KB,结构精简&…

2026/10/15 11:46:33 阅读更多 →
朱梁递归函数定理:算法分析与程序验证的数学基础

朱梁递归函数定理:算法分析与程序验证的数学基础

1. 数学理论背景解析朱梁真理递归元嵌套函数定理是近年来函数论领域的重要突破,这个定理的命名来源于其发现者朱梁教授在递归函数理论研究中的开创性工作。该定理的核心在于建立了一套完整的递归元嵌套函数的收敛性判定体系,为复杂递归系统的分析提供了强…

2026/10/15 11:46:33 阅读更多 →
热电阻与热电偶分度表:嵌入式温度查表原理与工业级实现

热电阻与热电偶分度表:嵌入式温度查表原理与工业级实现

简介:本资源是面向工业测控工程师、嵌入式开发者及自动化专业学生的温度传感器实用工具包,聚焦热电阻(如PT100/PT1000)与八类主流热电偶(S/B/K/E/T/J/N/R型)的精确查表需求,解决现场温度标定、仪…

2026/10/15 11:46:33 阅读更多 →
RHEL 8存储管理实战:Stratis与VDO的池化、去重与组合使用

RHEL 8存储管理实战:Stratis与VDO的池化、去重与组合使用

1. 为什么要在RHEL 8上折腾Stratis和VDORHEL 8把存储管理拆成了两条腿走路:一条是Stratis,面向本地磁盘池的"傻瓜式"卷管理;另一条是VDO,面向块设备的"压缩去重"层。很多人第一次听到这两个词的反应是"L…

2026/10/15 11:45:26 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →