stm32项目(24)——基于STM32的汽车CAN通信系统
1.实现功能
主要是通过CAN通信协议,控制汽车的:两个转向灯,一个倒车灯,两个大灯。转向灯用一个电位器模拟方向盘,往左拧(即左转)自动打开左转向灯,右转同上。倒车就用一个按钮模拟,按下按钮倒车灯亮。大灯分出近光灯和远光灯,用亮度区分。
控制模式分为自动与手动两种,手动就是用按键控制,自动模式下:光敏传感器检测到天黑时,自动打开远光灯,天亮关灯;天黑且红外传感器检测到对向有来车时,自动切换为近光灯。
整个系统的相关信息会显示在OLED屏幕上,以便掌握系统实时状态。
(整个系统分为上位机与下位机,上位机发送指令,下位机接收并进行灯光控制)
2.原理图
发送端:
接收端:
3.演示视频
汽车CAN通信系统
要使用到两个CAN通信模块,连接方式如视频所示
4.主要模块介绍
4.1 CAN通信模块
TJA1050模块
TJA1050 是高速CAN总线收发器,用于实现单片机与CAN总线网络的物理层连接,广泛应用于汽车电子、工业控制等领域。
1. 基本特性
-
兼容标准:支持 ISO 11898-2 高速CAN(最高1Mbps)。
-
工作电压:
-
VCC:4.5V~5.5V(逻辑侧电源)。
-
VBAT:电池电压(支持车辆12V/24V系统,防反接保护)。
-
-
接口保护:
-
±8kV ESD保护(抗静电)。
-
总线引脚抗短路和过压(-27V~+40V)。
-
-
低功耗模式:支持静默模式(Silent Mode)和睡眠模式(低功耗待机)。
2. 模块接口(6引脚)
引脚 | 功能 | 连接说明 |
---|---|---|
TXD | 发送数据输入 | 接单片机CAN控制器TXD引脚 |
RXD | 接收数据输出 | 接单片机CAN控制器RXD引脚 |
VCC | 逻辑电源(5V) | 接单片机5V电源 |
GND | 接地 | 与单片机共地 |
CANH | CAN总线高电平线 | 接CAN总线差分线CAN_H |
CANL | CAN总线低电平线 | 接CAN总线差分线CAN_L |
📌 注意:
CANH和CANL需加 120Ω终端电阻(总线两端各一个,匹配阻抗)。
若单片机无内置CAN控制器,需外接 CAN控制器芯片(如MCP2515)。
3. 信号传输(差分通信)
CAN总线电平逻辑
-
显性电平(Dominant):表示逻辑0,强制拉低总线。
-
CANH ≈ 3.5V,CANL ≈ 1.5V(差分电压+2V)。
-
-
隐性电平(Recessive):表示逻辑1,总线悬空。
-
CANH ≈ 2.5V,CANL ≈ 2.5V(差分电压0V)。
-
数据帧结构(基于CAN 2.0B)
-
仲裁段:11位标识符(标准帧)或29位(扩展帧)。
-
数据段:0~8字节用户数据。
-
CRC校验:保证数据完整性。
4. 工作原理
-
发送数据:
-
单片机通过CAN控制器(如STM32的bxCAN)将数据发送到TJA1050的TXD引脚。
-
TJA1050将逻辑信号转换为CAN差分信号(CANH/CANL)。
-
-
接收数据:
-
TJA1050检测总线差分电压,将信号转换为逻辑电平通过RXD输出给单片机。
-
-
冲突处理:
-
CAN总线通过 非破坏性仲裁(标识符优先级)解决多节点同时发送的冲突。
-
5. 单片机连接示例(STM32)
硬件连接
-
STM32F103(内置CAN控制器):
-
PA11 → CAN_RX → TJA1050_RXD
-
PA12 → CAN_TX → TJA1050_TXD
-
4.2 LED灯
该灯高电平即可点亮,使用PWM信号即可控制它的亮度,作为前面的大灯使用。
该灯是RGB三色灯,作为转向灯和尾灯使用,我只用到了其中一种颜色,所以只接线两根就行。
4.3 电位器
该模块输出模拟电压,使用AD检测,即可模拟左右转向。
5.源文件
压缩包内有代码、原理图文件、元件及接线讲解视频