stm32 滑膜观测器+PLL 锁相环 FOC 无感无刷电机控制

news2024/11/18 10:58:28

        上一期为大家介绍了滑膜观测器正反切的应用案例,收到不少小伙伴的反馈是否有PLL的案例,大概看了一下网上的资料,讲理论的很多,能转化成源码的几乎没有。前半年工作和家里的事情都比较多,一拖再拖,终于在6月将源码调试好了,在这里跟大家分享一下调试过程以及注意事项。

        我们都知道,滑膜控制在滑动膜态下伴随着高频抖阵,因此估算的反电动势中存在高频抖阵现象。基于反正切函数的转自位置估计方法将这种抖阵直接引入反正切函数的除法运算中,导致这种高频抖阵的误差被放大,进而造成较大的角度估计误差。采用锁相环结构对转子位置进行跟踪估计,可以大大提高系统的跟踪精度和改善系统的控制性能。所以,这一次将讲解一下锁相环PLL系统来提取转子的位置信息。

硬件介绍:

        硬件平台使用的stm32F4系列单片机,可以进行浮点计算,主频168Mhz,性能可以完爆F103的单片机了。

        开发板链接

        还是我们这一款板子:

软件功能:

        相较于F1的板子,增加了电位器调速功能。

        滑膜观测器+PLL控制,更准确提取转子的速度和角度信息。

        软件上还是保持了三个功能,滑膜模式(Smoloop)、霍尔模式(Hallloop)和开环 OpenLoop模式。

         通过程序中的宏进行模式选择。

 

滑膜观测器的设计:

         滑膜控制是一种变结构的控制系统,控制系统的特性在于控制系统的不连续性,能让系统在一定条件下沿着规定的轨迹作小幅度、高频率上下运动,因此我们称之为滑膜动态。这种动态与参数和扰动无关,并且是可以设计的。

         滑膜观测器的具体原理我就不在这里赘了,不了解的可以看一下F103上滑模观测器反正切的介绍,也可以参考一下网上的资料,进行一下基础知识的普及,在这里我贴上源码,方便大家更直观的了解如何从理论到程序转变。

滑膜观测器初始化:


void  SMO_Pare_init(void)  
{
	SMO_MotorPare.Rs = Motor_Rs;     
	SMO_MotorPare.Ls = Motor_Ls;  
	SMO_MotorPare.Ib = 1 ;        
	SMO_MotorPare.Vb = 1 ;       
	SMO_MotorPare.Ts = Control_Ts;  
	SMO_MotorPare.POLES = Motor_Pn;   
  
    SMO_MotorPare.Fsmopos = exp((-SMO_MotorPare.Rs/SMO_MotorPare.Ls)*(SMO_MotorPare.Ts));
	SMO_MotorPare.Gsmopos = (SMO_MotorPare.Vb/SMO_MotorPare.Ib)*(1/SMO_MotorPare.Rs)*(1-    
    SMO_MotorPare.Fsmopos);
  
	Angle_SMOPare.Kslide = 5.0;  //     
	Angle_SMOPare.Kslf = 0.158;     //      
	Angle_SMOPare.E0 = 0.5;      //
  
  /***************PLL参数************************************/
  Angle_SMOPare.tPll.Kp = 20.0f;//5.0
  Angle_SMOPare.tPll.Ki = 12.0;//15.0
  
  Angle_SMOPare.tPll.Speed_coeff = (60.0)/(2*SMO_MotorPare.POLES*PI); 
  Angle_SMOPare.tPll.Kslf = 0.3; 
  
}

锁相环的位置和速度估算:

        滑模控制系统中估算的反电动势在通入低通滤波器中会导致高频都在误差变大,角度误差变大。采用PLL系统来提取转子速度和角度信息。

PLL的滑模控制系统实现框图

下面为PLL计算的C源码:

void  Pll_Compute(Ppll_obj_t ptHandle,float Coff_Sine,float Coff_Cos)
{
    float Sin_Value = 0;
    float Cos_Value = 0;
    Cos_Value = arm_cos_f32(ptHandle->Theta); //Q15
    Sin_Value = arm_sin_f32(ptHandle->Theta); //Q15
    
    ptHandle->Err = Coff_Cos * Cos_Value  - Coff_Sine * Sin_Value; 
  
    ptHandle->Err = (ptHandle->Err > PI/6)  ?  (PI/6) : (ptHandle->Err);
    ptHandle->Err = (ptHandle->Err < -PI/6) ? (-PI/6) : (ptHandle->Err);
  
    ptHandle->Interg += ptHandle->Err * ptHandle->Ki;
  
    ptHandle->Ui = ptHandle->Err*ptHandle->Kp + ptHandle->Interg;
      
    
    ptHandle->Speed_Rpm = ptHandle->Speed_coeff * ptHandle->Ui;
 
    ptHandle->SpeedLpf_Rpm = ptHandle->SpeedLpf_Rpm + ptHandle->Kslf * (ptHandle->Speed_Rpm - ptHandle->SpeedLpf_Rpm);

}

仿真分析:

       仿真部分建议买一本袁雷老师的simulink仿真那本书,内容很不错。

 角度波形:

 反电动势波形:

通过上位机查看电流启动波形:

最后:

        用锁相环控制系统替代串通的滑模观测器系统,通过滑模增益和反电动势的估算来减小系统误差与抖动,并根据锁相环控制系统推导出转角和转速公式,通过搭建的仿真模型可以看出,在PLL滑模观测器转速突变的情况下,能及时快速跟踪电机的实际转速和转角变化,通过PLL的滑模观测器比反正切的控制方法精准度更高,动态性能更好以及鲁棒性更强,可以满足电机实际控制性能的要求。

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

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

相关文章

Attention U-Net:Learning Where to Look for the Pancreas论文总结和代码实现

论文&#xff1a; https://arxiv.org/abs/1804.03999 中文版&#xff1a;https://blog.csdn.net/hhw999/article/details/110134398 源码&#xff1a; https://github.com/ozan-oktay/Attention-Gated-Networks 目录 一、论文背景和出发点 二、创新点 三、Attention U-Net的…

【5G MAC】5G中传输块(TBS)大小的计算方式

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

【学习日记2023.6.18】之 分布式缓存redis持久化_redis主从_reids哨兵_redis分片集群

文章目录 分布式缓存1. Redis持久化1.1 RDB持久化1.1.1 执行时机1.1.2 RDB原理1.1.3 小结 1.2 AOF持久化1.2.1 AOF原理1.2.2 AOF配置1.2.3 AOF文件重写 1.3 RDB与AOF对比 2 Redis主从2.1 搭建主从架构2.1.1 准备实例和配置2.1.2 启动2.1.3 开启主从关系2.1.4 测试 2.2 主从数据…

计算服务资源调度管理

文章目录 前言总体架构“ULT”和“KLT”抽象“内核”“容器”“虚容器” 内存抽象虚拟存储&#xff08;容器调用&#xff09; 多机器调度 前言 今天复习了一下操作系统&#xff0c;系统过了一下&#xff0c;感觉还有点时间&#xff0c;那么顺便来讨论一下&#xff0c;关于我的…

.maloxx勒索病毒数据怎么处理|数据解密恢复,malox/mallox

导语&#xff1a; 随着科技的快速发展&#xff0c;数据成为了企业和个人不可或缺的财富。然而&#xff0c;网络安全威胁也日益增多&#xff0c;其中Mallox勒索病毒家族的最新变种.maloxx勒索病毒的出现给我们带来了巨大的困扰。但不要担心&#xff01;91数据恢复研究院将为您揭…

一、Docker介绍

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、Docker是什么&#xff1f;二、Docker能干撒&#xff1f;三、容器虚拟化技术 和 虚拟机有啥区别&#xff1f;1.虚拟机2.容器虚拟化技术3.对比 四、Docker组成4.1 镜像…

python自动化办公——定制化将电子签名批量签写到PDF文件

python自动化办公——定制化将电子签名批量签写到PDF文件 文章目录 python自动化办公——定制化将电子签名批量签写到PDF文件1、安装依赖2、需求分析3、代码 1、安装依赖 首先需要下载所需要的库 pip install pdf2image pip install img2pdf pip install opencv-python此外还…

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

前言 之前写过一篇关于可视化爬虫spiderflow的文章&#xff0c;介绍了基本语法并实战了某校园新闻数据的爬取。 还有一篇文章介绍了基于docker-compose快速部署spiderflow的过程&#xff0c;需要部署的话可参考该文章。 文章链接如下: 可视化爬虫框架spiderflow入门及实战【…

基于SpringBoot+Vue+微信小程序的电影平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 研究背景&#xff1a;…

【通过Data Studio连接openGauss---快速入门】

【通过Data Studio连接openGauss---快速入门】 &#x1f53b; 一、访问openGauss&#x1f530; 1.1 确认连接信息&#xff08;单节点&#xff09;&#x1f530; 1.2 使用gsql访问openGauss&#xff08;本地连接数据库&#xff09;&#x1f530; 1.3 使用gsql访问openGauss&…

多道程序设计(操作系统)

目录 1 单道程序设计的缺点 2 多道程序设计的提出 3 多道程序设计的问题 多道程序设计目标&#xff1a; 多道程序设计是操作系统所采用最基本、最重要的技术&#xff0c;其根本目标是提高整个计算机系统的效率。衡量系统效率有一个尺度&#xff0c;那就是吞吐量。 提高系统…

clDice-一种新的分割标准-能够促进管状结构分割的连接性

clDice-a Novel Topology-Preserving Loss Function for Tubular StructureSegmentation论文总结 论文&#xff1a;clDice-A Novel Topology-Preserving Loss Function for Tubular Structure 源码&#xff1a;GitHub - jocpae/clDice 目录 一、论文背景和出发点 二、创新点 …

动态规划III (买股票-121、122、123、188、309)

CP121 买股票的最佳时机 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利…

Advanced-C.04.函数

函数 函数的定义 包括两个部分&#xff0c;“函数头"和"函数体” 返回值类型 函数名(形参1,形参2,...)//函数头{}//函数体 函数类型决定返回值类型&#xff0c;执行函数需要调用 函数的返回值和参数可以是任何类型&#xff0c;包括空类型&#xff01;&#xff01;函…

Android adb shell命令捕获systemtrace

Android adb shell命令捕获systemtrace (1)抓取trace文件&#xff1a; adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory -t 时长&#xff0c;20s&a…

Java学习笔记23——集合进阶

集合进阶 集合进阶CollectionCollection集合常用方法Collection集合的遍历Iterator中的常用方法集合的使用步骤 List集合概述和特点List集合的特点List集合的特有方法并发修改异常ListIterator 列表迭代器常用方法增强for循环 数据结构栈队列数组链表 Set集合Set特点实现类Hash…

Presto(Trino)的逻辑执行计划和Fragment生成过程

文章目录 1. 前言2. 从SQL提交到Fragment计划生成全过程2.1 Statement生成2.2 对结构化的Statement进行分析2.3 生成未优化的逻辑执行计划2.4 基于Visitor模型对逻辑执行计划进行优化2.4.1 Visitor模型介绍2.4.2 Presto中常见的逻辑执行计划优化器常规OptimizerIterativeOptimi…

阿里月薪23k软件测试工程师:必备的6大技能(建议收藏)

随着软件开发行业的日益发展&#xff0c;岗位需求量和行业薪资都不断增长&#xff0c;想要入行的人也是越来越多&#xff0c;但不知道从哪里下手&#xff0c;今天&#xff0c;就给大家分享一下&#xff0c;软件测试行业都有哪些必会的方法和技术知识点&#xff0c;作为小白该从…

EmGU(4.7) 和C#中特征检测算法详解集合

C#联合Emgu实现计算机视觉任务&#xff08;特征提取篇&#xff09; 文章目录 C#联合Emgu实现计算机视觉任务&#xff08;特征提取篇&#xff09;前言一、Emgu库中特征提取有哪些类函数&#xff1f;二、特征提取函数1.AgastFeatureDetector类2.AKAZE 类3.FastFeatureDetector类4…

Docker部署(2)——实现两个容器互相访问并运行项目

一、拉取MySQL镜像&#xff0c;并启动镜像对应的容器 由于上一篇文章实现了拉取jdk8的环境&#xff0c;同时将jar包打成了一个镜像。但是要想真正的把项目运行起来&#xff08;此处仅以单体项目为例&#xff09;还需要MySQL的容器提供数据支持&#xff08;当然这里面方法有多种…