PMSM无感foc控制(滑模-反正切-PLL)【仿真模型搭建教程】(附模型)

本文主要目的是教大家如何把文献中的公式转换成仿真模型。

首先介绍滑模控制的原理及如何搭建simulink模型。

1.1基于反电势估计位置原理

        永磁同步电机在静止坐标系αβ下的电压方程:

扩展反电动势包含转子位置信息,并且αβ轴下扩展反电动势的反正切函数正好就等于位置角theta

1.2 滑模控制原理(比较重要的点是以电机电流模型推导展开)

通过滑模观测得到鲁棒性比较高的αβ轴下扩展反电动势,并求其反正切函数,得到位置信息。

/***********************************************************************************/

原理我不想多说了,直接上模型。首先是连续域

通过上述模型计算得到比较准确的反电动势。然后通过反正切或PLL锁相环得到转子位置与转速。

反正切:

锁相环:

/**************************************************************/

上面是连续域模型,就是根据公式直接来的,大家总是觉得自己搭建不出来模型,参数调节不正确,个人建议从电流环开始一步步搭建,电流环及速度环PI根据参数整定公式计算就行,如果有一定PI调参经验,就用工程调参方法,在大部分控制算法,这些已经够用了。至于PLL锁相环的PI参数,就根据自动控制原理,写传递函数,画波特图分析。

 至于离散域模型,就一个z变换,没什么差别,个人建议还是弄懂原理后,实用离散域搭建模型,这样比较贴近数字域控制实际。

/*****************************************************************/

 我还建议弄懂模型后,自己搭建练习一下,真的很有收获,这样以后自己有好想法后,写出数学公式,就可以在matlab中初步验证。我看过滑模控制中,太多文献设置一些硕士论文用这个模型、或在上面修修改改。我也踩过雷,这个模型好多地方在我看来有瑕疵。

如果实在不太会用模块,就直接用matlab function用C语言写。

下面是我自己搭建的模型(离散域)

链接:https://pan.baidu.com/s/1UZJewAPue5QYo9qLwnX7tA?pwd=tahy 
提取码:tahy 
--来自百度网盘超级会员V5的分享

### STM32实现FOC无感滑模观测器的方法 #### 1. 系统概述 STM32F103系列微控制器因其强大的处理能力和丰富的外设资源,在电机控制应用中得到了广泛应用。特别是针对无传感器磁场定向控制(Sensorless Field-Oriented Control, FOC),通过滑模观测器(Sliding Mode Observer, SMO)可以有效估计转子位置,从而实现高性能的电机驱动。 #### 2. 滑模观测器的工作原理 滑模观测器利用定子电流和电压信号来估算转子的位置信息。其核心在于构建一个非线性的状态馈机制,使得系统的实际响应能够快速跟踪期望轨迹,并保持稳定运行。具体来说,SMO通过对误差动态特性施加特定形式的切换函数,迫使系统进入所谓的“滑动模式”,在此状态下即使存在参数不确定性和外部扰动也能维持良好的性能表现[^1]。 #### 3. 软件架构设计 为了简化开发流程并提高代码重用率,建议按照模块化原则组织程序结构: - **初始化配置**:设置定时器中断用于采样周期管理;配置ADC通道获取三相电流数据;使能DMA传输减少CPU负载。 - **坐标变换计算**:将ABC轴上的瞬时值转换成两相静止坐标系下的αβ分量,再进一步映射到旋转d-q坐标系下以便后续处理。 - **PI调节器设定**:分别对id、iq实施闭环比例积分控制,调整励磁强度与电磁转矩大小。 - **PWM波形生成**:依据SVPWM算法合成最优开关序列供给逆变电路执行功率放大操作。 - **滑模观测逻辑编写**:根据当前测量得到的速度及角度偏差更新预测模型中的未知变量,最终求解出最接近真实情况的结果作为馈输入给控制系统使用。 ```c // 定义全局变量存储观测器内部状态 float omega_est; // 观测器预估角速度(rad/s) float theta_est; // 观测器预估电角度(radian) void SlidingModeObserver(float i_alpha, float i_beta){ static float prev_error = 0; const float Ls = 0.00187; // 定子自感(Henry) const float Rs = 2.87; // 定子电阻(Ohm) const float J = 0.000495; // 转动惯量(Kg*m^2) const float B = 0.0000006; // 黏滞摩擦系数(N·m/(rad/s)) const float Kt = 0.091; // 扭矩常数(N·m/Ampere) const float Ke = 0.091; // 电动势常数(Volts/(rad/s)) // 计算电动势e_alpha,e_beta float e_alpha = (Rs * i_alpha + Ls * d_i_alpha_dt); float e_beta = (Rs * i_beta + Ls * d_i_beta_dt ); // 将e_alpha,e_beta转化为极坐标表示法 float magnitude = sqrt(e_alpha*e_alpha + e_beta*e_beta); float angle = atan2(e_beta , e_alpha); // 更新omega_est 和theta_est 的估值 omega_est += ((magnitude / Ke) - omega_est)*Kp_omega + Ki_omega*prev_error; theta_est += omega_est*dt; // 存储本次误差供下次迭代使用 prev_error = (magnitude/Ke)-omega_est; } ``` 上述代码片段展示了如何在一个简单的循环里完成一次完整的滑模观测过程。需要注意的是这只是一个基础框架,实际工程实践中还需要加入更多细节优化以适应不同应用场景的需求。 #### 4. 开发环境搭建指南 推荐选用官方提供的STM32CubeMX工具来进行硬件资源配置以及HAL库项目的创建。这样不仅可以节省大量时间成本,而且有助于降低因底层寄存器误配而导致的风险。与此同时,配合KEIL MDK或其他IDE平台开展高级功能调试工作也是不错的选择之一。 ---
评论 75
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红火恍恍惚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值