BLDC无刷电机脉冲注入启动法及其保护功能与控制原理
BLDC 无刷电机 脉冲注入 启动法 启动过程持续插入正反向短时脉冲;定位准,启动速度快; Mcu:华大hc32f030; 功能:脉冲定位,脉冲注入,开环,速度环,电流环,运行中启动,过零检测; 保护:欠压保护,过温保护,过流保护,堵转保护,失步保护,Mos检测,硬件过流检测等 提供原理图; 提供源代码; 提供参考文献;
一、系统核心定位与硬件基础
HFIBLDCV1.0 系统是基于华大 HC32F030J8TA 微控制器设计的无刷直流电机(BLDC)驱动方案,核心采用高频脉冲注入启动法(HFI)实现电机无传感器启动,通过反电势过零检测实现运行中的换相控制。硬件层面严格适配 HC32F030J8TA 芯片特性,包括:
- 内核:Cortex-M0+ 架构,默认系统时钟 48MHz(通过
SystemCoreClock变量定义) - 关键外设:定时器3(PWM生成)、ADC(反电势/电流/电压采样)、GPIO(驱动信号/状态指示)
- 功率驱动:6路MOS管桥臂,通过PA07~PB01端口控制上下桥臂通断
二、核心控制逻辑与状态机设计
系统采用状态机驱动架构,核心状态定义于ensysstatet枚举,包含初始化(eSTAINIT)、待机(eSTAWAIT)、运行(eSTARUN)、停止(eSTASTOP)、故障(eSTAERR)五大连贯状态,状态切换通过以下逻辑触发:
// 状态切换核心判定(简化逻辑) if (g_eSysState == eSTA_INIT && init_complete) { g_eSysState = eSTA_WAIT; } else if (g_eSysState == eSTA_WAIT && mow_key_pressed) { g_eSysState = eSTA_RUN; BLDC_Start(); // 启动电机控制流程 } else if (any_fault_detected) { g_eSysState = eSTA_ERR; BLDC_StopMotor(); // 紧急停机 }三、HFI脉冲注入启动核心实现
启动阶段(BLDC_Start())的核心是通过脉冲注入定位转子初始位置,原始代码中实现了两种注入策略:
1. 两相6方向脉冲注入(`BLDC_ImpulsePosition_2Phase6Dir_Fix`)
- 脉冲参数:注入时间
IMPULSEINJECTTIMEuS = 100us,间隔IMPULSEWAITTIMEuS = 50us - 执行逻辑:
c
for (dir = 0; dir < 6; dir++) { // 遍历6个方向
SetPwmDirection(dir); // 配置对应相导通
DelayUs(IMPULSEINJECTTIMEuS); // 维持脉冲
current = AdcSGLGetResult(IPeakADCH); // 采样电流
currentarray[dir] = current; // 存储响应电流
SetPwmLowAll(); // 关闭所有桥臂
DelayUs(IMPULSEWAITTIMEuS); // 等待电流衰减
}
rotorpos = FindMaxCurrentDir(currentarray); // 电流最大方向为初始位置
2. 三相6方向脉冲注入(`BLDC_ImpulsePosition_3Phase6Dir_Fix`)
- 差异点:采用三相同时导通模式,适用于对定位精度要求更高的场景(代码中通过宏
USE3PHASEIMPULSE控制启用) - 电流检测:增加中点电压采样(
MidVol_ADCH),通过线电压差值判断转子位置
四、PWM驱动与换相控制细节
1. PWM生成机制
- 硬件基础:定时器3工作在模式23(
M0PTIM3MODE23),3路互补输出(TIM3CHA/TIM3CHB/TIM3_CHC) - 占空比控制:通过
PWMDutyUpdata()函数直接操作比较寄存器(TIM3->CCR0A等),范围限制为cDUTY15(15%)至cDUTY100(100%)
2. 六步换相逻辑
定义6种基础导通组合(如UH_VL表示U相上桥臂+V相下桥臂),换相顺序严格遵循无刷电机六步换向时序:
const uint8_t g_u8CommutateOrder[6] = { UH_VL, // 0: U上 V下 UH_WL, // 1: U上 W下 VH_WL, // 2: V上 W下 VH_UL, // 3: V上 U下 WH_UL, // 4: W上 U下 WH_VL // 5: W上 V下 };- 换相触发:运行中由反电势过零检测中断触发,启动阶段由定时器定时触发
五、反电势过零检测实现
根据电机转速分三档优化检测逻辑,核心代码位于BLDC_u8BemfZeroCrossDetect系列函数:
1. 低占空比检测(`BLDC_u8BemfZeroCrossDetect_LowDuty`)
- 适用场景:占空比 < 30%(低速)
- 检测逻辑:直接比较非导通相反电势与母线中点电压,连续3次采样满足过零条件则确认
2. 中占空比检测(`BLDC_u8BemfZeroCrossDetect_MidDuty`)
- 适用场景:30% ≤ 占空比 < 70%(中速)
- 优化措施:引入
BEMFZCDELAY_us延迟补偿(默认30us),抵消开关管导通延迟影响
3. 高占空比检测(`BLDC_u8BemfZeroCrossDetect_HighDuty`)
- 适用场景:占空比 ≥ 70%(高速)
- 抗干扰设计:采用5点滑动平均滤波,剔除异常值后判断过零状态
六、转速闭环控制算法
采用增量式PI控制器实现转速稳定控制,核心代码如下:
float32_t IncrementPI_Ctrl(PI_T *pstPI, float32_t f32Ref, float32_t f32Fdb) { pstPI->f32Err = f32Ref - f32Fdb; // 计算当前误差 // 增量式PI公式:Δu = Kp*(e(k)-e(k-1)) + Ki*e(k) pstPI->f32IncOut = pstPI->f32Kp * (pstPI->f32Err - pstPI->f32ErrLast) + pstPI->f32Ki * pstPI->f32Err; pstPI->f32Out += pstPI->f32IncOut; // 累加输出 // 输出限幅 pstPI->f32Out = MAX(MIN(pstPI->f32Out, pstPI->f32OutMax), pstPI->f32OutMin); pstPI->f32ErrLast = pstPI->f32Err; // 保存上一时刻误差 return pstPI->f32Out; }- 参数配置:
SPEEDKp = 0.05f,SPEEDKi = 0.01f,限幅outMin = cDUTY15,outMax = cDUTY100 - 转速采集:通过过零点时间间隔计算,公式为
转速(rpm) = 60/(6极对数时间间隔(s))
七、信号采集与故障保护系统
1. 关键信号采集
- 电池电压:
BusVdcADCH通道采样,通过BatVolHandle()转换为实际电压(gsBatVol.f32ActVal) - 电机电流:
IPeakADCH采样,峰值电流超过OCPTHRESHOLD触发过流保护 - MOS温度:
MosTmpADCH采样,通过MosTmpHandle()转换为摄氏度(gsMosTmp.f32ActVal)
2. 故障保护机制
定义三级故障响应策略:
- 警告级:电池电压低于41V(
BatVolHandle中判定),点亮LowVolLed - 保护级:MOS温度超85℃(
cMosHighTmp_85),执行降额运行 - 致命级:过流/堵转(电流超阈值且持续50ms),立即执行
BLDC_StopMotor()并锁定故障状态
八、人机交互与系统指示
1. 按键处理
- 割草开关检测(
MowCutKeyHandle):通过MowkeyPort1和MowkeyPort2双端口确认状态,5次连续采样一致才判定有效(防抖) - 状态映射:
bMowSWOn标志置位时触发电机启动流程
2. 指示灯控制
通过Display()函数实现状态可视化:
NorLed(正常灯):运行时常亮,待机时500ms闪烁HiTmpLed(高温灯):MOS超温时300ms快速闪烁ErrLed(故障灯):致命故障时常亮
九、代码架构与关键文件映射
| 核心功能 | 实现文件 | 关键函数/变量 |
|---|---|---|
| 系统初始化 | system_hc32f030.c | SystemInit(),SystemCoreClock |
| 电机启动与换相 | BLDC.c | BLDCStart(),BLDCCommutate() |
| 脉冲注入定位 | BLDC.c | BLDCImpulsePosition2Phase6Dir_Fix() |
| 反电势检测 | BLDC.c | BLDCu8BemfZeroCrossDetectMidDuty() |
| PI控制算法 | PID.c | IncrementPI_Ctrl() |
| 信号采集与处理 | Signal.c | AdcSGLGetResult(),BatVolHandle() |
| 故障保护 | maintask.c | FaultCheck(),BLDC_StopMotor() |
| 人机交互 | Key.c/Display.c | MowCutKeyHandle(),Display() |
十、核心技术特点总结
- 精准启动:HFI脉冲注入技术实现转子初始位置±30°内定位,解决无传感器启动难题
- 自适应检测:分档式反电势过零检测适配全转速范围(低速→高速)
- 可靠保护:多层次故障监测(电压/电流/温度)与分级响应机制
- 高效驱动:优化的PWM占空比调节(斜坡函数)减少电机冲击与噪声
该代码通过模块化设计实现了无刷电机从启动到运行的全流程控制,硬件依赖明确,参数配置灵活,可直接作为HC32F030系列芯片驱动BLDC电机的参考方案。
BLDC 无刷电机 脉冲注入 启动法 启动过程持续插入正反向短时脉冲;定位准,启动速度快; Mcu:华大hc32f030; 功能:脉冲定位,脉冲注入,开环,速度环,电流环,运行中启动,过零检测; 保护:欠压保护,过温保护,过流保护,堵转保护,失步保护,Mos检测,硬件过流检测等 提供原理图; 提供源代码; 提供参考文献;
