CAN总线是广泛应用在汽车控制和工业自动化控制领域里的现场总线,具有广阔的发展前景。基于CAN总线,工程师们开发出了各种各样的相关设备,比如USBCAN分析仪以及CAN转换网关等等。不知道你是否注意过,这些CAN总线设备的CAN接口都是什么样子的。下面,我们简单的来盘点一下:
1、多P凤凰端子类型,是最为常见的CAN接口类型,通用性好。
2、DP9接头。
3、OBD接头。
当然,只要是能够引出CAN高CAN低两根接线的,都可以充当CAN的接头,不要纠结于其外在的形象。

OBD
直观的从名称上来说是英文On-Board Diagnostics的缩写,中文翻译为“车载诊断系统”。书面上的解释就是处理汽车相关故障的诊断系统。对于硬件接口如下图
针对不同车型,汽车上的OBD接口位置会有所不同
而目前对于OBD接口的商用一般是作为GPS tracker即gps定位器,在汽车OBD上主要引出的接口包含了12V的电源、CAN总线、K线,L线等等如下图所示
对于实现与汽车内部诊断系统通信,就是通过这几条总线进行通信。我所理解的OBD从嵌入式的角度来说的话就是:外部器件与汽车内部系统通信的接口。
从何开始学习OBD
当我们认识了OBD相关概念之后,可是对于毫无经验的开发者来说,到底该如何下手,该先学习什么内容。我们要了解汽车内部的数据系统,那必须要学习的就是怎么和汽车进行通信,这时候就很明确了,那就是通过OBD接口的通信总线来打通外部与汽车内部的数据通信,而OBD包含的通信接口包含有CAN总线、K线以及L线,我这里主要是讲解CAN相关应用。
stm32的CAN总线
如果学习过单片机的朋友,谈到CAN总线相比OBD应该会更熟悉一些,对于CAN总线现在都是集成到芯片内部的,比较常用的就是stm32,对于使用者来说,不用太关心CAN总线的电路实现,我们只要能通过配置CAN总线进行通信就行了。在连接CAN总线通信的时候需要注意的是,在通信回路中需要并一个120欧的电阻,至于为什么需要电阻可以参考这篇博文:CAN总线为什么要有两个120Ω的终端电阻。关于CAN总线的理论基础,在网上都有很好的总结大家可以自行查找。我这里直接讨论在STM32中该如何配置CAN总线。首先调试CAN总线,可以先配置成回环模式进行调试,通过是否通信来判断can总线的相关初始化是否正确。对于can的初始化的流程,
1、配置CAN的IO口,在stm32中一般CAN的IO口是复用的,所以这里在配置的时候需要注意一下。
2、打开CAN总线的时钟,同时开始i配置CAN相关的寄存器数据,在这里很重要的一点就是要配置通信模式和波特率,这会关系到CAN的通信。
3、在初始化完之后,还需要配置CAN的滤波器,配置滤波器的目的是因为在汽车通信中,由于部分汽车是没有做网关的,当你通过CAN总线去通信的时候,会返回很多无用的消息,这个时候通过配置滤波器,直接过滤掉无用的,只接收特定的想要的数据。在滤波器中包含16位的滤波器和32位的滤波器配置,这个可以根据需要配置相应的滤波器。
网上有很多相关can初始化的配置,因为我这边使用的是stm32f042的芯片,可供大家参考一下
/****************************************************************************************
**函数信息(information):void CAN_GPIOConfig(void)
**功能描述(description):CAN所用IO引脚配置
**输入参数(Arguments) :None
**输出参数(Returns) :None
**调用提示(reference) :
*****************************************************************************************/
void CAN_GPIOConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA ,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE); //使能SYSCFG,
GPIO_PinAFConfig(GPIOA,GPIO_PinSource11 ,GPIO_AF_4);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_4); //复用CAN功能
SYSCFG->CFGR1 |= PA11_PA12_RMP; //配置打开PA11_PA12功能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitSt

本文介绍了CAN总线在汽车控制和工业自动化中的应用,详细讲述了OBD接口的功能、汽车上的OBD接口位置,以及如何通过STM32学习CAN总线,包括GPIO配置、滤波器设置和数据通信过程。文中还涉及到了OBD通信协议ISO-15765和ISO-15031的应用示例。
最低0.47元/天 解锁文章
307

被折叠的 条评论
为什么被折叠?



