基于FPGA的CAN总线控制器设计

发布者:CaptivatingGaze最新更新时间:2012-10-09 关键字:FPGA  CAN  总线控制器 手机看文章 扫描二维码
随时随地手机看文章
0 引言
    CAN(控制器局域网)是一种先进的串行通信协议,由德国BOSCH公司开发,并最终成为国际标准(ISO11898),是国际上使用最广泛的现场总线之一。目前世界上已有20多家CAN总线控制器生产商,110多种CAN总线控制器芯片和集成CAN总线控制器的微处理器芯片。
    由于定制的CAN总线控制器芯片不能嵌入到SoC(片上系统)中,而采用分立元器件实现CAN总线接口,使得系统中器件数量增加,同时也增大了系统面积,本文所介绍的CAN总线控制器正是由Verilog HDL语言描述,既可以作为一个独立的设备,也可以作为一个模块集成到FPGA中。
    虽然目前国内外已有很多人研究或设计了CAN总线控制器IP核,但其中大多数只是对控制器中的某一个模块进行了研究和设计,并没有实现一个完整的CAN总线控制器的功能,例如文献只对CAN控制器的状态机进行研究,文献只对CAN控制器的位定时模块进行研究。而完整实现了CAN总线控制器功能的作品中,最高工作频率又不是很理想,例如Mentor Graphics公司提供的MCAN2D1 CAN2.0 Network Controller的最高工作频率只有32.46MHz,文献中介绍的CAN总线控制器的最高工作频率也只有50MHz,这些IP核显然不能适应高速环境的要求,同时文献中介绍的控制器对外接口中出现了寄存器使能位等接口,这种接口不符合Avalon总线规范,不利于集成到FPGA芯片中,其通用性肯定较差,所以研究并设计出一款高速且通用性强的CAN总线控制器的IP核仍然是有其重要意义的。

1 系统实现
1.1 系统框图
    本设计中将整个CAN控制器系统分为了11个模块,分别是Avalon总线接口模块、寄存器组模块、接收缓冲器模块、发送缓冲器模块、接收滤波模块、CRC校验模块、状态机模块、标识符填充模块、错误计数器模块、位填充模块、位定时模块。其结构框图如图1所示。


1.2 主要模块介绍
1.2.1 寄存器组模块
    本模块由位宽为8bit,深度为256的寄存器组实现其功能,其中已经使用的寄存器为23个,其余的供以后扩展。本设计采用将各个独立的控制及状态寄存器集成在一起的设计思想,任何对控制器的初始化以及数据的接收和发送都是从写寄存器组开始的。
1.2.2 CRC校验模块
    CRC(循环冗余校验码)是一种能力非常强的检错、纠错码,常用于串行传送的辅助存储器与主机的数据通信和计算机网络中。它的基本原理是:在k位信息码后再拼接r位的校验码,整个编码长度为n位,因此,这种编码又叫(n,k)码。对于一个给定的(n,k)码,可以证明存在一个最高次幂位n-k=r的多项式g(x),根据g(x)可以生成七位信息的校验码,而g(x)叫做这个CRC码的生成多项式。
    CAN总线协议就是采用的CRC校验,并且是16位的C R C-1 6校验码, 生成多项式为,可转换为二进制码组1100010110011001。生成CRC码的具体过程是:由帧起始、仲裁场、控制场、数据场(数据帧有数据场,远程帧没有数据场)组成的被除数右移15位后与生成多项式的二进制码组进行模2除,生成的15位余数就是所需的CRC码。
    本模块的主要作用有两个:1)在控制器处于发送状态时,计算出CRC码,同时将帧起始、仲裁场、控制场、(数据场)、CRO场按帧格式的要求进行打包;2)在控制器处于接收状态时,将接收到的由帧起始、仲裁场、控制场、(数据场)、CRC场组成的被除数与生成多项式的二进制码组进行模2除,结果为0,则接受数据,不为0,则丢弃数据,并产生CRC校验错误。
1.2.3 立填充模块
    在CAN总线协议中,当控制器处于发送或接收状态时,若控制器检测到总线上出现连续6个相同极性的电平时(帧结尾除外),控制器将会检测到错误而停止发送或接收数据,此时控制器将会由发送或接收状态转换为错误状态。
    本模块的主要作用是:在发送状态时,连续发送5个相同极性的位时,若第5位与将要发送的第6位极性不同时,在第5位和第6位之间插入1个极性与第6位相同的位,若第5位与将要发送的第6位极性相同,在第5位和第6位之间插入1个极性与第6位相反的位;在接收状态时,连续接收5个相同极性的位时,若第6位与之前5位的极性不同,则舍弃第6位,若第6位与之前5位的极性相同,则产生位填充错误,控制器将停止接收数据,此时控制器也将由接收状态转换为错误状态。同时,本模块也具有检测位错误,位填充错误,形式错误及应答错误的功能。另外,模块还具有生成错误帧、过载帧、间歇帧的功能。
1.2.4 状态机模块
    状态机模块在整个控制器中扮演着“大脑”的作用,它控制着其它模块的操作。相比于文献中未采用状态机的设计,采用状态机会使得各个模块的功能作用更为明确,系统结构更为清晰合理,同时也更便于各个模块之间的协调控制。本状态机模块的设计采用和文献中相同的设计,将控制器分为了10种模式:总线脱离、总线启动、总线空闲、模式选择、发送模式、接收模式、错误模式、间歇模式、超载模式及挂起模式。CAN状态机状态转移图如图2所示。 [page]


    掉电、复位及总线上过多的错误都会使控制器进入总线脱离模式;系统上电、复位解除或过多错误而复位后的下个时钟会使控制器进入总线启动模式;在总线启动模式下,若之前因掉电、复位使控制器进入总线脱离模式,当控制器监测到总线上1次连续11个隐性位(逻辑电平1”)时,控制器进入总线空闲状态,若因过多错误使控制器进入总线脱离模式,则当控制器监测到总线上128次连续11个隐性位时,控制器进入总线空闲模式;当控制器没有数据发送但监测到总线上有显性位(逻辑电平“0”)时,控制器进入接收模式,而当控制器有数据发送同时监测到总线上有显性位时,控制器进入模式选择模式;模式选择其实就是一个总线仲裁,此时标识符将扮演仲裁位的角色,显性位的优先级更高,若总线仲裁失败则控制器进入接收模式,仲裁成功则进入发送模式;一帧数据成功发送完成后,控制器会进入间歇模式;若间歇帧发送成功,则控制器会再次进入总线空闲模式。状态机由空闲模式转换为模式选择模式的仿真图如图3所示。


1.2.5 位定时模块
    位定时模块控制着控制器报文发送或接收的节奏,这个节奏就是位时间,它由四部分组成:同步段、传播段、相位缓冲段1和相位缓冲段2,这四个段均由时间份额构成,时间份额是根据预先设置的分频值对输入时钟进行分频得到的。
    位定时模块还有一个重要的功能是将本节点与总线上的其它节点进行时钟同步。由于每个CAN节点使用的是独立的时钟,所以不同节点之间会有相位差,这些相位差严重时会影响报文发送和接收的准确性,所以有必要对不同节点进行时钟同步。

2 系统验证
    整个系统的功能仿真和时序仿真是借助Modelsim软件完成的。图4所示是对控制器发送数据的验证,测试用的发送数据为随意选择的:00101001,仲裁场和控制场也是任选的,分别为:110100101110、110001,设置好寄存器组后,控制器计算出对应的CRC码为:110111001111 011,之后控制器将数据按CAN协议的帧格式打包逐位发送出去。


    控制器最初处于总线脱离模式,复位结束后进入总线启动模式,当控制器检测到总线上的1次连续11个隐性位时,进入总线空闲模式,接着当控制器检测到总线出现第一个显性位时,进入模式选择模式,在此模式下,控制器进行的操作就是总线仲裁,确定本节点是否获得总线控制权,由于本测试采用的是控制器自测模式,即输出线与输入线连在一起,所以仲裁时间为12个位时间,仲裁成功后,控制器会进入发送模式,若无错误产生,数据发送完成后控制器进入间歇模式,最后进入总线空闲模式。
    经过一系列的测试验证后,表明本CAN总线控制器能够发送或接收所有符合CAN2.0A协议的报文帧。

3 结束语
    本设计实现了所有符合CAN2.0A协议的CAN总线控制器功能,最高工作频率为139.43MHz,这也达到了最初的设计目的。控制器的时序分析如图5所示。


    本文作者创新点为:首先控制器的外围接口采用Avalon总线接口,这使得本设计的通用性更强:其次是本设计的最高工作频率达到了139.43MHz,能够适应高速通信的要求。

关键字:FPGA  CAN  总线控制器 引用地址:基于FPGA的CAN总线控制器设计

上一篇:信号链基础知识 RS-485:总线电流要求与收发器驱动能力
下一篇:LonWorks现场总线在楼宇自控系统中的应用

推荐阅读最新更新时间:2024-05-02 22:21

基于CAN总线的仿人机器人力信息检测系统
随着信息检测技术和控制技术的发展,仿人机器人运动控制已经从传统的离线规划方法研究转向基于环境信息的实时控制研究,仿人机器人的实时姿态调整与实时步态生成方法也成为运动控制的研究重点。对于步行机器人而言,其脚掌所受到的地面反力信息是最重要的外部环境信息之一,它尤其能够反映仿人机器人的姿态信息,在仿人机器人的实时姿态调整中具有重要作用。早在1989年,日本早稻田大学就在他们研制的两足步行机器人WL-12RⅢ中应用了六维力/力矩传感器,该传感器安装在机器人的小腿上,机器人可根据反馈力信息在不平整地面上进行稳定行走;日本HONDA公司的仿人机器人P2,P3以及ASIMO均安装了集成六维力/力矩传感器,利用传感器信息检测地面反力信息。
[工业控制]
基于FPGA控制的温度检测无线发射接收系统
  摘要:本文介绍基于FPGA控制的温度检测无线发射接收系统。本系统采甩EPlKl000C208-3作为控制核心,系统比较温度是否超出人体最佳温度范围,如果过高则发出降温信号,如果过低则发出升温信号;得出需要加温还是降温的信号后通过无线将信号发射到接收电路,接收电路接收到编码过的信号后对信号解码,最终再得到加温还是降温信号,再将此信号加上驱动放大后则可以驱动步进电机等(本设计用发光二极管代替步进电机)。本设计应用了FPGA技术、温度传感技术、无线发射和接收技术,具有集成度高,测量数据精度高、性价比高等特点。具有较强的实用价值和广阔的市场前景。   O 前言   随着社会节能环保意识的增强,人们越来越重视能源的利用效率。传统的
[测试测量]
基于<font color='red'>FPGA</font>控制的温度检测无线发射接收系统
基于FPGA的LED体三维显示方案研究
   摘 要: 基于人眼视觉暂留特性及LED 的高速发光特性, 设计了一套LED 体三维显示系统。首先利用Matlab 生成三维数据, 通过红外模块传输到显示驱动电路; 其次快速旋转LED 阵列, 由角度编码器获取旋转角度值, 并根据角度值计算对应的二维截面图形; 最后通过调制LED 的发光与消隐实现相应的显示。该系统基于24×16 二维LED 阵列, 具有69120个体像素, 实现了空间尺寸为Φ9414 mm ×66.8 mm 的稳定柱体内三维显示。    引 言   众所周知, 视觉是人类感知世界的最重要的方式, 而现实生活中的所有物质形态都是以三维空间而客观存在。三维显示能真正地再现客观世界的立体空间, 提供更符合人们观
[家用电子]
基于<font color='red'>FPGA</font>的LED体三维显示方案研究
STM32F4 CAN2配置
通信协议 基本知识 特别注意 CAN2配置时,滤波器要从 开始配置。 代码块 #define CAN2_PORT CAN2 #define CAN2_GPIO_PORT GPIOB #define CAN2_RX_PIN GPIO_Pin_12 #define CAN2_TX_PIN GPIO_Pin_13 #define CAN_ID_Chassis 130 struct CAN_Socket { unsigned int u32_StdId; unsigned int u32_ExtId; unsigned char u8_IDE; unsigned char u8_RTR;
[单片机]
STM32F4 <font color='red'>CAN</font>2配置
基于CAN总线的数据采集记录装置设计
1.绪论 现场总线作为生产现的场数据通信与控制的网络技术,在测量控制领域随着信息技术的发展已得到广泛的应用。现在的工业现场总线控制网络技术已经被认为是一种比较的成熟的技术,同时也被认为是目前最具有前途的一种现场总线之一。然而,CAN现场总线作为一种面向工业底层控制的通信网络,其局限性也是显而易见的。首先,它不能与Internet互连,不能实现远程信息共享。其次,它不易与上位控制机直接接口。因此,我们在本文中引入以太网技术。 以太网是在上个世纪70年代为连接多个实验室而开发出的一种局域网技术,随着互联网技术和计算机的迅猛发展,以太网已成为当今世界上应用范围最广、最为常见的一种网络技术。他在工业控制中的优势是显而易见的:首先,基于
[嵌入式]
继续深耕28nm FD-SOI,莱迪思推出CertusPro-NX
日前,莱迪思宣布Nexus平台第四款产品CertusPro-NX。莱迪思在 Nexus 平台上开发通用 FPGA 已有 18 个月了。2019年,当莱迪思宣布推出采用28nm FD-SOI的Nexus平台时,低功耗FPGA进入了一个新时代。在之后的18个月中,莱迪思一直严格执行着之前所提出的发展路线图,陆续推出了Nexus平台的嵌入式视觉用FPGA CrossLink-NX、通用FPGA Certus-NX 、安全FPGA Mach-NX以及如今的第二代通用FPGA CertusPro-NX。 CertusPro-NX与同类FPGA相比,不仅功耗效率得到大幅提高,还在最小的封装尺寸中提供了最高带宽,且是同类产品中唯一支持LPD
[嵌入式]
继续深耕28nm FD-SOI,莱迪思推出CertusPro-NX
基于FPGA的数字日历设计
  基于FPGA 设计数字日历可以实现以软件方式设计硬件的目的,无需购买专用数字芯片,从而克服了传统利用多片数字集成电路设计数字日历存在焊接麻烦、调试繁琐、成本较高等问题。而且,基于FPGA 的数字日历与传统系统相比,在设计灵活、开发速度、降低成本、计时精度、功能实现上都得到大幅度提升,能够更好地满足人们日常生活的需要。   本文介绍如何利用VHDL 硬件描述语言设计一个具有年、月、日、星期、时、分、秒计时显示功能,时间调整功能和整点报时功能的数字日历。在Quartus Ⅱ开发环境下,采用自顶向下的设计方法,建立各个基本模块,再构建成一个完整的基于FPGA 设计的数字日历的顶层模块,然后对其进行编译、仿真、引脚锁定,最终下载到可编
[电源管理]
基于<font color='red'>FPGA</font>的数字日历设计
嵌入式必懂的CAN总线
嵌入式的工程师一般都知道CAN总线广泛应用到汽车中,其实船舰电子设备通信也广泛使用CAN,随着国家对海防的越来越重视,对CAN的需求也会越来越大。 01 概述 CAN(Controller Area Network)即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。 想到CAN就要想到德国的Bosch公司,因为CAN就是这个公司开发的(和Intel)。 CAN有很多优秀的特点,使得它能够被广泛地应用。比如:传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。 近些年来,CAN控制器价格越来越低,很多MCU也集成了CAN控制器。现在每一辆
[汽车电子]
嵌入式必懂的<font color='red'>CAN</font><font color='red'>总线</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved