站内搜索
发作品签到
无感无刷BLDC驱动板stm32f051k8u6+fd6288q
专业版

无感无刷BLDC驱动板stm32f051k8u6+fd6288q

简介

无感无刷电机驱动板,基于https://oshwhub.com/e_ljf_v2/f051_esc工程修改 stm32f051k8u6+fd6288q,非同步整流方案测试电机,PWM上管+GPIO下管

简介:无感无刷电机驱动板,基于https://oshwhub.com/e_ljf_v2/f051_esc工程修改 stm32f051k8u6+fd6288q,非同步整流方案测试电机,PWM上管+GPIO下管

开源协议

GPL 3.0

创建时间:2025-09-22 14:46:18更新时间:2025-11-28 15:20:28

描述

更新2025/11/28

经过Sangk-Hu指点,十分感谢,下版本修复内容如下:
1、增加为四层板获取完整地平面和更大带载能力
2、将mos管栅极电阻尽量靠近mos管放置
3、反电动势采样电路独立从UVW中引出,不走原栅极驱动路径
4、取消MOS管旁边的栅极1nf电容,减小开关损耗
5、取消泪滴操作,有地方成为了锐角,避免信号反射
6、改善线间距稍微调整线宽加大线路带载能力

项目简介

基于开源广场另一位大佬的工程修改而来,修改为自己的方案使用,不进行通讯,仅作为驱动板使用

项目功能

BLDC驱动板硬件:
NTC电阻温度采样
INA226总电源采样
FD6288Q三相驱动MOS管

BLDC驱动板程序:
由开环强托启动积累到足够反电动势信号好切换为闭环运行
基于stm32cubemx+MDK525开发,全代码带注释

软件代码

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_COMP2_Init();
  MX_TIM2_Init();
  MX_TIM3_Init();
  MX_ADC_Init();
  MX_I2C1_Init();
  MX_TIM1_Init();
  MX_TIM6_Init();
  /* USER CODE BEGIN 2 */
	HAL_ADCEx_Calibration_Start(&hadc);																// ADC校准
	WS2812_Init(&ESHL_StateLed,&htim1 ,TIM_CHANNEL_1,1);							// 初始化ws2812b
	WS2812_SetAll(&ESHL_StateLed,5,0,0);           										// 默认为不亮
	HAL_Delay(100);                                                 	// 等待INA226上电完成
	INA226_init();                                                  	// 电流采样芯片初始化
	ESHL_ESC_Init();																									// 电调初始化
	DWQ_Select_IntORExt();																						// 电位器选择,用于电机调速
	MOS_PowerOn_SelfTest();																						// MOS管上电自检函数,检测总电路是否漏电和MOS管是否漏电


	BLDC_Start_Music();																								// BLDC播放开机音乐
	HAL_Delay(3000);                                                  // 调试设备
	if(ESHL_GetState() == ESHL_STATE_OFF) 														// 初始化无错误
	{ ESHL_SetState(ESHL_STATE_READY); } 															// 将电调状态设置为准备就绪


  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		ESHL_CurrAndVolt_Detection();                                   // 电调电流电压功率检测
		ESHL_NTCAndDWQ_ADC();                                           // NTC温度检测和电位器调速


		switch(ESHL_GetState())                                         // 获取电调状态
		{
			case ESHL_STATE_OFF:																					// 关闭电调
				ESHL_CloseMOSComp();																				// 关闭所有MOS管并且关闭比较器
        break;

			case ESHL_STATE_READY:																				// 电调准备就绪
				ESHL_Running_Normal_LED();																	// 电调正常运行灯光,绿灯常亮
				ESHL_SetState(ESHL_STATE_START);														// 准备就绪以后直接进入开环启动状态
				break;

			case ESHL_STATE_START:																				// 启动电机
				ESHL_Start(ESHL_GetDirection());                						// 开环步骤启动电机
				break;

			case ESHL_STATE_OPEN_LOOP_START_FAIL:													// 电调开环启动失败
				if(ESHL_OpenLoopRestartNum > ESHL_OPEN_LOOP_RESTART_MAX_NUM) 
				{	ESHL_SetState(ESHL_STATE_OPEN_LOOP_START_ERROR); }				// 超过开环最大启动次数,设置状态为开环启动失败
				else                                            						// 未达到开环启动次数限制
				{
					ESHL_OpenLoopRestartNum++;                    						// 开环启动次数+1
          ESHL_Start(ESHL_GetDirection());             	 						// 再次进入开环启动步骤
				}
				break;

			case ESHL_STATE_OPEN_LOOP_START_ERROR:												// 电调开环启动重试超过最大次数,无法开环启动 
				ESHL_CloseMOSComp();																				// 关闭所有MOS管并且关闭比较器
				if(!BLDC_Protect_state){ BLDC_Protect_state = true; }				// 当作已经触发保护,不检测电流电压温度
				ESHL_OPEN_LOOP_START_ERROR_LED();														// 电调开环启动失败灯光,红1蓝3
				break;

			case ESHL_STATE_RUN_CLOCKWISE:                    						// 顺时针方向运动中
				ESHL_OpenLoopRestartNum = 0;																// 开环重启动计数清零
				ESHL_RuningChack();       																	// 堵转检测
				ESHL_SET_PWM(ESHL_RunPWMBuff);															// 更新运行PWM值
				break;

			case ESHL_STATE_RUN_COUNTER_CLOCKWISE:												// 逆时针方向运动中
				ESHL_OpenLoopRestartNum = 0;																// 开环重启动计数清零
        ESHL_RuningChack();       																	// 堵转检测
        ESHL_SET_PWM(ESHL_RunPWMBuff);															// 更新运行PWM值
				break;

			case ESHL_STATE_MOTOR_RUNING_STOP:														// 电机运行时停转
				ESHL_Start(ESHL_GetDirection());														// 重新进行开环启动步骤
				break;

			case ESHL_STATE_CURRENT_ERROR:                    						// 电流异常
				ESHL_CloseMOSComp();																				// 关闭所有MOS管并且关闭比较器
				ESHL_CURRENT_ERROR_LED();                                   // 电调电流异常灯光,红1蓝4
				break;

			case ESHL_STATE_BATTERY_VOLTAGE_ERROR:            						// 上电电池电压异常
				ESHL_CloseMOSComp();																				// 关闭所有MOS管并且关闭比较器
				ESHL_BATTERY_VOLTAGE_ERROR_LED();                           // 电调上电电压异常灯光,黄灯闪烁
				break;

			case ESHL_STATE_BATTERY_OVER_VOLTAGE:													// 运行过程中过压
				ESHL_CloseMOSComp();																				// 关闭所有MOS管并且关闭比较器
				ESHL_BATTERY_OVER_VOLTAGE_LED();                            // 电调电压过压灯光,红2蓝1
				break;

			case ESHL_STATE_BATTERY_UNDER_VOLTAGE:												// 运行过程中欠压
				ESHL_CloseMOSComp();																				// 关闭所有MOS管并且关闭比较器
				ESHL_BATTERY_UNDER_VOLTAGE_LED();		                        // 电调电压欠压灯光,红2蓝2
				break;

			case ESHL_STATE_OVER_TEMPERATURE:															// 运行过程中温度过高
				ESHL_CloseMOSComp();																				// 关闭所有MOS管并且关闭比较器
				ESHL_OVER_TEMPERATURE_LED();                                // 电调过温灯光,红1蓝2
				break;

			case ESHL_STATE_BRAKE:																				// 电调刹车中
				ESHL_Break(ESHL_GetStopMode());															// 电调进行刹车操作,滑行刹车
				break;

			case ESHL_STATE_BRAKE_OK:																			// 刹车完毕
				ESHL_BRAKE_OK_LED();                                        // 电调刹车灯光,黄灯常亮
				break;

			default:
				break;
		}

		HAL_Delay(30);																									// 延时30ms,避免加速度太快
  }
  /* USER CODE END 3 */
}

注意事项

image.png
此处反电动势采样电容100nf过大,在低速状态,高速状态下都不太好,转速无法达到最大值而且电流突增,应该电容太大是换相延迟导致的,以下是某一相的示波器检测电压

低速状态:

image.png

高速状态:

image.png

更换为4.7uf电容以后的波形:
(中间有马鞍波一样的波浪,根据up李大郎6x66视频讲解得知是非同步整流驱动的效果
视频:https://www.bilibili.com/video/BV1Fx76zzEcP/?spm_id_from=333.337.search-card.all.click)

低速:
image.png

高速:

image.png

向各位开源大佬请教遇到的困难

1、开环启动程序效果不太好,会有明显的开环动作,而且开环切入闭环有时候会误检测到堵转状态重新进行开环循环,猜测是切入闭环的瞬间没有触发到stm32f051内置比较器中断导致,请问有无哪个开源工程的开环算法比较好可以借鉴?

2、在电机高速转动下,逐步施加一个大负载,电机有时候突然触发发出嗡嗡声但还是在转动状态,电流突然增大,目前猜测是缺步导致的电流异常,请教是否是非同步整流方案的弊端,硬件上如果做PWMN下管的同步整流方案是否能够优化掉这个问题?

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
stm32f051_bldc.7z
86
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航