本帖最后由 小飞鸟f 于 2024-12-20 08:59 编辑
#申请原创# 1、前言 BiSS-C(Bidirectional Serial Synchronous Communication - Compact)是一种紧凑型的双向串行同步通信协议,专为传感器和执行器之间的高速、实时数据交换而设计。它广泛应用于工业自动化领域,尤其是在编码器(用于测量旋转或线性位移的传感器)与控制器之间的通信中。BiSS-C 是 BiSS(Bidirectional Serial Synchronous)协议族的一部分,由德国公司 iC-Haus 开发。 对于BiSS-C主站的实现,可以采用BiSS-C接口芯片,也可以采用集成BiSS-C接口的MCU。如果系统的主控MCU没有集成BiSS-C接口,为了使用BiSS-C协议,需要增加BiSS-C接口芯片的成本。对于普通的MCU,也可以通过SPI实现BiSS-C主站协议。 2、SPI实现BiSS-C主机可行性分析 根据BiSS-C规格手册介绍,如上图所示,MA是时钟,由主站发送,SLO是数据,由从站返回。 如果不看CDM时序,BiSS-C和SPI基本没区别。只不过,BiSS-C的时序可以是任意个数,而SPI的时序一般只能是8的倍数。 如下图所示,BiSS-C的时钟数主要由从机决定。从机在收到主机时钟时,如果数据还没准备好,会一直发送Ack,表示Busy状态。当数据准备好时,才发送Start位开始传输用户数据。所以,利用SPI模拟BiSS-C主机时,需要与从机约定时钟数,控制在8的倍数。 对于MA的CDM,是主机发送的一位寄存器数据。当时序发送结束,紧接着发送CDM。如果CDM是0,则MA输出高电平;如果CDM是1,则MA输出低电平。如果CDM是0,则BiSS-C的MA与SPI的SCK一样。如果CDM是1,则需要先将SPI的SCK引脚配置成普通输出模式并输出0,延时Timeout时间后,恢复SCK复用模式。其中Timeout有两种模式,一种是固定模式,一种是自适应模式。其中,固定模式如下图描述,一般是20us时间,由从站决定,双方通信前需要约定好。自适应模式是1.5个时钟周期时间,与时钟频率有关。 3、基于APM32F407的SPI实现BiSS-C主机部分代码说明 SPI配置:主模式,双线仅接收模式(BiSS-C主机不需要发送数据),数据帧长度为8位,CPHA=0,CPOL=1,SPI频率与主频相关,根据实际频率需求,修改主频。 BiSS-C主机通信代码:如果CDM=0,只需要执行SPI主机读取数据函数(这里的时钟数为7*8=56个,具体时钟数与从机输出数据为准),HAL_SPI_Receive_DMA(&hspi3, BiSSRecData, 7);。通信结束,执行协议解释函数Biss_Single_Anal();。如果CDM=1,执行完SPI主机读取数据函数HAL_SPI_Receive_DMA(&hspi3, BiSSRecData, 7);后,需要快速将SCK切换成普通输出模式。为了快速切换,这里采用寄存器操作,修改SCK配置。MA输出低电平后,延时Timeout时间(这里以20us为例),然后恢复为SCK模式。 当CDM=1时,实际测试结果如下,主机发送56个时钟,CDM发送时间19.99us,符合要求。 4、结论 综上所述,APM32F407的SPI主机可以实现BiSS-C主机。需要注意两个地方,一是时钟数必须与从机端约定好,等于8的倍数;二是发送CDM数据时,SCK切换成普通输出模式,需要采用寄存器操作,否则会延长最后一个时钟高电平时间。
|