【从零开始实现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工程

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

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

相关文章

UDP网口(1)概述

文章目录 1.计算机网络知识在互联网中的应用2.认识FPGA实现UDP网口通信3.FPGA实现UDP网口通信的方案4.FPGA实现UDP网口文章安排5.传送门 1.计算机网络知识在互联网中的应用 以在浏览器中输入淘宝网为例,介绍数据在互联网是如何传输的。我们将要发送的数据包称作A&a…

SpringAI简单使用(本地模型+自定义知识库)

Ollama 简介 Ollama是一个开源的大型语言模型服务工具,它允许用户在本地机器上构建和运行语言模型,提供了一个简单易用的API来创建、运行和管理模型,同时还提供了丰富的预构建模型库,这些模型可以轻松地应用在多种应用场景中。O…

为 android编译 luajit库、 交叉编译

时间:20200719 本机环境:iMac2017 macOS11.4 参考: 官方的文档:Use the NDK with other build systems 写在前边:交叉编译跟普通编译类似,无非是利用特殊的编译器、链接器生成动态或静态库; make 本质上是按照 Make…

哈默纳科HarmonicDrive减速机组装注意事项

在机械行业中,精密传动设备HarmonicDrive减速机对于维持机械运作的稳定性和高效性起着至关重要的作用。然而在减速机的组装过程中,任何一个细微的错误都可能导致其运转时出现振动、异响等不良现象,严重时甚至可能影响整机的性能。因此&#x…

Python+Django+MySQL的新闻发布管理系统【附源码,运行简单】

PythonDjangoMySQL的新闻发布管理系统【附源码,运行简单】 总览 1、《新闻发布管理系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 程序主页面2.3 新闻新增界面2.4 文章编辑界面2.5 新闻详情页2.7 其他功能贴图 3、下载 总览 自己做的项目&…

Flink调优详解:案例解析(第42天)

系列文章目录 一、Flink-任务参数配置 二、Flink-SQL调优 三、阿里云Flink调优 文章目录 系列文章目录前言一、Flink-任务参数配置1.1 运行时参数1.2 优化器参数1.3 表参数 二、Flink-SQL调优2.1 mini-batch聚合2.2 两阶段聚合2.3 分桶2.4 filter去重(了解&#xf…

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总:入门与实战 前言:自从SDXL提出了长宽桶技术之后,彻底解决了不同长宽比的图像输入问题,现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…

UNiapp 微信小程序渐变不生效

开始用的一直是这个,调试一直没问题,但是重新启动就没生效,经查询这个不适合小程序使用:不适合没生效 background-image:linear-gradient(to right, #33f38d8a,#6dd5ed00); 正确使用下面这个: 生效,适合…

Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)

Python list comprehension {列表推导式 - 列表解析式 - 列表生成式} 1. Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)2. Example3. ExampleReferences Python 中的列表解析式并不是用来解决全新的问题,只是为解决已有问题提供新的语法。 列…

(10)深入理解pandas的核心数据结构:DataFrame高效数据清洗技巧

目录 前言1. DataFrame数据清洗1.1 处理缺失值(NaNs)1.1.1 数据准备1.1.2 读取数据1.1.3 查找具有 null 值或缺失值的行和列1.1.4 计算每列缺失值的总数1.1.5 删除包含 null 值或缺失值的行1.1.6 利用 .fillna() 方法用Portfolio …

Windows搭建RTMP视频流服务器

参考了一篇文章,见文末。 博客中nginx下载地址失效,附上一个有效的地址: Index of /download/ 另外,在搭建过程中,遇到的问题总结如下: 1 两个压缩包下载解压并重命名后,需要 将nginx-rtmp…

如何使用简鹿水印助手或 Photoshop 给照片添加文字

在社交媒体中,为照片添加个性化的文字已经成为了一种流行趋势。无论是添加注释、引用名言还是表达情感,文字都能够为图片增添额外的意义和风格。本篇文章将使用“简鹿水印助手”和“Adobe Photoshop”这两种工具给照片添加文字的详细步骤。 使用简鹿水印…

【python基础】组合数据类型:元组、列表、集合、映射

文章目录 一. 序列类型1. 元组类型2. 列表类型(list)2.1. 列表创建2.2 列表操作2.3. 列表元素遍历 ing元素列表求平均值删除散的倍数 二. 集合类型(set)三. 映射类型(map)1. 字典创建2. 字典操作3. 字典遍历…

【EI检索】第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)

一、会议信息 大会官网:www.mvipit.org 官方邮箱:mvipit163.com 会议出版:IEEE CPS 出版 会议检索:EI & Scopus 检索 会议地点:河北张家口 会议时间:2024 年 9 月 13 日-9 月 15 日 二、征稿主题…

【香橙派开发板测试】:在黑科技Orange Pi AIpro部署YOLOv8深度学习纤维分割检测模型

文章目录 🚀🚀🚀前言一、1️⃣ Orange Pi AIpro开发板相关介绍1.1 🎓 核心配置1.2 ✨开发板接口详情图1.3 ⭐️开箱展示 二、2️⃣配置开发板详细教程2.1 🎓 烧录镜像系统2.2 ✨配置网络2.3 ⭐️使用SSH连接主板 三、…

Web开发:图片九宫格与非九宫格动态切换效果(HTML、CSS、JavaScript)

目录 一、业务需求 二、实现思路 三、实现过程 1、基础页面 2、图片大小调整 3、图片位置调整 4、鼠标控制切换 5、添加过渡 四、完整代码 一、业务需求 默认显示基础图片; 当鼠标移入,使用九宫格效果展示图片; 当鼠标离开&#…

CTF-Web习题:[BJDCTF2020]ZJCTF,不过如此

题目链接:[BJDCTF2020]ZJCTF,不过如此 解题思路 访问靶场链接,出现的是一段php源码,接下来做一下代码审阅,发现这是一道涉及文件包含的题 主要PHP代码语义: file_get_contents($text,r); 把$text变量所…

基于NeRF的路面重建算法——RoME / EMIE-MAP / RoGS

基于NeRF的路面重建算法——RoME / EMIE-MAP / RoGS 1. RoMe1.1 Mesh Initialization / Waypoint Sampling1.2 Optimization1.3 Experiments 2. EMIE-MAP2.1 Road Surface Representation based on Explicit mesh and Implicit Encoding2.2 Optimizing Strategies2.3 Experimen…

Uniapp鸿蒙项目实战

Uniapp鸿蒙项目实战 24.7.6 Dcloud发布了uniapp兼容鸿蒙的文档:Uniapp开发鸿蒙应用 在实际使用中发现一些问题,开贴记录一下 设备准备 windows电脑准备(家庭版不行,教育版、企业版、专业版也可以,不像uniapp说的只有…

Promise 详解(原理篇)

目录 什么是 Promise 实现一个 Promise Promise 的声明 解决基本状态 添加 then 方法 解决异步实现 解决链式调用 完成 resolvePromise 函数 解决其他问题 添加 catch 方法 添加 finally 方法 添加 resolve、reject、race、all 等方法 如何验证我们的 Promise 是否…