当前位置: 首页 > news >正文

BLDC双电机六步换相控制学习文档

嵌入式crafter全网平台同名,喜欢视频版的可以移步dy、xhs、b站。

项目要求

实现电机的调速(速度环),电流限流(电流环)。

BLDC电机控制

硬件电路设计

EG3116D 是一款高性价比的大功率 MOS 管、IGBT 管栅极驱动专用芯片,内部集成了逻辑信号输入处理电路、电平位移电路、脉冲滤波电路及输出驱动电路,专用于无刷电机控制器中的驱动电路。
EG3116D 高端的工作电压可达 600V,低端 Vcc 的电源电压范围宽 10V~20V,静态电流约 200uA。输入通道 HIN 和 LIN 内建了一个 200K 下拉电阻,在输入悬空时使上、下功率 MOS 管处于关闭状态,输出电流能力 IO+/- 2/2.5A,采用 SOP8 封装。

电机控制原理

电机的控制框图

正反转控制顺序

STM32Cubemx配置

TIM1和TIM8高级定时器配置一致。
PWM配置为10K
配置Clock Source为Internal Clock

BLDC开环控制

void BLDC_stepSwitch_duty(uint8_t motor_num, float pwm_duty)
{TIM_HandleTypeDef *htim = NULL;// 选择对应定时器if (motor_num == MOTOR_1)htim = &htim1;else if (motor_num == MOTOR_2)htim = &htim8;elsereturn;  // 参数错误uint8_t hall_state =  get_bldc_hall(motor_num);// 记录方向和绝对占空比uint8_t direction = 1;  // 1: 正向,0: 反向if (pwm_duty < 0){direction = 0;pwm_duty = -pwm_duty;  // 取绝对值}// 限幅占空比 0~1if (pwm_duty > 1.0f) pwm_duty = 1.0f;// 计算比较寄存器值uint32_t pulse = (uint32_t)(PWM_PERIOD * pwm_duty);__disable_irq();  // 屏蔽中断// 关闭所有通道,避免毛刺HAL_TIM_PWM_Stop(htim, TIM_CHANNEL_1);HAL_TIM_PWM_Stop(htim, TIM_CHANNEL_2);HAL_TIM_PWM_Stop(htim, TIM_CHANNEL_3);HAL_TIMEx_PWMN_Stop(htim, TIM_CHANNEL_1);HAL_TIMEx_PWMN_Stop(htim, TIM_CHANNEL_2);HAL_TIMEx_PWMN_Stop(htim, TIM_CHANNEL_3);// 换相逻辑switch (hall_state){case 1:  // B-Cif (direction){// B+ C-__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_2, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_2);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_3);}else{// B- C+__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_3, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_3);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_2);}break;case 5:  // B-Aif (direction){// B+ A-__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_2, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_2);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_1);}else{// B- A+__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_1, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_1);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_2);}break;case 4:  // C-Aif (direction){// C+ A-__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_3, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_3);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_1);}else{// C- A+__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_1, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_1);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_3);}break;case 6:  // C-Bif (direction){// C+ B-__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_3, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_3);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_2);}else{// C- B+__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_2, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_2);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_3);}break;case 2:  // A-Bif (direction){// A+ B-__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_1, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_1);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_2);}else{// A- B+__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_2, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_2);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_1);}break;case 3:  // A-Cif (direction){// A+ C-__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_1, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_1);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_3);}else{// A- C+__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_3, pulse);HAL_TIM_PWM_Start(htim, TIM_CHANNEL_3);HAL_TIMEx_PWMN_Start(htim, TIM_CHANNEL_1);}break;default:// 异常状态,全悬空保护break;}__enable_irq();   // 恢复中断
}

三线霍尔传感器

三线霍尔传感器精度比较差,每120°才会有一次信号变化,低速运行抖动比较大,能做简单的速度环,但是无法做到平滑慢速控制。
每个霍尔信号是开关量(高电平or低电平)三个信号组合形成6种有效状态,对应转子一个电气周期(360°)。控制器根据霍尔信号变化每120°换向一次,让电机持续旋转。
根据原理图将三线霍尔传感器的GPIO配置为上拉输入模式。

代码设计

/*** @brief 读取三线霍尔传感器数值判断电机位置* @param  电机1:MOTOR_1 电机2:MOTOR_2* @retval 返回120°HALL值*/
uint8_t get_bldc_hall(uint8_t hall_num)
{uint8_t ret = 0;if(hall_num == MOTOR_1){ret |= HAL_GPIO_ReadPin(HALL_A_1_GPIO_Port, HALL_A_1_Pin) << 2;ret |= HAL_GPIO_ReadPin(HALL_B_1_GPIO_Port, HALL_B_1_Pin) << 1;ret |= HAL_GPIO_ReadPin(HALL_C_1_GPIO_Port, HALL_C_1_Pin);}else if(hall_num == MOTOR_2){ret |= HAL_GPIO_ReadPin(HALL_A_2_GPIO_Port, HALL_A_2_Pin) << 2;ret |= HAL_GPIO_ReadPin(HALL_B_2_GPIO_Port, HALL_B_2_Pin) << 1;ret |= HAL_GPIO_ReadPin(HALL_C_2_GPIO_Port, HALL_C_2_Pin);}return ret;
}

速度环调速控制

电机的占空比用于调节电机的转速快慢,而换相是用于控制电机旋转的方向。
1.三根霍尔线分别感应电机转子磁极位置,产生6个状态脉冲,反映电机的转子角度和转子位置。每转一圈,霍尔信号会切换6次,对应电机的6个换向位置(6步换向)。
2. 速度测量,通过计数单位时间内霍尔脉冲数(如10ms内脉冲数),计算脉冲频率。机械转速RPM计算公式:
3. 速度环PID控制
  • 设定目标转速(Target RPM)。
  • 测量当前转速(Measured RPM)。
  • 计算速度误差:
  • 通过PID算法根据误差计算控制量(通常是PWM占空比或电压指令)。
4. PWM驱动与换向控制
  • 根据PID输出的占空比调整PWM信号,控制电机电压,改变转速。
  • 根据霍尔传感器的状态,实现6步换向,保证电机电流相位正确,维持电机平稳转动。

控制流程

获取转速,通过正负号判断电机旋转方向。然后计算速度误差,传给PI控制器得到最终用于控制电机转速的占空比。
盲换相启动:是为了在电机静止时无法获取有效霍尔传感器状态变化的情况下,主动按照预定换相序列给电机施加励磁,使电机初步产生转动。当电机转速达到霍尔传感器,能正确检测到换相状态变化的条件后,系统便可切换到基于霍尔传感器反馈的闭环控制模式。
当检测到霍尔传感器值变化时,进入霍尔闭环换相。

电流检测电路

http://www.dtcms.com/a/555065.html

相关文章:

  • 排序算法:高效数据处理的核心
  • 网站架构设计师工资水平自助建网站系统源码
  • 网站建设go华为网站建设和阿里云哪个好
  • 宁波规划建设局网站顺企网怎么发布公司信息
  • 校园网站建设系统设计做网站去什么公司
  • 房产网站开发报价山西seo基础教程
  • 网站建设方案预计效果教育网站制作视频
  • python使用ffmpeg对视频进行转码
  • 做网站 注意外贸网站源码php
  • 计算机图形学·2 图像形成
  • 简单了解一下哈希表(C++)
  • 如何在旅游网站上做攻略唐山官方网站建设
  • 金属材料东莞网站建设浙江企业黄页大全
  • 做销售在哪些网站注册好制作网站软件排行榜
  • 网站备案能查到什么东西怎么提高自己网站的知名度
  • 小说网站论文摘要论坛做网站好吗
  • 西局网站建设怎样进入建设通网站
  • 备案的网站可以攻击吗盐城公司网站建设
  • SQL Studio:一个基于浏览器的数据库查询工具
  • 微信微网站建设平台外包一个企业网站多少钱
  • 建设 市民中心网站wordpress前端可视化编辑器
  • 帝国做的网站wordpress 附件显示设置
  • 网站福利你们会回来感谢我的ui设计作品解析
  • 行政单位网站建设立项依据网站公司云建站怎么样
  • 网站做301重定向扁平化网站特效
  • P3379 【模板】最近公共祖先(LCA)(st表,tarjan两种版本)
  • 找设计方案的网站互联网营销平台
  • 佛山网站优化公司排名wordpress 伪静态 403
  • POI搜索:图文教程!多种条件搜索POI数据,支持地图可视化,支持导出SHP、GEOJSON、DXF等文件格式
  • IoControlCode=20IOCTL_ICA_STACK_CONNECTION_SEND分析