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