車規(guī)級CAN總線外圍電路設(shè)計方案探究
在現(xiàn)代汽車電子控制系統(tǒng)中,CAN(Controller Area Network,控制器局域網(wǎng))總線作為一種高效、可靠的通信協(xié)議,發(fā)揮著舉足輕重的作用。它不僅連接著發(fā)動機控制單元(ECU)、變速器控制單元、制動系統(tǒng)控制單元等多個關(guān)鍵模塊,還確保了這些模塊之間的實時數(shù)據(jù)交換和協(xié)調(diào)工作。為了實現(xiàn)卓越的性能和電磁兼容性(EMC),車規(guī)級CAN總線外圍電路的設(shè)計顯得尤為關(guān)鍵。本文將深入探討這一設(shè)計方案,并結(jié)合實際應(yīng)用給出代碼示例。
一、共模電感的設(shè)計
共模電感在汽車CAN網(wǎng)絡(luò)中起著抑制共模噪聲、提升EMC性能的重要作用。它通過在高阻抗?fàn)顟B(tài)下阻止噪聲傳播,有效濾除系統(tǒng)自身發(fā)射的干擾噪聲,同時抑制其他系統(tǒng)產(chǎn)生的干擾噪聲對CAN總線通信的干擾。
在設(shè)計共模電感時,需要關(guān)注以下幾個關(guān)鍵特性:
電感值:為了有效抑制共模噪聲,共模電感在共模噪聲頻率處應(yīng)具備盡可能高的電感值。然而,過大的電感值會帶來尺寸和成本上的挑戰(zhàn)。因此,針對500kbps的CAN通信,推薦使用51uH電感值的共模電感;而對于2Mbps的CAN FD通訊,則建議采用100uH電感值。
泄漏電感:適量的泄漏電感能有效抑制CAN總線中的差模電流,提升系統(tǒng)的整體EMI性能。但過大的泄漏電感可能會引發(fā)CAN信號的振鈴現(xiàn)象,干擾正常通訊。因此,在選擇時,應(yīng)確保既能發(fā)揮差模抑制作用,又不至于在總線信號上產(chǎn)生顯著的振鈴。
直流電阻:共模電感的直流電阻對總線信號的損耗具有直接影響。隨著直流電阻的增大,總線信號的損耗也會相應(yīng)增加,導(dǎo)致傳輸效率降低。因此,選擇直流電阻盡可能小的共模電感顯得尤為重要。
模式轉(zhuǎn)換特性:共模電感的模式轉(zhuǎn)換特性通過Ssd12/Sds21參數(shù)來衡量。當(dāng)Ssd12/Sds21參數(shù)的差異較大時,意味著上下線圈存在較大的不對稱性,這會引入額外的共模噪聲,降低EMI濾波效能。因此,應(yīng)傾向于選擇Ssd12/Sds21參數(shù)接近的器件。
二、終端分立電阻的設(shè)計
在包含多個節(jié)點的CAN網(wǎng)絡(luò)中,為了確保信號傳輸質(zhì)量,通常在首端節(jié)點和末端節(jié)點的總線上并聯(lián)一個與總線特征阻抗相匹配的電阻(通常為120Ω)。這個電阻的主要作用包括:
匹配總線特征阻抗,阻止信號反射:CAN總線的特征阻抗通常為120Ω,而CAN收發(fā)器在隱性狀態(tài)下的總線差分輸入電阻高達(dá)數(shù)十kΩ。阻抗不匹配會導(dǎo)致信號反射,產(chǎn)生振鈴現(xiàn)象,影響正常通信。
吸收外部干擾:CAN收發(fā)器的輸入差分電阻阻值較高,使得外部輕微干擾能在總線上產(chǎn)生足夠的差分電壓,改變總線狀態(tài)。并聯(lián)一個阻值相對較小的電阻(45Ω到70Ω之間)可以吸收這些干擾,防止其在總線上形成顯性差分電壓。
加速總線信號下降沿:總線顯隱切換的過程是對寄生電容的充放電過程。并聯(lián)一個匹配電阻可以顯著加速放電過程,使信號下降沿更加迅速,實現(xiàn)總線狀態(tài)從顯性到隱性的快速切換。
三、代碼示例
以下是一個簡單的CAN總線初始化代碼示例,使用C語言編寫,適用于STM32微控制器:
c
#include "stm32f4xx_hal.h"
CAN_HandleTypeDef hcan1;
void CAN_Config(void)
{
// CAN結(jié)構(gòu)體初始化
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();
// 主循環(huán)
while (1)
{
// CAN通信代碼
}
}
void Error_Handler(void)
{
// 用戶可以添加自己的錯誤處理代碼
while(1)
{
}
}
該代碼示例展示了如何初始化CAN總線,并設(shè)置了相關(guān)的時序參數(shù)。在實際應(yīng)用中,還需根據(jù)具體需求配置濾波器、發(fā)送和接收郵件箱等。
四、結(jié)論
車規(guī)級CAN總線外圍電路的設(shè)計是一個復(fù)雜但至關(guān)重要的過程。通過精心選擇共模電感和終端分立電阻等關(guān)鍵元件,并結(jié)合實際的代碼實現(xiàn),可以顯著提升CAN總線的通信質(zhì)量和電磁兼容性。這不僅有助于確保汽車電子控制系統(tǒng)的穩(wěn)定運行,還為未來智能汽車的發(fā)展奠定了堅實的基礎(chǔ)。