电动四轮车控制器软件系统功能说明文档

基于 STM8S 系列微控制器的直流无刷电机(BLDC)控制固件分析


1. 概述

本文档基于提供的源代码文件(【01】产品源代码_merged.txt),对一款应用于电动四轮车的**直流无刷电机控制器(BLDC Controller)**的嵌入式软件系统进行详细功能解析。该系统以 STMicroelectronics 的 STM8S 系列 8 位微控制器为核心,集成了电机驱动、传感器采集、故障诊断、人机交互及通信等功能模块。

固件版本标识为 4.00,开发时间可追溯至 2014 年,适用于 24V 至 192V 多种电压平台、150A 至 800A 多种电流规格的控制器硬件。


2. 系统架构与核心模块

整个软件系统采用模块化设计,主要包含以下核心功能模块:

  • 系统初始化(initsys.c
  • 电机控制与 PWM 驱动(controlfunction.c
  • 霍尔传感器位置检测与换相(faultdeal.cget_HALLpostion()
  • 模拟量采集与处理(ADC,variables.c / initsys.c
  • 运行时故障诊断(runfault_check()
  • LED 与串口人机交互(function.h / communication.c
  • 校准与参数存储(EEPROM)
  • 中断服务与实时响应(stm8s_interruput.c

3. 详细功能说明

3.1 系统初始化(initsys()

main() 函数启动后,首先调用 initsys() 完成硬件与软件环境初始化:

  • 时钟配置(init_clk():启用内部高速时钟(HSI)或外部晶振,配置系统主频。
  • GPIO 初始化(init_GPIO()
    • 配置 LED(红/绿)为推挽输出,用于状态指示。
    • 配置霍尔传感器输入引脚(U/V/W 相)。
    • 配置刹车、档位、寸动(Inching)等控制信号输入。
  • ADC 初始化(init_AD()
    • 启用 ADC1 模块,用于采集母线电压、相电流、电机温度等模拟信号。
    • 通道分配:如 ADC1_CHANNEL_5 用于电机温度,ADC1_CHANNEL_4 用于校准。
  • 定时器配置
    • TIM2/TIM3/TIM4:用于周期性任务调度、速度计算、PWM 基频生成。
    • TIM1:高级控制定时器,用于生成三相六步换相所需的 互补 PWM 信号,支持死区插入、刹车保护等。
  • UART 初始化(init_UART():配置串口通信(如 UART2),用于与手持调试器或上位机通信。
  • 中断控制器(ITC)配置:设置各外设中断优先级。

3.2 电机控制与 PWM 驱动

系统采用 霍尔传感器反馈的六步换相(Trapezoidal Commutation) 控制策略:

  • 通过 get_HALLpostion() 实时读取霍尔信号(U/V/W 三相信号组合),确定转子位置(共 6 个有效状态)。
  • 根据当前档位、油门、刹车状态,计算目标 PWM 占空比。
  • 通过 TIM1 的互补输出通道(CH1/CH1N, CH2/CH2N, CH3/CH3N)驱动三相桥臂 MOSFET。
  • 支持 正反转切换(通过 DirectionSwitch 变量控制换相顺序)。

关键函数init_PWM() 配置 TIM1 为 PWM 模式,启用主输出使能(MOE),设置死区时间。


3.3 运行时故障诊断(runfault_check()

系统在电机运行期间持续执行多维度故障检测:

void runfault_check(void) {
    run_con_currentover();     // 电流过流保护
    run_voltagefault();        // 母线欠压/过压保护
    run_contempfault();        // 控制器温度保护
    run_handbrake();           // 手刹状态检测
    run_duzhuanbaohu();        // 独转保护(防单相导通)
    run_HALLfault();           // 霍尔信号异常检测
}
  • 过流保护:通过 ADC 采样电流,若持续超过阈值(如 current_max11 = 390 对应约 450A),触发保护,关闭 PWM,红灯闪烁。
  • 电压保护:检测 advolatage,若低于 qianyazhi(欠压阈值),进入保护状态。
  • 霍尔故障:若霍尔信号长时间为 0 或非法组合(如 000、111),判定为霍尔线断路或短路,触发 HALLfault

3.4 校准功能(Calibration)

为确保电流/电压测量精度,系统支持自动校准流程

  • 触发条件:上电后若未完成四相校准(PhaseAp, PhaseAn, PhaseBp, PhaseBn 均为 0),进入校准模式。
  • 校准过程(CalibrateCap()
    • 依次激励 A+/A-/B+/B- 四个方向。
    • 采集对应 ADC 值(如 phaseA_positive_value)。
    • 通过 EEPROM_write() 将校准系数写入非易失存储器。
  • 成功指示:绿灯闪烁 5 次,并通过串口发送 0xf9 表示校准完成。

3.5 人机交互(HMI)

LED 指示
  • GreenLEDPlus(n):绿灯闪烁 n 次,用于正常状态提示(如校准成功)。
  • RedLEDPlus(n):红灯闪烁 n 次,用于故障报警(如过流、霍尔故障)。
  • LEDDIS(a,b,c):自定义 LED 显示模式(推测为组合闪烁编码)。
串口通信
  • 通过 sdata(byte) 发送单字节状态码至手持设备:
    • 0x7f:严重故障(如过流、欠压)
    • 0xc2/0xc3:A/B 相校准完成
    • 20:温度故障
    • 17:过流警告
  • 支持接收手持器指令(如 comdata[0] == 0x34 触发特定流程)。

3.6 参数配置与版本管理

系统通过宏定义支持多平台适配:

// 电压平台
#define BANBEN24V 1
#define BANBEN48V 3
#define BANBEN72V 5
// 电流平台
#define BANBEN150A 1
#define BANBEN300A 4
#define BANBEN800A 9
// 特殊模式
#define dezhou 0x55  // 德州小巴士专用逻辑

控制器可根据 EEPROM 中存储的版本标识自动加载对应参数(如电流限值、电压阈值、加速曲线等)。


4. 关键数据结构与变量

变量名 类型 说明
MotorTemperature u16 电机温度 ADC 值(经查表转换为 ℃)
advolatage u16 母线电压采样值
PWMvalue u16 当前 PWM 占空比(0~1000)
HALLstatus u8 霍尔状态编码(1~6)
controlstate u8 控制器状态机(STARTUP, MOTORRUN 等)
overcurledif u8 过流故障标志位

5. 总结

该控制器固件是一套成熟、稳定、功能完备的 BLDC 控制系统,具备以下技术亮点:

  • 高可靠性:多重硬件保护(过流、过压、过温、霍尔故障)。
  • 强适应性:支持多电压/电流平台,参数可配置。
  • 易维护性:LED + 串口双重状态反馈,支持现场校准。
  • 实时性:基于中断的霍尔换相与故障检测,响应迅速。

尽管代码风格较为传统(无 RTOS,状态机隐式),但其在资源受限的 8 位 MCU 上实现了工业级控制性能,体现了嵌入式电机控制领域的典型设计范式。


文档撰写:资深嵌入式系统工程师
日期:2025 年 4 月

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐