车规级CAN总线外围电路设计方案探究
扫描二维码
随时随地手机看文章
在现代汽车电子控制系统中,CAN(Controller Area Network,控制器局域网)总线作为一种高效、可靠的通信协议,发挥着举足轻重的作用。它不仅连接着发动机控制单元(ECU)、变速器控制单元、制动系统控制单元等多个关键模块,还确保了这些模块之间的实时数据交换和协调工作。为了实现卓越的性能和电磁兼容性(EMC),车规级CAN总线外围电路的设计显得尤为关键。本文将深入探讨这一设计方案,并结合实际应用给出代码示例。
一、共模电感的设计
共模电感在汽车CAN网络中起着抑制共模噪声、提升EMC性能的重要作用。它通过在高阻抗状态下阻止噪声传播,有效滤除系统自身发射的干扰噪声,同时抑制其他系统产生的干扰噪声对CAN总线通信的干扰。
在设计共模电感时,需要关注以下几个关键特性:
电感值:为了有效抑制共模噪声,共模电感在共模噪声频率处应具备尽可能高的电感值。然而,过大的电感值会带来尺寸和成本上的挑战。因此,针对500kbps的CAN通信,推荐使用51uH电感值的共模电感;而对于2Mbps的CAN FD通讯,则建议采用100uH电感值。
泄漏电感:适量的泄漏电感能有效抑制CAN总线中的差模电流,提升系统的整体EMI性能。但过大的泄漏电感可能会引发CAN信号的振铃现象,干扰正常通讯。因此,在选择时,应确保既能发挥差模抑制作用,又不至于在总线信号上产生显著的振铃。
直流电阻:共模电感的直流电阻对总线信号的损耗具有直接影响。随着直流电阻的增大,总线信号的损耗也会相应增加,导致传输效率降低。因此,选择直流电阻尽可能小的共模电感显得尤为重要。
模式转换特性:共模电感的模式转换特性通过Ssd12/Sds21参数来衡量。当Ssd12/Sds21参数的差异较大时,意味着上下线圈存在较大的不对称性,这会引入额外的共模噪声,降低EMI滤波效能。因此,应倾向于选择Ssd12/Sds21参数接近的器件。
二、终端分立电阻的设计
在包含多个节点的CAN网络中,为了确保信号传输质量,通常在首端节点和末端节点的总线上并联一个与总线特征阻抗相匹配的电阻(通常为120Ω)。这个电阻的主要作用包括:
匹配总线特征阻抗,阻止信号反射:CAN总线的特征阻抗通常为120Ω,而CAN收发器在隐性状态下的总线差分输入电阻高达数十kΩ。阻抗不匹配会导致信号反射,产生振铃现象,影响正常通信。
吸收外部干扰:CAN收发器的输入差分电阻阻值较高,使得外部轻微干扰能在总线上产生足够的差分电压,改变总线状态。并联一个阻值相对较小的电阻(45Ω到70Ω之间)可以吸收这些干扰,防止其在总线上形成显性差分电压。
加速总线信号下降沿:总线显隐切换的过程是对寄生电容的充放电过程。并联一个匹配电阻可以显著加速放电过程,使信号下降沿更加迅速,实现总线状态从显性到隐性的快速切换。
三、代码示例
以下是一个简单的CAN总线初始化代码示例,使用C语言编写,适用于STM32微控制器:
c
#include "stm32f4xx_hal.h"
CAN_HandleTypeDef hcan1;
void CAN_Config(void)
{
// CAN结构体初始化
hcan1.Instance = CAN1;
hcan1.Init.Prescaler = 9;
hcan1.Init.Mode = CAN_MODE_NORMAL;
hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan1.Init.TimeSeg1 = CAN_BS1_6TQ;
hcan1.Init.TimeSeg2 = CAN_BS2_8TQ;
hcan1.Init.TimeTriggeredMode = DISABLE;
hcan1.Init.AutoBusOff = DISABLE;
hcan1.Init.AutoWakeUp = DISABLE;
hcan1.Init.AutoRetransmission = ENABLE;
hcan1.Init.ReceiveFifoLocked = DISABLE;
hcan1.Init.TransmitFifoPriority = DISABLE;
if (HAL_CAN_Init(&hcan1) != HAL_OK)
{
// 初始化错误处理
Error_Handler();
}
// 激活通知
HAL_CAN_ActivateNotification(&hcan1, CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING);
}
int main(void)
{
HAL_Init();
SystemClock_Config();
CAN_Config();
// 主循环
while (1)
{
// CAN通信代码
}
}
void Error_Handler(void)
{
// 用户可以添加自己的错误处理代码
while(1)
{
}
}
该代码示例展示了如何初始化CAN总线,并设置了相关的时序参数。在实际应用中,还需根据具体需求配置滤波器、发送和接收邮件箱等。
四、结论
车规级CAN总线外围电路的设计是一个复杂但至关重要的过程。通过精心选择共模电感和终端分立电阻等关键元件,并结合实际的代码实现,可以显著提升CAN总线的通信质量和电磁兼容性。这不仅有助于确保汽车电子控制系统的稳定运行,还为未来智能汽车的发展奠定了坚实的基础。