Can控制器器只需要进行少量的设置就可以进行通信,就可以像RS232/48那样使用。
其中较难设置的部分就是通信波特率的计算。CAN总线能够在一定的范围内容忍总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。
### CAN总线的波特率计算方法
在现代通信技术中,控制器局域网络(Controller Area Network,简称CAN)作为一种高效、可靠的现场总线标准,在汽车工业、自动化控制系统等多个领域得到了广泛应用。CAN总线的一个关键特性是它能够在一定程度上容忍各个节点间的通信波特率差异,这种特性增强了系统的容错能力,并降低了对每个节点振荡器精度的要求。
#### 波特率计算的重要性
波特率的准确计算对于确保CAN总线系统稳定可靠运行至关重要。不当的波特率设置可能会导致数据包丢失或传输错误,从而影响整个系统的性能和稳定性。因此,了解如何正确地计算CAN总线的波特率是必要的。
#### CAN总线波特率的基本概念
在CAN总线中,波特率是指每秒传输的位数,通常用单位“位/秒”表示。CAN总线能够容忍一定范围内的波特率偏差,这主要得益于其独特的时钟同步机制。
#### 波特率计算的关键参数
在计算CAN总线的波特率时,需要考虑以下几个关键参数:
1. **时间段(Time Segments)**:CAN总线中将一个位的时间分为四个阶段:同步段(Sync Segment)、传播段(Propagation Segment)、相位缓冲段1(Phase Segment 1)和相位缓冲段2(Phase Segment 2)。
- 同步段(Tsync):用于保持各节点之间的同步,通常为1个时间量子(Tscl)。
- 传播段(Tpropagation):补偿信号在总线上传播所需的时间。
- 相位缓冲段1(Tphase1)和相位缓冲段2(Tphase2):用于调整位时间和信号传播延迟之间的差异。
2. **时间量子(Time Quantum,Tscl)**:是构成位时间的最小单位,由CAN控制器的时钟周期确定。
3. **波特率预设(BRP)**:用来调整时间量子的大小,BRP值越大,时间量子Tscl也越大。
4. **同步跳跃宽度(SJW)**:用于定义相位缓冲段的最大变化量,即最大允许的位时间调整量。
#### 波特率计算公式
根据以上参数,可以得出波特率计算的一般公式:
\[ \text{波特率} = \frac{1}{\text{Tbit}} \]
其中,Tbit为一个位的时间,可以通过以下公式计算:
\[ \text{Tbit} = \text{Tphase1} + \text{Tphase2} + \text{Tsync} = (\text{TSEG1} + \text{TSEG2} + 3 * \text{Tscl}) \]
进一步计算得到波特率:
\[ \text{波特率} = \frac{1}{\text{TSEG1} + \text{TSEG2} + 3 * \text{Tscl}} \]
考虑到同步跳跃宽度SJW的影响,实际波特率的范围为:
\[ \text{实际波特率} = \frac{1}{\text{Tbit} + \text{SJW}} \text{到} \frac{1}{\text{Tbit} - \text{SJW}} \]
#### 示例计算
假设:
- 微控制器时钟频率为16MHz。
- 时间量子Tscl = (BRP + 1) / Fclk。
- 传播延迟时间为380ns。
- 位时间设置为16Tscl。
- Tcsc = 1 / (1MHz / 16) = 62.5ns(取63)。
- BRP = (Tcsc * MCLK) - 1 = 6.3 - 1(取5)。
- PROPAG = (380ns / Tcsc) - 1 = 6.08Tcsc - 1(取6)。
- PHASE1 + PHASE2 = (16 - 1 - 7)Tcsc = 8Tcsc。
- SJW = Min(4Tcsc, PHASE1) = 4Tcsc。
- SJW / Tcsc - 1 = 3。
由此可得:
- BRP = 5。
- SJW = 3。
- PROPAG = 6。
- PHASE1 = PHASE2 = 4。
#### BTR寄存器配置
在实际应用中,需要根据计算结果配置BTR寄存器,具体步骤如下:
1. **配置BTR0寄存器**:包含SJW等字段。
2. **配置BTR1寄存器**:包含BRP等字段。
#### 总结
通过上述计算方法,我们可以准确地计算出CAN总线的波特率,并根据实际需求调整相关参数以达到最佳通信效果。在进行CAN总线系统设计时,合理设置这些参数是实现稳定通信的基础。