脉冲注入法与电感法无刷电机BLDC控制器方案

news2026/4/8 13:17:54
脉冲注入法持续注入启动低速运行过程中注入电感法ipd力矩保持无霍尔无感方案媲美有霍尔效果。 bldc控制器方案无刷电机。 提供源码原理图。一、文档引言本文基于华大半导体HC32L13x系列MCU的无霍尔无刷直流BLDC电机控制源码从代码结构、模块功能、核心逻辑三个维度深度拆解代码如何实现电机从初始化到运行、保护的全流程控制。文档聚焦代码本身的功能实现不涉及复杂理论推导通过梳理代码中各文件的职责与交互关系清晰呈现无霍尔BLDC电机控制的工程化实现细节为开发人员理解代码逻辑、进行二次开发提供参考。二、代码整体结构与文件职责源码共包含86个文件核心文件集中在Common和User目录以及项目配置相关文件各目录文件分工明确构成完整的电机控制体系目录/文件类型核心文件主要功能Commonbase_types.h定义基础数据类型如booleant、float32t、通用宏MINIMUM/MAXIMUM/ARRAYSZ、错误码枚举enresult_t为整个代码提供统一的数据类型标准Commonboard_stkhc32l13x.h定义开发板硬件资源映射包括用户按键STKUSERPORT/PIN、LEDSTKLEDPORT/PIN、晶振XTH/XTL、外设I2C EEPROM、SPI Flash的GPIO引脚配置Commonddl_device.h指定MCU系列DDLMCUSERIESHC32L13X和封装类型DDLMCUPACKAGEHC_K为DDL库提供设备识别信息Commonhc32l13x.h定义MCU外设寄存器结构体如M0PADCTypeDef、M0PTIM3MODE23TypeDef、中断号IRQnType、外设基地址如M0PADCBASE是硬件操作的底层基础Commoninterrupts_hc32l13x.c/.h实现中断管理功能包括NVIC中断使能/禁用、优先级配置以及各外设中断处理函数如PORTAIRQHandler、TIM3IRQHandler的弱定义支持用户重写Commonstartup_hc32l13x.s汇编实现的启动文件定义中断向量表、栈/堆大小配置、复位处理函数Reset_Handler完成MCU上电后的初始化引导Commonsystem_hc32l13x.c/.h实现系统时钟初始化SystemInit和时钟频率更新SystemCoreClockUpdate配置PLL倍频、HCLK/PCLK分频为系统提供稳定时钟源Users_common.h整合核心头文件如sysctrl.h、adc.h、timer3.h统一对外暴露接口避免用户直接包含多个分散头文件Users_config.h定义全局控制宏如DI/EI中断开关、SIM_ENABLE仿真使能集中管理代码配置参数Users_ipd.c实现脉冲注入法IPD转子初始位置检测逻辑包括电流采样、位置判断、MOS管导通时序控制Promain.c代码入口整合系统初始化、电机控制核心逻辑启动/运行/停止、状态监测是功能调度的核心三、基础功能模块解析基础功能模块是电机控制的“基础设施”负责为上层应用提供稳定的硬件环境和通用工具主要包括时钟配置、GPIO初始化、中断管理、ADC采样四大核心功能。一系统时钟配置时钟是MCU运行的“心脏”代码通过InitSystemClock函数main.c完成时钟初始化确保系统和外设工作在合适频率FLASH等待周期配置由于系统主时钟配置为48MHz需设置FLASH等待周期为1个时钟FlashWaitCycle1避免FLASH读写错误。内部高速时钟RCH配置先将RCH频率设置为4MHz作为PLL输入时钟源。PLL配置配置PLL输入频率范围4-6MHz、输出频率范围36-48MHz、倍频系数12倍使PLL输出频率为4MHz×1248MHz。系统时钟切换将系统主时钟从RCH切换为PLL输出同时配置HCLK系统时钟、PCLK外设时钟分频系数为1即HCLK48MHz、PCLK48MHz。SysTick配置调用SysTick_Config函数将SysTick定时器配置为1ms中断48MHz/100048000个时钟周期用于系统延时和周期任务调度。时钟配置通过华大DDL库的SysctrlSetPLLFreq、SysctrlClkInit等接口实现参数通过结构体如stcsysctrlpllcfgt、stcsysctrlclkcfgt传递代码结构清晰便于修改频率参数。二GPIO初始化GPIO是MCU与外部硬件交互的“桥梁”代码通过App_GpioInit函数main.c配置不同功能的GPIO引脚LED引脚配置将LED引脚GpioPortC、GpioPin13配置为推挽输出模式GpioDirOut高驱动能力GpioDrvH初始化后设置为高电平LED1_ON用于指示系统上电状态。用户按键配置将按键引脚GpioPortA、GpioPin11配置为上拉输入模式GpioDirIn、GpioPuEnable避免引脚悬空导致的误触发。电机驱动引脚配置在App_BldcInit函数中将电机三相桥驱动引脚如PA08、PA07、PA09配置为复用功能模式GpioAf2/Af3/Af4映射到TIM3的PWM输出通道为电机驱动做准备。模拟信号引脚配置将BEMF检测引脚如PA00、PA01、PA02、电流采样引脚如PA06、PB11配置为模拟输入模式Gpio_SetAnalogMode确保ADC采样的准确性。GPIO配置通过GpioInit函数实现引脚参数方向、驱动能力、上下拉、复用功能封装在stcgpiocfgt结构体中代码模块化程度高便于后续修改引脚映射。三中断管理中断是实现实时控制的关键代码通过interruptshc32l13x.c/.h和startuphc32l13x.s构建完整的中断管理体系中断向量表定义在startuphc32l13x.s中定义中断向量表Vectors包含复位 handlerResetHandler、NMI handler、HardFault handler、各外设中断 handler如PORTAIRQHandler、TIM3IRQHandler指定每个中断的入口地址。NVIC配置接口EnableNvic函数interruptshc32l13x.c提供统一的中断配置接口支持设置中断号IRQnType、优先级enirqlevelt0-3级、使能/禁用状态内部调用NVICClearPendingIRQ清除挂起中断、NVICSetPriority设置优先级、NVICEnableIRQ/NVIC_DisableIRQ使能/禁用中断。中断 handler 实现各外设中断 handler 采用“弱定义WEAK”实现如TIM3IRQHandler、ADCIRQHandler用户可在其他文件中重写具体逻辑若用户未重写默认执行空循环B .避免程序崩溃。关键中断应用TIM3中断用于PWM周期控制和换相触发ADC中断用于采样完成后的数据读取SysTick中断用于1ms周期任务如状态监测、按键扫描确保电机控制的实时性。四ADC采样功能ADC用于采集电机运行过程中的关键模拟信号相电流、MOS管温度、BEMF代码通过App_AdcInit函数main.c和GetADC函数main.c实现采样功能ADC初始化- 使能ADC和BGR带隙基准电压外设时钟SysctrlSetPeripheralGateBGR提供稳定的参考电压确保ADC采样精度。- 配置BGR模块使能BGR输出BGREN1禁用内部温度传感器TSEN0需等待20us确保BGR输出稳定。- 配置ADC工作模式设置为单通道采样模式AdcSglMode采样时钟为系统时钟1分频AdcClkSysTDiv124MHz采样时间为8个时钟周期AdcSampTime8Clk参考电压为AVDD电源电压禁用输入缓冲bAdcInBufEnFALSE。- 配置模拟输入引脚通过GpioSetAnalogMode函数将PA06MOS温度采样、PB11转速相关采样、PB15平均电流采样等引脚设置为模拟输入模式。ADC采样GetADC函数实现单通道采样流程为设置ADC单通道选择SGLMUXchx→清除采样完成中断标志SGLIC0→启动软采样SGLSTART1→等待采样完成IFR.SGLIF1→读取采样结果RESULT.RESULT采样结果为12位数据反映输入模拟信号的大小。ADC采样的精度和速度通过采样时间、参考电压、时钟频率共同决定代码中参数配置兼顾了采样精度8个时钟采样时间和响应速度24MHz采样时钟满足电机控制对实时性和准确性的需求。四、电机控制核心功能解析电机控制核心功能是代码的“业务逻辑”涵盖转子初始位置检测IPD、电机启动/运行/停止控制、换相控制、状态监测与保护直接决定电机的运行性能和安全性。一转子初始位置检测IPD无霍尔BLDC电机启动前需确定转子初始位置否则无法实现正确换相代码通过IPDProc函数sipd.c和JudgePosition函数s_ipd.c采用脉冲注入法IPD实现该功能IPD检测流程- 关闭所有MOS管IPDSHUTALLMOS延时一段时间IPDOFFTIMECST确保绕组放电完成。- 依次导通不同的相组合如A→BC、BC→A、AB→C等6种组合每种组合导通后延时IPDONTIMECST使绕组产生稳定电流。- 通过GetADC函数采样各相组合的电流响应值存储到detectphasecurrenttab数组共7个元素对应6种相组合备用。- 所有相组合采样完成后关闭所有MOS管避免绕组过热。位置判断JudgePosition函数分析电流响应数据找到电流最大的相组合max值根据最大电流对应的相组合和相邻相组合的电流关系判断转子所在的12个机械角度区间1-12输出转子初始位置rotorinitpos。若位置超出范围0或12默认设置为1确保启动安全性。IPD检测的关键参数注入脉冲时长、间隔通过宏定义IPDONTIMECST、IPDOFFTIMECST配置避免硬件损坏同时确保检测精度。二电机启动与运行控制电机控制流程通过main函数中的主循环和周期任务实现核心逻辑包括启动触发、运行控制、停止控制状态切换通过strmotor.erunstate运行状态和strmotor.eerrstate错误状态管理启动触发- 按键扫描DirSwitchScan函数main.c通过1ms周期扫描用户按键PA11检测到按键按下连续50次检测为低电平设置strmotor.startflag1触发电机启动按键释放后startflag0触发电机停止。- 启动条件判断当startflag1且电机当前状态为空闲IDLESTATE或刹车BRAKESTATE、无错误NOERR时设置目标PWM占空比vrsetpwmtmpMAXPWM将运行状态切换为初始化INIT_STATE启动IPD检测和启动流程。启动阶段- IPD检测在INITSTATE状态下执行IPDProc函数获取转子初始位置。- 逐步提速根据初始位置按照预设换相序列输出PWM逐步提升PWM占空比从INITPWM到MAXPWM使电机转速从0上升至反电动势可稳定检测的阈值转速避免启动冲击。运行阶段- 状态切换当转速达到阈值将运行状态切换为运行RUNSTATE切换至反电动势过零点检测模式。- 转速闭环控制通过DirSwitchScan函数动态调整目标PWM占空比vrsetpwmtmp实际PWM占空比vrsetpwm通过“逐步逼近”方式调整若当前占空比小于目标值每次增加vrsetpwm71若大于目标值直接设置为目标值避免转速波动。- 换相控制通过VC模块检测BEMF过零点触发TIM3中断在中断中执行换相逻辑按照六步换相序列切换三相桥导通状态确保电机持续运行。停止控制当startflag0且电机处于运行RUNSTATE或IPD检测IPDSTATE状态时将运行状态切换为停止STOP_STATE关闭所有MOS管切断电机供电实现平稳停止。三换相控制换相是BLDC电机运行的核心代码通过TIM3定时器和VC模块实现精准换相TIM3配置在AppBldcInit函数main.c中TIM3配置为模式3三角波模式M23CR.MODETim3WorkMode3互补PWM输出周期20KHzARRPERIODMAX具体参数包括- 时钟源PCLK48MHz不分频PRSTim3PCLKDiv1。- PWM模式独立PWM模式COMPTim3IndependentPWM单点点比较PWM2STim3SinglePointCmp。- 输出配置CH0A/CH0B、CH1A/CH1B、CH2A/CH2B分别对应电机三相的上下桥臂配置为PWM模式2OCMA输出高电平当CNTCCR互补输出确保同一相上下桥臂不同时导通避免短路。换相触发VC模块实时监测各相BEMF过零点当检测到过零点时触发TIM3中断在TIM3中断 handler 中根据当前换相状态和电机转向更新TIM3的PWM输出通道切换三相桥导通状态实现换相。换相序列根据电机转向顺时针CW/逆时针CCW预设6步换相序列每步换相对应不同的相导通组合如A上桥BC下桥、B上桥AC下桥等确保转子持续旋转。四状态监测与保护为避免电机和驱动系统损坏代码设计了多重保护机制通过MotorLockChk函数main.c和周期任务实现电机锁死保护- 监测逻辑在运行RUNSTATE或IPD检测IPDSTATE状态下lockcnt计数器每1ms加1若lockcnt达到阈值ROTORLOCKTIMECST判定为电机锁死。- 保护动作若锁死重启次数lockrestarttimescnt≤5关闭所有MOS管SHUTALLMOS重置IPD参数firstipdflg1、ipdpwmINITPWM将运行状态切换为IPDSTATE尝试重新启动若重启次数5设置电机锁死错误MOTORLOCKERR将运行状态切换为STOPSTATE停止电机。过温保护通过ADC采样MOS管温度PA06若温度超过阈值mostempratureovercnt计数器加1连续多次超过阈值降低PWM占空比或停止电机若温度低于阈值mostempratureundercnt计数器加1温度恢复后恢复正常运行。过流保护通过ADC采样相电流PB15若电流超过安全阈值立即关闭所有MOS管切断电机供电设置过流错误标志避免驱动管烧毁。按键消抖保护按键扫描采用“连续检测”机制按下需连续50次检测为低电平释放需连续50次检测为高电平避免按键抖动导致的误启动/误停止。五、代码设计特点与适配建议一设计特点模块化设计基础功能时钟、GPIO、ADC与业务功能IPD、换相、保护分离各模块通过清晰的接口交互便于维护和功能扩展如增加新的保护机制。参数可配置核心参数如PWM频率、IPD脉冲时长、保护阈值通过宏定义PERIODMAX、IPDONTIMECST、ROTORLOCKTIME_CST配置无需修改代码逻辑即可适配不同规格的BLDC电机。可靠性高采用多重保护机制锁死、过温、过流、按键消抖弱定义中断 handler 避免程序崩溃BGR参考电压提升ADC采样精度确保系统稳定运行。实时性强通过中断TIM3、ADC、SysTick实现关键任务的实时响应1ms周期调度状态监测和按键扫描满足电机控制对实时性的需求。二适配建议电机参数适配根据电机额定电压、额定电流、额定转速调整以下宏定义- PWM周期PERIODMAX调整PWM频率建议20-50KHz避免电机噪音。- IPD参数IPDONTIMECST、IPDOFFTIMECST根据电机绕组电感调整确保电流采样准确。- 保护阈值ROTORLOCKTIMECST、过温阈值、过流阈值根据电机性能调整避免误触发或保护不及时。硬件引脚适配若修改电机驱动引脚、ADC采样引脚需同步修改boardstkhc32l13x.h中的GPIO定义和AppGpioInit、App_AdcInit中的引脚配置确保引脚功能正确。功能扩展若需增加转速显示、串口通信等功能可在SysTick中断的1ms周期任务中添加相应逻辑或重写UART中断 handler 实现数据收发。六、总结本代码基于HC32L13x MCU完整实现了无霍尔BLDC电机的控制功能从基础硬件初始化到核心业务逻辑IPD检测、换相控制、保护机制形成了一套闭环的解决方案。代码通过模块化设计、参数可配置、多重保护确保了系统的稳定性、可维护性和可扩展性适用于小型风扇、泵体、家电等无霍尔BLDC电机应用场景。开发人员可基于本文档理解代码逻辑根据具体需求调整参数或扩展功能快速实现产品落地。脉冲注入法持续注入启动低速运行过程中注入电感法ipd力矩保持无霍尔无感方案媲美有霍尔效果。 bldc控制器方案无刷电机。 提供源码原理图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2486919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…