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

news2024/12/24 3:26:01

目录

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

点击查看本文开源的完整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.coloradmin.cn/o/1931058.html

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

相关文章

which 命令在Linux中是一个快速查找可执行文件位置的工具

文章目录 0、概念1、which --help2、which命令解释 0、概念 which命令用于查找命令的可执行文件的路径which 命令在 Linux 中用于查找可执行命令的完整路径。当你在 shell 中输入一个命令时,shell 会在环境变量 $PATH 定义的目录列表中查找这个命令。which 命令可以…

数据结构——单链表详解(超详细)(2)

前言: 上一篇文章小编简单的介绍了单链表的概念和一些函数的实现,不过为了保证文章的简洁,小编把它分成了两篇来写,这一篇小编紧接上一篇文章继续写单链表函数功能的实现: 目录: 1.单链表剩余函数的编写 1.…

Spring Security Oauth2源码分析

Spring Security Oauth2源码分析 前言一:客户端OAuth2授权请求的入口1、DefaultOAuth2AuthorizationRequestResolver类OAuth2AuthorizationRequest类authorizationRequestUri 的构建机制redirectUri 3、OAuth2AuthorizationRequestRedirectFilter类 二:O…

hiphop音乐风格分类有几种 怎么使用FL Studio制作Hip Hop音乐 hiphop音乐制作教程

Hip Hop音乐是一类新潮的音乐风格,融合了许多不同的文化元素和音乐表达方式。嘻哈(hip hop)诞生于美国贫民区街头的一种文化形式,一般的说法认为它诞生于美国纽约布朗克斯。嘻哈首先在纽约市北部布朗克斯市区的非裔及拉丁裔青年之…

kali进行host碰撞实验

目录 在kali上安装docker,完成环境搭建,进行host碰撞实验 更新软件包列表 下载阿里云的镜像源 添加 GPG 密钥并添加更新源 安装 Docker 安装成功检验 开启docker 检查docker状态 拉取镜像 在kali访问ip(加端口) 下载压缩…

京东超级18活动入口!京东超级18活动怎么玩?

京东推出新活动,低价的持续性项目“京东超级18”。 活动入口: 京东超级18,领60元大额补贴! 口令直达:14:/京东超级18¥NF5fuBPWIIaHRiMr¥,↗鯨○Dσσδng。 手机京东搜索&#xf…

Claude 3.5 Sonnet模型发布,对比ChatGPT4o孰强孰弱

Anthropic 这家生而为打击 OpenAI 安全问题的公司,正式发布了Claude 3.5 Sonnet模型! 用官网的话就是: 今天,我们推出了 Claude 3.5 Sonnet,这是我们即将推出的 Claude 3.5 型号系列中的第一个版本。Claude 3.5 Sonne…

vscode 打开远程bug vscode Failed to parse remote port from server output

vscode 打开远程bug vscode Failed to parse remote port from server output 原因如图: 解决:

02 Git环境搭建

第2章:Git环境搭建 一、Git下载和安装 ​ 官网:Git (git-scm.com) 一)安装主程序 ​ 准备安装包,双击安装 ​ 开始安装 ​ 选择安装位置 ​ 选择需要安装的组件(默认) ​ 选择文件夹菜单 ​ 选择编辑器&…

Word参考文献交叉引用

前言 Word自带交叉引用功能,可在正文位置引用文档内自动编号的段落,同时创建超链接,适用于参考文献的引用。使用此方法对参考文献进行引用后,当参考文献的编号发生变化时,只需要更新域即可与正文中的引用相对应。下文…

sysbench测试CPU

版本:sysbench1.1 简介 sysbench 对 CPU 测试的原理是通过创建多个线程,并让它们执行计算密集型任务来测试 CPU 性能。它会记录每个线程执行任务所需的时间,并计算出整个测试过程的平均值、最小值和最大值,甚至输出直方图展示延迟…

SpringBoot下的定时魔法:揭秘@Scheduled注解的无限可能

在这个快节奏的时代,自动化与定时任务成为了提升效率的不二法门。而在Java的Spring Boot框架中,Scheduled注解就像是一位精通时间魔法的巫师,悄无声息地让你的应用按部就班地执行着各种定时任务。今天,就让我们一起揭开它的神秘面…

【Qt 常用控件】带你进一步了解常用控件

文章目录 1. Push Button2. Radio Button3. Check Box4. 显示类控件5. 输入类控件 QLineEdit5.1 正则表达式5.2 验证器 - 验证手机号5.3 验证两次密码是否一致5.3 明文的显示密码 1. Push Button 🐧给按钮设置图标 🐧 注意:设置快捷键需要在…

【运维资料大全】运维全套资料整理(word原件完整版)

信息安全类、运维类资料整合: 1. 等保测评模板 2. 安全检查表(IDS,Linux,数据库,Tomcat,防火墙等) 3. 服务器安全巡检表 4. 网络定向攻击风险分析表 5. 应用系统常规检测表 6. 企业漏洞管理50个…

Web开发:卡片翻转效果(HTML、CSS)

目录 一、实现效果 二、完整代码 三、实现过程 1、页面结构 2、初始样式 3、翻转效果 4、图片大小问题 一、实现效果 如下图所示,当鼠标移入某个盒子,就反转这个盒子,并显示其背面的内容——卡片翻转效果; 卡片翻转效果 二…

【HarmonyOS】HarmonyOS NEXT学习日记:二、ArkTs语法

【HarmonyOS】HarmonyOS NEXT学习日记:二、ArkTs语法 众所周知TS是JS的超集,而ArkTs则可以理解为是Ts的超集。他们的基础都基于JS,所以学习之前最好就JS基础。我的学习重点也是放在ArkTs和JS的不同点上。 文章主要跟着官方文档学习,跳过了一…

Golang | Leetcode Golang题解之第234题回文链表

题目: 题解: func reverseList(head *ListNode) *ListNode {var prev, cur *ListNode nil, headfor cur ! nil {nextTmp : cur.Nextcur.Next prevprev curcur nextTmp}return prev }func endOfFirstHalf(head *ListNode) *ListNode {fast : headslo…

多媒体软件开发选择Animate软件还是Unity3D软件?

以下内容可能有一些片面,因为多媒体软件开发平台有很多,因为接触Animate和Unity3D比较多,所以这里仅对这两款进行分析! Animate软件与Unity3D软件都是经常在多媒体展馆中用来制作互动展示内容的,对于这两种开发平台&a…

用AI生成Springboot单元测试代码太香了

你好,我是柳岸花开。 在当今软件开发过程中,单元测试已经成为保证代码质量的重要环节。然而,编写单元测试代码却常常让开发者头疼。幸运的是,随着AI技术的发展,我们可以利用AI工具来自动生成单元测试代码,极…

【系统架构设计师】十一、系统架构设计(中间件|典型应用架构)

目录 九、中间件 9.1 基础概念 9.2 中间件分类 十、典型应用架构 10.1 J2EE和四层结构 10.2 JSPServletJavaBeanDAO 10.3 .NET和J2EE之争 往期推荐 历年真题练习 九、中间件 之前总提到中间件,那么中间件到底是什么?在系统架构中又扮演者什么角…