基于 STM8S 系列微控制器的直流无刷电机(BLDC)控制固件分析
本文档基于提供的源代码文件(【01】产品源代码_merged.txt),对一款应用于电动四轮车的**直流无刷电机控制器(BLDC Controller)**的嵌入式软件系统进行详细功能解析。该系统以STMicroelectronics 的 STM8S 系列 8 位微控制器为核心,集成了电机驱动、传感器采集、故障诊断、人机交互及通信等功能模块。固件版本标识为4.00,开发时间可追溯至2014 年,适
电动四轮车控制器软件系统功能说明文档
基于 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.c中get_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 月
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)