尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

stm32g431 esc 无感foc非线性磁链观测器 速度环 电流环 零速双闭环启动 带载运...

stm32g431 esc 无感foc非线性磁链观测器 速度环 电流环 零速双闭环启动 带载运... stm32g431 esc 无感foc非线性磁链观测器 速度环 电流环 零速双闭环启动 带载运行 堵转力矩保持 算法资料 只卖资料没有硬件实物。 资料包括cubemx配置文件mdk项目文件调试笔记全部源代码c语言无封包带中文注释。最近在玩STM32G431做无感FOC驱动尝试实现零速带载启动和堵转力矩保持功能。实测这套非线性磁链观测器方案在零速工况下确实能稳住分享一下实现过程中的关键点。先说磁链观测器的实现核心这个非线性观测器不需要传统PLL结构直接通过电流和电压重构磁链。核心代码截取//非线性观测器核心运算 void FluxObserver_Update(FluxObserver* f, float u_alpha, float u_beta, float i_alpha, float i_beta) { //磁链微分方程 float d_psi_alpha u_alpha - RS * i_alpha - cross * f-psi_beta; float d_psi_beta u_beta - RS * i_beta cross * f-psi_alpha; //非线性反馈项 float e_alpha i_alpha - f-i_alpha_hat; float e_beta i_beta - f-i_beta_hat; float k 2.0f * FO_GAIN * (e_alpha * f-psi_alpha e_beta * f-psi_beta); //状态更新 f-psi_alpha (d_psi_alpha k * f-psi_alpha) * DT; f-psi_beta (d_psi_beta k * f-psi_beta) * DT; //电流观测 f-i_alpha_hat (f-psi_alpha - LS * i_alpha) / LM; f-i_beta_hat (f-psi_beta - LS * i_beta) / LM; }这里的关键在于非线性反馈项的设计通过电流误差与磁链的乘积构建增益项有效增强系统阻尼。调试中发现增益系数FO_GAIN取值在0.5-2之间效果最佳过大会引起高频振荡。零速启动阶段采用电流环速度环双闭环结构这里有个坑点速度环积分器初始值必须预置为负载力矩对应的电流值。启动流程代码框架void Startup_Handler(void) { //阶段1强制角度对齐 SetAngleForce(0); CurrentLoop_Run(ALIGN_CURRENT); HAL_Delay(500); //阶段2开环加速 for(int i0; iOPENLOOP_STEPS; i){ angle angle_step; CurrentLoop_Run(OPENLOOP_CURRENT); HAL_Delay(OPENLOOP_DELAY); } //阶段3闭环切换 SpeedController_SetIntegral(ESTIMATED_LOAD_TORQUE/SPEED_KI); Enable_SpeedLoop(); }调试笔记里特别标注了切换瞬间的防抖处理在闭环切入前需要将观测器输出的角度偏移量补偿到当前开环角度避免相位突变造成抖动。stm32g431 esc 无感foc非线性磁链观测器 速度环 电流环 零速双闭环启动 带载运行 堵转力矩保持 算法资料 只卖资料没有硬件实物。 资料包括cubemx配置文件mdk项目文件调试笔记全部源代码c语言无封包带中文注释。堵转检测逻辑需要结合速度和电流综合判断这里采用滑动窗口方差检测法uint8_t Check_StallCondition(void) { static float speed_buffer[STALL_WINDOW_SIZE]; static int index 0; speed_buffer[index] GetMotorSpeed(); index (index 1) % STALL_WINDOW_SIZE; //计算窗口内速度方差 float mean 0, variance 0; for(int i0; iSTALL_WINDOW_SIZE; i) mean speed_buffer[i]; mean / STALL_WINDOW_SIZE; for(int i0; iSTALL_WINDOW_SIZE; i) variance (speed_buffer[i]-mean)*(speed_buffer[i]-mean); return (variance STALL_THRESHOLD) (GetOutputCurrent() CURRENT_THRESHOLD); }当检测到堵转时切换到力矩保持模式此时速度环完全退出电流环给定q轴电流为预设堵转力矩值同时d轴电流注入高频扰动维持角度观测。实测中发现电机参数对观测器影响较大特别是定子电阻RS的温度漂移问题。项目中采用在线参数辨识通过注入高频信号实时修正void Rs_OnlineIdentification(void) { //注入6kHz方波扰动 static uint8_t toggle 0; float disturb toggle ? IDENT_DISTURB : -IDENT_DISTURB; toggle !toggle; //采集响应电流 float i_response GetCurrentFeedback(); //递推最小二乘算法更新RS static float P 1e6, theta RS_NOMINAL; float phi -i_response; float K P * phi / (IDENT_LAMBDA phi * P * phi); theta K * (disturb - phi * theta); P (1 - K * phi) * P / IDENT_LAMBDA; RS theta; //更新全局RS值 }这套算法在堵转工况下仍能持续运行保证参数准确性。调试时需要特别注意注入信号的幅值选择过大会引起可闻噪声过小则影响辨识精度。工程文件里包含完整的中文注释版代码从CubeMX配置到速度环参数整定都有详细说明。比如PWM载波频率设置为20kHz时ADC采样触发点的配置技巧//PWM定时器配置关键代码 htim1.Instance-ARR PWM_PERIOD - 1; htim1.Instance-CCR1 PWM_PERIOD / 2; htim1.Instance-CCER | TIM_CCER_CC1NE; __HAL_TIM_ENABLE_PWMN_OUTPUT(htim1); //ADC触发配置 ADC_TriggerConfig( hadc1, ADC_EXTERNALTRIGINJEC_EDGE_RISING, ADC_EXTERNALTRIGCONV_T1_CC1 );这种配置下ADC在PWM中心对齐的波谷处采样有效规避开关噪声。工程实测波形显示电流采样毛刺控制在5%以内完全满足无感FOC需求。整套方案在MDK工程中采用模块化架构主要模块包括非线性观测器flux_observer.c双闭环控制器dual_loop.c堵转检测stall_detect.c安全监控safety_monitor.c在线参数辨识parameter_id.c调试笔记里记录了从空载到额定负载的各项测试数据包括零速启动时的电流波形、带载切换瞬间的转速波动曲线、堵转状态下的力矩保持精度等。特别提醒用户注意硬件布局中的电流采样走线要采用开尔文接法避免测量误差影响观测器精度。
返回列表