当前位置: 首页 > article >正文

foc进阶篇3——对比PLL测速,为M法加低通正名

foc进阶篇3——对比PLL测速为M法加低通正名相信大部分人在刚开始接触编码器时对电机的转速获取基本都是使用M法测速加低通滤波的方式。但随着工作学习的不断深入会逐渐听到有人说PLL测速更好诸如什么“pll是观测器”、“pll的积分环节会让数据更平滑”等理由。于是自己也开始使用pll测速似乎是比M法低通更好但具体好在哪里又说不清楚。不过今天我就直接告诉大家有些结构的PLL测速是可以和M法加IIR低通完全等效的而有些还不如M法加低通。破除迷信为M法测速加低通滤波正名。注本文所述的PLL仅针对有感的编码器测速并不涉及电角度滤波更不涉及无感的电角度获取。1.经典结构的PLL测速结论由于这种结构的pll传递函数并不是标准的二阶弹簧阻尼的形式因此即使阻尼比设置为1也仍然会过冲。不建议将它用到速度环的反馈中。2. 纯P环节的PLL测速结论不难发现纯P环节的PLL测速其实就相当于一阶低通滤波时间常数为1/kp。3. 仅引出积分项的PLL测速结论这种结构的PLL测速就相当于二阶低通滤波可以通过设置kp、ki来修改ωn和ζ。而对于ζ1的特例也可以将两个一阶低通串联达到相同的效果。4.纯p环节PLL和引出积分项PLL对比1阶跃响应对比2噪声抑制对比结论不难发现在ωn一样的情况下引出积分项的pll更加平滑但也更加滞后其实就是二阶低通对比一阶低通。注以上全部实验都是基于连续模型只是为了给大家一个感性认识。实际跑在单片机上是离散的对于ωn等参数不可以直接等效而是需要换算。5.代码实测1三种PLL的对比首先定义三种pll及函数注意这些pll测的速度是电角速度单位rad/s。实际使用将其转化为机械转速单位RPM#defineDT0.00005f#definePI_F3.14159265359f#defineWN1000.0f#defineZETA1.0fstructPLL_TYPE{float32_tkp,ki;float32_tI;float32_tangle,speed;};/*经典结构PLL*/structPLL_TYPEpll{.kp2.0f*WN*ZETA,.kiWN*WN};/*纯P环节PLL*/structPLL_TYPEpll_p{.kp2.0f*WN*ZETA,};/*引出积分项PLL*/structPLL_TYPEpll_i{.kp2.0f*WN*ZETA,.kiWN*WN};/*经典结构PLL*/voidPLL_Get(structPLL_TYPE*pll,float32_tangleIn){float32_terrorangleIn-pll-angle;if(errorPI_F)error-PI_F*2.0f;elseif(error-PI_F)errorPI_F*2.0f;pll-Ipll-ki*error*DT;pll-speedpll-kp*errorI;pll-anglepll-speed*DT;if(pll-anglePI_F*2.0f)pll-angle-PI_F*2.0f;elseif(pll-angle0.0f)pll-anglePI_F*2.0f;}/*纯P环节PLL*/voidPLL_P_Get(structPLL_TYPE*pll,float32_tangleIn){float32_terrorangleIn-pll-angle;if(errorPI_F)error-PI_F*2.0f;elseif(error-PI_F)errorPI_F*2.0f;pll-speedpll-kp*error;pll-anglepll-speed*DT;if(pll-anglePI_F*2.0f)pll-angle-PI_F*2.0f;elseif(pll-angle0.0f)pll-anglePI_F*2.0f;}/*引出积分项PLL*/voidPLL_I_Get(structPLL_TYPE*pll,float32_tangleIn){float32_terrorangleIn-pll-angle;if(errorPI_F)error-PI_F*2.0f;elseif(error-PI_F)errorPI_F*2.0f;pll-speedpll-ki*error*DT;pll-angle(pll-speedpll-kp*error)*DT;if(pll-anglePI_F*2.0f)pll-angle-PI_F*2.0f;elseif(pll-angle0.0f)pll-anglePI_F*2.0f;}可以看到经典pll虽然相位上比较超前但出现了过冲由前面仿真得知这个过冲很可能比真实速度更高纯P环节pll在相位滞后以及毛刺抑制上属于中间水平引出积分项的pll测速最平滑但也最滞后。这里我使用电流环给iq指令让电机加速。三种pll的执行频率都为20kHz上位机的打印频率为10kHz。2纯P环节PLL和M法加一阶低通对比纯P环节pll和M法加低通测速完全重合了第二张图加了一点Y轴偏置才得以看出。这里pll的kp2000执行频率为20kHzM法的采样频率和滤波频率也为20kHz滤波系数为0.1。不知道有没有人发现了什么。看到这里可能会有人疑惑。为什么我的M法测速加低通滤波不是这个效果其实是采样频率的问题。6.M法加低通不如PLL的原因相信大家在学习速度环的时候大概都听过这样一句话“由于电机的机械时间常数远大于电气时间常数所以速度环的执行频率一般是电流环的十分之一”。这里先不评价这句话但相信大概率会因为听了这句话选择把M法测速的采样频率也拉到电流环执行频率的十分之一。这里将M法测速及滤波的频率降低到2kHz对比20kHz执行频率的纯P环节pll。这里为了保证低通滤波的截止频率与之前接近因此滤波系数改为0.526pll的参数不变。发现没有M法加低通测速的波形变成了阶梯状并且整体相对pll更滞后一些。大家也可以尝试使用2kHz采样的M法配合20kHz的滤波滤波系数为0.1去对比pll测速。我这里已经试过了虽然阶梯状没有了但相比pll还是滞后了。还有这里2kHz采样的M法相比前面20kHz采样的噪声低了很多并且最左边的点连起来的相位相比pll超前可不可以用它来做速度反馈如果你的速度环执行频率也是2k的话那么确实可以。但请注意它的数据更新频率也只有2k如果你后面打算将速度环的执行频率提高到4k、5k甚至10k那么当中有几次的反馈值都是之前的、不变的。这里我更加建议使用20kHz采样的M法测速加十次滑动平均滤波来代替2kHz采样的M法测速这样既可以达到相同的噪声水平又能保证数据的更新频率而且滞后程度也是一样的对比2k采样M法最左边的点连起来的线。结论为什么你感觉M法加低通效果不如pll好就是因为采样频率的问题。你的M法采样频率只有电流环执行频率的十分之一而pll一般和电流环同频正是因为这一点导致M法丢失了一些信息。7.总结1.经典结构的pll测速在面对阶跃信号或斜率较高的信号会产生虚假过冲如果将它作为速度环的反馈可能会引起更大的过冲以及振荡不建议使用。2.纯p结构的pll测速基本可以等效为M法测速加一阶IIR低通滤波。但是要注意这种方法不可以用于角度跟踪滤波因为存在稳态误差角度滞后。还有使用的时候kp要比较大或者说ωn不能太低否则电机加速度大会出现失锁的可能这点与低通滤波不同。3.仅引出积分项的pll测速基本可以等效为M法测速加二阶IIR低通滤波。4.M法的采样频率要尽可能的高不用担心低速时两次采样采不到脉冲增量只要配合低通滤波即可。但要注意编码器分辨率越低低速时的毛刺就越大如果加大滤波则会引入更多延迟和滞后这一点PLL也是一样的。既想要毛刺小又想要延迟滞后少那就要使用更高分辨率的编码器配合较小的滤波或者速度观测器不过这玩意也有局限性。5.虽然pll测速可以等效为M法加低通的形式并且相比M法加低通pll更容易出现失锁的情况如果ωn设置过低但有几个地方是M法加低通不可比拟的。首先它可以在测速的同时给电角度滤波。其次它可以稍加改造变成速度观测器和扰动观测器这一点后面有机会再说。参考资料https://zhuanlan.zhihu.com/p/665627084https://zhuanlan.zhihu.com/p/366750470https://github.com/odriverobotics/ODrive

相关文章:

foc进阶篇3——对比PLL测速,为M法加低通正名

foc进阶篇3——对比PLL测速,为M法加低通正名相信大部分人在刚开始接触编码器时,对电机的转速获取基本都是使用M法测速加低通滤波的方式。但随着工作学习的不断深入,会逐渐听到有人说PLL测速更好,诸如什么“pll是观测器”、“pll的…...

保姆级教学:实时手机检测-通用镜像部署与使用全流程

保姆级教学:实时手机检测-通用镜像部署与使用全流程 1. 模型简介与核心优势 1.1 模型技术背景 实时手机检测-通用模型是基于DAMOYOLO-S框架开发的高性能目标检测模型。DAMO-YOLO是一个专门为工业落地设计的目标检测框架,在保持高速推理的同时&#xf…...

从零到一:CosyVoice2语音克隆应用部署与使用全攻略

从零到一:CosyVoice2语音克隆应用部署与使用全攻略 1. 项目概述与核心价值 CosyVoice2-0.5B是阿里开源的一款零样本语音合成系统,通过预置镜像"强大的声音克隆声音合成语音克隆应用 构建by科哥",开发者可以快速搭建专业级语音克隆…...

Flash浏览器终极指南:一键解决Flash内容播放难题,免费重温经典游戏

Flash浏览器终极指南:一键解决Flash内容播放难题,免费重温经典游戏 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 还在为无法播放网页Flash内容而烦恼吗&#xff…...

Xinference-v1.17.1 GitHub协作开发:团队AI项目实战指南

Xinference-v1.17.1 GitHub协作开发:团队AI项目实战指南 1. 引言 团队开发AI项目时,版本控制和协作是个让人头疼的问题。不同成员的环境配置不同,代码修改冲突频繁,模型版本管理混乱——这些都是我们实际开发中经常遇到的痛点。…...

SDMatte Web服务稳定性测试:高并发请求下7860端口响应与错误率分析

SDMatte Web服务稳定性测试:高并发请求下7860端口响应与错误率分析 1. 测试背景与目标 SDMatte作为一款面向高质量图像抠图的AI模型,在实际生产环境中需要处理大量并发请求。本次测试旨在评估其Web服务在高并发场景下的稳定性表现,重点关注…...

搬运工还是规划者?传统仓管若不转型AI供应链规划师,注定被无人仓储淹没

在机器轰鸣的现代化仓储中心,自动引导车沿着既定路线安静穿梭,机械臂在货架间精准抓取,温湿度传感器实时监控每一个库区,大数据面板清晰呈现库存动态、物流轨迹与供需预测——这不是科幻场景,而是当下无人仓储的真实写…...

从Matlab到HunyuanVideo-Foley:学术研究中的音频信号处理与生成

从Matlab到HunyuanVideo-Foley:学术研究中的音频信号处理与生成 1. 引言:音频研究的传统与革新 在音频信号处理领域,Matlab长期以来都是学术研究的标配工具。从频谱分析到滤波器设计,从特征提取到时频变换,Matlab提供…...

写作柚助力高效论文写作之路

临近期末,很多大四学生都开始写论文了,可问题是,大学四年,学校并没有教我们怎么写论文,现在突然让写论文,写开题报告,修改论文,查重降重,写答辩PPT等等。在这毕业季&…...

ICPC竞赛中的字符串优化技巧:以香港站K题LR String为例,详解预处理与加速查询

ICPC竞赛中的字符串优化技巧:以香港站K题LR String为例,详解预处理与加速查询 在算法竞赛的战场上,字符串处理往往是决定胜负的关键分水岭。当其他选手还在为TLE(Time Limit Exceeded)焦头烂额时,掌握预处…...

Phi-4-mini-reasoning实战:分析并优化开源项目中的C++代码结构

Phi-4-mini-reasoning实战:分析并优化开源项目中的C代码结构 1. 开篇:当AI遇见C代码优化 最近在GitHub上发现一个挺有意思的中小型C项目——SimpleWebServer,它实现了一个基础的HTTP服务器功能。正好手头有Phi-4-mini-reasoning这个工具&am…...

别再死记硬背了!用Python代码复现Photoshop 27种混合模式(附完整源码)

用Python代码实现Photoshop混合模式的终极指南 在数字图像处理领域,Photoshop的混合模式就像魔术师的调色板,能够创造出令人惊叹的视觉效果。但你是否想过这些看似神秘的混合效果背后,其实是一系列精确的数学公式在起作用?本文将带…...

3个关键技巧:如何用Blender 3MF插件重塑你的3D打印工作流?

3个关键技巧:如何用Blender 3MF插件重塑你的3D打印工作流? 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 你是否曾经遇到过这样的困境&#xff1…...

2022.12四级听力真题解析:高效备考策略与实战技巧

1. 四级听力真题的价值与备考意义 2022年12月的四级听力真题是备考的黄金资料,它不仅能让你熟悉考试的真实难度和题型,还能帮助你发现自己的薄弱环节。很多同学在备考时喜欢刷各种模拟题,却忽略了真题的重要性。我见过太多考生在考场上才发现…...

C编码小技巧(代码注释,日志开启/关闭,#pragma once)

文章目录 1、代码注释2、功能模块 日志开启和关闭3、防止.h重复定义 1、代码注释 代码注释 除了//,/**/,还有 条件编译 : #if 0#endif2、功能模块 日志开启和关闭 #if 0 #define APP_ERR(format,...) do { \printf("[keys_task] erro…...

雪女-斗罗大陆-造相Z-Turbo在元宇宙中的应用:为用户虚拟化身生成个性化动漫形象

雪女-斗罗大陆-造相Z-Turbo在元宇宙中的应用:为用户虚拟化身生成个性化动漫形象 想象一下,你正准备进入一个热闹的虚拟世界,参加一场线上聚会。别人都顶着一个系统默认的、千篇一律的方块人形象,而你,却拥有一个完全根…...

Java连接Kafka示例

1、引入依赖<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka_2.12</artifactId><version>2.1.0</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/…...

Linux持久化配置GRE接口

Centos7持久化配置GRE接口GRE协议简介前置条件1.开发ipv4转发1.1启用TCP窗口缩放1.2启用自动MTU1.3禁用ipv6--可选1.4使内核配置生效2.加载内核模块3.放通防火墙方案1:ip命令临时配置GRE隧道VM1临时配置GRE接口配置邻居启动GRE隧道VM2临时配置GRE接口配置邻居启动GRE隧道关闭和…...

Qt打印报表避坑指南:如何用QPrinter设置A4纸横向/纵向并实现精准分页?

Qt报表打印实战&#xff1a;精准控制A4纸方向与分页的7个关键技巧 在开发企业级应用时&#xff0c;报表打印功能往往是刚需&#xff0c;但也是最容易出问题的环节之一。最近接手一个财务系统项目时&#xff0c;就遇到了这样的场景&#xff1a;客户要求将月度对账单导出为PDF&am…...

鸿蒙 Media Kit(媒体服务):音视频播放、录制

本文同步发表于微信公众号&#xff0c;微信搜索 程语新视界 即可关注&#xff0c;每个工作日都有文章更新 Media Kit&#xff08;媒体服务&#xff09;是鸿蒙系统中用于开发音视频播放或录制功能的核心模块。无论是开发音乐播放器、视频播放器&#xff0c;还是实现音视频录制、…...

AzurLaneAutoScript:从人工操作到智能决策的游戏自动化革命

AzurLaneAutoScript&#xff1a;从人工操作到智能决策的游戏自动化革命 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 深夜…...

Bili2text:一键将B站视频转为文字稿的终极免费工具

Bili2text&#xff1a;一键将B站视频转为文字稿的终极免费工具 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 在信息爆炸的时代&#xff0c;Bilibili&#x…...

M5146-C2234E-250BG压力传感器测量误差如何补偿

M5146-C2234E-250BG压力传感器主要有偏移误差、灵敏度误差、线性误差和延迟误差&#xff0c;合理地进行压力传感器的误差补偿是应用的核心。由于这种差异&#xff0c;必须能够最大限度地补偿M5146-C2234E-250BG压力传感器的测量误差。这是确保传感器满足设计和应用要求的重要一…...

终极Tree of Thoughts实战指南:10个复杂问题解决案例详解

终极Tree of Thoughts实战指南&#xff1a;10个复杂问题解决案例详解 【免费下载链接】tree-of-thoughts Plug in and Play Implementation of Tree of Thoughts: Deliberate Problem Solving with Large Language Models that Elevates Model Reasoning by atleast 70% 项目…...

如何用Remax快速构建跨平台小程序:React开发者的终极指南

如何用Remax快速构建跨平台小程序&#xff1a;React开发者的终极指南 【免费下载链接】remax 使用真正的 React 构建跨平台小程序 项目地址: https://gitcode.com/gh_mirrors/re/remax Remax是一个让开发者能够使用真正的React构建跨平台小程序的强大框架。通过Remax&am…...

ATCODER ABC C题解蚁

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...

终极Resemble.js图像分析指南:从基础API到高级功能详解

终极Resemble.js图像分析指南&#xff1a;从基础API到高级功能详解 【免费下载链接】Resemble.js Image analysis and comparison 项目地址: https://gitcode.com/gh_mirrors/re/Resemble.js Resemble.js是一款强大的图像分析与比较工具&#xff0c;能够帮助开发者轻松实…...

世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf贡

1. 智能软件工程的范式转移&#xff1a;从库集成到原生框架演进 在生成式人工智能&#xff08;Generative AI&#xff09;从单纯的文本生成向具备自主规划与执行能力的“代理化&#xff08;Agentic&#xff09;”系统跨越的过程中&#xff0c;.NET 生态系统正在经历一场自该平台…...

Gemma-3-12b-it部署成本优化:INT4量化后显存降低60%且精度损失<2%实测

Gemma-3-12b-it部署成本优化&#xff1a;INT4量化后显存降低60%且精度损失<2%实测 1. 引言&#xff1a;当大模型遇见成本挑战 最近在折腾Gemma-3-12b-it这个多模态模型&#xff0c;功能确实强大&#xff0c;既能理解文字又能看懂图片&#xff0c;128K的超长上下文用起来也…...

Klib入门指南:5分钟掌握C语言高性能通用库

Klib入门指南&#xff1a;5分钟掌握C语言高性能通用库 【免费下载链接】klib A standalone and lightweight C library 项目地址: https://gitcode.com/gh_mirrors/kl/klib Klib是一款轻量级且独立的C语言通用库&#xff0c;以其高效的性能和简洁的设计深受开发者喜爱。…...