STM32电机控制固件架构

ops/2024/9/20 6:57:50/ 标签: stm32, 电机控制, FOC

目录

一、应用程序剖析

二、面向现场的控制实现体系结构

1、参考计算循环

2、电流调节环路

3、安全回路


一、应用程序剖析

上图显示了由ST MC SDK构建的电机控制应用程序。首先,这样的应用程序是由电机控制工作台生成的软件项目,这要归功于STM32CubeMx。该软件项目由几个不同的部分组成,这些部分相互反应:

  • 这些部分中最重要的是应用程序。在这种情况下,该应用程序由ST Motor Control SDK的用户开发,它专注于最终应用程序的用途,将纯粹的电机控制方面留给ST MCSDK生成的代码。
  • UI库提供了用户在应用程序开发过程中可以从中受益的功能,以控制和调试它:它处理硬件功能,例如用于启动和停止电机的按钮,用于设置转子速度参考的电位器。更重要的是,它还提供调试功能,如电机控制协议套件,允许将电机控制应用与ST Motor Pilot工具或DAC功能连接。电机控制应用程序中是否存在 UI 库是可选的。它通常不会出现在最终应用程序中。
  • ST MCSDK固件的核心是电机控制。该库由一组组件组成,每个组件都实现了 SDK 提供的一项功能。对于其中的大多数功能,提供了几个组件来实现它的不同变体。电机控制工作台的任务之一是选择用户应用所需的正确组件。
  • 为应用程序选择的“电机控制库”组件由电机控制驾驶舱”部件使用。这部分实际上实现了电机驱动的核心算法。它将选定的组件集成在一起。电机控制驾驶舱的最后一个主要作用是充当电机和应用程序之间的主接口。
  • 应用程序和 UI 库都使用电机控制应用程序编程接口 (MC API) 来访问电机控制主控舱。MCAPI 是应用程序与系统其余部分之间的主接口。它提供了正确控制应用驱动的电机所需的所有功能。
  • 但是,有时,应用程序可能需要微调某些内部参数或获取比 MCAPI 所能提供的更详细的信息。对于这些情况,它可以使用“**MC 低级 API**”,它由电机控制应用程序的所有组件提供的接口功能组成。请参阅组件页面,了解 MC 低级 API 文档的入口点。
  • **STM32Cube 驱动程序**块表示项目中所需的 STM32 外设驱动程序 – HAL 或 LL,具体取决于用户的选择。电机控制库本身仅使用LL,硬件外设初始化可以使用HAL或LL。这些驱动程序被复制到为电机控制应用程序生成的软件项目中。

二、面向现场的控制实现体系结构

1、参考计算循环

需要应用程序设置的扭矩参考或转子速度参考作为输入。在后一种情况下,参考计算环路还执行转子速度调节。

该循环在名为“中频任务”的函数中实现,该函数在STM32 MCU的SysTick中断上执行。通常,中频任务的频率为 1 毫秒。但是,在电机控制工作台中,这可配置为低至 500 μs 和高达数毫秒的 ms。

500 μs 是电机控制工作台生成的电机控制应用程序的默认 SysTick 中断频率。而且,通常中频任务和参考计算循环每隔一个 SysTick 中断运行一次。

2、电流调节环路

电流调节环路FOC 实施的核心。

它的任务是测量流经电机相位的电流,并对其进行调节,使它们达到参考计算回路设置的参考值。为此,电流调节回路需要知道(在无传感器配置的情况下,这意味着:估计)受控电机转子的位置和速度。

电流调节环路通过克拉克和帕克变换实现了 FOC 算法的核心,即我d和我d电流调节和空间矢量脉冲宽度调制。当读取电机相电流时(它可以在ADC中断或DMA中断上),它会在中断环境中触发,并执行以下操作:

  • 读取IaIb 和 Ic 相电流
  • 计算转子的位置
  • 调节相电流,这将导致施加相电压
  • 使用占空比对PWM定时器进行编程

3、安全回路

安全循环在 SysTick 中断上运行,就像参考计算循环一样。但是,它在每次出现 SysTick 时都会运行,而后者并不总是如此。它的任务是评估许多故障条件,以确定它们是否处于活动状态。故障条件包括过流、欠压或过热条件。当检测到其中之一时,电机的运行将停止,并释放对其的任何最终控制。请参阅文档的 MC 状态机、命令和故障管理页面的故障部分。


http://www.ppmy.cn/ops/2519.html

相关文章

搭建电商网站跨境电商独立站|网上商城接口/电商数据接口详情

电商运营中,数据分析这项工作越来越重要,许多品牌方也越来越热衷去做电商数据分析。不过,全面的数据该如何获取呢,此时,电商数据接口的重要性便凸显出来了。 监控范围广: 可监控的范围包含京东、天猫、淘…

TaskWeaver使用记录

TaskWeaver使用记录 1. 基本介绍2. 总体结构与流程3. 概念细节3.1 Project3.2 Session3.3 Memory3.4 Conversation3.5 Round3.6 Post3.7 Attachment3.8 Plugin3.9 Executor 4. 代码特点5. 使用过程5.1 api调用5.2 本地模型使用5.3 添加插件 6. 存在的问题与使用体验6.1 判别模型…

vue2 的版本 使用 Ant Design Vue 1.78版本的组件库 做自定义接口 调用后端的接口上传excel文件

话不多说 上代码 <a-upload style"margin-left: 8px" :before-upload"beforeUpload" :showUploadList"false" :multiple"false" :headers"tokenHeader" ><a-button> <a-icon type"upload" /> 导…

微信小程序酒店选择日期和入住人数(有效果图)

效果图 app.vue onLaunch:function(options){this.defaultcache()}defaultcache(){// 入住信息缓存var arr this.getDateTime();var ReserVation {reservType:0,//1 人数 2日期InCheckin:{},//入离日期peopleArr:[{title:成人,num:2},{title:儿童,num:0},{title:宝子,num:1…

【设计模式】4、prototype 原型模式

四、prototype 原型模式 https://refactoringguru.cn/design-patterns/prototype 如果希望 复制对象, 可使用 “prototype 模式” 如果 “待复制的对象” 是 interface 而不是 class, 或者如果 class 有 private 变量时. 无法知道 "待复制的对象"的细节, 则需要其…

厂区3D全景线上漫游体验突破现实时空阻碍

智慧园区&#xff0c;作为现代城市发展的重要引擎&#xff0c;其管理效率和安全监控的需求日益凸显。而720VR全景展示技术的引入&#xff0c;无疑为智慧园区的建设注入了新的活力。通过360全空间无死角的视觉展示&#xff0c;用户可以身临其境地感受园区的每一个角落&#xff0…

LeetCode:200. 岛屿数量(BFS Java)

目录 200. 岛屿数量 题目描述&#xff1a; 实现代码与解析&#xff1a; BFS 原理思路&#xff1a; 200. 岛屿数量 题目描述&#xff1a; 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。…

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2

目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数&#xff08;先序遍历&#xff09;&#xff1a;Swap 函数&#xff08;中序遍历&#xff09; 不可行&#xff1a;Swap 函数&#xff08;后序遍历&#xff09;&#xff…

基于react native的android原生微信客服,微信支付以及判断是否安装微信

基于react native的android原生微信客服&#xff0c;微信支付以及判断是否安装微信 引入SDK&#xff08;Android Studio 环境下&#xff09;创建wxapi/WXPayEntryActivity.java&#xff08;用于接收微信响应返回信息&#xff09;CustomerServiceModule.javaCustomerServicePack…

2024面试软件测试,常见的面试题(上)

一、综合素质 1、自我介绍 面试官您好&#xff0c;我叫XXX&#xff0c;一直从事车载软件测试&#xff0c;负责最多的是中控方面。 以下是我的一些优势&#xff1a; 车载的测试流程我是熟练掌握的&#xff0c;且能够独立编写测试用例。 平时BUG提交会使用到Jira&#xff0c;类似…

C#系统学习汇总

一、基础篇 C#简介 C#环境 C#程序结构 C#基本语法 C#数据类型 C#类型转换 C#变量 C#常量 C#运算符 C#判断 C#循环 二、中级篇 C#方法 C#可空类型(Nullable) C#数组(Array) C#字符串(String) C#结构体(Struct) C#枚举(Enum) C#类(Class) C#继承(Inheritance)…

存储过程的使用(一)

目录 不带参数的存储过程 创建一个存储过程&#xff0c;向数据表 dept 中插入一条记录 带 IN 参数的存储过程 在存储过程中接受来自外部的数值&#xff0c;在存储过程中判断该数值是否大于零并显示 输入一个编号&#xff0c;查询数据表emp中是否有这个编号&#xff0c;如果…

【若依前后端分离】温湿度仪表盘

示例&#xff1a; 代码&#xff1a; TemperatureAndHumidity.vue组件 //温湿度仪表盘 <template><div><!-- 在这里放置你的图表组件 --><div ref"echarts" style"width: 100%; height: 400px;"></div></div> </t…

【MySQL面试题pro版-6】

MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management System&#xff0c;关系数据…

Scala 03 —— Scala Puzzle 拓展

Scala 03 —— Scala Puzzle 拓展 文章目录 Scala 03 —— Scala Puzzle 拓展一、占位符二、模式匹配的变量和常量模式三、继承 成员声明的位置结果初始化顺序分析BMember 类BConstructor 类 四、缺省初始值与重载五、Scala的集合操作和集合类型保持一致性第一部分代码解释第二…

Jmeter+Maven+jenkins+eclipse搭建自动化测试平台

背景&#xff1a; 首先用jmeter录制或者书写性能测试的脚本&#xff0c;用maven添加相关依赖&#xff0c;把性能测试的代码提交到github&#xff0c;在jenkins配置git下载性能测试的代码&#xff0c;配置运行脚本和测试报告&#xff0c;配置运行失败自动发邮件通知&#xff0c…

每日两题1

文章目录 使用最小花费爬楼梯91解码方法 使用最小花费爬楼梯 class Solution { public:int minCostClimbingStairs(vector<int>& cost) {if(cost.size() 2)return min(cost[0],cost[1]);vector<int> dp;dp.reserve(cost.size()1);dp[0] 0;dp[1] 0;for(int i…

Flume配置案例@Source:端口,Channel:内存,Sink:控制台

vim /opt/module/flume/job/port_to_console.conf ------------------------- 在nc-flume-log.conf文件中添加如下内容。 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source a1.sources.r1.type netcat a1.so…

【简单介绍下Beego框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Spring的事务传播机制有哪些

Spring的事务传播机制有哪些&#xff1f; Spring的事务传播机制用于控制在多个事务方法相互调用时事务的行为。 在复杂的业务场景中&#xff0c;多个事务方法之间的调用可能会导致事务的不一致&#xff0c;如出现数据丢失、重复提交等问题&#xff0c;使用事务传播机制可以避…