OBD扫描设备开发

项目介绍

使用STM32单片机开发一个OBD 2.0协议扫描仪,并实现以下功能

  1. 通过OBD口连接车辆,发送诊断服务相关请求,并接收反馈信号.
  2. 利用上位机控制扫描工具进行信号的收发.
  3. 实现车辆OBD诊断服务,包括故障码读取,清除故障码,诊断PID的读取,冻结帧,车辆VIN码等.

项目结构

协议介绍

OBD车载诊断服务,不同的厂家,不同的车型,物理层通讯协议会有所区别,主要分为以下几种:

J1850PWM_I 0 // US OBD-II protocol
J1850VPW_I 1 // US OBD-II protocol
ISO9141_I 2 // US OBD-II protocol
ISO14230_FAST_INIT_I 3 // US OBD-II protocol
ISO14230_I 4 // US OBD-II protocol
ISO15765_I 5 // US OBD-II protocol
ISO15765_29_BIT_I 6 // US OBD-II protocol
ISO15765_250K_11_BIT_I 7 // EOBD protocol
ISO15765_250K_29_BIT_I 8 // EOBD protocol
在这里插入图片描述

J1850PWM_I:
协议: J1850 PWM (Pulse Width Modulation)
物理层: 使用 PWM 脉冲宽度调制技术,这是一种模拟信号传输方式。
用途: 主要用于美国市场的 OBD-II (On-Board Diagnostics) 诊断接口。
特点: 单线通信,通常使用 CAN 总线的一个引脚进行数据传输。

J1850VPW_I:
协议: J1850 VPW (Variable Pulse Width)
物理层: 使用 VPW 变脉冲宽度调制技术,同样是模拟信号传输。
用途: 也用于 OBD-II 诊断接口,常见于通用汽车公司的车型。
特点: 单线通信,通常使用 CAN 总线的一个引脚进行数据传输。

ISO9141_I:
协议: ISO 9141-2
物理层: 使用 K 线 (K-Line) 或 L 线 (L-Line) 进行通信。
用途: 主要用于欧洲市场的 OBD-II 诊断接口。
特点: 单线通信,支持低速数据传输。

ISO14230_FAST_INIT_I:
协议: ISO 14230 (KWP2000)
物理层: 使用 K 线 (K-Line) 进行通信。
用途: 用于 OBD-II 诊断接口,支持快速初始化模式。
特点: 单线通信,支持低速数据传输。

ISO14230_I:
协议: ISO 14230 (KWP2000)
物理层: 使用 K 线 (K-Line) 进行通信。
用途: 用于 OBD-II 诊断接口。
特点: 单线通信,支持低速数据传输。

ISO15765_I:
协议: ISO 15765 (CAN)
物理层: 使用 CAN (Controller Area Network) 总线进行通信。
用途: 用于 OBD-II 诊断接口,是目前最常用的协议之一。
特点: 双绞线通信,支持高速数据传输。

ISO15765_29_BIT_I:
协议: ISO 15765 (CAN)
物理层: 使用 CAN 总线进行通信。
用途: 用于 OBD-II 诊断接口,支持 29 位标识符。
特点: 双绞线通信,支持高速数据传输。

ISO15765_250K_11_BIT_I:
协议: ISO 15765 (CAN)
物理层: 使用 CAN 总线进行通信。
用途: 用于 OBD-II 诊断接口,支持 11 位标识符。
特点: 双绞线通信,支持高速数据传输,速率通常为 250 kbps。

ISO15765_250K_29_BIT_I:
协议: ISO 15765 (CAN)
物理层: 使用 CAN 总线进行通信。
用途: 用于 OBD-II 诊断接口,支持 29 位标识符。
特点: 双绞线通信,支持高速数据传输,速率通常为 250 kbps。

总结
J1850PWM_I 和 J1850VPW_I 基于 PWM 和 VPW 调制技术,使用单线通信。
ISO9141_I 和 ISO14230_I 使用 K 线进行单线通信。
ISO15765_I, ISO15765_29_BIT_I, ISO15765_250K_11_BIT_I, ISO15765_250K_29_BIT_I 基于 CAN 总线进行双绞线通信,支持高速数据传输。

硬件原理设计

上位机和下位机通过USB 虚拟串口连接.硬件设计配置 CAN, KLINE ,LINE通讯,这里暂时没有设计对J1850PWM_I和J1850VPW_I的支持. 后续可以修改硬件以支持以上这两种协议,并且通过ADC采集OBD口12V电压状态.

OBD口相关线路

在这里插入图片描述

供电设计

在这里插入图片描述

总线设计

KLINE

在这里插入图片描述
在这里插入图片描述

CAN

在这里插入图片描述

USB 转UART

CP2102 是一款高度集成的 USB-to-UART 桥接芯片,由 Silicon Labs(硅实验室)设计生产。这款芯片的主要功能是将 USB 信号转换为 UART 信号,从而使得带有 UART 接口的微处理器或微控制器可以通过 USB 接口与计算机或其他设备进行通信。
CP2102 的主要特点:
USB 2.0 Full Speed: 支持 USB 2.0 全速模式,最高传输速率为 12 Mbps。
UART 接口: 提供异步串行数据总线(UART)接口。
高度集成: 内置 USB 控制器、USB 收发器、晶体振荡器、EEPROM 等组件。
EEPROM: 可以用来存储 USB 设备的描述符,如供应商 ID、产品 ID 等。
易于使用: 只需少量外部元件即可构成一个完整的 USB-UART 方案。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

外部时钟

在这里插入图片描述

调试口

在这里插入图片描述

SMT单片机

这里使用的是STM32F103CBT6
在这里插入图片描述

嵌入式代码开发

调用STM标准的驱动接口
STM32F10x_StdPeriph_Driver,驱动接口中有CAN ,UART,GPIO等接口,这里主要用到CAN,UART
软件架构思想:

  1. USART接收PC下发的请求,把请求存到USART报文队列中.
  2. 从USART报文队列中读取请求,判断请求的类型选择发送报文,配置通讯口等.
  3. 接收CAN报文,并存到CAN报文队列中
  4. 从CAN报文队列中读取报文发送到上位机

主函数介绍

LED_Config();
PC_USART_Config(256000);
TIM3_Config();
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
while(1)
{
//需要在主线程运行的代码内容
}

中断函数介绍

void PC_USART_IRQHandler(void)
接收上位机发送的UART报文触发中断,并当上位机请求发送CAN报文时,发送对应的报文到CAN总线.

void USB_LP_CAN1_RX0_IRQHandler(void)
接收CAN报文触发中断,将收到的CAN报文传递给上位机.
void K_LINE_IRQHandler(void)
K LINE触发中断,

void TIM3_IRQHandler(void)
定时器3中断,可用于控制LED闪烁,也可以用于周期性运行的函数Task

上位机调试

在调试阶段可以使用串口调试工具.
调试之前需要安装USB串口驱动.

总结

在完成上述开发后,我们基于将进行上位机的相关开发,包括制作标准的J2534.dll.让设备能够支持J1699的测试.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值