资讯详情

ESP32 无感 BLDC 免霍尔换相:比较器过零检测 3 步跑通闭环

📅 2026/10/21 1:35:32 | 华诺云谱 👁 阅读
ESP32 无感 BLDC 免霍尔换相:比较器过零检测 3 步跑通闭环
ESP32 无感 BLDC 免霍尔换相比较器过零检测 3 步跑通闭环【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution无感 BLDC 控制就像老司机在没有倒车影像的暗库里停车——不靠摄像头只凭车身反馈去摸转子位置。esp-iot-solution 仓库里的esp_sensorless_bldc_control组件就是把这个摸做成了硬件比较器过零检测不加霍尔、不用 ADC三个 GPIO 电平就够。为什么扔掉霍尔传感器算一笔成本账BOM每个电机多 3 颗霍尔芯片加焊盘量大产线成本可观装配霍尔要单独对位、焊接、校准装歪就得返工失效霍尔一坏电机当场罢工无感方案少一个单点故障上限霍尔带宽卡住高速场景反电势过零检测没有这个天花板。比较器方案一句话原理虚拟中性点比大小找过零三相绕组是 Y 型连接中性点通常不引出。不引出就不量它——自己搭一个三只等值电阻把 U/V/W 接到公共点该点电压就近似真实中性点即虚拟中性点。比较器一端接相端电压、一端接虚拟中性点输出电平翻转的那一刻就是这一相反电势的过零点。 硬件电路拆解信号从母线走到 GPIO沿着信号流路径是电机相端 → 等值电阻网络 → 比较器输入 → 比较器输出 → ESP32 GPIO。逐项看等值电阻网络虚拟中性点靠三只阻值相同的电阻搭出精度必须一致建议 1% 同批次否则中性点偏移过零时刻整体失真分压 / 限流电阻把相端电压压进比较器允许的共模范围同时限制异常电流滤波电容跨接在比较器输入与输出端削掉 PWM 开关毛刺。缺了它一个电周期里电平能乱翻几十次比较器 ×3每路输出一个纯数字电平含义只有高于 / 低于虚拟中性点GPIO三个普通输入脚。CPU 在定时器回调里读电平即可全程不碰 ADC。六步换相怎么映射正反两张表这样读先看波形再读表一个电周期内每相反电势每 60° 电角度穿越一次虚拟中性点三相电平组合轮流出现 6 种正好把 360° 切成 6 个扇区。下表把扇区电平组合 → 下一拍桥臂动作列全。图例H 上管通下管断L 上管断下管通断 该相上下都关断。正转CW扇区比较器输出 U·V·WU 相桥臂V 相桥臂W 相桥臂S10 · 0 · 1HL断S20 · 1 · 1H断LS30 · 1 · 0断HLS41 · 1 · 0LH断S51 · 0 · 0L断HS61 · 0 · 1断LH反转CCW扇区比较器输出 U·V·WU 相桥臂V 相桥臂W 相桥臂S10 · 1 · 0LH断S21 · 1 · 0L断HS31 · 0 · 0断LHS41 · 0 · 1HL断S50 · 0 · 1H断LS60 · 1 · 1断HL为什么 6 个 60° 扇区够用三相电平各 2 种状态共 8 种组合其中 111 和 000 在理论上不会出现三相反电势不可能同时落在中性点同侧剩下恰好 6 种这 6 种组合随转子每转一个电周期轮一遍每段各占 60°把转子位置框在 ±30° 内正好够选出唯一正确的换向序列。代码侧由zero_cross_comparer_get_phase()把电平组合换算成 1~6 的扇区号再由bldc_six_step_turn()查six_step_comparer_cw_array或six_step_comparer_ccw_array执行对应动作见components/motor/esp_sensorless_bldc_control/control/bldc_six_step.c。️ 源码里的三个关键旋钮调参从哪下手都在user_cfg/bldc_user_cfg.h里先盯住这三个宏。ZERO_CROSS_DETECTION_ACCURACY——滤波深度控制什么比较器输出连续多少拍相同才算有效电平调大效果抗噪变强、换相稳代价是响应拖慢调小效果换相更跟手尖峰更容易误触发推荐起步默认0xFFFF连续 16 拍噪声大时提到0xFFFFFFFF。ZERO_STABLE_FLAG_CNT——进闭环门槛控制什么连续稳定过零多少次后才允许切入无感闭环调大效果进入更稳启动变慢调小效果进得快强拖期的抖动容易误判成稳定推荐起步默认 4约等于两圈稳定过零。ZERO_CROSS_ADVANCE——换相提前角控制什么提前角度 180° / 该值宏注释要求不得小于 6调大效果提前角变小换相更靠后调小效果换相更靠前过早会掉转矩、发闷推荐起步默认 8拿示波器看过零与换相时序后再微调。 从零跑通比较器模式复制→粘贴→编译→跑第一步一条命令加依赖idf.py add-dependency espressif/esp_sensorless_bldc_control*第二步备齐参数头文件把仓库里的components/motor/esp_sensorless_bldc_control/user_cfg/bldc_user_cfg.h原样拷进你的工程文件名保持bldc_user_cfg.h不变——组件找不到它直接编译报错。然后在main/CMakeLists.txt里加三行idf_component_get_property(bldc_lib espressif__esp_sensorless_bldc_control COMPONENT_LIB) cmake_policy(SET CMP0079 NEW) target_link_libraries(${bldc_lib} PUBLIC ${COMPONENT_LIB})第三步初始化 启动LEDC 管上桥、GPIO 管下桥比较器输出接 GPIO 3 / 46 / 9bldc_zero_cross_comparer_config_t zero_cross_comparer_config { .comparer_gpio[0] { .gpio_num 3, .gpio_mode GPIO_MODE_INPUT, .active_level 0 }, .comparer_gpio[1] { .gpio_num 46, .gpio_mode GPIO_MODE_INPUT, .active_level 0 }, .comparer_gpio[2] { .gpio_num 9, .gpio_mode GPIO_MODE_INPUT, .active_level 0 }, }; bldc_control_config_t config { .speed_mode SPEED_CLOSED_LOOP, .control_mode BLDC_SIX_STEP, .alignment_mode ALIGNMENT_COMPARER, .six_step_config { .lower_switch_active_level 0, .upper_switch_config { .control_type CONTROL_TYPE_LEDC, .bldc_ledc { .ledc_channel {0, 1, 2}, .gpio_num {17, 16, 15} }, }, .lower_switch_config { .control_type CONTROL_TYPE_GPIO, .bldc_gpio { { .gpio_num 12, .gpio_mode GPIO_MODE_OUTPUT }, { .gpio_num 11, .gpio_mode GPIO_MODE_OUTPUT }, { .gpio_num 10, .gpio_mode GPIO_MODE_OUTPUT }, }, }, .mos_en_config.has_enable false, }, .zero_cross_comparer_config zero_cross_comparer_config, }; bldc_control_handle_t handle NULL; bldc_control_init(handle, config); bldc_control_set_dir(handle, CCW); bldc_control_start(handle, 300);提示ALIGNMENT_COMPARER这一行是整个比较器模式的开关。随后组件自己走完定相 → 强拖 → 闭环日志里出现BLDC_CONTROL_CLOSED_LOOP事件就是稳定进入无感闭环了。 现象 → 原因 → 解法进不了闭环先查这 3 处现象常见原因排查动作过零信号抖电机抖动或丢步等值电阻精度不齐或比较器输出端滤波不足查虚拟中性点三只电阻是否同批次精度差直接歪掉过零时刻查比较器输出端滤波电容取值软件侧先把ZERO_CROSS_DETECTION_ACCURACY提到0xFFFFFFFF始终进不了闭环无 CLOSED_LOOP 事件过零信号从没稳定过或强拖转速太低、反电势幅值太小比不出来按序查① 三路比较器接线与active_level极性是否对应② 日志里error_hall_count是否持续上涨③ 加大RAMP_TIM_END/RAMP_DUTY_END让转子更快达到可检测转速进了闭环但发闷、换相角度不对提前角与滤波滞后失配示波器同时看过零 GPIO 与该相 PWM比对时序再调ZERO_CROSS_ADVANCE必须 ≥ 6同时确认接线相序与所选的正转 / 反转表匹配延伸阅读docs/zh_CN/motor/bldc/bldc_overview.rstBLDC 结构、逆变电路与有感 / 无感路线对比docs/zh_CN/motor/bldc/bldc_snls_comparer.rst比较器过零检测的官方文档本文两张映射表的原始出处docs/zh_CN/motor/bldc/esp_sensorless_bldc_control.rst组件总览注入、定相、强拖、闭环各阶段参数详解components/motor/esp_sensorless_bldc_control/control/bldc_zero_cross_comparer.c滚动采样、滤波确认与测速的实现源码components/motor/esp_sensorless_bldc_control/test_apps/bldc_comparer/main/test_comparer.c可直接运行的比较器模式测试用例LEDC 与 MCPWM 两版都写了。【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑