新闻详情

新闻详情

首页 / 资讯中心 / 详情

ESP32 无感方波 BLDC 控制:基于 ADC 采样的反电势过零点检测与初始位置检测全解析

发布时间:2026/9/19 2:22:29来源:尧图网络
ESP32 无感方波 BLDC 控制:基于 ADC 采样的反电势过零点检测与初始位置检测全解析
ESP32 无感方波 BLDC 控制基于 ADC 采样的反电势过零点检测与初始位置检测全解析【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution导读本文围绕 Espressifesp-iot-solution仓库中esp_sensorless_bldc_control组件所实现的基于 ADC 采样的无感方波Six-Step / 梯形波BLDC 控制方案展开完整讲解两条核心技术链路启动阶段的转子初始位置脉冲注入检测以及运行阶段的反电势过零点 ADC 采样检测与换向。读者读完本文后将掌握 BLDC 无感方波控制的基本原理、ADC 方案的硬件采样架构含 12V 系统 1/21 分压示例、过零点判定算法以及bldc_user_cfg.h中各关键宏参数的物理含义与调参方向。背景为什么无感方波控制需要初始位置 过零点两套检测无刷直流电机依靠电子换向替代机械电刷按一定顺序为三相绕组通电即可在定子上产生旋转磁场拖动转子。但按什么顺序通电取决于转子当前的位置——位置信息决定了下一步应导通哪两个桥臂。在无感方案中位置信息无法来自霍尔传感器只能从电气量中提取因此整个控制被拆分为两个阶段静止阶段转子位置未知需要先确定初始相位才能给出正确的第一个通电矢量运行阶段转子已经旋转需要持续跟踪反电势过零点确定每个 60° 电角度的换相时机。关于无刷电机驱动方式6 MOS 管逆变电路、二二导通、死区控制与有感/无感方案对比的完整背景可参考仓库文档《无刷电机控制概述》。本文聚焦esp_sensorless_bldc_control组件中 ADC 方案的两条链路。初始位置检测六矢量脉冲注入法原理从一相电压平衡方程出发由无刷电机一相电压平衡方程$$u_{a}Ri_{a}L_{a}\frac{di_{a}}{dt}e_{a}$$当电机静止时反电势 $e_{a}0$此时电枢电流为$$i\frac{U}{R}\left(1-\frac{1}{e^{\tau}}\right)$$由于电机处于静止状态时绕组参数固定施加相同电压脉冲所产生的电流大小只取决于转子磁极与定子绕组磁场的相对位置即转子在该矢量方向上的电感/磁链差异。因此通过施加高频电压产生对应的脉冲电流并对比不同方向脉冲电流的大小就可以准确确定转子的位置区间。实现方式顺序注入 6 个电压矢量并采集母线电流esp_sensorless_bldc_control组件在启动时INJECT 状态按顺序向三相桥臂施加电压脉冲在采样电阻上获取电流脉冲比较 6 个矢量作用下的电流大小以确定最大矢量所在区间从而得到转子初始相位。6 个电压矢量的注入顺序如下表所示Udc 表示母线电压正极GND 表示接地注入顺序U 相V 相W 相1UdcUdcGND2GNDGNDUdc3UdcGNDUdc4GNDUdcGND5GNDUdcUdc6UdcGNDGND脉冲注入检测的三个关键操作要点对应原文档 note 内容在静止状态下对 BLDC 电机分别注入特定电压矢量每个电压矢量作用固定时间 $T_{s}$以保障注入电流的幅值足够被 ADC 捕获电压矢量注入结束时刻对母线电流进行采样依次注入剩余电压矢量比较各矢量作用下的电流值大小确定最大电流对应的矢量标识即得到转子初始位置。硬件要求与实现细节MCPWM 上升下降模式 ISR 采样电流无法被直接采集必须通过采样电阻转化为电压且电压需要落入 ESP32 系列芯片 ADC 的量程内。同时由于电流只存在于上下管均导通的状态必须在上管导通期间进行 ADC 采样。在组件中这一时序由 MCPWM 的上升下降计数模式保证——将 MCPWM 配置为上升下降模式并在计数器达到峰值上管全导通时刻时触发 ISR 回调执行采样即可采集到准确的母线电流。从源码可以看到ISR 回调read_adc_on_full()bldc_zero_cross_adc.c正是注册在 MCPWM 定时器事件上在INJECT状态下读取BUS_CHANNEL母线电流采样通道的 ADC 值并存入control_param-inject_adc_value[]if (zero_cross-control_param-status INJECT) { if (zero_cross-control_param-inject_adc_read) { zero_cross-control_param-inject_adc_value[zero_cross-control_param-inject_count - 1] bldc_adc_read_isr(zero_cross-adc_handle, zero_cross-adc_channel[BUS_CHANNEL]); } }底层 ADC 通道配置与读取封装在bldc_adc.c中bldc_adc_read_isr()调用 ESP-IDF 的adc_oneshot_read_isr()在中断上下文中完成采样bldc_adc_init()内部使用adc_oneshot_new_unit()创建 ADC 单元并按adc_channel_num逐通道调用adc_oneshot_config_channel()完成配置。重要限制LEDC 驱动不支持在高电平时刻触发回调因此使用 LEDC 方式生成 PWM 的方案无法使用 INJECT 模式。脉冲注入必须配合 MCPWM。相关配置宏bldc_user_cfg.h在user_cfg/bldc_user_cfg.h用户需将其复制到自己的工程中宏定义不可删除中INJECT_ENABLE置 1 开启 INJECT 模式置 0 关闭默认 0。开启时 PWM 生成模式必须为 MCPWM源码中bldc_control.c据此决定启动后进入INJECT还是直接进入ALIGNMENT状态INJECT_DUTY注入电压的大小一般使用高占空比注入默认PWM_DUTYCYCLE_90CHARGE_TIME电感充电时间与脉冲注入时间直接影响初始相位检测的精准性——这个值太小会导致采集到的 ADC 值为 0太大又会导致 ADC 值过大。调试标准手动旋转电机在一圈内能稳定得到相位 1~6、不出现错误的相位 0 和 7 为佳。INJECT 完成后控制流程会依次进入ALIGNMENT对齐将转子固定到初始相位对应ALIGNMENTNMS、ALIGNMENTDUTY参数、DRAG强拖通过六步换向升压升频把转子拖动起来对应RAMP_TIM_STA/END/STEP、RAMP_DUTY_STA/END/INC参数最终进入CLOSED_LOOP无感闭环。完整的状态机与各阶段调参说明可参考《ESP Sensorless BLDC Control 组件指南》。ADC 方案的反电势过零点检测反电势定义当无刷电机转动时每个绕组都会产生反电动势BEMF根据楞次定律其极性与施加的主电压相反。反电势计算公式$$BEMF NlrB\omega$$其中 N 为绕组匝数l 为转子长度r 为转子内半径B 为转子磁场强度$\omega$ 为角速度。对于已经确定的电机绕组与转子参数固定反电势只与角速度成正比。这也是为什么电机转速极慢时反电势幅值很低、过零点难以检测的原因。下图展示了电机旋转一个电周期内导通相电流与非导通相反电势的波形关系过零点相对换相点提前 30° 电角度ADC 过零点采样原理当 BLDC 电机转动时反电势过零点发生在浮空相当前未通电的相。在二二导通的六步换向中任意时刻总有一相悬空该相的端电压会随转子位置变化并穿越母线电压中点。ADC 方案的检测思路是同时测量浮空相端电压与直流母线电压并进行对比当端电压等于直流母线电压的一半时即发生过零事件。其实现方式如下图所示对应到源码中ISR 回调read_adc_on_full()在非 INJECT 状态下同时读取两个通道bldc_zero_cross_adc.c/*! Obtain the current phase voltage and power supply voltage. */ zero_cross-control_param-adc_value[1] bldc_adc_read_isr(zero_cross-adc_handle, zero_cross-adc_channel[POW_CHANNEL]); zero_cross-control_param-adc_value[0] bldc_adc_read_isr(zero_cross-adc_handle, zero_cross-adc_channel[zero_cross-control_param-adc_bemf_phase]);其中adc_bemf_phase随换相状态切换为当前浮空相的通道U/V/W 相POW_CHANNEL采集电源电压。随后在bldc_zero_cross_adc_operation()中把二者送入zero_cross_adc_get_phase()比较判定过零点并计算换向时刻。ADC 通道枚举定义在bldc_zero_cross_adc.h中U_PHASE_CHANNEL、V_PHASE_CHANNEL、W_PHASE_CHANNEL、BUS_CHANNEL母线电流与POW_CHANNEL电源电压共 5 个通道。ADC 过零点采样硬件等分压系数设计端电压与直流母线电压需要接入 ESP32 的 ADC 引脚为保证比较基准一致并简化计算流程端电压与直流母线电压采用相同的分压系数以 12V 电机控制方案为例组件采用1/21 的分压方案将直流母线电压与端电压统一衰减到 ESP32 系列芯片 ADC 参考电压 $V_{ref}$ 的量程范围内例如 ESP32 单次采样模式典型量程为 0 ~ 3.3V12V/21 ≈ 0.57V满足采集要求。注意电压必须转化到 ESP32 ADC 能够采集的范围分压参数需结合芯片手册的 ADC 量程与衰减配置attenuation进行设计。过零点判定、续流规避与提前换向源码级的参数语义ADC 方案虽然硬件上只需采集端电压与母线电压但在真实电机上换向后会存在续流、PWM 开关噪声等干扰直接比较会得到大量假过零点。组件通过三个参数在bldc_zero_cross_adc_operation()中完成滤波与换向时序控制AVOID_CONTINUE_CURRENT_TIME换向后存在续流电流影响通过计数延迟规避续流。源码中每次换向完成后计数累加只有超过该阈值才开始过零点判定if (zero_cross-avoid_continue_current AVOID_CONTINUE_CURRENT_TIME)默认值 4ZERO_REPEAT_TIME连续 N 次检测到过零点信号才判定为有效过零点默认值 2用于滤除单次噪声ENTER_CLOSE_TIME强拖一段时间后进入闭环的延迟计数默认 10000 次周期中断。DRAG 状态下speed_count 10000时返回 1 允许进入无感闭环ZERO_CROSS_ADVANCE提前换向参数。过零点信号一般在换向前 30° 电角度到来检测到过零点后只需再延迟 30° 即可换向但由于电气周期不固定且存在软件滤波与处理时延需要补偿换向时间。源码中换向延迟按speed_count * 3.0 / ZERO_CROSS_ADVANCE计算bldc_zero_cross_adc.c提前角度 180° / ZERO_CROSS_ADVANCE默认 8即提前 22.5°。三个测试工程中的取值分别为 8、10、7见test_apps下各bldc_user_cfg.h且要求不小于 6。调参提示换向角度并非越提前越好可以搭配示波器观测理论计算的换向角度与实际换向角度是否一致来校准。此外组件还内置了堵转保护电机长时间不换相即判定堵转并停机与基于 PID 的速度控制SPEED_KP/SPEED_KI/SPEED_KD及积分、输出限幅、SPEED_MAX_RPM/SPEED_MIN_RPM、MAX_SPEED_MEASUREMENT_FACTOR速度测量滤波等参数速度估算在过零检测中通过换相周期换算获得并经过低通滤波处理源码中BLDC_LPF(speed_rpm, ...)细节可参见组件使用指南。实测验证测试工程与调试入口仓库在test_apps下提供了三套可编译的验证工程其中与本文 ADC 方案直接相关的是bldc_adcADC 过零点检测的独立验证工程包含test_adc.c与配套bldc_user_cfg.hbldc_test_step_by_step逐步验证工程其bldc_user_cfg.h中INJECT_ENABLE置为 1即启用本文所述的脉冲注入初始位置检测test_step_by_step.c中也有请先使能 INJECT_ENABLE的提示注释适合完整跑通注入 → 对齐 → 强拖 → 闭环全流程。在步进验证过程中若注入相位检测不稳定优先调整CHARGE_TIME与INJECT_DUTY若闭环后换向频繁出错优先检查ZERO_REPEAT_TIME、AVOID_CONTINUE_CURRENT_TIME与ZERO_CROSS_ADVANCE并核对三相端电压与母线电压的 ADC 分压是否一致、是否落在芯片 ADC 量程内。总结基于 ADC 采样的无感方波 BLDC 控制在esp_sensorless_bldc_control组件中形成了一套完整的工程实现启动阶段通过 6 矢量脉冲注入 母线电流 ADC 采样确定转子初始相位运行阶段通过浮空相端电压与母线电压等分压 ADC 对比捕捉反电势过零点并以连续确认、续流规避与提前换向补偿三个机制保证换向的鲁棒性。理解这两条链路及其参数语义即可在 12V 级小型 BLDC 电机上快速搭建起一套可调试的无感方波驱动方案。【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

开发测试环境选型:大厂云还是低成本方案?芯飞云实践复盘 2026/9/19 3:10:36

开发测试环境选型:大厂云还是低成本方案?芯飞云实践复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
为什么单Agent跑不动深度研究?Multi-Agent架构实战解析 2026/9/19 3:10:36

为什么单Agent跑不动深度研究?Multi-Agent架构实战解析

1. 为什么“一个Agent”在真实研究场景里根本跑不起来?我去年带团队做金融行业深度研报系统时,第一版就是典型的“单Agent架构”:一个LLM节点,接上向量库检索、PDF解析、SQL查询三个工具,用LangChain Chain串起来。上线…

阅读更多 →
低代码AI测试平台搭建实战:从接口用例生成到工程化落地 2026/9/19 3:10:36

低代码AI测试平台搭建实战:从接口用例生成到工程化落地

1. 为什么测试团队需要自己搭低代码AI平台先讲一个场景。我所在的团队维护一套核心业务系统,每次版本迭代,涉及接口回归的用例数在两千条左右。过去我们靠的是Postman集合加Jenkins定时任务,每次需求变更,测试人员要花半天到一天时…

阅读更多 →
Kaggle时间序列金牌方案:决策逻辑链与可复现验证路径 2026/9/19 3:10:36

Kaggle时间序列金牌方案:决策逻辑链与可复现验证路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
UM982双天线RTK在无人机精准农业中的应用与调试 2026/9/19 3:10:36

UM982双天线RTK在无人机精准农业中的应用与调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
基于MiniCPM-o 4.5的多模态全双工智能体微调实践 2026/9/19 3:07:36

基于MiniCPM-o 4.5的多模态全双工智能体微调实践

1. 为什么是 MiniCPM-o 4.5:多模态双工智能体的选型逻辑先交代一下背景。我一直在做端侧多模态 Agent 相关的项目,之前用过不少开源多模态模型,但始终有几个痛点在纠缠:一是视觉、音频、文本三个模态的模型往往是分开的&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞