EV-Embedded-Control-System/系统介绍.md

248 lines
9.4 KiB
Markdown
Raw Permalink Normal View History

# 比亚迪秦EV嵌入式控制系统 - 系统介绍
## 1. 项目概述
本项目是针对**比亚迪秦EV电动汽车**开发的嵌入式控制系统,基于**AT32F407RGT7**ARM Cortex-M4微控制器实现了车辆数据采集、通信控制和实时监测等核心功能。
### 1.1 项目定位
- **应用场景**:电动汽车数据采集与控制系统
- **核心目标**:实现车辆状态实时监测、远程通信和智能控制
- **技术特点**:实时性强、可靠性高、通信协议丰富
---
## 2. 技术架构
### 2.1 硬件平台
| 参数 | 规格 |
|------|------|
| MCU | AT32F407RGT7ARM Cortex-M4168MHz |
| 存储 | 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 速度计算原理
```c
#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. 技术特点总结
1. **实时性设计**基于FreeRTOS实现任务调度关键任务高优先级保障实时响应
2. **多协议支持**CAN、以太网、Modbus TCP/RTU、RS485等多种通信方式
3. **数据采集全面**:覆盖车辆速度、温度、电压、电流、位置等关键参数
4. **可靠性保障**看门狗机制、CAN自动重传、错误中断处理
5. **模块化架构**:分层设计,便于功能扩展和维护
6. **远程监控能力**:以太网+Modbus TCP支持上位机远程访问
---
## 10. 应用场景
本系统主要应用于:
- **电动汽车改装**:数据采集与控制
- **车队管理**:远程监控车辆状态
- **数据分析**:收集车辆运行数据用于优化
- **故障诊断**:实时监测车辆异常状态