SimpleFOC核心代码,解决Id一直为正 无法控为0

        注:(我这个是用simulink仿真做的SimpleFOC,因此代码是m语言的,在stm32可以改成C的,这两种基本差不多,搭建的SimpleFOC仿真下载链接:https://download.csdn.net/download/qq_35239859/88642607?spm=1001.2014.3001.5501 

SimpleFOC核心代码如下:

function [Ta,Tb,Tc] = fcn(Uq,Ud,angle_el)Ta=0;Tb=0;Tc=0;PI_2 = pi/2;PI_3 = pi/3;voltage_power_supply=24;angle_el = mod(angle_el,2*pi);                    % U_alpha=Ud*cos(angle_el)-Uq*sin(angle_el);            % U_beta=Ud*sin(angle_el)+Uq*cos(angle_el);if UdUref=sqrt(Uq*Uq + Ud*Ud) / voltage_power_supply;angle_el = mod(angle_el+atan2(Uq,Ud),2*pi);elseUref=abs(Uq) / voltage_power_supply;if Uq>0 angle_el =mod(angle_el+PI_2,2*pi);elseangle_el =mod(angle_el-PI_2,2*pi);endendif Uref > 0.577  Uref = 0.577;endif Uref<-0.577 Uref=-0.577; enddisp(Uref);sector = floor(angle_el / PI_3) + 1;                			                        T1 = sqrt(3)*sin(sector*PI_3 - angle_el) * Uref;            T2 = sqrt(3)*sin(angle_el - (sector-1.0)*PI_3) * Uref;T0 = 1 - T1 - T2;   switch(sector) case 1Ta = T1 + T2 + T0/2;Tb = T2 + T0/2;Tc = T0/2;case 2Ta = T1 +  T0/2;Tb = T1 + T2 + T0/2;Tc = T0/2;case 3Ta = T0/2;Tb = T1 + T2 + T0/2;Tc = T2 + T0/2;case 4Ta = T0/2;Tb = T1+ T0/2;Tc = T1 + T2 + T0/2;case 5Ta = T2 + T0/2;Tb = T0/2;Tc = T1 + T2 + T0/2;case 6Ta = T1 + T2 + T0/2;Tb = T0/2;Tc = T1 + T0/2;end

         网上很多Stm32移植SimpleFOC的程序,都是做FOC开环的,所以将很多重要的东西都删了,因此要想用SimpleFOC做电流闭环,不能将网上或者视频里的代码直接移植使用,还要注意Ud和Uq电压在核心代码中是怎么处理的,也就是以下几句:

	% U_alpha=Ud*cos(angle_el)-Uq*sin(angle_el);            % U_beta=Ud*sin(angle_el)+Uq*cos(angle_el);if UdUref=sqrt(Uq*Uq + Ud*Ud) / voltage_power_supply;angle_el = mod(angle_el+atan2(Uq,Ud),2*pi);elseUref=abs(Uq) / voltage_power_supply;if Uq>0 angle_el =mod(angle_el+PI_2,2*pi);elseangle_el =mod(angle_el-PI_2,2*pi);endend

        这一部分代码,这是根据Ud和Uq算磁场方向的,网上很多教程包括P站,很多都写错了,将这部分代码写成如下方式:

    U_alpha=Ud*cos(angle_el)-Uq*sin(angle_el);            U_beta=Ud*sin(angle_el)+Uq*cos(angle_el);Uref=sqrt(U_alpha*U_alpha+ U_beta*U_beta) / voltage_power_supply;if Uq>0 angle_el =mod(angle_el+PI_2,2*pi);elseangle_el =mod(angle_el-PI_2,2*pi);

        这种方式如果你只是想用开环做FOC控制的话没有问题,如果要做Id和Iq的闭环就不行了,这种写法Ud电压无论正负都只是给Uref电压增加了幅值,做不到磁场矢量根据Uq和Ud的动态调整,因此无法将Id控成0。这也是我在做电流闭环时候,排查很久的坑,如果你也遇到了给定Ud电压正负都一样的效果,看一下程序是不是也是这样写的。

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

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

相关文章

虚幻学习笔记18—C++委托(多播)和事件

一、前言 委托分单播和多播&#xff0c;多播就是可以绑定多个回调函数&#xff0c;然后一次性执行。这样也可以理解为啥多播没有返回值&#xff0c;多个回调函数执行后返回哪一个都是问题啊。而事件呢官方官方文档说法是“对于事件而言&#xff0c;只有定义事件的类才能调用 Br…

用python编写一个对列表降序排列的方法。 定义函数des(),该函数接收一个整数列表作为参数。 在函数内部,实现降序排序。

编写一个对列表降序排列的方法。 定义函数des()&#xff0c;该函数接收一个整数列表作为参数。 在函数内部&#xff0c;实现降序排序。 然后&#xff0c;返回排序后的列表。 最后&#xff0c;在函数外部打印排序后的列表。 以下是一个使用Python编写的对列表降序排列的方法的示…

后端笔记之gin框架学习

gin框架学习 1. 使用脚手架搭建gin框架2. 应用框架3. 路由管理4.自定义中间件的使用5. 通过中间件设置路由权限校验1. 自定义校验2. 配置跨域3. 使用jwt进行tokn校验 6. 接口入参获取和绑定2. 参数校验3. protobuf 7. 集成mysql数据库1. gorm使用 1. 使用脚手架搭建gin框架 gi…

MapReduce和Yarn部署+入门

看的黑马视频记的笔记 目录 1.入门知识点 分布式计算&#xff1a; 概念&#xff1a; 两种模式&#xff1a; MapReduce&#xff08;分布式计算&#xff0c;分散汇总模式&#xff09; 概念 执行原理 注&#xff1a; Yarn&#xff08;分布式资源调度&#xff09; 概述 Y…

VS Code配置Go语言开发环境

提示&#xff1a;首先这是一个新型语言&#xff0c;最好把vscode更新到最新版。 1&#xff1a;去官网下载Go语言编译器&#xff0c;之后配置到系统环境中&#xff0c;能看到版本就行。 2&#xff1a;创建一个文件夹&#xff0c;存放go的工具文件&#xff0c;我的在D:\GoFile\G…

【数据分析之Numpy】Numpy中复制函数numpy.repeat()与numpy.tile()的使用方法及区别

一、简介 numpy.repeat()与numpy.tile()都是Numpy库中的复制函数&#xff0c;用于将数组中的元素重复指定的次数。 numpy.repeat()函数接受三个参数&#xff1a;要重复的数组、重复的次数和重复的轴。 numpy.tile()函数接受两个参数&#xff1a;要重复的数组和重复的次数。 二…

elasticsearch简单相关操作

查看索引 GET _cat/indices //获取所有的index GET account发送post不带id新建数据 POST user/_doc/ {"name":"bobby","compamy":"imooc" }如果post带id就和put一样的操作了&#xff0c; put是不允许不带id的 post _create 没有就…

【前端】vscode 相关插件

一 插件&#xff1a; 01、ESLint 用来识别并检查ECMAScript/JavaScript 代码的工具 02、Prettier 用来格式化代码&#xff0c;如.js、.vue、css等都可以进行格式化 03、Vetur 用来识别并高亮vue语法 04、EditorConfig 用来设置vscode的编程行为 二、安装依赖 01、…

干涉光学测试导论

1.用于光学测试的基本干涉仪 2。相移干涉术 3。专业光学测试 4。长波长干涉术 5。非球面试验 6。表面微观结构的测量 7。绝对测量 8。结束语 第1部分-光学测试用基本干涉仪 (1)双光束干涉 (2)菲佐干涉仪和特维曼-格林干涉仪 (3)测试平面和球面的基本技术 (4)球面的基本…

maui中实现加载更多 RefreshView跟ListView(2)

一个类似商品例表的下拉效果&#xff1a; 代码 新增个类为商品商体类 public class ProductItem{public string ImageSource { get; set; }public string ProductName { get; set; }public string Price { get; set; }}界面代码&#xff1a; <?xml version"1.0&quo…

通过费用流中的贪心来保证计数正确性:P4249剪刀石头布

https://vj.imken.moe/contest/598718#problem/K 三元环数量尽量多&#xff0c;也就是非三元环数量尽可能少。非三元环的充要条件是存在一个点度数为2&#xff0c;而每条边可以给一个点一个度数&#xff0c;然后就变成了经典网络流问题。 但是&#xff0c;对于一个点&#xf…

计算机与自动医疗检查仓:技术革新引领医疗未来

计算机与自动医疗检查仓&#xff1a;技术革新引领医疗未来 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;已经成为现代社会不可或缺的一部分。它们的应用领域日益扩展&#xff0c;从简单的日常任务到复杂…

数据结构--图

树具有灵活性&#xff0c;并且存在许多不同的树的应用&#xff0c;但是就树本身而言有一定的局限性&#xff0c;树只能表示层次关系&#xff0c;比如父子关系。而其他的比如兄弟关系只能够间接表示。 推广--- 图 图形结构中&#xff0c;数据元素之间的关系是任意的。 一、图…

基于ssm的航班订票管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对航班订票信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

【PID学习笔记10】PID公式分析

写在前面 前面已经将控制系统的基础知识点过了一遍&#xff0c;从本节开始&#xff0c;将正式学习PID控制的相关知识&#xff0c;将会从基本的PID公式概念解释&#xff0c;再基于matlab仿真介绍十几种数字式PID的基本概念。本文重点讲解PID的经典公式。 一、连续与离散的概念…

基于PaddleOCR一键搭建文字识别和身份证识别web api接口

前言 通过这篇文章【基于PaddleOCR的DBNet神经网络实现全网最快最准的身份证识别模型】开发的身份证识别模型&#xff0c;还无法进行部署应用&#xff0c;这篇文章就已经开发好的代码如何部署&#xff0c;并如何通过api的接口进行访问进行讲解。 项目部署 以windows系统为例&…

Python 爬虫之简单的爬虫(三)

爬取动态网页&#xff08;上&#xff09; 文章目录 爬取动态网页&#xff08;上&#xff09;前言一、大致内容二、基本思路三、代码编写1.引入库2.加载网页数据3.获取指定数据 总结 前言 之前的两篇写的是爬取静态网页的内容&#xff0c;比较简单。接下来呢给大家讲一下如何去…

20V升26V 600mA升压型LED驱动芯片,PWM调光芯片-AH1160

AH1160是一个功能强大的升压型LED驱动芯片&#xff0c;专为需要精确控制LED亮度的PWM调光应用而设计。它可将20V输入电压升压至26V&#xff0c;同时提供稳定的600mA电流输出&#xff0c;适用于各种LED照明设备。 芯片特点&#xff1a; 1. 输入电压范围&#xff1a;AH1160可在…

linux驱动的学习 驱动开发初识

1 设备的概念 在学习驱动和其开发之前&#xff0c;首先要知道所谓驱动&#xff0c;其对象就是设备。 1.1 主设备号&次设备号&#xff1a; 在Linux中&#xff0c;各种设备都以文件的形式存在/dev目录下&#xff0c;称为设备文件。最上层的应用程序可以打开&#xff0c;关…

uniapp获取键盘高度顶起底部输入框

核心代码&#xff1a; uni.onKeyboardHeightChange((res) > {console.log(res.height);//转化为rpxthis.KeyHight res.height;}); 全部代码&#xff1a; <template><view class"pagesone" :class"bg-themeColor.name" style"padding-t…