打印
[APM32F4]

如何用APM32F407实现BiSS-C主站协议

[复制链接]
608|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 小飞鸟f 于 2024-12-20 08:59 编辑

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




使用特权

评论回复
沙发
呐咯密密| | 2024-12-8 11:00 | 只看该作者
这个设计挺好的,虽然有局限性

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

28

帖子

1

粉丝