【从零开始实现stm32无刷电机FOC】【实践】【5/6 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/6 stm32 adc外设的高级用法】
目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知,电机力矩来自于转子的q轴受磁力,而磁场强度与电流成正比,也就是说电机力矩与q轴电流成正相关,控制了…...
2407-mysql笔记
数据库(Database),简称db mariadbmysql 常见的数据库:mysql、oracle、高斯(Gauss)、redis、sqlserver、SQLite、HBase 一、SQL(Structured Query Language):结构化查询语言 1、作用ÿ…...
如何解决隐藏游戏服务器的源IP问题
在网络游戏领域,保护服务器的源IP地址不被轻易发现是一项重要的安全措施。游戏服务器的源IP一旦暴露,可能会遭受DDoS攻击、扫描和各种形式的安全威胁。然而,对于合法的游戏运营商而言,有时需要对服务器进行维护或调试,…...
云计算数据中心(一)
目录 一、云数据中心的特征二、云数据中心网络部署(一)改进型树结构(二)递归层次结构(三)光交换网络(四)无线数据中心网络(五)软件定义网络 一、云数据中心的…...
libwebrtc.a+exosip连接fS 环境部署tips
//运行FS服务器 sudo ./freeswitch -nc -nonat //公网sudo ./freeswitch //运行客户端 sudo ./fs_cli //加载模块 load mod_av load mod_verto0.Invite交互过程 1.fs码率设置 2.用户密码改动 3.数字签名的摘要 4.FS收不到ACK 5.公网部署 6.查看frewswitch都占用哪些端口 7.日志…...
第二证券:市场估值依然处于较低区域 适合中长期布局
A股中报成绩预告显示相比2024Q1,2024Q2企业产品销量或订单已有回暖,但价格反转暂未大面积到来,“量增价平、部分板块以价换量”是2024H1 A股成绩预告较显着的量价特征,这与微观库存周期有待回暖相匹配。此外中游部分环节出现不同程…...
开始Linux之路
人生得一知己足矣,斯世当以同怀视之。——鲁迅 Linux操作系统简单操作指令 1、ls指令2、pwd命令3、cd指令4、mkdir指令(重要)5、whoami命令6、创建一个普通用户7、重新认识指令8、which指令9、alias命令10、touch指令11、rmdir指令 及 rm指令(重要)12、man指令(重要…...
leetcode-三数之和
视频:https://www.bilibili.com/video/BV1bP411c7oJ/?spm_id_from333.788&vd_sourcedd84879fcf1be72f360461b01ecab0d6 从两数之和开始,排序后的两数之和,利用好升序的性质,可以将时间复杂度从on2降到on; class Solution …...
opencv—常用函数学习_“干货“_总
同样内容将拆解为一份份,发在我个人博客中 如http://t.csdnimg.cn/icOfX(非VIP文章),整理不易、感谢你的点赞收藏 目录 一、图像文件 1. imread:读取图像文件 2. imwrite:写入图像文件 3. imshow:显示图像 4. VideoCapture:捕获视频 二、创建Mat 1、创建Mat对…...
Spring Boot项目的控制器貌似只能get不能post问题
我这2天新建了一个Spring Boot项目测试,在控制器上写了两个接口,一个是支持Get方式访问,另一个支持Post方式访问,发现Get可以,而Post不行。前端Post后,报403,找不到这个方法。 一、原因 原因是…...
最新版智能修图-中文luminar ai 1.55(13797) 和 neo1.20,支持m芯片和intel芯片(绝对可用)
一。Luminar AI for macOS 完整版本 这个程序是第一个完全由人工智能驱动的图像编辑器。有了它,创建引人注目的照片是有趣的,令人惊讶的容易。它是一个独立的照片编辑器和macOS插件。 1.1 Luminar AI for macOS 轻轻地塑造和完善一个肖像打造富有表现…...
Open3D 最小二乘法拟合点云平面
目录 一、概述 1.1最小二乘法原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2matplotlib可视化 3.3平面拟合方程 前期试读,后续会将博客加入该专栏,欢迎订阅 Open3D点云算法与点云深度学习…...
【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录
文章目录 前言一、几个关键概念1.HTTP无状态性2.Session机制3.Token认证4.JWT 二、通过手机号验证码登录1.前端短信登录界面2.发送短信接口与短信登录接口3.Vue 设置interceptors拦截器4. 服务端验证采用自定义中间件方式实现5. 操作流程及效果图如下: 三、通过第三…...
关于HBase、Phoenix、Flume、Maxwell 和 Flink
组件协同: HBase HBase 是一个分布式的、列存储的NoSQL数据库,它基于Google的Bigtable设计,特别适合存储海量的、稀疏的、非结构化或半结构化数据。HBase 提供了低延迟的随机读写能力,但其原生接口和数据模型较为复杂࿰…...
centos7停止维护,可替代的操作系统
CentOS 7 将在 2024 年 6 月 30 日停止维护。如果你目前正在使用 CentOS 7,可以考虑以下几种替代的操作系统: 1. CentOS Stream CentOS Stream 是 CentOS 项目的一个新版本,它提供了一个滚动发布的 Linux 发行版。CentOS Stream 位于 Fedor…...
andon系统在电力设备工管理中起到那些作用与价值
安灯系统,作为精益制造执行中的一个核心工具,在电力设备工厂车间管理中发挥着不可替代的作用,它能够实现生产透明管理,为工厂高效运作提供强大的支撑。本文将从安灯系统的功能、应用场景和价值三个方面,深入探讨其在电…...
消息队列-RabbitMQ
消息队列-RabbitMQ 1、RabbitMQ是什么?2、RabbitMQ的业务场景有哪些?3、RabbitMQ中有哪基本概念?4、RabbitMQ有哪些工作模式?5、如何保证RabbitMQ消息顺序性?6、RabbitMQ消息如何分发?7、RabbitMQ消息怎么路由?8、为什么会产生重复消费?如何保证消息不被重复消费(如何…...
Elasticsearch(ES)集群监控
Elasticsearch(ES)集群监控 在Elasticsearch中,监控集群的健康状况、性能和运行指标是至关重要的。以下是一些常用的Elasticsearch监控工具和API的例子: 使用Elasticsearch自带的API来获取集群健康状态、节点信息和统计信息。 # 获取集群健康状况 curl…...
图像处理:使用 OpenCV-Python 卡通化你的图像(2)
一、说明 在图像处理领域,将图像卡通化是一种新趋势。人们使用不同的应用程序将他们的图像转换为卡通图像。如今,玩弄图像是许多人的爱好。人们通常会点击图片并添加滤镜或使用不同的东西自定义图像并将其发布到社交媒体上。但我们是程序员,…...
淘宝扭蛋机小程序:旋转惊喜,开启购物新篇章!
在追求创新与惊喜的购物时代,淘宝再次引领潮流,精心打造——淘宝扭蛋机小程序,为您的购物之旅增添一抹不同寻常的色彩。这不仅仅是一个购物工具,更是一个充满趣味、互动与惊喜的宝藏盒子,等待您来探索与发现。 【旋转…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
