ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AX58100 EtherCAT从站开发实战:从SPI配置到电机编码器控制

AX58100 EtherCAT从站开发实战:从SPI配置到电机编码器控制 做EtherCAT从站这件事最折磨人的往往不是功能本身而是“看着网上资料不少动手全是坑”。我这次项目要把一台42步进电机和一个增量编码器接入现有EtherCAT运动控制系统主站用的TwinCAT从站控制器直接选了AX58100。从选型、EEPROM烧录、SPI配置到电机和编码器跑通前后花了三周其中三分之一时间都耗在SPI通信的那些诡异问题上。这篇把我验证过的硬件架构、初始化流程、SPI避坑点、电机和编码器实现思路完整梳理一遍给想用AX58100做EtherCAT从站的朋友一份可以直接复现的参考。1. 项目整体设计与硬件架构1.1 从站控制器的选型逻辑为什么是AX58100先聊选型。市面上常见的EtherCAT从站控制器ESC主要就是ET1100、LAN9252、AX58100这几款。ET1100非常稳定官方资料多但外部要接两颗以太网PHY变压器、差分走线、匹配电阻一大堆对小团队来说BOM成本和Layout难度都不低。LAN9252内置PHY硬件省事但价格和供货情况这几年波动比较大而且寄存器映射的细节各家实现有差异。AX58100的优势在于内置双100M以太网PHY芯片内部已经集成了EtherCAT从站控制器的核心功能包括FMMU、SyncManager、分布式时钟DC、以及各类过程数据接口。外部MCU只需要通过SPI或并口访问DPRAM就能完成EtherCAT数据交换。对步进驱动器、远程I/O、小型伺服这类设备来说这颗芯片的集成度刚好踩在“够用”和“省钱”之间。我选它的另一个理由是官方参考设计直接给了SPI接MCU的典型电路硬件照抄就能少踩很多坑。有人可能会问为什么不直接上带EtherCAT功能的伺服驱动芯片因为项目里电机、编码器、控制逻辑都是自己定义的我需要的是“通用的从站接口”而不是一套绑定好的伺服方案。AX58100这种“MCU做应用 ESC做通信”的拆分方式反而灵活后续换主控、改控制策略都不影响网络侧。1.2 EtherCAT从站里的数据流动共享内存模型理解AX58100最核心的一点是EtherCAT帧本身不是由MCU处理的而是由AX58100内部的ESC内核处理的。主站发下来的帧经过AX58100时它会根据FMMU和SyncManager配置把属于自己的那部分数据提取到DPRAM里MCU要做的事情就是通过SPI去读写这片DPRAM。打个比方AX58100相当于你家门口的信箱主站是邮递员。邮递员把信件投进信箱不会敲门提醒你MCU就定时去信箱看一眼拿走新到的指令把写好的反馈塞回去。整个过程里MCU完全不关心信封是怎么送来的、走的是哪条路只关心信箱里是不是有新内容。所以整个系统的架构可以拆成三层通信层主站TwinCAT等通过网线连接AX58100EtherCAT帧解析、地址匹配、同步都由ESC硬件完成。接口层MCU通过SPI访问AX58100的寄存器和DPRAM完成PDO过程数据的读写。应用层MCU内部实现对象字典、电机控制逻辑、编码器数据采集并把数据映射到PDO通道。我第一次调的时候犯了个错误总想着在MCU里解析EtherCAT帧后来才发现完全没必要。你只要把SPI这层打通主站配置好PDO映射数据就自动在DPRAM里“就位”了。1.3 这套方案能用在哪些设备上这套架构通用性很强。我做的是“步进电机 编码器”从站但同样的代码框架换个应用逻辑就能做步进驱动器从站接收速度/位置指令输出脉冲或PWM反馈编码器位置。远程I/O从站SPI读写几个GPIO扩展芯片把输入输出状态映射到PDO。工业网关把EtherCAT转成UART、CAN、Modbus等总线协议。多轴联动设备靠EtherCAT的DC分布式时钟让多个从站在同一时刻同步采样和输出。如果你以后要做的设备需要“主站周期下发指令 本地实时控制 周期反馈状态”这套架构基本可以直接套用。2. 从站协议栈与初始化先让AX58100“开口说话”2.1 ESC、协议栈、对象字典的分工新手最容易懵的一件事是买了个AX58100模块回来焊好板子上电发现TwinCAT扫描不到从站于是以为是芯片坏了。其实AX58100只是一块硬件它不会自己“变成”一个完整的EtherCAT从站。要让主站正确识别并从INIT跑到OP你还需要一套运行在MCU上的从站协议栈代码。从站协议栈干的事情包括处理主站下发的AL控制命令、维护EtherCAT状态机INIT、PREOP、SAFEOP、OP、解析邮箱通信CoE等、管理对象字典、把PDO数据映射到应用变量。这部分代码推荐直接用倍福的SSC工具生成然后移植到你的STM32或其它MCU工程里不建议自己从零写。SSC生成时选好ESC型号、PDI接口SPI、目标MCU生成出来的代码基本就是完整的从站框架你要做的只是填应用逻辑。对象字典Object Dictionary则是主站和从站之间的“协议语言”。比如主站要改目标速度它会写对象字典里某个索引如0x60FF从站协议栈收到后把值更新到内存变量你的应用代码读取这个变量换算成脉冲频率输出。没有对象字典主站就不知道该怎么跟从站“对话”。2.2 EEPROM烧录与PDI模式这个坑让我卡了两天AX58100上电时会从外部EEPROM里读取ESC配置。EEPROM里存了什么包括PDI接口模式SPI还是并口、DPRAM大小、是否有分布式时钟、默认SyncManager配置等。如果EEPROM里没有数据或者配置和你的硬件接法对不上主站可能会出现“能检测到链路但扫描不到从站”的情况。我最初就踩了这个坑SPI模式写好了但EEPROM里没烧录配置AX58100可能默认工作在并口模式SPI发过去毫无反应。后来用官方烧录工具把SSC生成的EEPROM镜像写进去并明确把PDI配置改成“SPI模式”上电后TwinCAT立刻就能识别到设备。EEPROM烧录的注意点确认EEPROM的I2C地址、电压和AX58100手册一致我用的是Microchip的24AA02E48地址线和上拉电阻别接错。烧录前先读一次EEPROM内容避免把原有配置或者出厂信息覆盖掉。烧录完成后断电重新上电让AX58100重新加载EEPROM配置再跑主站扫描。如果芯片一直复位或者扫描异常优先怀疑EEPROM里PDI模式配置其次才是电路问题。此外AX58100的复位引脚、中断引脚、SPI片选引脚都要按参考设计接好。复位引脚在调试期我直接用MCU的GPIO控制方便出问题时手动复位芯片。2.3 从INIT到OP把状态机跑通EtherCAT从站状态机是主站控制的但它需要从站应用配合。状态机大致是INIT - PREOP - SAFEOP - OPINIT上电后默认状态只允许读寄存器邮箱通信还没建立。PREOP邮箱通信建立主站可以读写对象字典。SAFEOP过程数据开始交换但从站的输出处于安全状态通常输出不使能。OP过程数据正常交换从站输出真正生效电机可以动了。从站协议栈生成代码以后这些状态切换逻辑基本都写好了你要检查的是应用钩子函数有没有在“规定时间”内完成。比如主站要求进入OP从站必须在超时前把AL状态寄存器更新为OP如果应用代码里某个循环耗时太长或者中断没处理好主站就会报“从站未就绪”之类的错误。排查状态机问题的实用方法在TwinCAT的从站信息窗口看当前状态和错误码同时在STM32工程里用串口打印AL状态变化。把两端状态对上就能快速定位是主站没下发命令还是从站没回应。3. SPI配置避坑手册这部分的坑我替你踩完了3.1 SPI模式与时钟频率先确认CPOL/CPHAAX58100作为SPI从机通常支持标准的SPI Mode 0CPOL0CPHA0和Mode 3CPOL1CPHA1。绝大多数官方例程默认是Mode 0。听起来简单但实际调试时很多人第一反应是“我MCU用Mode 0不就行了”结果SPI读回来全是0xFF或0x00。我第一次也是这么翻车的。后来拿示波器抓CLK和MISO波形对照手册时序图才发现主控MCU的SPI相位配置和AX58100的要求不匹配。注意MCU的SPI外设“Mode 0”不代表所有从机都认必须看芯片手册的SPI时序图确认数据在哪个边沿采样、哪个边沿切换。SPI时钟频率方面我建议不要顶满芯片上限。AX58100的SPI接口能跑多快取决于手册和电路布局但我实测下来10MHz最稳短距离20MHz也问题不大再高就容易出偶发错帧。如果你板上走线比较长、又没有做阻抗匹配老老实实降到5~10MHz。EtherCAT过程数据量通常就几十个字节SPI速度低一点也不影响实时性。3.2 命令帧、地址映射和大小端读错数据先查这三个地方SPI访问AX58100不是像读普通Flash那样直接发地址就行。AX58100的SPI命令机制通常是先发命令/地址帧再传输数据。具体命令格式以芯片手册为准但常见逻辑是高位字节表示读写方向接着是目标地址之后才是数据字节。调试SPI时我总结出三个最容易被忽略的检查点命令帧格式很多所谓“SPI通信失败”其实是命令帧长度不对。比如MCU发了24位命令帧而AX58100期待的是32位多出的字节会把后续数据顶位。地址映射AX58100里有寄存器区、DPRAM区、EEPROM接口等不同地址空间。往寄存器区写数据没问题但不代表你能把该地址当PDO数据区用。先查地址映射表确认你的PDO起始地址是正确的。大小端EtherCAT协议栈和ESC普遍采用大端模式STM32的Cortex-M内核默认小端。读取16位或32位寄存器值时高低字节如果不做交换读出来的数值会非常“反直觉”。我建议从第一天就封装好ESC_ReadReg16、ESC_ReadReg32、ESC_ReadDPRAM这类函数内部统一处理字节序别在主应用里到处手工交换否则后期维护想哭。3.3 连续读数据与地址边界一次读一大块要小心主站周期下发PDO后MCU通常希望一次性把整个输出PDO读回来。这时要注意ESC内部地址空间的边界。不同ESC对SPI连续读的支持不一样有的芯片连续读会自动递增地址有的遇到边界会回卷。AX58100的数据手册里会给出地址映射和访问限制我的建议是把PDO映射地址设计成固定、连续的区域尽量让输出PDO和输入PDO的起始地址按页对齐。单次读取不要跨越手册里标明的页边界或区域边界。万一PDO横跨两个区域就拆成两次读取分别发命令。读DPRAM前先判断对应的SyncManager状态确认这一帧数据是完整的避免读到主站正在写一半的“半更新数据”。这个“半更新数据”问题很隐蔽。如果你发现从站偶尔反馈一个离谱的位置值其他时间都正常十有八九是在主站更新PDO的同一时刻去读DPRAM。解法是连续读两遍数据一致才采用或者用DC同步中断来触发读取。3.4 CS引脚、中断标志、看门狗三个隐藏杀手第一个隐藏杀手是CS片选信号。AX58100的SPI接口要求CS在整个命令帧传输过程中保持稳定低电平。如果MCU用软件GPIO模拟CS一旦中途被中断打断CS毛刺可能导致AX58100认为片选释放整个命令作废。最好的做法是用MCU硬件NSS或者至少在SPI传输期间禁止该GPIO中断。第二个杀手是中断事件寄存器。AX58100有一堆中断事件标志很多是“读后清”read-to-clear机制。我犯过的错是在中断处理函数里为了判断具体事件连续读了两次事件寄存器结果第一次读已经把标志清掉了第二次读到的是空值导致丢事件。正确做法是先一次性读回所有事件标志存到局部变量然后再逐位判断。第三个杀手是看门狗。ESC内部有看门狗机制如果主站和从站间通信超时从站会自动把输出置为安全状态。这个设计是为了安全但如果你主站周期是1ms而看门狗超时时间你设成了1ms稍微有点抖动就触发超时从站输出莫名关闭。我的经验是把看门狗时间设成主站通信周期的2到3倍比如1ms周期就设2.5ms~3ms但也不要太大否则失去了出故障保护输出的意义。3.5 一套可复用的SPI操作函数框架实际操作层面我强烈建议把SPI访问封装成独立模块。下面是一个简化版框架适合移植到自己的工程里uint8_t esc_cmd_buf[8]; int ESC_Read(uint16_t addr, uint8_t *buf, uint32_t len) { // 1. 根据AX58100手册构造命令帧读标志 目标地址 // 2. CS拉低 // 3. SPI发送命令帧 // 4. 根据len循环接收数据 // 5. CS拉高 // 6. 处理字节序如需 } int ESC_Write(uint16_t addr, uint8_t *buf, uint32_t len) { // 写命令类似只是方向相反 // 注意写建议先读后写避免覆盖同一地址的未修改位 }用这个框架的好处是所有寄存器访问、DPRAM读写的差异都集中在一个文件里。换MCU平台时只需重写这两个函数内部实现上层电机控制、编码器逻辑完全不用动。调试时还可以在函数里加日志开关打印每一笔SPI访问的地址和数据排查问题会快很多。4. 步进电机驱动把PDO指令变成轴上运动4.1 方案选择为什么用外部细分驱动器驱动步进电机有两条路一是用MCU直接控制驱动芯片如DRV8825、A4988二是MCU输出脉冲/方向信号接外部细分驱动器如TB6600、DM542由驱动器驱动电机。我选择外部细分驱动器。原因很现实第一42步进电机带负载以后电流不小驱动芯片和散热、保护电路都放在驱动器上可靠性更高第二外部驱动器自带的细分、电流、衰减模式调节通过拨码开关就能改调试期非常方便第三MCU只出脉冲和方向信号信号隔离也更好做不会把功率部分的干扰直接引到控制板。步进电机的核心参数是步距角和细分。42步进电机通常步距角1.8°也就是说转一圈需要200个整步。如果驱动器设置16细分那么每圈脉冲数就是200×163200个。这个值要换算成程序里的“每圈脉冲常数”后面位置控制全靠它。4.2 脉冲生成与加减速不能直接一个频率干到底MCU控制步进电机本质是输出频率可变的脉冲序列。最合理的做法是用定时器PWM输出Step脉冲另一个定时器或者定时器从模式负责记录脉冲个数。用STM32的HAL库做PWM输出核心参数是预分频PSC和自动重载ARRhtim3.Init.Prescaler 71; // 72MHz / 72 1MHz htim3.Init.Period 999; // 输出频率 1MHz / 1000 1kHz htim3.Init.CounterMode TIM_COUNTERMODE_UP; HAL_TIM_PWM_Start(htim3, TIM_CHANNEL_3);改变ARR即可改变脉冲频率从而改变电机速度。但要注意步进电机不像直流电机不能瞬间从0跳到高速否则会丢步甚至堵转。所以代码里要做梯形加减速加速阶段按一定斜率提高脉冲频率减速阶段按同样或更缓的斜率降低频率。我用的方法是不直接修改目标ARR而是维护一个“当前频率”变量每个控制周期比如1ms朝目标频率逼近一步。加速度大小根据电机惯量和负载实测调整。4.3 从TwinCAT下发的PDO到电机执行数据流拆解当我需要把主站下发的速度/位置指令变成脉冲时整个数据流是这样的TwinCAT周期任务把控制字、目标速度写入对象字典如0x6040控制字、0x60FF目标速度。从站协议栈把对象字典对应变量映射到输出PDOAX58100从EtherCAT帧中提取数据放入DPRAM。MCU通过SPI读到DPRAM中的目标值和模式。应用层判断控制字如果使能位有效把目标速度换算成目标脉冲频率启动定时器PWM。反馈路径上编码器计数值经协议栈映射到输入PDO主站周期读回形成半闭环。这里有一个设计选择是否使用CiA402标准对象字典。CiA402是为伺服驱动定义的状态机和控制字很标准但步进驱动器不一定要完全照搬。如果你的系统全是自己配套的主站和逻辑定义一个简化版PDO也完全可以。但考虑到后续可能对接不同主站和第三方控制器我建议对象字典按CiA402的子集做至少控制字、状态字、模式和各轴位置速度这些常用对象不要缺。4.4 ENA、方向、电流的细节三根线都有坑先说ENA。很多步进驱动器有ENA和ENA-用于使能/脱机控制。不同驱动器逻辑完全不同有的高电平使能有的低电平使能有的悬空默认使能。我一开始按某驱动器的“默认悬空就是使能”来设计结果换了一台驱动器后电机死活不转查了半天才发现是ENA极性反了。这里没有捷径任何驱动器第一次上电前都必须翻手册确认使能逻辑。DIR方向引脚相对简单高电平正转还是反转由驱动器定义接反了把DIR极性取反就行。但注意如果在电机高速运转时切换DIR对驱动器和电机冲击很大最好在脉冲停止后再换向。电流设置也很关键。步进电机的额定电流不等于驱动器输出电流驱动器上通常有电流拨码或电位器。电流设小了电机无力、容易丢步设大了电机发热严重长时间运行会退磁。42步进电机常见额定电流在1.5A左右实际按负载和驱动器散热条件调整。最后一个小建议调试电机时先把EtherCAT断开用MCU单独写一个“发10000个脉冲、频率500Hz”的测试程序确认电机能转起来、方向正确、计数器正常再接主站联调。这样可以把网络问题和电机问题彻底分开。5. 编码器反馈让位置数据真正闭环5.1 编码器选型增量A/B/Z还是绝对编码器步进电机本身是开环控制加了编码器以后可以检测丢步、堵转甚至实现简易全闭环。编码器选型上我这次用的是2500线增量编码器A/B/Z三通道差分输出。增量编码器的优点是便宜、接线简单、协议不复杂配合MCU定时器的编码器接口可以实现4倍频。2500线四倍频后就是每圈10000个计数对42步进电机的丢步检测来说分辨率完全足够。绝对编码器比如磁编码器AS5047P的好处是上电就知道绝对角度不需要回零抗干扰能力也强但成本高、协议复杂一些而且很多I2C接口的绝对编码器不适合高实时周期读取。如果你的设备要求断电重启后位置不丢失再考虑绝对编码器。否则增量编码器加一个上电回零流程成本低得多。5.2 信号接入与滤波接线决定了你后面是否省心编码器信号最容易出问题的地方不是代码而是硬件接线。我用的编码器是差分输出A/A-、B/B-、Z/Z-在MCU板上用AM26LS32这类差分转单端芯片接收抗共模干扰能力强很多。如果是单端输出记得在MCU引脚附近加RC滤波典型值100Ω串联、10nF对地。布线方面编码器供电不要和电机电源共路。步进电机启动瞬间电流能到几安培电源波动会直接耦合到编码器信号里。我在这套系统里把编码器供电和控制板数字电源分开各走各的稳压实测编码器读数稳定很多。另外编码器线和电机线千万别绑在一起走长距离尤其不要走同一个线槽。EtherCAT属于工业现场总线周围大概率有大功率设备编码器信号线必须用屏蔽线并且单端接地。5.3 STM32定时器编码器接口模式MCU帮你数脉冲STM32的定时器自带编码器接口模式A相接TI1B相接TI2芯片硬件自动根据相位差判断方向并加减计数完全不用CPU参与。用HAL库配置如下TIM_Encoder_InitTypeDef enc; enc.EncoderMode TIM_ENCODERMODE_TI12; enc.IC1Polarity TIM_ICPOLARITY_RISING; enc.IC2Polarity TIM_ICPOLARITY_RISING; enc.IC1Filter 0x0F; enc.IC2Filter 0x0F; HAL_TIM_Encoder_Init(htim2, enc); HAL_TIM_Encoder_Start(htim2, TIM_CHANNEL_ALL);看着简单但有一个必须处理的坑定时器计数器是16位的某些定时器是32位电机高速旋转时几千个脉冲可能很快就从0xFFFF翻到0x0000。如果不处理溢出位置反馈就会出现“瞬间归零”的诡异现象。我的处理方法是开启定时器更新中断在中断里累加一个32位变量把计数器溢出部分补回来。void TIM2_IRQHandler(void) { if (__HAL_TIM_GET_FLAG(htim2, TIM_FLAG_UPDATE) ! RESET) { if (__HAL_TIM_GET_COUNTER(htim2) 0x8000) pos_high 1; else pos_high - 1; __HAL_TIM_CLEAR_FLAG(htim2, TIM_FLAG_UPDATE); } }方向判断由硬件完成但方向改变时计数器的递增递减方向会变溢出处理也要跟着变。上面的示例只是示意实际建议把“读取计数 读取溢出次数”放在一个临界区内关中断读避免读到一半发生溢出更新。5.4 上传PDO与丢步检测从站反馈不再是摆设编码器数据采集到以后要打包进输入PDO主站才能周期读到。我的做法是定义一组输入PDO编码器位置32位、编码器速度32位、从站状态字16位、报警码16位。位置值单位直接用脉冲计数主站侧再根据“每圈脉冲数”换算成角度或毫米。有了位置反馈就能做丢步检测。步进电机开环控制最大的痛点是丢步不可知现在每毫秒主站下发目标位置MCU同时读取编码器实际位置把“目标位置”和“实际位置”做差。偏差超过设定阈值比如50个脉冲时从站可以直接报警或者自动补发脉冲修正。这套机制特别适合那些“丢了步但看着还在运行”的隐蔽故障场景。比如负载忽然增大、导轨进入阻力大的位置开环系统会悄然丢步等到末端定位才发现误差损失可能已经造成了。加了编码器反馈后即使不做全闭环也能及时报警停机避免批量报废。编码器回零方面增量编码器每次上电位置未知。我的方案是每次上电后让电机先低速找限位开关再把编码器计数器清零作为软原点。如果设备上电后不允许移动那只能换绝对编码器或者用Z信号每次上电后缓慢找Z脉冲对齐。6. 常见问题排查与速查表6.1 主站扫描不到从站现象TwinCAT扫描时报找不到从站或者扫描到但从站状态一直INIT。排查顺序网线、网口链路指示灯是否正常EtherCAT网口顺序有没有接反。电源和复位AX58100供电电压正常吗复位引脚是不是被拉住了EEPROM是否烧录了正确的配置PDI模式是不是SPI从站状态机协议栈有没有跑起来串口打印AL状态和主站期望状态对不对得上。我见过很多“扫描不到”其实是EEPROM没烧录导致的。如果板子是从没烧过EEPROM的新板先烧EEPROM再谈别的。6.2 SPI读写异常全FFFFFFFF这种SPI读回数据全是0xFF或0x00优先查三件事SPI模式CPOL/CPHA对不对。时钟频率是不是太高了降到1MHz试试。命令帧格式地址位、数据位长度是否和AX58100手册一致。如果是“大部分数据正常偶尔错一个字节”查CS时序、SPI线路长度、共地以及是否在传输中被打断。6.3 从站运行一段时间后输出关闭现象主站和从站状态正常但电机突然不转了状态字显示输出禁用。最大嫌疑是ESC看门狗超时。检查看门狗时间配置是否小于主站通信周期或者主站通信偶尔抖动触发超时。同时也要看DC配置是否正确如果主站启用了分布式时钟但从站没正确同步也可能导致周期错乱。6.4 电机发抖或者丢步这个通常和EtherCAT无关先把网络断开单独测电机。细分设置和脉冲频率是否匹配高频步进电机会丢步。加减速太陡加速度需要调小。驱动器电流设置不足电机输出力不够。ENA使能逻辑不对电机处于半使能状态。用编码器反馈做闭环时PID参数太激进也会引起抖动。6.5 编码器读数跳变或方向反了跳变问题优先查硬件编码器供电是否稳定不能用电机电源。信号滤波是否足够有没有接上拉/滤波。差分转单端的电路是否正确。软件上溢出处理是否做对了方向反了就在初始化时调换IC1/IC2极性。6.6 排查工具与顺序这张表建议存一下现象可能原因排查手段扫描不到从站EEPROM未烧录/PDI错误重新烧录EEPROM确认PDISPI扫描卡在INIT协议栈异常/从站未响应AL命令串口打印AL状态检查协议栈钩子函数SPI读回全FF/00模式/频率/命令帧格式错误示波器抓波形对照手册时序偶发SPI错帧CS毛刺/线路过长/干扰硬件NSS控CS降速检查共地运行中输出关闭看门狗超时/DC未同步调整看门狗时间核对DC配置电机不转ENA极性/电流设置/细分不对断开EtherCAT单独测试逐项排除电机丢步加减速太陡/电流不足降加速度提高电流检查机械负载编码器读数跳变供电干扰/滤波不足/溢出未处理分开供电加RC滤波检查溢出逻辑编码器方向反A/B相接线反/极性配置反交换A/B或取反IC极性排查顺序我建议固定在“硬件 - SPI - 主站配置”这个路径上。很多人一遇到问题就怀疑主站或者对象字典最后发现是编码器线松了白折腾半天。最后再分享一个小技巧从站代码里SPI底层函数一定要留日志开关。调试期把所有寄存器访问打印到串口配合主站侧的操作你能清楚看到主站写了什么、从站回了什么。等项目稳定以后再关掉日志性能一点不受影响。这套架构做到后面你会发现真正花时间的地方不是AX58100本身而是整个运动控制逻辑怎么拆得干净、怎么把数据通路理顺。希望这篇能帮你少走点弯路。
返回列表