本文主要讨论的是基于FPGA的CAN总线控制器的设计,特别是使用SJA1000软核来实现这一功能。CAN(Controller Area Network)总线是一种广泛应用的现场总线,尤其适用于分布式控制系统和实时通信,其特点是高可靠性、实时性和灵活性。
SJA1000是一款经典的CAN控制器,文章分析了它的特性以及CAN协议的通信格式。设计的SJA1000 IP软核使得控制器能适应多种应用场景,且易于移植。这种软核在FPGA(Field-Programmable Gate Array)中实现,能够提供高性能的CAN通信,例如用于控制步进电机。
文章指出,FPGA/SOPC(System on a Programmable Chip)技术是实现嵌入式系统的一种高级形式,通过Quartus II和Nios II工具,可以使用VHDL或Verilog语言设计出灵活且性能更优的IP核。图1展示了一个基于FPGA的CAN总线节点结构,其中PCA82C251作为CAN总线接收器,SJA1000作为通信控制器,PMM8713则用于驱动步进电机。
设计过程中采用了自顶向下的方法,将SJA1000的功能分解为四个主要模块:初始化模块、位查询模块、数据处理模块和缓冲区释放模块。图2描绘了控制SJA1000功能的状态机,四个状态分别对应这四个模块。初始化模块负责设置SJA1000,然后进入位查询状态,检查SJA1000的接收缓冲区。如果有帧信息,系统会进入帧处理状态,由数据处理模块读取并处理数据。处理完成后,缓冲区释放模块清空缓冲区,准备接收新的帧信息。
读写模块和双端口模块也是设计中不可或缺的部分,它们负责与SJA1000的交互,确保数据的正确传输。此外,模块接口控制逻辑协调各个模块间的操作,确保整个系统的顺畅运行。
该设计通过FPGA实现了基于SJA1000的CAN总线控制器,不仅提高了系统的灵活性,还提供了高效的数据处理能力,特别是在步进电机控制这样的实时应用场景中。这种设计方法对于嵌入式系统和工业自动化领域的开发具有重要的实践意义。