STM32F4 磁链观测器+PLL 无感无刷电机位置驱动

2023-10-25 08:28

本文主要是介绍STM32F4 磁链观测器+PLL 无感无刷电机位置驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在前面几节我们介绍了基于stm32f1的定点运算的滑膜观测器反正切以及stm32f4的浮点运算滑膜+PLL的案例,大家反馈的还挺好,在做售后的过程中有小伙伴咨询了磁链观测器和隆伯格观测器,针对磁链观测器咨询的较多,我们调试了磁链的程序,以及在这一讲我们将为大家简单讲解一下磁链观测器的使用方法。

硬件测试平台依旧使用我们前面用到的滑膜+PLL的 KY_Motor无刷电机驱动板:

       PMSM的FOC控制需要位置信息。在一些应用中,安装位置传感器很麻烦,例如,在一些真空泵中,由于密封性问题,不可能将电机轴伸出电机壳外。在起重机和电梯应用中,电机和逆变器之间的距离很大,传感器信号衰减和噪声干扰很高。在一些家用设备,如冰箱和空调,成本限制阻碍了传感器的使用。

        PMSM无传感器技术大致分为三种类型:反电动势(EMF)、电感和磁链。

        转子磁链观测器利用定子电压、定子电流或转子转速信号观测出转子磁链的相位和幅值。如果转子磁链的相位观测不准,那么定子电流的励磁分量与转矩分量就不能实现完全的解耦,可能会造成系统的振荡甚至不稳定。如果观测出转子磁链的幅值偏大,会使得电机运行在弱磁状态,减小带载能力;如果观测出转子磁链的幅值偏小,会导致过大的励磁电流,使电机的铁心饱和,严重时还会导致绕组过热而烧坏电机。因此决定整个矢量控制系统性能优劣的最为关键环节就是转子磁链观测器。

         电压型磁链观测器方程

从式(2-51)可以发现该观测器具有以下特点:

(1) 该模型与转子电阻无关,且不需要电机转速信息,适合用于无速度传感器矢量控制系统;

(2) 包含一纯积分项,被积项的初始相位与直流偏置都会影响积分结果;

(3) 低速时观测器性能较差。因为低速时给定的定子电压幅值小,电机端电压难以精确获得,定子电阻的阻值在运行过程中又会发生变化,使得被积项产生明显的相对误差。

电流型磁链观测器方程

从(2-53)可以看出磁链观测器具有以下特点:

1、需要实测的电子电流和转速信号,不需要定子电压信号;

2、包含转子时间常数和互感参数,当电机温升和磁路饱和时会对这些参数产生较大影响;

3、不包含纯积分环节,故其观测值是渐进收敛的。

如何用C语言将磁链方程转述出来:

只需要下面四步就可以将磁链和PLL表述出来。

1、void Observer_Par_init(void);//初始化磁链参数

2、Flux_Observer_Angle(float Ialpha,float Ibeta,float Ualpha,float Ubeta);//磁链观测器角度

3、Observer_Flux(PFlux_Obser ptHandle);//磁链观测器实现

4、Flux_Pll_Compute(PFlux_Obser ptHandle);//磁链+PLL计算

磁链初始化需要初始化电机参数,增益以及PI参数,完整函数如下:

void Observer_Par_init(void)
{Flux_Obser.Ls = Motor_Ls;Flux_Obser.Flux = Motor_Flux*Motor_Flux;Flux_Obser.Gain = 1000000.0f; Flux_Obser.Rs = Motor_Rs;Flux_Obser.tPll.Kp=  300.00f; Flux_Obser.tPll.Ki = 100.0f;Flux_Obser.tPll.Speed_coeff = 60.0f/(2.0f*Motor_Pn*PI);//每Ts角度增加Ui电角度 可求速度Flux_Obser.tPll.Kslf = LPF_CutFre(100.0f); //100Hz 截止频率}

磁链观测器角度函数:

void Flux_Observer_Angle(float Ialpha,float Ibeta,float Ualpha,float Ubeta)
{Flux_Obser.I_Alpha = Ialpha;Flux_Obser.I_Beta  = Ibeta;Flux_Obser.U_Alpha = Ualpha;Flux_Obser.U_Beta  = Ubeta;Pll_Compute(&Flux_Obser.tPll,Flux_Obser.Est_Yita_alpha,Flux_Obser.Est_Yita_beta);
}

磁链观测器+PLL计算函数:

void  Flux_Pll_Compute(PFlux_Obser ptHandle)
{float Sin_Value = 0;float Cos_Value = 0;Cos_Value = arm_cos_f32(ptHandle->tPll.Theta);Sin_Value = arm_sin_f32(ptHandle->tPll.Theta);ptHandle->tPll.Err =  ptHandle->Est_Yita_beta  * Cos_Value - \ptHandle->Est_Yita_alpha * Sin_Value;ptHandle->tPll.Interg +=ptHandle->tPll.Err * ptHandle->tPll.Ki;ptHandle->tPll.Ui = ptHandle->tPll.Err * ptHandle->tPll.Kp + ptHandle->tPll.Interg;ptHandle->tPll.Theta += ptHandle->tPll.Ui;ptHandle->tPll.Theta = (ptHandle->tPll.Theta > 2*PI)? ptHandle->tPll.Theta- 2*PI :ptHandle->tPll.Theta;ptHandle->tPll.Theta = (ptHandle->tPll.Theta < 0)? ptHandle->tPll.Theta + 2*PI : ptHandle->tPll.Theta;ptHandle->tPll.SpeedLpf_Rpm = ptHandle->tPll.SpeedLpf_Rpm + ptHandle->tPll.Kslf * (ptHandle->tPll.Speed_Rpm - ptHandle->tPll.SpeedLpf_Rpm);}

        以上就是磁链观测器+PLL在stm32f4平台上实现的全过程,写的比较简单,磁链属于foc控制的进阶教程,相信有foc控制基础的学员,看了这个教程能有一些启发,也能自己写出完整的磁链控制程序,能够更加深入的去实现磁链控制以及无感电机foc控制。

下面是完整的测试视频:

        视频中我们分别对电流波形进行了上位机显示,通过启动波形,电位器调速的波形来形象直观的感受磁链观测器的启动过程,以及带负载的情况。

stm32f4平台 磁链+PLL 无感无刷电机控制实例

这篇关于STM32F4 磁链观测器+PLL 无感无刷电机位置驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/281284

相关文章

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

PyCharm如何更改缓存位置

《PyCharm如何更改缓存位置》:本文主要介绍PyCharm如何更改缓存位置的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm更改缓存位置1.打开PyCharm的安装编程目录2.将config、sjsystem、plugins和log的路径

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决