尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

BISS协议解析:从SPI对比到英飞凌MCU实现高精度伺服控制

BISS协议解析:从SPI对比到英飞凌MCU实现高精度伺服控制 1. 从“门外汉”到初窥门径我与BISS协议的初次相遇最近因为参与一个伺服驱动的项目不得不硬着头皮去啃一个对我来说全新的概念——BISS协议。说实话作为一个长期在嵌入式领域摸爬滚打但更多接触的是CAN、SPI、I2C这类通用接口的工程师第一次看到“BISS”这个词内心是有点懵的。项目背景是围绕英飞凌的微控制器比如TC264来搭建一个伺服控制系统的原型需要与市面上主流的伺服驱动器进行位置、速度数据的实时、高精度通信。在评估了各种方案后团队最终将目光锁定在了BISS-C这个协议上。这就像你习惯了开手动挡的家用车突然让你去开一台专业赛车虽然都是车但操作逻辑和性能要求完全不是一个量级。BISS全称是“Bi-directional Synchronous Serial Interface”翻译过来就是“双向同步串行接口”。光看名字它似乎和SPISerial Peripheral Interface有几分神似都是同步串行通信。但深入下去你会发现BISS是专门为高精度、高实时性的运动控制领域“量身定制”的尤其是在伺服电机编码器与驱动器、驱动器与上位控制器之间的通信场景中它的地位几乎是不可替代的。我最初的想法很简单不就是收发数据嘛用SPI或者类似RS485的变种不行吗为什么非得是BISS这个疑问也成了我深入学习它的起点。在开始研究具体技术细节之前我花了些时间梳理了它的应用生态。从网络上的热词可以看到它绝不是一个冷门协议。无论是台达的A2系列、ASDA-B3系列还是汇川的伺服其高精度编码器反馈很多都支持BISS-C接口。甚至像树莓派通过MCP2515这类CAN控制器去间接控制伺服时底层的数据源也可能来自BISS编码器。而像SOEMSimple Open EtherCAT Master这类开源EtherCAT主站方案在驱动支持BISS的从站时也需要对BISS协议有深刻理解。这让我意识到掌握BISS不仅仅是读懂一份数据手册更是打开工业伺服控制领域一扇关键大门的钥匙。接下来的内容我将从一个初学者的视角分享我对BISS协议核心机制、与SPI的深刻差异、实际应用中的挑战以及一些初步的实践思考。2. BISS协议核心机制拆解不止是“SPI变种”很多人包括最初的我容易把BISS和SPI混淆因为它们信号线看起来很像都有时钟CLK、主出从入MOSI、主入从出MISO。但它们的通信哲学和时序要求有着本质区别。理解这些区别是正确应用BISS的前提。2.1 通信模式与数据帧结构一问一答的精密对话SPI通常是一种全双工、流式的通信方式主机持续提供时钟数据在时钟边沿同时收发通信过程没有固定的“帧”概念长度由主机控制。而BISS-C协议则是一种基于帧的、半双工的通信。每一次数据交换都是一次完整的“问答”周期。一个典型的BISS-C数据帧由两个主要阶段组成主机请求阶段主机通过MAMaster Out, Slave In线发送一个请求帧。这个帧非常短通常就是一个起始位Start Bit通常是‘1’加上几个控制位例如选择寄存器地址、触发采样等。这个阶段从机编码器或驱动器通过SLOSlave Out线保持高阻态或默认状态。从机响应阶段主机请求发送完毕后MA线会拉低或根据协议保持特定状态同时主机开始输出时钟CLK。从机在时钟的驱动下将数据通过SLO线逐位发送给主机。这些数据包含了核心信息比如多圈绝对位置值、单圈位置值、状态字、CRC校验码等。关键在于BISS的时钟只在从机响应阶段由主机产生。而在SPI中时钟几乎贯穿整个通信过程。这种设计使得BISS的时序更加清晰主机可以精确控制从机数据的采样时刻这对于需要严格同步的多轴系统至关重要。数据帧的长度是固定的由从机类型决定常见的有32位、40位、64位等主机必须产生对应数量的时钟脉冲来读取完整数据。2.2 绝对位置传输与“多圈”概念这是BISS在伺服控制中最大的价值所在。增量式编码器上电后需要寻零回零操作来确定机械原点而绝对式编码器通常支持BISS或类似协议上电即知当前位置。BISS帧中传输的位置数据就是绝对位置。更厉害的是它通常包含“多圈”和“单圈”两部分数据。单圈数据表示电机转子在当前机械周期内的位置例如对于一个17位单圈编码器范围是0~131071。多圈数据则记录了转子自通电以来累计转过的完整圈数。这两部分数据组合在一起形成了一个范围极大的、无累积误差的绝对位置坐标。这对于需要断电记忆、长行程绝对定位的应用如机床、机械臂是必不可少的。相比之下普通的SPI通信传输的只是一组普通的二进制数没有这种预设的、标准化的位置信息结构。2.3 同步与实时性为什么是“Synchronous”BISS中的“Synchronous”不仅指时钟同步更指系统级的同步。在像EtherCAT这样的分布式时钟系统中主站可以发送一个全局同步信号SYNC。支持BISS的从站设备在收到SYNC信号时可以瞬间锁存Latch编码器的当前位置值。随后主站再通过BISS通信去读取这个被锁存的值。这意味着网络上所有轴读取的位置值都是在同一个精确的物理时刻采样的消除了因通信延迟带来的各轴位置“时间差”为实现高精度的插补运动如直线、圆弧轨迹奠定了基石。这是普通SPI通信完全无法提供的系统级功能。注意BISS协议有BISS-A点对点和BISS-C多点通信等不同模式。BISS-C允许多个从站共享MA和SLO线通过芯片选择CS信号进行寻址更适用于多轴系统。在阅读手册时务必确认你的设备支持哪种模式。3. 基于英飞凌MCU的BISS主机实现关键点理论懂了下一步就是动手实现。我们项目选用的是英飞凌的AURIX™ TC264单片机。这款芯片性能强劲外设丰富但直接用它来模拟BISS主机需要注意以下几个核心环节。3.1 硬件连接与引脚配置首先硬件连接要正确。BISS接口通常是差分信号RS485电平或单端TTL/CMOS电平具体看编码器手册。以单端为例MCU的SPI模块虽然协议不同但我们常利用MCU的SPI硬件模块来生成精确的时钟CLK和接收数据MISO因为这比用GPIO模拟时序要稳定和高效得多。MA线通常用一个普通的GPIO来模拟。在请求阶段MCU控制它输出起始位和控制位在接收阶段将其配置为输入或保持低电平。SLO线连接到SPI模块的MISO引脚用于接收从机数据。CLK线连接到SPI模块的SCLK引脚。CS片选线对于BISS-C连接到一个GPIO用于选择目标从站。在TC264上我们需要配置一个SPI模块例如QSPI0工作在主机模式但要注意调整。BISS的时钟极性CPOL和相位CPHA通常是固定的例如模式1CPOL0 CPHA1或模式3CPOL1 CPHA1这必须严格遵循从机设备的数据手册。TC264的SPI模块可以灵活配置这些参数。3.2 软件时序的精确控制状态机是灵魂用MCU模拟BISS主机本质上是一个精细的时序控制过程。强烈建议使用状态机State Machine来构建整个通信流程。以下是一个简化的状态机设计IDLE状态等待触发通信如定时器中断、SYNC信号到达。REQUEST状态拉低CS片选如果使用。将MA线GPIO配置为输出并按照时序要求发送起始位‘1’和控制位。这里可能需要微秒级的精确延时可以使用MCU的延时函数或定时器。发送完毕后将MA线置低或配置为输入准备切换。SWITCH_DELAY状态这是一个关键的空闲等待时间t_WAIT。BISS协议要求主机在发送完请求后需要等待一段规定的时间从机数据手册会给出通常是几微秒再从机才能准备好数据。必须严格遵守这个时间。READ_DATA状态启动SPI模块按照预设的数据位长度如40位发起一次SPI接收传输。此时SPI模块会主动产生时钟CLK从机会在时钟边沿将数据送到SLO即MISO线上。SPI硬件会自动将收到的数据存入接收数据寄存器RDR。这里有个坑标准SPI通常是8位或16位为单位传输。对于40位这种非标准长度我们需要连续进行多次SPI传输比如5次8位并手动拼接数据。同时要确保SPI在每次传输间隙不产生不必要的空闲时钟。PROCESS_DATA状态读取SPI接收缓冲区拼接成完整数据帧。解析数据分离出多圈值、单圈值、状态位、CRC。进行CRC校验。如果校验失败需要错误处理重试或报警。将有效的绝对位置值换算为工程单位如角度、毫米。COMPLETE状态拉高CS片选通信结束返回IDLE状态。整个状态机的推进最好由一个高优先级的定时器中断来驱动以确保时序的严格周期性。对于TC264其强大的定时器阵列GTM或通用定时器模块GPT12非常适合此任务。3.3 CRC校验与数据可靠性BISS数据帧通常包含一个CRC循环冗余校验字段用于验证数据传输的正确性。这是工业通信协议的标配绝不能省略。CRC的计算多项式和方法在BISS协议规范或从机手册中会明确给出常见的是CRC-8或CRC-16的一种变体。主机端在解析数据后必须用相同的算法对收到的数据位不包括CRC字段本身重新计算一遍CRC并与收到的CRC值比较。如果不匹配则意味着本次通信数据有误。在实际编程中我们可以预先计算好CRC查表以提升校验速度。4. 实践中遇到的挑战与调试心得纸上得来终觉浅调试过程才是真正的“战场”。以下是我在实现过程中踩过的几个坑和总结的经验。4.1 时序问题最隐蔽的“杀手”BISS协议对时序参数要求极其严格包括t_WAIT请求到读数据的间隔、t_RECOVERY两次通信间的最小间隔、时钟频率上限等。这些参数在编码器手册中都有明确规定例如t_WAIT可能要求最小2μs最大5μs。问题现象通信不稳定时而能读到正确数据时而全是0或乱码CRC经常失败。排查过程首先用逻辑分析仪这是必备工具抓取MA、CLK、SLO三根线的波形。没有逻辑分析仪调试BISS几乎寸步难行。对照数据手册的时序图逐个测量关键时间参数。我们最初发现t_WAIT时间只有约1.5μs小于要求的最小值。检查代码中的延时函数。我们使用的是简单的for循环空延时其精度受编译器优化和系统时钟波动影响很大。解决方案将关键延时如t_WAIT改用硬件定时器来实现。例如配置一个GPT12定时器在REQUEST状态结束后启动定时器在定时器中断中切换到READ_DATA状态。这样可以获得微秒级的高精度延时。同时确保SPI的时钟频率没有超过从机支持的最大频率如10MHz。在TC264中通过配置SPI的波特率发生器分频值来调整。4.2 电平与终端电阻匹配问题当通信距离较长超过1米或速率较高时信号完整性问题会凸显。问题现象短电缆通信正常换上长电缆后误码率急剧上升。排查与解决确认电平类型我们的编码器是RS485差分BISS接口而最初我们错误地接到了MCU的3.3V TTL引脚上。必须使用RS485收发器芯片如MAX485进行电平转换。添加终端电阻对于差分线路在电缆的远端编码器端并联一个120Ω的终端电阻可以消除信号反射。这一点在高速或长线传输时至关重要。检查共地确保MCU、电源、编码器之间有一个良好的公共地线连接避免地电位差引入噪声。4.3 数据解析错误位序与对齐从SPI硬件接收到的数据是字节流需要按位拼接成完整帧。这里容易出错。问题现象读出的位置值跳跃巨大或呈现规律性错误。排查过程将逻辑分析仪抓取到的原始SLO信号二进制位流记录下来。在代码中将SPI接收到的字节数据也打印成二进制形式。对比两者。我们曾发现由于SPI是高位MSB先发送而我们的解析代码默认是低位LSB在先导致整个数据帧的位序全部反了。另外BISS帧中可能包含一些固定的起始标志位或填充位需要跳过。例如有些协议在数据帧开头会有2个‘1’作为起始标志。解决方案仔细阅读编码器数据手册中关于“数据帧格式”的章节画出一个详细的位域图标明每一位的含义如bit31-位错误标志 bit30-警告标志 bit29-16-多圈值 bit15-0-单圈值…。在代码中使用位域bit-field结构体或位掩码, |, , 来精确提取各个字段。务必测试边界情况如位置从最大值翻转到0时解析是否正确。4.4 与实时操作系统RTOS的集成如果项目运行在FreeRTOS等RTOS上BISS通信任务的设计需要注意。经验将BISS通信任务设置为最高或次高优先级以确保其能按时被调度维持固定的通信周期。通信状态机最好放在一个独立的高优先级任务中或者放在定时器中断服务程序ISR里。如果放在ISR中要确保ISR执行时间尽可能短复杂的数据处理可以放到任务中通过队列Queue传递。使用信号量Semaphore或任务通知Task Notification来同步SYNC信号和BISS读取操作。当SYNC中断到来时释放一个信号量BISS通信任务获取到该信号量后立即执行一次完整的数据读取。这样可以实现软同步。5. BISS在伺服系统中的应用场景与选型思考经过一番折腾系统终于能稳定、准确地读取BISS编码器的绝对位置了。回过头看BISS协议在伺服系统中的应用价值非常清晰。5.1 核心应用场景高精度绝对位置反馈这是BISS的“主场”。在数控机床、工业机器人、半导体设备中需要知道每个关节的精确绝对位置以实现高精度定位和轨迹控制。BISS提供了直接、数字化的解决方案。多轴同步运动控制结合EtherCAT等现场总线的分布式时钟DC功能主站发送SYNC脉冲所有支持BISS的从站同时锁存位置。这使得系统可以获得所有轴在同一物理时刻的位置快照对于实现精密的直线插补、圆弧插补功能至关重要。网络热词中提到的“SOEM控制工业伺服驱动器”其底层往往就需要处理来自BISS编码器的同步数据。简化系统上电流程对于采用绝对式BISS编码器的系统设备上电后无需执行复杂的“回零”或“寻参”操作立即就能获得有效的位置坐标缩短了设备启动时间提高了可用性。5.2 与其它反馈接口的对比在项目选型初期我们也评估过其他方案增量式编码器A/B/Z相成本最低但上电需回零抗干扰能力相对较弱长距离传输信号质量下降快。适用于对成本敏感、且允许回零的中低端场合。模拟量正弦/余弦Sin/Cos编码器通过插值可以实现很高分辨率但仍然是增量式且需要额外的AD转换和细分电路系统复杂度高。其它数字串行协议如HIPERFACE DSL、EnDat 2.2等。它们与BISS属于同一梯队都是高性能数字接口。选型往往取决于驱动器/控制器品牌的生态支持。例如很多日系伺服驱动器对BISS支持较好而某些欧系品牌可能更推崇EnDat。5.3 关于“英飞凌伺服季”与生态的联想这次学习经历也让我对“英飞凌伺服季”这类技术推广活动有了更深的理解。它不仅仅是在推销芯片更是在推广一整套解决方案。英飞凌的AURIX™系列MCU凭借其高性能的多核架构、丰富且高精度的定时器、强大的通信接口以及功能安全FuSa特性非常适合作为伺服驱动器的核心控制器。而伺服驱动的核心功能之一就是处理如BISS这样的高性能编码器反馈。英飞凌提供的可能不仅仅是TC264这颗芯片还有对应的驱动库iLLD、应用笔记、甚至参考设计来帮助开发者更快速地实现BISS主机功能并集成到完整的FOC磁场定向控制伺服算法中。这对于缩短产品开发周期、提升系统可靠性非常有价值。作为开发者我们的任务就是深入理解像BISS这样的底层关键技术然后利用好芯片厂商提供的工具和生态将它们高效、稳定地整合到我们的产品中。6. 总结与进阶方向从对BISS一无所知到能在项目中使用它这个过程充满了挑战但也收获颇丰。它让我深刻体会到工业通信协议的设计每一个细节背后都是对可靠性、实时性和精确性的极致追求。对于想要入门或正在实施BISS项目的朋友我的建议是工具先行务必准备一台逻辑分析仪。它是你洞察通信过程、定位时序问题的“眼睛”。手册为王编码器或驱动器的数据手册是你唯一的真理来源。反复阅读时序图和帧格式定义任何“我觉得应该这样”的猜测都可能带来灾难。分步验证不要试图一步到位。先写一个最简单的代码只实现时钟输出和数据读取忽略CRC用逻辑分析仪看波形是否正确。然后再逐步加上请求帧、CRC校验、错误处理、多从站寻址BISS-C等功能。关注边界重点测试位置值在零点、最大值附近翻转时的行为以及通信线受到轻微干扰时系统的容错能力。下一步我计划继续深入研究BISS协议的一些进阶话题例如如何利用TC264的DSADCDelta-Sigma ADC模块直接接口某些类型的传感器或者探索在更复杂的多轴EtherCAT从站设计中如何将BISS读取的位置值无缝、低延迟地打包到EtherCAT过程数据PDO中发送给主站。通信的世界很深但每解开一个谜题你对整个控制系统理解就更透彻一分。这次与BISS的初遇算是一个扎实的开始。
返回列表