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