9.4 KiB
9.4 KiB
比亚迪秦EV嵌入式控制系统 - 系统介绍
1. 项目概述
本项目是针对比亚迪秦EV电动汽车开发的嵌入式控制系统,基于AT32F407RGT7(ARM Cortex-M4)微控制器,实现了车辆数据采集、通信控制和实时监测等核心功能。
1.1 项目定位
- 应用场景:电动汽车数据采集与控制系统
- 核心目标:实现车辆状态实时监测、远程通信和智能控制
- 技术特点:实时性强、可靠性高、通信协议丰富
2. 技术架构
2.1 硬件平台
| 参数 | 规格 |
|---|---|
| MCU | AT32F407RGT7(ARM Cortex-M4,168MHz) |
| 存储 | 1MB Flash + 192KB SRAM |
| 通信接口 | CAN×2、ETH、UART×7、RS485 |
| 定时器 | 多个通用定时器 |
2.2 软件架构层次
┌─────────────────────────────────────────────┐
│ 应用层 (Application) │
│ ┌─────────┬─────────┬─────────┐ │
│ │ 数据采集 │ 协议处理 │ 控制逻辑 │ │
│ └─────────┴─────────┴─────────┘ │
├─────────────────────────────────────────────┤
│ 中间件层 (Middleware) │
│ ┌─────────┬─────────┬─────────┐ │
│ │ FreeRTOS │ LwIP │ Modbus │ │
│ └─────────┴─────────┴─────────┘ │
├─────────────────────────────────────────────┤
│ 驱动层 (Driver) │
│ ┌─────────┬─────────┬─────────┐ │
│ │ CAN │ EMAC │ UART │ │
│ └─────────┴─────────┴─────────┘ │
├─────────────────────────────────────────────┤
│ HAL层 (Hardware Abstraction) │
│ AT32 HAL Library │
└─────────────────────────────────────────────┘
2.3 核心中间件
| 中间件 | 版本 | 功能描述 |
|---|---|---|
| FreeRTOS | 实时内核 | 任务调度、队列、信号量、定时器 |
| LwIP | 轻量级TCP/IP | 以太网通信、TCP/UDP协议栈 |
| FreeModbus | Modbus协议 | Modbus TCP/RTU主从站实现 |
| libmodbus | Modbus库 | 额外的Modbus RTU支持 |
| SEGGER RTT | 调试工具 | 实时终端调试输出 |
3. 主要功能模块
3.1 功能模块总览
| 模块 | 文件名 | 核心功能 |
|---|---|---|
| 系统控制 | wk_system.c |
时钟配置、延时函数、时间基准 |
| CAN通信 | wk_can.c |
CAN1/CAN2初始化、数据收发 |
| 以太网 | wk_emac.c |
EMAC初始化、PHY配置 |
| 网络协议 | wk_lwip.c |
LwIP栈初始化、网络管理 |
| 调试配置 | wk_debug.c |
SWD调试接口配置 |
| FreeRTOS应用 | freertos_app.c |
任务创建与调度 |
| Modbus任务 | mbtask.c |
Modbus TCP从站初始化 |
3.2 FreeRTOS任务架构
系统基于FreeRTOS实现多任务并发,核心任务包括:
| 任务名称 | 优先级 | 功能描述 |
|---|---|---|
run_task |
0 | 系统心跳、看门狗喂狗 |
tmr_task |
0 | 速度计算(基于轮速脉冲) |
modbustcp_slaver_task |
中 | Modbus TCP从站协议处理 |
rs485_task |
中 | RS485总线数据采集 |
io_task |
中 | 信号灯检测、参数下发 |
modbusrtu_master_task |
中 | Modbus RTU主站轮询 |
can2_master_task |
高 | CAN2数据接收(油门/刹车/转向) |
can1_master_task |
高 | CAN1数据接收(车辆CAN总线) |
3.3 任务间通信机制
- 队列 (Queue):用于CAN数据、定时器数据的异步传递
- 信号量 (Semaphore):用于任务同步
- 事件组 (Event Group):用于复杂事件通知
4. 核心通信协议
4.1 CAN总线通信
系统支持双通道CAN通信:
CAN1(监听模式):
- 波特率:500 kbps
- 用途:侦听车辆CAN总线数据(档位、电量、速度、里程)
CAN2(通信模式):
- 波特率:500 kbps
- 用途:与改装设备通信(油门、刹车、转向)
4.2 以太网通信
- MAC地址:
00:00:44:45:56:01 - IP地址:
192.168.1.37(静态配置) - 速率:100Mbps 全双工
- 协议栈:LwIP(支持TCP/UDP/IP)
4.3 Modbus协议
系统同时支持Modbus TCP和Modbus RTU:
Modbus TCP:作为从站,响应上位机数据请求
Modbus RTU:作为主站,采集传感器数据(温度、电压、电流)
5. 数据采集功能
5.1 采集参数列表
| 参数ID | 参数名称 | 来源 | 数据类型 |
|---|---|---|---|
MODBUS_ID_SPEED1 |
车速1 | CAN1 | uint16 |
MODBUS_ID_SPEED2 |
车速2 | 轮速脉冲 | uint16 |
MODBUS_ID_TEMP1 |
温度1 | RS485 | uint16 |
MODBUS_ID_TEMP2 |
温度2 | RS485 | uint16 |
MODBUS_ID_VOLTAGE |
电压 | RS485 | uint16 |
MODBUS_ID_CURRENT |
电流 | RS485 | uint16 |
MODBUS_ID_THROTTLE1/2 |
油门位置 | CAN2/RS485 | uint16 |
MODBUS_ID_BRAKE |
刹车状态 | CAN2 | uint16 |
MODBUS_ID_STEERING |
转向角度 | CAN2 | uint16 |
MODBUS_ID_GEAR |
档位 | CAN1 | uint16 |
MODBUS_ID_BAT |
电量 | CAN1 | uint16 |
MODBUS_ID_MILEAGE |
里程 | CAN1 | uint16 |
MODBUS_ID_LIGHT |
信号灯 | GPIO | uint16 |
5.2 速度计算原理
#define CIRC (2.3f * C_NUM) // 车轮周长
time = 100.0f * measured_time / 1000000.0f; // 转换为秒
speed = CIRC / time; // m/s
speed *= 3.6f; // 转换为 km/h
6. 系统初始化流程
main()
│
├─► wk_system_clock_config() // 系统时钟配置
├─► wk_periph_clock_config() // 外设时钟配置
├─► wk_debug_config() // 调试接口配置
├─► wk_nvic_config() // NVIC中断配置
├─► wk_timebase_init() // 时间基准初始化
├─► wk_tmr1_init() // 定时器1初始化
├─► wk_tmr2_init() // 定时器2初始化
├─► wk_emac_init() // 以太网初始化
├─► wk_can1_init() // CAN1初始化
├─► wk_can2_init() // CAN2初始化
├─► wk_lwip_init() // LwIP初始化
├─► at32_bsp_init() // BSP初始化
├─► wk_wdt_init() // 看门狗初始化
└─► wk_freertos_init() // FreeRTOS启动
│
└─► vTaskStartScheduler()
7. 中断优先级配置
| 中断源 | 优先级 | 说明 |
|---|---|---|
| EMAC | 5 | 以太网DMA中断 |
| UART7 | 6 | UART7中断 |
| CAN2 | 7 | CAN2中断 |
| CAN1 | 8 | CAN1中断 |
8. 项目文件结构
byd_qin_ev 1.4/
├── libraries/ # 基础库
│ ├── cmsis/ # CMSIS核心库
│ └── drivers/ # AT32 HAL驱动
├── middlewares/ # 中间件
│ ├── freertos/ # FreeRTOS实时内核
│ ├── lwip/ # LwIP网络协议栈
│ ├── FreeModbus/ # FreeModbus协议
│ ├── libmodbus/ # libmodbus库
│ └── segger_rtt/ # RTT调试工具
├── project/ # 项目工程
│ ├── src/ # 源代码
│ │ ├── main.c # 主入口
│ │ ├── wk_system.c # 系统控制
│ │ ├── wk_can.c # CAN通信
│ │ ├── wk_emac.c # 以太网驱动
│ │ ├── wk_lwip.c # 网络协议
│ │ ├── wk_debug.c # 调试配置
│ │ ├── freertos_app.c # FreeRTOS应用
│ │ └── mbtask.c # Modbus任务
│ └── MDK_V5/ # Keil MDK工程文件
└── AT32F407RGT7.ATWP # AT32配置文件
9. 技术特点总结
-
实时性设计:基于FreeRTOS实现任务调度,关键任务高优先级保障实时响应
-
多协议支持:CAN、以太网、Modbus TCP/RTU、RS485等多种通信方式
-
数据采集全面:覆盖车辆速度、温度、电压、电流、位置等关键参数
-
可靠性保障:看门狗机制、CAN自动重传、错误中断处理
-
模块化架构:分层设计,便于功能扩展和维护
-
远程监控能力:以太网+Modbus TCP支持上位机远程访问
10. 应用场景
本系统主要应用于:
- 电动汽车改装:数据采集与控制
- 车队管理:远程监控车辆状态
- 数据分析:收集车辆运行数据用于优化
- 故障诊断:实时监测车辆异常状态