汽车诊断(汽车诊断协议ISO-9141 测试)

Posted

篇首语:学习并不等于就是摹仿某些东西,而是掌握技巧和方法。本文由小常识网(cha138.com)小编为大家整理,主要介绍了汽车诊断(汽车诊断协议ISO-9141 测试)相关的知识,希望对你有一定的参考价值。

汽车诊断(汽车诊断协议ISO-9141 测试)

前言

硬件说明:

  • MCU: GD32C103 120M,128K,32k RAM.
  • 输入:USB 5V.
  • OBD功能口定义:OBD(2,10)VPWM、OBD 7(K线)、OBD 6(CAN H)、OBD 14(CAN L)、OBD 15(L线).

软件说明:

  1. 汽车CAN2.0(双线OBD 6、14)

1、支持波特率:1M、800K、500K、250K、125K、100K、62K、50K、33.3K、25K

  1. 汽车CAN FD(双线OBD 6、14)

1、仲裁区波特率:1M、500K

2、数据区波特率5M 4M 2M 1M

三、汽车KWP/LIN(OBD 7)总线数据采集说明

1、波特率:5、4800、9600、10416、57600、115200 BPS


三、SAE J1850(OBD 2、10)

1、PWM 协议发送接收

2、VPW 协议发送接收


ISO-9141-2

电路图


2.例程说明

物理层特性

空闲电平通常为12V;

数据位格式为1+8+1,无校验位;

常用波特率为10416BPS和9600BPS两种。

通讯方式

  1. K线 ② K+L线


采用地址吗方式激活系统,先用5BPS 发送地址吗,ECU会相应55+KW1+KW2

设备对KW2取反发回给ECU,ECU对地址码取反发回给设备,完成系统初始化交互。

其中55H这个字节用来规定后面的通信波特率

本例子 KWP 波特率设置为10416,地址码激活后,循环发送命令帧

注:用OBD 一分2线接上开发板与CAN/K 采集器

3.软件设计

(1)main主要流程

//InitKinSys(1,0x33,10416);//地址码33激活方式 并初始化K线波特率

//SendKwp9141Frame(SendData) 发送命令

Main() 主要代码

uint8_t SendData[10]=0x06,0x68,0x6A,0xF1,0x09,0x02,0xCE;

uint8_tSendData1[20]=0x0b,0x48,0x6B,0x10,0x49,0x02,0x01,0x30,0x31,0x32,0x33,0x50;

gpio_bit_set(GPIOB,GPIO_PIN_11); //PB11=1 开启 1027

//UART1_Init(10416); //波特率

InitKinSys(1,0X33,10416);//地址吗激活

/* main loop */

while (1)

SendKwp9141Frame(SendData);//CX 开头的帧

Delay_ms(500);

SendKwp9141Frame(SendData1);//8X 开头的帧

Delay_ms(500);


(2)usart.c 主要函数说明

1 地址码激活 AddrWakeUpOneEx

//激活系统

// 0 激活失败

// 1 激活成功

u8 AddrWakeUpOneEx(u8 iAddValue,uint16_t iKwpBaudVale)

u8 TimeOutFlag=0;

u8 err=0;

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

// USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //禁止接收中断

usart_interrupt_disable(USART1, USART_INT_RBNE);

usart_receive_config(USART1, USART_RECEIVE_DISABLE);//关闭接收

if(SendAddFrame(iAddValue))

UART1_Init(iKwpBaudVale);

if(KLIN_Recieve_Byte(&err,1000))//55 300MS超时 55

if(KLIN_Recieve_Byte(&err,50))//K1

if(KLIN_Recieve_Byte(&err,50))//k2

Delay_ms(30);

KLIN_Send_ByteOne(~err);

if(KLIN_Recieve_Byte(&err,60 +60)) //接收地址码取反

Delay_ms(50);

Delay_ms(500);

TimeOutFlag=1;

else

TimeOutFlag = 0;

return TimeOutFlag;

2 初始化UART1_Init

//波特率设置

void UART1_Init(uint32_t bound)

/* enable USART, GPIOA clock */

rcu_periph_clock_enable(RCU_GPIOA);

rcu_periph_clock_enable(RCU_USART1);

rcu_periph_clock_enable(RCU_AF);


nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);

nvic_irq_enable(USART1_IRQn, 0, 1);


/* connect port to USART1_Tx */

gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);

/* connect port to USART1_Rx */

gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_3);


/* USART1 and USART2 baudrate configuration */

usart_baudrate_set(USART1, bound);//波特率


/* configure USART word length */

usart_word_length_set(USART1, USART_WL_8BIT);//8位数据格式

/* configure USART stop bits */

usart_stop_bit_set(USART1, USART_STB_1BIT);//停止位

/* configure USART transmitter */

usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);//使能发送

/* configure USART receiver */

usart_receive_config(USART1, USART_RECEIVE_ENABLE);//使能接收

/* enable USART */

usart_enable(USART1);

/* enable the USART interrupt */

usart_interrupt_enable(USART1, USART_INT_RBNE);//是能接收中断

3 发送命令SendKwp9141Frame

/***********************************************

函数:标准 9141 命令发送函数

参数:cmdaddr = 06 68 6A F1 09 02 CE

功能:

返回:

***********************************************/

uint8_t SendKwp9141Frame(uint8_t cmdaddr[])

uint8_t Sidx=0,Slong=0;

uint16_t i=0;

uint32_t tmp=0;


Slong=cmdaddr[0];//计算长度

cmdaddr[Slong]=SumDat(cmdaddr+1,Slong);

//cmdaddr[Slong-1]=sum;//累加和最后一个字节


//USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);//禁中段

/* enable the USART interrupt */

usart_interrupt_disable(USART1, USART_INT_RBNE);

usart_receive_config(USART1, USART_RECEIVE_DISABLE);//关闭接收

usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);//清款冲


Delay_ms(20);

for(Sidx=0; Sidx <Slong; Sidx ++)

KLIN_Send_ByteOne(cmdaddr[Sidx]);

if(Sidx==(Slong-1))

Delay_us(20);

usart_data_receive(USART1);

usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);//清款冲

Delay_ms(5);

usart_interrupt_enable(USART1, USART_INT_RBNE);

usart_receive_config(USART1, USART_RECEIVE_ENABLE);//使能接收

return Slong;

4.PC 平台效果

EcuSimulator 工具设置KWP波特率10416采集,显示数据如下图所示

源码地址

https://github.com/siyuan1644/GD32_ISO_9141.git

相关参考

汽车诊断仪都有动作测试(汽车维修实务故障诊断仪的使用技巧精讲)

认清故障方向:由于电子控制单元的自诊断系统只能监视电控系统的电路故障,而对于非电路故障,解码器就无能为力。所以对于发动机而言,首先要分清是机械故障还是电路故障;对于自动变速器而言,则要分清是机械故障、...

汽车诊断仪动作测试(卡车发动机故障打不着火?8招帮你解困)

【共轨导读】无法启动是发动机故障中最为常见的故障,油路、电路、气路、机械等都会导致无法启动。妄想用一句话去概括其排查思路,是很不切合实际的;排查应根据故障类型,遵循一定的流程,由表及里、由浅入深逐步排...

气缸诊断测试仪(汽修案例:汽车发动机油耗过大该如何入手检测?)

发动机油耗过大是指它的百公里油耗超过规定的标准值。油耗过大,发动机的经济性就差。影响发动机油耗的因素很多,有发动机技术状况方面的因素,也有底盘技术状况方面的因素。本文主要讨论的是前者方面的因素。(一)...

汽车驾驶室检测(揭秘汽车诊断师:给汽车“望闻问切”,让故障维修事半功倍)

汽车诊断师杨培英借助示波器对车辆进行诊断。(本报记者林钦圣摄)对大部分人来说,“汽车诊断师”还是一个新鲜名词,但它或将成为日益发展的汽修行业一个不可或缺的岗位。在日前落幕的厦门市第二十八届职工技能竞赛...

总线测试仪(说说CAN诊断分析仪的检测和维护的功能)

...的可能性,就如同年久失修的罐子一样,如果不经常的对汽车CAN总线进行检测和维护的话,那么一旦其出现问题,很有可能就会导致汽车驾驶者的生命安全受到威胁,严重的还可能波及无辜群众。所以,我们需要定期的对CAN总线...

汽车发动机的常见故障(发动机无法起动故障诊断与排除)

...点火钥匙,接上故障诊断仪,诊断仪提示:“测试设备与汽车电脑不能

汽车诊断仪哪个品牌好(汽车漆膜测厚仪十大品牌及厂家)

目前市场上什么牌子的汽车漆膜测厚仪好?哪个品牌的汽车漆膜测厚仪质量好?请参阅中国无损检测网整理十大汽车漆膜测厚仪品牌榜中榜。汽车漆膜测厚仪又叫车漆检测仪、车漆质量控制仪、二手车检测仪、漆膜测试仪、二手...

汽车故障诊断仪哪种好(北京西马力检测仪器有限公司-电机故障智能诊断仪E01BM312)

电机故障智能诊断仪可直接表述定子、转子健康状况。屏幕用清晰的方式显示“良好、预警、损坏”。该仪器是离线检测的一项重大突破。只需要短短几分钟,就可以得到三相交流式感应电机的全面状态分析,无需对绕组线圈进...

汽车诊断仪现在哪一种比较好(新能源汽车维修检查中的神助攻:汽车诊断仪)

...绍一款黾车门店经常用到的一款设备,也是我们在新能源汽车维修中的神助攻——汽⻋诊断仪!点击播放视频:汽车故障诊断仪是车辆故障自检终端、可用于检测汽车故障的便携式智能设备。汽车故障诊断仪样式如上图所示,外...

汽车故障诊断仪使用方法(「科普」起底汽车诊断仪各类辅助配件的功能优势)

汽车已然是我们日常生活中重要的交通工具,而且,近年来普及速度与程度增长得相当明显。市场上汽车持续走高的保有量,必然刺激汽车服务及后市场的蓬勃发展。众所周知,汽车故障诊断仪,又称汽车解码器是一款专门针对...