当前位置: 首页 > 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.lryc.cn/news/615184.html

相关文章:

  • WinForm 复合控件(用户控件):创建与使用指南
  • 深入 FastMCP 源码:认识 tool()、resource() 和 prompt() 装饰器
  • sqli-labs通关笔记-第39关 GET数值型堆叠注入(手工注入+脚本注入两种方法)
  • 数据分析框架从 “工具堆砌” 转向 “智能协同”
  • 大语言模型提示工程与应用:提示工程-提升模型准确性与减少偏见的方法
  • node.js 零基础入门
  • 学习嵌入式第二十四天
  • Kotlin 协程线程切换机制详解
  • M8-11 RFID模块通过RS485转Profinet网关与PLC通信的配置指南
  • 安装NodeJS和TypeScript简要指南
  • 虚拟机远程连接报错解决办法
  • 「iOS」————分类与扩展
  • 书生浦语第五期-L1G4-InternLM 论文分类微调实践(XTuner 版)
  • 代码随想录day60图论10
  • 快速使用selenium+java案例
  • Nginx 性能优化与动态内容处理
  • TOMCAT笔记
  • 七、《Serverless架构:按毫秒计费的成本革命》--从新浪AI推理平台50%效能提升看无服务器本质
  • 前端如何安全存储 API 密钥 —— 两种实用方案
  • CosyVoice 语音合成模型性能优化实战:从 CPU 瓶颈到 GPU 加速的完整解决方案
  • electron多进程设计
  • K8s-pod控制器
  • Baumer高防护相机如何通过YoloV8深度学习模型实现输电线路塔电缆检测分割(C#代码UI界面版)
  • DAY 37 作业(补)
  • 99-基于Python的京东手机数据分析及预测系统
  • 【工具变量】全国省级农业保险保费收入与赔付支出数据更新(2001-2023年)
  • 爬虫攻防战:反爬与反反爬全解析
  • react-window
  • 【Datawhale AI夏令营】基于多模态RAG的企业财报问答系统
  • Arduino系列教程:点亮一个LED灯