资讯详情

数控机床96路I/O扩展:协议芯片选型、硬件设计与SPI驱动验收

📅 2026/10/29 22:00:00 | 华诺云谱 👁 阅读
数控机床96路I/O扩展:协议芯片选型、硬件设计与SPI驱动验收
简介A992D产品数据手册.pdf面向数控系统硬件研发与嵌入式开发人员聚焦三菱Mitsubishi与发那科FANUC数控系统I/O通讯协议芯片的核心设计帮助具备一定研发能力的团队缩短方案落地与产品导入周期。手册围绕芯片地址资源与选型思路展开覆盖16进16出、32进32出、64进64出、96进64出、96进96出等多种配置最多支持3个通道用户层兼容SPI协议采用QFN小体积封装并支持客户二次开发与个性化加密。资源含1个PDF文件压缩包约845KB篇幅紧凑、便于随查随用。内容按产品概述、参数列表、电气特性、静态电流、I/O工作电压、封装信息、结构介绍、订货信息与引脚功能逐层组织并列出A992D、F992D、M990D、F992A、M990A、A992A、A110A等适用型号与技术支持渠道可直接用于器件选型、原理图设计与接口调试。目前已有258人学习。1. 从一台要加 96 路 I/O 的老机床说起给一台老机床补 96 路输入、96 路输出团队第一个分歧通常出在协议栈上自己啃三菱数控系统与发那科数控系统的 I/O 协议还是直接选一颗现成的协议芯片。前者要养一个能把 I/O Link 时序调到不丢帧的人后者只要把电源和 SPI 做干净。A992D 这类从站协议芯片属于后者QFN48、6mm×6mm、内核 1.2V、I/O 3.3V把 96 进 96 出、两路手轮脉冲和三菱远程 I/O 的地址分配都封在片内用户侧只留一个 SPI 从站口和几根状态线。它适合有硬件底子、想把 I/O 单元做成自己产品并留出二次开发空间的团队不适合只想买成品模块、连原理图都不想动的人。整篇按选型、硬件、驱动、避坑、验收的顺序推每一步都能直接对着做。2. 选型与参数核对七款型号、96×96 地址资源怎么落到具体料号选型这一步最容易犯的错是拿着一张“96 进 96 出”的宣传页就下单等板子回来才发现手轮通道没有或者只支持一家系统。手册里那张产品参数列表本质上是一张三维切分表系统侧、地址资源、手轮通道。2.1 型号矩阵先按系统、手轮、地址资源三刀切手册明确的通用信息覆盖 A992D、F992D、M990D、F992A、M990A、A992A、A110A 这一组型号。其中参数列表里给全的三款是这样的型号适宜系统内核电压I/O 电压X 地址Y 地址手轮通道应用层协议A992A三菱 发那科1.2V3.3V96962标准 TTL 协议F992A发那科1.2V3.3V96962标准 TTL 协议M990A三菱1.2V3.3V9696无标准 TTL 协议切分逻辑很清楚只做发那科系统就选 F 开头只做三菱系统选 M 开头两边都要做就选 A 开头要接手持单元就必须带手轮通道的型号纯 I/O 扩展不需要手轮选无手轮的版本还能省一点成本和布线面积。系列内还有 16 进 16 出、32 进 32 出、64 进 64 出、96 进 64 出等地址档位可选最多三个通道。做课程设计或小批量验证通常没必要一上来就上 96×96先用小地址档位把链路跑通再切到大地址版本PCB 改动量很小。提示型号后缀的字母差异不只是地址资源还牵扯到起始地址的分配方式。同一块板上混用不同系列起址规则要各算各的别按一个模板套。2.2 电气边界1.2V 内核与 3.3V I/O 的余量怎么留手册给的工作条件有两套数字一套是推荐工作范围一套是电气特性表里的极限两者不能混用。整理成一张能贴在设计评审上的表参数最小典型最大备注内核 VCC1.14V1.2V1.26V超出推荐范围不保证正常工作I/O VCCX2.375V3.3V3.46V兼容 2.5V I/O 场景工作温度-40℃—85℃结温 TJ 上限 100℃储存温度-65℃—125℃—ESDHBM——1000V产线仍要按常规防静电做ICCVCCX3.3V—2.8mA—静态电流实测数据ICCX加载时—2.45mA2.74mA满载时按 2.74mA 估功耗几个实际含义一是内核 1.2V 的容差只有 ±0.06V用普通可调 LDO 电阻分压很容易被电阻精度和温漂吃掉所以反馈电阻至少用 1% 的最好选固定输出或带 trimming 的精密 LDO二是 I/O 驱动能力分 4mA、8mA、16mA、24mA 几档电平标准支持 LVCMOS、LVTTL、LVDS、SSTL、HSTL 这类基于最小 1/2 I/O 电压的标准接 422/485 驱动器时按 4mA 档算负载就够了不要拿 24mA 档去带长线三是整片功耗在十几毫瓦量级热设计压力不大真正压温度的是旁边的 LDO 和 422 收发器。2.3 48 脚定义哪些脚一定要先画对QFN48 的管脚在手册里是逐脚列出的做原理图符号时建议把这十几根关键脚单独拉一个区域其余 NC 直接不引出脚号名称用途1 / 25 / 36Vcc-3V3I/O 供电12Vcc-1V2内核供电2 / 26Vss电源参考源 0V3Ic_EN芯片选通不选通则不工作48IC_/RST复位1148M_CLK外部有源晶振输入9 / 10LED1 / LED2Link error / Link ok32 / 33 / 34 / 35M_DO / M_DI / M_CLK / M_CSSPI 从站接口47MPG_A1 / B1 / A2 / B2两路手轮 HA、HB 信号3841JD1B_RO / JD1B_DIB 口与 A 口I/O Link 端口4244RIO_DI / RIO_DE / RIO_RO三菱远程 I/O 端口结构上这颗芯片是外置晶体时钟的从站架构时钟从片外进、协议在片内解这样做的目的是把温漂压在晶振那一侧通讯稳定性更容易做。管脚定义与 F992D、M990D 完全兼容意味着同一块 PCB 可以换料号试不同系统和地址档位这对做多版本产品的团队很实用做毕设的话也方便一块板验证两种配置。2.4 订货信息和文档版本也要核对封装是 QFN48、6mm×6mm无铅制程符合 RoHS物质成分信息按 IPC-1752 标准文件给。手册的版本记录值得看一眼B0.1 是初始版B0.2 纠正了通信定义脚的功能名称、纠正了三菱系统起始地址分配描述并更新了库文件B0.3 增加了手轮脉冲通道电路设计的注意事项。如果你手上拿到的是早期版本脚名和起始地址那两段很可能和实物对不上先确认版本再画图这一步能省掉一次改板。3. 硬件设计落地电源、48MHz 时钟与 422/485 输出的四段电路芯片本身不复杂翻车基本都发生在外围。把手册第 6 章的设计示例拆成五段每段给一个可执行的判据。3.1 电源30mV 纹波是硬指标手册要求 I/O 用 3.3V、内核用 1.2V电源纹波控制在 30mV 以下建议用高纹波抑制、低纹波输出的线性精密 LDO 降压输出侧按手册或高于手册要求追加较大容量滤波电容进芯片前加磁珠和旁路电容。落到具体做法上我一般这样排输入端一个大容量电解或钽电容做储能LDO 输出先放 10μF 陶瓷再串一颗磁珠磁珠后面放 0.1μF 加 1nF 做高频旁路越靠近 1 脚、12 脚、25 脚、36 脚越好。磁珠的直流电阻要算进压降1.2V 这种低压轨上一颗 0.5Ω 的磁珠在 3mA 下只掉 1.5mV 无所谓但如果你的 LDO 输出精度本来就贴着 ±2%那点余量就不该再让给磁珠。判据是实测上电后用示波器在芯片电源脚上量带宽限制打开、地线用弹簧短接峰峰值超过 30mV 就先查 LDO 选型和输出电容的等效串联电阻不要急着换芯片。3.2 48MHz 有源晶振为什么不用无源手册写得很明确外部有源晶振频率 48MHz要求宽温、低失真、低温漂电源接入前要设计磁珠和旁路滤波电容。这里用有源而不是无源原因是片内没有可调负载电容的振荡电路无源晶振的起振裕度、负载电容匹配、负阻抗这些事全得自己扛低温下起振慢甚至不起振的玄学问题多半出在这。有源晶振把振荡电路封在器件里出来就是方波代价是多一个电源脚、多几毛钱、多一条要走干净的电源。布局上晶振尽量贴近 11 脚走线短、不要跨分割、下方铺完整地晶振电源单独从 LDO 拉一条细线加 0.1μF 旁路别和 422 驱动共用一段。48MHz 已经算射频了这段线处理不好通讯误码率会莫名其妙地随温度变。3.3 使能、复位和两颗状态灯芯片有选通IC_EN设计在不选通的前提下芯片无法工作——这句话是字面意思不是“建议”。很多板子第一次上电没反应量电源正常、晶振正常、SPI 也有波形最后发现 IC_EN 悬空。接法上IC_EN 和 IC_/RST 都要有确定电平不要靠内部弱上拉赌运气。常见做法是用主控的一个 GPIO 同时控制使能和复位或者干脆用 RC 加复位芯片给一个稳定的上电时序先给 3.3V延时后再拉高 IC_EN。两颗 LED 也建议一定画上LED1 是 Link error、LED2 是 Link ok调试阶段这两颗灯能省掉一半的示波器时间——灯不亮先查供电和使能灯亮 error 再查通讯参数和接线。3.4 通讯输出级TVS 和阻抗匹配不要省面向数控系统那一侧的物理层手册建议选工业级 422、485 通讯驱动器件工作电压 3.3V发那科和三亚系统各有一套基本电路。发那科侧走 JD1A_14、JD1B_14 这八根信号三菱侧走 RA、RB。手册反复强调为提高抗干扰能力建议对这些信号做阻抗匹配和 TVS 保护设计。这句话在实验室里看不出价值装到机床上就体现出来了。机床现场是典型的强干扰环境主轴启停、变频器、接触器动作都会在长线上感应出尖峰。TVS 选低结电容的型号串在连接器侧而不是芯片侧串联匹配电阻按线缆特性阻抗取通常 22Ω 到 33Ω 之间试位置尽量靠近驱动器件输出端。差分对走等长、尽量同层两条线之间不要夹其他信号。3.5 手轮脉冲通道LV14 整形不是可选项两路高速手持单元脉冲端口只收方波手册要求必须选工业级 74 系列 LV14 低工作电压高速驱动芯片做设计可实现宽电压波形整形也可作为信号整形缓冲驱动否则手轮脉冲信号可能会错乱或者比较容易损坏芯片。B0.3 版手册专门加了这一条说明这是踩过坑的。手轮线通常很长从操作面板一路拖到电柜线上的边沿会被拉缓、叠加振铃直接怼进芯片的输入端慢沿加上过冲就是典型的输入级损伤场景。加一级 LV14 做施密特整形兼缓冲成本几毛钱能同时解决信号质量和端口保护两件事。整形级要靠近芯片放输出到芯片那一段走线越短越好输入端再做一次 RC 加 TVS。4. SPI 从站驱动寄存器映射、位操作时序与主控移植这颗芯片面向用户的一侧就是一个 SPI 从站X 输入和 Y 输出全部通过 SPI 和上位机单片机或 CPLD交互。手册给的驱动案例是 8051 位操作版看懂那几十行移植到任何平台都是十分钟的事。4.1 寄存器映射读写只差一个 bit7地址字节的最高位是读写标志0 表示读1 表示写。手册给的分配是这样的方向地址含义读0x010x0CY0Y1112 字节输出状态写0x810x8CX0X1112 字节输入写0x91三菱第 1 卡起始地址默认 0写0x92三菱第 2 卡起始地址默认 1写0x93三菱第 3 卡起始地址默认 296 进 96 出正好是 12 字节一个字节 8 点地址和点位一一对齐。0x910x93 这三个地址只在三菱系统下有效发那科系统不使用起始地址由系统侧的 PLC 参数分配Xm 区分 16 个字节、Yn 区分 12 个字节。理解这张表的关窍在于读回来的 Y 区不是“我要输出什么”而是“芯片当前输出状态”写下去的 X 区也不是“我要读什么”而是“送给系统的输入值”。方向感搞反了程序能跑但点位全错。4.2 位操作版驱动8051 上的最小可用实现手册给的案例是四个 sbit 加两个函数片选低有效时钟上升沿写和读高位先行。整理后的写函数/* 8051 位操作从站驱动CS 低有效CLK 上升沿由从站采样MSB 先行 */ sbit SPI_CS P1^1; /* 片选低电平选通 */ sbit SPI_CLK P1^0; /* 时钟上升沿写/读 */ sbit SPI_DI P1^2; /* 主站输出到芯片 */ sbit SPI_DO P1^3; /* 芯片输出到主站 */ void W_SPI(unsigned char ad, unsigned char da) { unsigned char i; SPI_CS 0; /* 帧开始 */ for (i 0; i 8; i) { /* 先送 8 位地址ad 的 bit7 必须为 1 */ SPI_CLK 0; SPI_DI (ad 0x80) ? 1 : 0; ad 1; SPI_CLK 1; /* 上升沿锁存 */ } for (i 0; i 8; i) { /* 再送 8 位数据 */ SPI_CLK 0; SPI_DI (da 0x80) ? 1 : 0; da 1; SPI_CLK 1; } SPI_CLK 0; SPI_DI 0; SPI_CS 1; /* 拉高结束一帧 */ }读函数多一个细节地址发完之后要空一个时钟给从站准备数据的时间然后再逐位在上升沿之后取样。unsigned char R_SPI(unsigned char ad) { unsigned char i, dat 0; SPI_CS 0; for (i 0; i 8; i) { /* 地址字节bit7 为 0 表示读 */ SPI_CLK 0; SPI_DI (ad 0x80) ? 1 : 0; ad 1; SPI_CLK 1; } SPI_CLK 0; /* 空一拍等从站把数据摆上 DO */ for (i 0; i 8; i) { SPI_CLK 1; /* 上升沿后采样 */ dat 1; if (SPI_DO) dat | 0x01; SPI_CLK 0; } SPI_CS 1; return dat; }参数说明就三句话ad是地址字节写操作必须自己把 bit7 置 1也就是 0x01 要写成 0x81da是待写数据高位先行返回值是读到的字节全 0 或全 0xFF 基本可以判断为时序不对或者片选没生效。注意手册示例的主函数里写的是读 0x09 再写 0x89注释却标着 Y0 和 X0。按 4.1 的映射0x09 对应的是寄存器 8也就是 Y8 和 X8。这不是笔误式的无关紧要照抄注释会让人误判点位映射我见过有人因此把整张点表偏移了 8 个点。4.3 搬到 STM32 或 CPLD模式 0、MSB 先行、5MHz手册写明 SPI 是从站方式与客户 CPU、CPLD 连接传输速率由主站设定理论支持 20M 带宽建议 5M 为宜。这个建议值得听20M 是器件能力上限不是你的板子能稳住的上限长排线、非屏蔽、和 422 走在一起的场合跑到 10M 以上误码率会明显上升。主控侧用硬件 SPI 时参数是 CPOL0、CPHA0、MSB 先行、8 位数据宽度。因为从站在上升沿采样、主站在下降沿移位这和位操作版的时序是对应的。HAL 库里的封装大概是这样/* STM32 侧封装一次事务 地址字节 一个数据字节 */ #define CS_PORT GPIOB #define CS_PIN GPIO_PIN_0 static inline void cs_low(void) { HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET); } static inline void cs_high(void) { HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); } /* is_write 1写寄存器is_write 0读寄存器 */ uint8_t bus_xfer(uint8_t addr, uint8_t *data, uint8_t is_write) { uint8_t tx[2], rx[2] {0}; tx[0] addr; /* 写操作时调用方传入 0x8x */ tx[1] is_write ? *data : 0x00; cs_low(); HAL_SPI_TransmitReceive(hspi1, tx, rx, 2, 10); /* 用 2 字节一次性收发避免帧间 CS 抖动 */ cs_high(); if (!is_write) *data rx[1]; /* 读操作把第二个字节带回去 */ return rx[0]; }几个要点一是用 2 字节一次性收发而不是先发地址再单独收数据这样片选在整个事务里保持低电平不会出现半个字节被切掉的偶发问题二是 SPI 预分频要算准主频 72MHz 分 16 是 4.5MHz分 8 是 9MHz建议取 4.5MHz 或更低落在手册建议的 5M 附近三是 CPLD 侧自己写状态机的话就按“CS 下降沿启动、8 个时钟取地址、再 8 个时钟收发数据、CS 上升沿结束”画四个状态中间不要插等待周期。如果板上有多颗同类芯片并联在一条 SPI 上每颗单独一根片选时钟和数据共用注意片选线上的上拉电阻别省主控复位瞬间 GPIO 是高阻多颗芯片同时被选通会让总线打架。4.4 三菱多卡地址0x91、0x92、0x93 怎么用三菱系统的远程 I/O 最多支持 8 个单元模块分配串行连接占用的站点通道数要小于 8。起始地址不靠拨码开关靠 SPI 写 0x91、0x92、0x93 三个地址来指定第 1、2、3 卡的起始地址默认分别是 0、1、2。初始化流程通常是上电后先拉高 IC_EN等链路稳定然后把每颗芯片各自的卡号写进去再开始正常的 X/Y 周期刷新。写卡号这个动作只需要做一次但必须在进入主循环之前完成中途掉电重启要重做。这里有个容易忽略的约束卡号决定的是地址段的起点不是点数。96 点的卡占 12 个字节如果你的系统分配区里两块卡的范围重叠了表现出来就是“前面 8 个点正常、后面的点乱跳”很容易被误判成硬件问题。4.5 回环自测把读回来的 Y 写进 X手册示例的主循环其实是这个思路读一个 Y 字节再把它写到对应的 X 字节形成一条自测回环。void main(void) { unsigned char rdata; Delay(1000); /* 上电延时等电源和晶振稳定 */ while (1) { rdata R_SPI(0x09); /* 读 Y8 的当前输出状态 */ W_SPI(0x89, rdata); /* 写到 X8系统侧应能看到同样的位 */ Delay(10000); } }这个写法在联调阶段非常好用它不依赖数控系统只要主控、SPI、芯片三者通了输出点亮什么输入区就能读到什么用万用表或者上位机界面一看就知道链路对不对。正式产品里当然要换成真正的点表映射但这十几行值得单独留一个测试固件版本后面验收还会用到。5. 避坑与排查五个最容易在上电第一次就翻车的点这一章按“现象 → 原因 → 解决”写都是第一次点亮时高频出现的。5.1 手轮转起来点乱跳甚至芯片发热损坏现象手轮慢慢转还可以转快了就丢点或者方向乱更严重的是一段时间后手轮通道彻底不响应芯片发烫。原因手轮信号从操作面板到电柜走线长边沿被线缆电容拉缓叠加反射振铃直接进芯片输入脚。手册 B0.3 版专门加了这条注意事项说的就是这种情况。解决在输入端加一级工业级 74 系列 LV14 低工作电压高速驱动器件做整形兼缓冲输入端配 RC 和 TVS整形级尽量靠近芯片。加完这一级手轮的“高速”才真正成立。5.2 上电没反应电源、晶振、波形全正常现象3.3V 有、1.2V 有、48MHz 有波形SPI 也有时钟但读回来全是 0 或者全是 0xFF两颗状态灯都不亮。原因IC_EN 没被拉高芯片处于未选通状态或者 IC_/RST 悬空处于不确定态。解决把 IC_EN 和 IC_/RST 都接到确定电平上电时序做成“电源稳定 → 延时 → 释放复位 → 拉高使能”。排查顺序也固定下来先看灯灯不亮查使能和供电灯亮 error 再查通讯。5.3 通讯时通时断温度一高就更明显现象常温跑一天没问题机柜温度上来后开始偶发丢帧或者用手摸一下板子就好了。原因电源纹波超标。手册要求 30mV 以下很多人只用一颗 10μF 陶瓷就算完了LDO 的环路裕度和负载瞬变根本没考虑加上磁珠选型偏大1.2V 轨上的余量被吃掉。解决输出侧按手册或高于手册要求加大滤波电容进芯片前加磁珠和旁路反馈电阻用 1% 精度。实测纹波时用弹簧地线、开带宽限制别拿长地线鳄鱼夹量出来的数字当结论。5.4 点位整段偏移前面正常后面全乱现象前 8 个点或者前 16 个点是对的往后整体偏移一段改程序怎么改都对不上。原因两个可能。一是三菱侧多卡的起始地址没写或者写错0x910x93 三张卡的地址段重叠二是发那科侧 PLC 参数里 Xm 分配了 16 个字节、Yn 分配了 12 个字节和程序里按 12 字节算的偏移量对不上。解决先把卡号写入动作放到初始化最前面并加返回值校验再把点表做成一张显式的偏移表X 区和 Y 区分别记录字节偏移和位偏移不要用“起始地址 序号”这种隐式算法。5.5 照抄示例代码读出来永远是同一个值现象不管读哪个地址返回的字节都一样或者只在第一次读的时候对。原因片选时序不对。有的实现把 CS 在字节之间拉高了有的把 CS 一直拉低导致帧边界丢失还有的把 CPOL/CPHA 配成了模式 3位序搞成了 LSB 先行。解决先确认四件事——CS 在整个事务期间保持低、时钟空闲为低、上升沿采样、高位先行。用逻辑分析仪抓一次 16 个时钟的波形对着 4.2 节的位操作代码一位一位比比读十遍文档快。6. 联调与验收逐点扫描表怎么建、答辩怎么讲到了验收这一步最忌讳的是“灯亮了就算通”。我的做法是建一张逐点扫描表把 96 进 96 出全部过一遍用 4.5 节那个回环固件当被测对象主控按顺序往 X 区写单点 1再从 Y 区读回来比对。验收项方法判据供电示波器测 3.3V 与 1.2V 电源脚纹波峰峰值 30mV电压在推荐范围内时钟探头测 11 脚48MHz 方波常温与高低温下起振正常链路读任意 Y 寄存器返回值随输入变化不是恒定 0 或 0xFF点位96 点逐点写 1 再读回无错位、无邻点串扰、无丢点手轮两通道分别正反转计数方向正确高速转动不丢点系统联机接数控系统跑实际程序系统侧点位与本地点表一一对应温漂高低温箱 -40℃ 与 85℃ 各保持 2 小时通讯不中断点位不错乱这张表的价值不只是自测答辩的时候它就是你的工作量证明。评委最爱问的三个问题基本都能被它挡住你怎么保证 96 个点都是对的逐点扫描、极端温度下会不会出问题温漂项、凭什么说这套方案可落地系统联机项。讲的时候按“需求 → 选型依据 → 硬件五段设计 → SPI 驱动 → 测试数据”的顺序走中间不要跳步骤尤其别跳过选型依据那是唯一能体现你做过取舍的部分。代码不用全贴把寄存器映射表和一次完整的事务波形放上去比贴三百行驱动有用。血泪经验是我早期做类似项目时验收只测了前 32 个点觉得“剩下的都一样”结果交付后客户发现第 65 点起全部偏移一位回头查是初始化里卡号写入的顺序问题。从那以后我每次出板子都强制走一遍逐点扫描表哪怕只改了一个电阻。希望帮到你。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑