任务4.1 智能网联汽车线控系统组成原理与CAN通信调试
学习目标
知识目标:
掌握线控驱动、制动和转向系统的结构组成和工作原理;
掌握CAN通信矩阵识读方法与CAN通信调试软件的使用方法;
能力目标:
能根据CAN通信协议文件资料和CAN调试软件完成CAN报文的获取解析与发送并对车辆的线控功能进行调试。
任务描述
线控底盘作为智能网联汽车的执行部件,需要完成来自决策控制系统的运动命令,实现各种车辆控制意图。在这一章节,你将学习各个线控系统的原理,在此基础上进一步学习CAN通信相关知识完成线控底盘的控制调试工作。需要说明的是,本章节不过于关注CAN的基础知识,而是结合CAN调试的实际工作过程进行学习。
任务准备
1.资料学习
文档中的视频:
2.任务准备
//CAN驱动底层驱动,与硬件有关,这里不演示
#include <XXXXXXX.h>
void setup()
{
Serial.begin(115200);
// 初始化MCP2515运行在16MHz,波特率为500kb/s,掩码和过滤器禁用.
if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK)
Serial.println("MCP2515 Initialized Successfully!");
else Serial.println("Error Initializing MCP2515...");
CAN0.setMode(MCP_NORMAL); // 更改为普通模式以允许发送消息
}
unsigned char speed_data[8] = {0x00, 0x00,0x00, 0x00,0x00,0x00, 0x00, 0x00};//发送数据
unsigned char speed_data_lsb,speed_date_msb;//EngSpeed占用两个字节
folat EngSpeed=a;//速度物理值,有上位机解算得到
void loop()
{
speed_data_lsb=(EngSpeed/0.0001525)&0xff;//取低八位,信号的真实物理值 = 信号值 * 精度+偏移量
speed_data_msb=(EngSpeed/0.0001525)&>>8;//取高八位,
speed_data[3]=speed_data_lsb;
speed_data[4]=speed_data_msb;
// send data: ID = 0x100, Standard CAN Frame, shu'ju'chas, 'data' = array of data bytes to send
byte sndStat = CAN0.sendMsgBuf(0x100, 0, 8, speed_data);
if(sndStat == CAN_OK){
Serial.println("Message Sent Successfully!");
} else {
Serial.println("Error Sending Message...");
}
delay(100); // send data per 100ms
}
任务实施
尝试编写其它数据的CAN通信代码
任务拓展
CAN 基础学习资料:https://wenku.baidu.com/view/7701528a6529647d2728520f.html

