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

248 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 比亚迪秦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. 应用场景
本系统主要应用于:
- **电动汽车改装**:数据采集与控制
- **车队管理**:远程监控车辆状态
- **数据分析**:收集车辆运行数据用于优化
- **故障诊断**:实时监测车辆异常状态