当前位置: 首页 > news >正文

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接地与单片机共地
CANHCAN总线高电平线接CAN总线差分线CAN_H
CANLCAN总线低电平线接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. 工作原理

  1. 发送数据

    • 单片机通过CAN控制器(如STM32的bxCAN)将数据发送到TJA1050的TXD引脚。

    • TJA1050将逻辑信号转换为CAN差分信号(CANH/CANL)。

  2. 接收数据

    • TJA1050检测总线差分电压,将信号转换为逻辑电平通过RXD输出给单片机。

  3. 冲突处理

    • CAN总线通过 非破坏性仲裁(标识符优先级)解决多节点同时发送的冲突。


5. 单片机连接示例(STM32)

硬件连接

  • STM32F103(内置CAN控制器):

    • PA11 → CAN_RX → TJA1050_RXD

    • PA12 → CAN_TX → TJA1050_TXD

4.2 LED灯

该灯高电平即可点亮,使用PWM信号即可控制它的亮度,作为前面的大灯使用。

该灯是RGB三色灯,作为转向灯和尾灯使用,我只用到了其中一种颜色,所以只接线两根就行。

4.3 电位器

该模块输出模拟电压,使用AD检测,即可模拟左右转向。

5.源文件

压缩包内有代码、原理图文件、元件及接线讲解视频

http://www.dtcms.com/a/322484.html

相关文章:

  • React中实现完整的登录鉴权与权限控制系统
  • (一)React复习小满(userImmer/userMemo/useContext/userCallback/userRef)
  • 需求评审需要哪些角色参与
  • 嵌入式 - Linux软件编程
  • Web文件上传:本地与云存储实战
  • day 36_2025-08-09
  • 如何在 Ubuntu 24.04 LTS Linux 上安装 Azure Data Studio
  • C# 通过第三方库INIFileParser管理INI配置文件
  • Golang的本地缓存freecache
  • Linux中Docker redis介绍以及应用
  • Kubernetes(K8s)不同行业的典型应用场景及价值分析 原创
  • 【31】C#实战篇——获取路径下的文件名(不包含路径和扩展名),并分离出文件名`fileName` ,文件名编号`SN`,文件名前缀`WMT`
  • 功能测试中常见的面试题-二
  • kettle插件-kettle MinIO插件,轻松解决文件上传到MinIO服务器
  • Nginx高性能web服务器
  • 如何衡量需求的紧急程度
  • 单片机输出高电平的两种方式
  • Spring Boot自定义Starter:从原理到实战全解析
  • TDengine IDMP 产品基本概念
  • Redis面试题及详细答案100道(01-15) --- 基础认知篇
  • 原生Vim操作大全
  • 分享一个基于Spark的眼科疾病临床数据可视化分析与应用研究Hadoop基于Vue和Echarts的眼科疾病统计数据交互式可视化系统的设计与实现
  • 麦当秀|MINDSHOW:在线AI PPT设计工具
  • linux 操作ppt
  • OceanBase架构设计
  • 7、docker |其余命令
  • 机器学习——08 特征降维
  • Android MVP架构详解:从理论到实践
  • (第三篇)spring cloud之Zookeeper注册中心
  • 观远BI 工具驱动零售消费行业精益增长的实践路径