一、系统概述高压无刷直流电机BLDC 通常指供电电压≥48V如72V、310V功率≥1kW的电机广泛应用于工业风机、泵类、压缩机等场景。其控制核心是三相逆变桥换相与PWM调速需解决高压隔离、功率驱动、转子位置检测、过流/过压保护等问题。方案基于STM32F407ZGT6Cortex-M4168MHz带FPU实现支持霍尔传感器或无传感器反电动势检测 两种模式具备三段式启动、PID闭环调速、多重保护功能。二、硬件设计2.1 核心组件选型模块型号/参数功能说明主控STM32F407ZGT61MB Flash192KB RAM换相逻辑、PWM生成、电流/电压采样、保护控制功率驱动IR2110半桥驱动隔离电压2.5kV驱动三相逆变桥IGBT上/下桥臂功率器件6×IKW40N120H31200V/40A IGBT三相逆变桥U/V/W相耐压1200V位置检测3×霍尔传感器120°电角度分布输出U/V/W相位置信号HALL_A/B/C电流采样LEM LAH-50P50A/4V隔离放大器母线电流检测过流保护电压采样电阻分压隔离运放AMC1200直流母线电压检测过压/欠压保护电源310V DC高压母线 15V/5V隔离电源为驱动电路、控制电路供电需电气隔离2.2 硬件架构与连接PWMHALL_A/B/C电流信号电压信号故障信号高压电源三相逆变桥 IGBT高压无刷电机ADC1_IN1IR2110驱动霍尔传感器LEM电流传感器AMC1200电压采样保护电路 继电器关键引脚分配PWM输出TIM1_CH1CH3PA8PA10上桥臂PWMTIM1_CH1NCH3NPB13PB15下桥臂PWM带死区时间2μs霍尔信号HALL_A→PA0HALL_B→PA1HALL_C→PA2外部中断输入检测边沿电流/电压采样ADC1_IN0PA3电流ADC1_IN1PA4电压保护输出PB0过流/过压时置高触发继电器切断高压电源。三、软件设计STM32 HAL库3.1 系统架构异常正常主程序初始化 时钟、PWM、ADC、霍尔启动模式选择 有传感器/无传感器三段式启动 预定位→加速→切换闭环六步换相控制 霍尔/反电动势PWM调速 占空比控制电流/电压采样与保护故障处理 停机报警3.2 核心代码实现3.2.1 定时器与PWM配置高级定时器TIM1带死区#includestm32f4xx_hal.hTIM_HandleTypeDef htim1;// 高级定时器三相PWM// TIM1初始化20kHz PWM带死区时间2μsvoidMX_TIM1_Init(void){TIM_OC_InitTypeDef sConfigOC{0};TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig{0};htim1.InstanceTIM1;htim1.Init.Prescaler0;// 不分频168MHzhtim1.Init.CounterModeTIM_COUNTERMODE_UP;htim1.Init.Period8400-1;// 20kHz168MHz/840020kHzhtim1.Init.ClockDivisionTIM_CLOCKDIVISION_DIV1;htim1.Init.RepetitionCounter0;htim1.Init.AutoReloadPreloadTIM_AUTORELOAD_PRELOAD_ENABLE;HAL_TIM_PWM_Init(htim1);// 死区时间配置2μs168MHz下1周期≈5.95ns2μs≈336个周期sBreakDeadTimeConfig.OffStateRunModeTIM_OSSR_DISABLE;sBreakDeadTimeConfig.OffStateIDLEModeTIM_OSSI_DISABLE;sBreakDeadTimeConfig.LockLevelTIM_LOCKLEVEL_OFF;sBreakDeadTimeConfig.DeadTime336;// 死区时间336 * 5.95ns≈2μssBreakDeadTimeConfig.BreakStateTIM_BREAK_ENABLE;// 使能刹车功能保护时关闭PWMsBreakDeadTimeConfig.BreakPolarityTIM_BREAKPOLARITY_HIGH;sBreakDeadTimeConfig.AutomaticOutputTIM_AUTOMATICOUTPUT_ENABLE;HAL_TIMEx_ConfigBreakDeadTime(htim1,sBreakDeadTimeConfig);// 配置CH1~CH3为PWM模式1上桥臂CH1N~CH3N为互补输出下桥臂sConfigOC.OCModeTIM_OCMODE_PWM1;sConfigOC.Pulse0;// 初始占空比0sConfigOC.OCPolarityTIM_OCPOLARITY_HIGH;sConfigOC.OCNPolarityTIM_OCNPOLARITY_HIGH;sConfigOC.OCFastModeTIM_OCFAST_DISABLE;sConfigOC.OCIdleStateTIM_OCIDLESTATE_RESET;sConfigOC.OCNIdleStateTIM_OCNIDLESTATE_RESET;HAL_TIM_PWM_ConfigChannel(htim1,sConfigOC,TIM_CHANNEL_1);HAL_TIM_PWM_ConfigChannel(htim1,sConfigOC,TIM_CHANNEL_2);HAL_TIM_PWM_ConfigChannel(htim1,sConfigOC,TIM_CHANNEL_3);// 启动PWM输出主输出使能HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_1);HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_2);HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_3);HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_1);// 下桥臂HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_2);HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_3);}// 设置PWM占空比0~100%对应0~8400计数voidPWM_SetDuty(uint8_tchannel,uint16_tduty){uint16_tpulse(htim1.Init.Period1)*duty/100;switch(channel){case1:__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_1,pulse);break;case2:__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_2,pulse);break;case3:__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_3,pulse);break;}}3.2.2 霍尔传感器换相逻辑六步换相霍尔传感器输出3路方波HALL_A/B/C相位差120°电角度共6种状态组合对应6步换相。// 霍尔状态与换相动作映射表HALL_A/B/CXYZ0低电平1高电平constuint8_tcomm_table[8]{0,5,3,2,1,4,6,0};// 无效状态0有效状态1~6对应换相序号// 霍尔状态读取PA0/PA1/PA2uint8_tRead_Hall_State(void){return(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)2)|// HALL_A→bit2(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)1)|// HALL_B→bit1(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2)0);// HALL_C→bit0}// 换相函数根据霍尔状态执行六步换相voidBLDC_Commutate(uint8_thall_state){uint8_tcomm_stepcomm_table[hall_state];// 查表获取换相序号if(comm_step0)return;// 无效状态不换相// 关闭所有PWM先关后开避免直通__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_1,0);__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_2,0);__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_3,0);// 根据换相序号设置上下桥臂导通1导通0关断switch(comm_step){case1:// U V-HALL_A1,B0,C1HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_1);// U上桥HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_2);// V下桥break;case2:// U W-HALL_A1,B0,C0HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_1);// U上桥HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_3);// W下桥break;case3:// V W-HALL_A1,B1,C0HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_2);// V上桥HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_3);// W下桥break;case4:// V U-HALL_A0,B1,C0HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_2);// V上桥HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_1);// U下桥break;case5:// W U-HALL_A0,B1,C1HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_3);// W上桥HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_1);// U下桥break;case6:// W V-HALL_A0,B0,C1HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_3);// W上桥HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_2);// V下桥break;}}3.2.3 三段式启动有传感器模式高压电机启动需避免过流采用预定位→加速→切换闭环三段式预定位强制某两相通电将转子锁定到已知位置如U V-锁定到0°电角度加速按换相顺序逐步升频同时提高PWM占空比从30%→80%切换闭环当转速达到设定阈值如500RPM切换为霍尔传感器闭环换相。// 启动函数有传感器模式voidBLDC_Start(void){// 1. 预定位U V-锁定转子__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_1,3000);// U上桥30%占空比HAL_TIMEx_PWMN_Start(htim1,TIM_CHANNEL_2);// V下桥全通HAL_Delay(200);// 锁定200ms// 2. 加速阶段6步换相逐步升频uint16_tdelay_ms100;// 初始换相间隔100msfor(inti0;i50;i){// 加速50步uint8_thall_stateRead_Hall_State();BLDC_Commutate(hall_state);// 按当前霍尔状态换相PWM_SetDuty(1,30i);// 占空比从30%→80%HAL_Delay(delay_ms);delay_ms(delay_ms10)?delay_ms-2:10;// 逐步缩短换相间隔加速}// 3. 切换闭环霍尔传感器实时换相start_flag1;// 启动完成标志}3.2.4 电流/电压保护与故障处理// ADC采样与保护1kHz采样率voidADC_Protect_Check(void){staticuint16_tadc_buffer[2];HAL_ADC_Start(hadc1);HAL_ADC_PollForConversion(hadc1,10);adc_buffer[0]HAL_ADC_GetValue(hadc1);// 电流采样PA3HAL_ADC_PollForConversion(hadc1,10);adc_buffer[1]HAL_ADC_GetValue(hadc1);// 电压采样PA4HAL_ADC_Stop(hadc1);// 电流保护LEM输出4V对应50A过流阈值40A→3.2V→2048 * 3.2/3.3≈1980if(adc_buffer[0]1980){Fault_Handler(OVER_CURRENT);}// 电压保护310V对应3.3V过压330V→3.5V→2184欠压280V→3.0V→1872if(adc_buffer[1]2184||adc_buffer[1]1872){Fault_Handler(OVER_VOLTAGE);}}// 故障处理函数停机报警voidFault_Handler(uint8_tfault_type){// 1. 关闭PWM输出触发刹车功能__HAL_TIM_MOE_DISABLE(htim1);// 2. 切断高压电源触发继电器HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);// 3. 记录故障类型EEPROM// 4. 报警LED闪烁蜂鸣器while(1){HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);// LED闪烁HAL_Delay(500);}}3.3 主函数程序入口intmain(void){HAL_Init();SystemClock_Config();// 168MHz时钟配置MX_GPIO_Init();// GPIO初始化霍尔、保护、LEDMX_ADC1_Init();// ADC初始化电流/电压采样MX_TIM1_Init();// TIM1初始化PWMMX_USART1_UART_Init();// 串口初始化调试用// 启动电机BLDC_Start();while(1){if(start_flag){// 启动完成后进入闭环uint8_thall_stateRead_Hall_State();BLDC_Commutate(hall_state);// 实时换相ADC_Protect_Check();// 保护检测HAL_Delay(1);// 1ms循环}}}参考代码 STM32控制的高压无刷直流电机程序www.youwenfan.com/contentcst/182171.html四、测试与验证硬件连接按2.2节连接STM32、IR2110、IGBT逆变桥、霍尔传感器确保高压电源与低压控制电路隔离。功能测试上电后电机预定位轻微震动随后加速至稳定转速如1500RPM霍尔传感器信号正常时换相平稳无异常噪音。保护测试短接电机相线模拟过流观察是否触发保护停机报警调整高压电源电压至350V观察过压保护是否生效。五、总结基于STM32F407实现了高压无刷直流电机的控制核心是六步换相逻辑、PWM死区控制与三段式启动。通过霍尔传感器确保位置检测可靠多重保护机制保障高压场景下的安全性。可扩展无传感器反电动势检测、PID速度环或CAN通信满足更复杂的工业控制需求。