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

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录

  • 采样时刻
  • 触发采样
  • 同步采样

点击查看本文开源的完整FOC工程
本节介绍的adc外设高级用法用于电机电流控制。
从前面几节可知,电机力矩来自于转子的q轴受磁力,而磁场强度与电流成正比,也就是说电机力矩与q轴电流成正相关,控制了q轴电流就是控制了电机力矩。从前文电流控制内容可知,q轴电流从三个相线电流计算得到,三个相线电流通过电流采样单元连接到stm32的adc接口得到。这里要注意,本文全文没有提到过dq轴电压或相线的电压,因为相线电阻会随着温度而改变,而电流才是决定磁场强度。

采样时刻

从电机控制电路来看,相线的电流采样并不是随时都适合采的。
首先看采样单元位于下桥的电路(低侧采样),当下桥关闭时,流经低侧电流采样单元的电流为0,而电机绕组是一个电感,其电流不能突变,电机相线实际是有电流存在的,因此低侧采样只能在下桥打开或者上桥关闭(互补PWM)的状态下进行,但是不要在功率管刚打开或者关闭的时刻采样,因为开关动作时电流存在波动。回顾前文推导SVPWM内容,我们使用的是七段式SVPWM,在一个PWM周期内加入了000零矢量以及111零矢量,因此不管功率管是低电平导通还是高电平导通,在一个PWM周期内总是都存在3个下桥功率管全导通的时段,只要在该时段中间进行采样即可。
在这里插入图片描述
再看采样单元位于相线的电路(在线采样),不管上下功率管是否关闭,由于采样单元位于相线,相线电感电流不能突变,因此始终有电流流过,照理说可以随时采样,但是功率管在刚打开或者关闭的时候(此时定时器计数位于比较线)电流会有波动,所以最好在定时器计数上下溢出时即pwm三角波极值点的时候采样,此时电流比较稳定。
在这里插入图片描述
总结上面分析的采样时刻示意图如下图,注意图中配置的PWM模式为Mode1,并且配置有效电平为高电平,可以查看上一节关于PWM模式和有效电平的注释。
在这里插入图片描述
电机电流的采样时刻非常重要,但是如果不了解adc外设的高级用法,你虽然知道在应该哪个时刻采样电流,就会绕一个非常大的弯子去实现在特定时刻采样(比如煞费苦心地配置定时器中断或者精心设计一个延时,想尽可能在特定时刻进行采样,等等)。
在介绍采样方式前,先放出stm32cube中的adc配置项的解释,见下图:
在这里插入图片描述

触发采样

adc可以被定时器输出事件从硬件层面上触发采样,这样就可以自动在某些时刻进行采样了。这里要使用上节未进行介绍的高级定时器的重复计数器(Repetition Counter)以及输出事件(Trigger Event Selection)。adc外部触发源可以设置为定时器的输出事件,定时器每产生一个输出事件都会触发一次adc采样。定时器输出事件来源之一是定时器更新事件,定时器计数上下溢出可以产生定时器更新事件,重复计数器控制了定时器上下溢出多少次才产生一次定时器更新事件。示意图如下:
在这里插入图片描述
对于在线采样,由于所有极值点都可以进行采样,因此重复计数器参数不管设置多少都可以,只是影响到采样频率。
对于低侧采样,由于要保证在上桥关闭或者下桥打开状态下进行采样,采样时刻要么全是上极值点要么全是下极值点,因此重复计数器必须为奇数。要注意,pwm模式1或者模式2会影响采样时刻位于上极值点还是下极值点,举个例子,pwm模式1时,当定时器计数值大于比较线时,控制上桥的pwm正通道会输出无效电平,因此需要在上极值点采样,那么定时器起始计数值应当设置为大于0,这样可以跳过第一个下极值点,并且设置重复计数器为1,这样每次adc采样都会在定时器计数值上极值点被触发。
在stm32cube中,定时器触发adc采样功能需要设置高级定时器的配置项为:
在这里插入图片描述
在这里插入图片描述
adc通道分为两种,常规通道和注入通道,注入通道就是在常规通道采样时可以插队,注入通道采样完毕后,常规通道继续其未完成的采样。在stm32中,只有注入通道才能被高级定时器TIM1的输出事件触发,因此需要配置注入通道而不是常规通道:
在这里插入图片描述

同步采样

stm32的adc有多个通道对应多个IO口,有两种方式可以采集adc多个通道,分别是采样序列和同步采样。
采样序列:
多个adc通道可以配置到采样序列中,当adc被定时器触发采样时,采样序列中的多个通道会按照序列顺序自动依次采样,整个序列采样完成后产生一个采样完成中断。但是这个采样方式的多个通道不是同时进行的,有先后顺序的,在采集电机电流时,总是希望几个相线电流能够同时被采样到,因此同步采样更加好。有些stm32的adc只有一个,只能采用采样序列方式。
同步采样:
同步采样需要多个adc,配置为主adc和从adc。当主adc被定时器触发采样时,从adc也会同时进行采样,全部adc采样完成后产生一个采样完成中断。在stm32f1中,最多可以配置双adc同步模式;在stm32f4中,可以配置三adc同步模式。
以电机电流在线采样双采样单元为例,在stm32cube中,首先打开adc1的通道0和adc2的通道1,对应电路上的两个采样单元:
在这里插入图片描述
在这里插入图片描述

配置adc1为双同步注入模式,此时adc1即为主adc:
在这里插入图片描述

配置adc2:
在这里插入图片描述
stm32cube生成代码后,在main函数的while(1)前调用

HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADCEx_Calibration_Start(&hadc2);
HAL_ADCEx_InjectedStart_IT(&hadc1);
HAL_ADCEx_InjectedStart(&hadc2);

开启双adc同步采样,配合定时器触发采样,就可以在硬件层面上实现特定时刻自动双adc同步采样。


至此,实现FOC的最重要的两个外设(定时器和adc)已经介绍完毕,你可以根据自己的电路环境,以及本文提供的stm32cube定时器和adc外设配置说明图,对配置项删减,尝试实现FOC控制。
你也可以等等再写代码,先了解一下接下来要介绍的cmsis-dsp库,因为反park变换、park变换、clark变换、pid控制器等等常用的功能,在cmsis-dsp库中都有。
点击查看本文开源的完整FOC工程

相关文章:

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知,电机力矩来自于转子的q轴受磁力,而磁场强度与电流成正比,也就是说电机力矩与q轴电流成正相关,控制了…...

springcloud接入seata管理分布式事务

下载安装包 链接: seata 配置seata-server 文件上传Linux解压 压缩包我放在/usr/local/seata中 tar -zxvf seata-server-2.0.0.tar.gz修改配置文件 设置nacos为注册和配置中心 进入文件夹 cd /usr/local/seata/seata/conf修改application.yml文件 ...... ...... cons…...

Android APP 音视频(02)MediaProjection录屏与MediaCodec编码

说明: 此MediaProjection 录屏和编码实操主要针对Android12.0系统。通过MediaProjection获取屏幕数据,将数据通过mediacodec编码输出H264码流(使用ffmpeg播放),存储到sd卡上。 1 MediaProjection录屏与编码简介 这里…...

java中log4j.properties配置文件浅析

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可按keyvalue格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。 1、配置文件 Log4J配置文件的基本格式如下: #配置根Logger log4j.roo…...

RV1126 Linux 系统,接外设,时好时坏(二)排查问题的常用命令

在 RV1126 Linux 系统中,排查外设连接问题时,可以使用多种命令来诊断和调试。以下是一些常用的命令和工具: 1. 查看系统日志 dmesg: 显示内核环形缓冲区的消息,通常包含设备初始化、驱动加载和错误等信息。 dmesg | grep <设备名或相关关键字>journalctl: 查看系统…...

鸿蒙北向开发 DevEco Studio 4.1 下载安装傻瓜式教程

开篇 由于鸿蒙处于快速发展中,鸿蒙的api快速迭代更新,老版本的DevEco studio无法支持更新版本的api,因此华为官网放弃了老版本的维护.直接从华为开发者官网无法下载老版本,当前华为开发者官网已经推出next版本了 DevEco studio3.1安装教程 上述教程提供的华为开发者官网地址已经…...

pglogical扩展的基本用法介绍

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;14 文档用途 本文翻译了pglogical扩展的官方文档,介绍了pglogical扩展的各类管理函数及使用限制,详情请看下文. 一、节点管理 节点可以使用以下…...

2024年虚拟主机转移教程

转移网站并不困难&#xff0c;但选择正确的选项和最佳程序才是关键。网站托管服务被视为当今数字世界的基石&#xff0c;全球有18 亿个网站。网站所有者可以通过下载备份、将其上传到新服务器并指向域名来手动转移网站。他们还可以通过新网站托管商的助手请求来移动网站。对于初…...

Python 函数对象和函数调用

Python 函数对象和函数调用 在 Python 中&#xff0c;函数是第一类对象&#xff08;first-class objects&#xff09;。这意味着函数可以像其他对象&#xff08;如整数、字符串、列表等&#xff09;一样被传递、赋值和操作。理解函数对象和函数调用的区别是学习 Python 的关键…...

sql注入的专项练习 sqlilabs(含代码审计)

在做题之前先复习了数据库的增删改查&#xff0c;然后自己用本地的环境&#xff0c;在自己建的库里面进行了sql语句的测试&#xff0c;主要是回顾了一下sql注入联合注入查询的语句和sql注入的一般做题步骤。 1.获取当前数据库 2.获取数据库中的表 3.获取表中的字段名 一、sql…...

淄博网站建设贵不贵

淄博网站建设的价格因各种因素而异&#xff0c;它可能会根据您对网站的需求、功能和设计复杂性等方面的要求而有所不同。虽然淄博网站建设的费用可能因需求的不同而有所变化&#xff0c;但是无论如何&#xff0c;它通常是值得的投资。 首先&#xff0c;对于个人和小型企业来说&…...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(十)-无人机A2X服务

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…...

基于迁移学习的手势分类模型训练

1、基本原理介绍 这里介绍的单指模型迁移。一般我们训练模型时&#xff0c;往往会自定义一个模型类&#xff0c;这个类中定义了神经网络的结构&#xff0c;训练时将数据集输入&#xff0c;从0开始训练&#xff1b;而迁移学习中&#xff08;单指模型迁移策略&#xff09;&#x…...

个性化音频生成GPT-SoVits部署使用和API调用

一、训练自己的音色模型步骤 1、准备好要训练的数据&#xff0c;放在Data文件夹中&#xff0c;按照文件模板中的结构进行存放数据 2、双击打开go-webui.bat文件&#xff0c;等待页面跳转 3、页面打开后&#xff0c;开始训练自己的模型 &#xff08;1&#xff09;、人声伴奏分…...

MFC列表框示例

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.示例内容 2.程序步骤 3.运行结果 4.代码全文 1.示例内容 编写一个对话框应用程序CMFC_Li6_4_学生信息Dlg&#xff0c;对话框中有一个列表框&#xff0c;当用户…...

Android TabLayout的简单用法

TabLayout 注意这里添加tab&#xff0c;使用binding.tabLayout.newTab()进行创建 private fun initTabs() {val tab binding.tabLayout.newTab()tab.text "模板库"binding.tabLayout.addTab(tab)binding.tabLayout.addOnTabSelectedListener(object : TabLayout.On…...

基于vite + pnpm monorepo 实现一个UI组件库

基于vite pnpm monorepo的vue组件库 仓库地址 思路 好多文章都是直接咔咔咔的上代码。跟着做也没问题&#xff0c;但总觉得少了些什么。下次做的时候还要找文章参考。。 需求有三个模块&#xff0c;那么就需要三个包。使用monorepo进行分包管理。 a. 组件库 b. 组件库文档…...

FDM3D打印系列——Luck13关节可动模型打印和各种材料的尝试

luck13可动关节模型FDM3D打印制作过程 大家好&#xff0c;我是阿赵。   最近我沉迷于打印一个叫做Luck13的关节超可动人偶。 首先说明一下&#xff0c;这个模型是分为了外甲和骨骼两个部分的。   为什么我会打印了这么多个呢&#xff1f; 一、第一次尝试——PLATPU 刚开始…...

windows10 获取磁盘类型

powershell Get-PhysicalDisk | Select FriendlyName, MediaType FriendlyName MediaType ------------ --------- NVMe PC SN740 NVMe WD 256GB SSD WDC WD10EZEX-75WN4A1 HDD 适用场景 SSD&#xff1a; 适合需要快速访问速度和较高响…...

数据库之运算符

目录 一、算数运算符 二、比较运算符 1.常用比较运算符 2.实现特殊功能的比较运算符 三、逻辑运算符 1.逻辑与运算符&#xff08;&&或者AND&#xff09; 2.逻辑或运算符&#xff08;||或者OR&#xff09; 3.逻辑非运算符&#xff08;&#xff01;或者NOT&#…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...