Can驱动芯片MCP2515如何实现位定时功能详解(使用的为8Mhz的晶振,波特率为什么不能达到1Mhz)

在最近的一次项目中,使用到了SPI转CAN芯片MCP2515,此芯片通过SPI转CAN的接收与发送功能。初期看DataSheet时真是一脸懵逼,经过在网上看了一下教学视频,以及慢慢的研究最后才算搞清楚基本的用法以及理解里面各个寄存器的作用。
如果有同学不怎么会使用MCP2515却又不想看那么多页的DataSheet的,可以看以下的教学视频,你就可以了解大概怎么操作的。这个是众想科技出品的视频,里面有相关的MCP2515的驱动视频,您可查看http://www.zxkjmcu.com/
我在百度传课也看过他们关于STM32部分的CAN视频。https://chuanke.baidu.com/v3322640-160883-676747.html

说了这么多,那就进入今天的主题吧!
一下内容都是是针对MCP2515芯片的。

1.位定时
CAN总线上的所有节点都必须具有相同的标称比特率。CAN 协议采用不归零( Non Return to Zero, NRZ)编码方式,在数据流中不对时钟信号进行编码。因此,接收时钟信号必须由接收节点恢复并与发送器的时钟同步。由于不同节点的振荡器频率和传输时间不同,接收器应具有某种能与数据传输边沿同步的锁相环( Phase LockLoop, PLL)来同步时钟并保持这种同步。鉴于数据采用 NRZ 编码,有必要进行位填充以确保至少每 6 位时间发生一次边沿,使数字锁相环 ( Digital Phase LockLoop, DPLL)同步。MCP2515 通过 DPLL 实现位定时。 DPLL 被配置成同输入数据同步,并为发送数据提供标称定时。 DPLL 将每一 个 位 时 间 分 割 为 由 最 小 单 位 为 时 间 份 额 ( TimeQuanta, TQ)所组成的多个时间段。在位时间帧中执行的总线定时功能,例如与本地振荡器同步、网络传输延迟补偿和采样点定位等,都是由DPLL 的可编程位定时逻辑来规定的。
2. CAN 位时间
CAN 总线上的所有器件都必须使用相同的比特率。然而,并非所有器件都要求具有相同的主振荡器时钟频率。对于采用不同时钟频率的器件,应通过适当设置波特率预分频比以及每一时间段中的时间份额的数量来对比特率进行调整。CAN位时间由互不重叠的时间段组成。 每个时间段又由时间份额 (TQ)组成,在本数据手册的后面部分将对此进行解释。在 CAN 规范中,标称比特率 (NominalBit Rate, NBR)定义为在不需要再同步的情况下,理想发送器每秒发送的位数,它可用下面的公式来表示:

这里写图片描述

标称位时间:
标称位时间 (Nominal Bit Time, NBT)( tbit)由互不重叠的段时间段组成(图-2) 。因此 NBT 为下列时间
段之和:
这里写图片描述

这里写图片描述

以上一个标称位时间,你可以理解为一个一定频率高电平或者一个低电平,它们里面分了如下几段,是为了能够精准的采样到总线上的数据,这个应该是硬件支持的,咱们不多做研究。

同步段:同步段 (SyncSeg)为 NBT 中的首段,用于同步 CAN总线上的各个节点。输入信号的跳变沿就发生在同步段,该段持续时间为 1 TQ。
传播段:传播段 ( PropSeg)用于补偿各节点之间的物理传输延迟时间。传输延迟时间为信号在总线上传播时间的两倍,包括总线驱动器延迟时间。传播段的长度可编程设定为 1 – 8 TQ。

相位缓冲段 1 ( PS1)和相位缓冲段 2 ( PS2):两个相位缓冲段 PS1 和 PS2 用于补偿总线上的边沿相位误差。通过再同步,可以延长 PS1 (或缩短 PS2) 。PS1 可编程设定为 1 – 8 TQ, 而 PS2 可编程设定为 2 –8 TQ。

采样点:采样点是位时间内的一个时间点。在该时间点,读取总线电平并进行分析。采样点位于相位缓冲段 PS1 的终点。但当采样模式设置为每位采样 3 次时例外。这种情况下,在 PS1 的终点仍然对某一位进行采样时,前两次的采样时间间隔为TQ/2,而该位的值将根据三个采样值中至少两次采样的相同值决定。

信息处理时间:信息处理时间 ( IPT)是确定采样点的位电平值所需要的时间。 IPT 从采样点开始,以 TQ 计量, MicrochipCAN 模块将该时间长度定义为 2 TQ。 PS2 同样开始于采样点,且为位时间的最后一个时间段,因此 PS2 的最小值不能小于 IPT。
PS2min = IPT =2TQ

同步跳转宽度:同步跳转宽度( SJW)可通过编程设定为 1 – 4 TQ,它可对位时钟进行必要的调整来保持与发送报文同步。
3.时间份额
组成位时间的每个段都由时间份额 ( TQ)组成。每个时间份额的长度取决于振荡器周期 (tOSC)。通常 TQ为两个振荡器周期。图 3显示了如何从 TOSC 和 TQ推导出位周期。 TQ 的长度等于一个 TQ 时钟周期( tBRPCLK),利用称为波特率预分频器( BRP)的可编程预分频器对它进行编程设置。以下公式对此进行了阐述:
这里写图片描述
实际的计算按照寄存器里面BPR需要加1来计算。

这里写图片描述
4. 同步
为补偿总线上各节点振荡器频率之间的相移, 每个 CAN控制器必须能够与输入信号的相关信号沿同步。同步过
程是实现 DPLL 功能的过程。当检测到发送数据中的跳变沿,逻辑电路将跳变沿的位置与所期望的时间段 (同步段)进行比较,随后电路将对相位缓冲段 PS1 和相位缓冲段 PS2 的值进行必要的调整。

以上如果第一次看不懂也没关系,了解各个参数的函数即可,即了解一个标称位时间里面包含的各个段含义。
下面讲解对时间段的编程:
对时间段的编程设定必须满足以下要求:
• 传播段 + 相位缓冲段 PS1 >= 相位缓冲段 PS2
• 传播段 + 相位缓冲段 PS1 >= TDELAY
• 相位缓冲段 PS2 > 同步跳转宽度 SJW
例如,假设 FOSC = 20 MHz 时欲实现 125 kHz 的 CAN
波特率:
TOSC = 50 ns, 选择 BRP<5:0> = 04h, 则 TQ = 500 ns。欲达到 125 kHz,位时间应为 16 TQ。位的采样时刻取决于系统参数,通常应发生在位时间的60-70% 处。同时, TDELAY 典型值为 1-2 TQ。同步段 = 1 TQ,传播段 = 2 TQ,这种情况下设置相位缓冲段 PS1 = 7 TQ,将会在跳变之后的 10 TQ 时进行采样。此时相位缓冲段 PS2 长度为 6 TQ。由于相位缓冲段 PS2 长度为 6 TQ,根据规则, SJW 最大值为 4 TQ。然而通常状况下,只有当不同节点的时钟发生不够精确或不稳定 (如采用陶瓷谐振器)时,才需要较大的 SJW。一般情况下, SJW 取值 1 TQ 即可满足要求。
咱来理一理以上的内容:
首先晶振是20Mhz,那它的周期就为1/20MHz=50ns,如果BPR=4,则TQ=2*(4+1)*50ns=500ns,那要实现125kHz也就是周期等于8us的一个标称位,那么就需要16TQ=8us/500ns。这16TQ需要按照编程要求对它们进行分布,首先同步段得1TQ,位采样时间要位于位的60%-70%处,那么这样算下来,采样的点也就PS1与PS2交点,PS1按照60%算的话也得9.6,即同步段1TQ,传播段2TQ,相位缓冲段PS1为7TQ,剩下PS2就剩6TQ。这样算下来是比较合适的。比较符合以上的要求。
那如果假设 FOSC = 8 MHz 时欲实现 1M 的 CAN的波特率:
TOSC = 0.125us, 选择 BRP<5:0> = 04h, 则 TQ =1.25us。欲达到 1MHz,位时间应为不到1 TQ。
晶振为8MHz,周期就为0.125us,如果BPR为4的话,则TQ=2*(4+1)*0.125us=1.25us,那要实现1Mhz的也就是周期为1us的标称位,只有不到1TQ的为时间,显然不可行。即使BPR为0,TQ=0.25us。所以1M的波特率需要4TQ,也不能实现。实现800Khz的1.25us,需要5TQ,显然也不适合。
对于要实现500Khz是,当BPR为0时,TQ=2*(0+1)*0.125us=0.25us,要实现500KHz的波特率需要8TQ。这样来说还是可以满足时间段的要求的。

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值