【从零开始实现stm32无刷电机FOC】【实践】【4/6 stm32高级定时器】

news2024/9/27 11:50:01

点击查看本文开源的完整FOC工程
在完成理论方面的准备后,是可以进行写代码实现了,但是stm32单片机提供了不少可以用于电机控制的硬件外设,充分利用这些硬件资源,可以减少代码量以及提高运行性能。
本文使用的stm32型号为喜闻乐见的stm32f103c8t6,这个芯片的最小系统板价格低、使用量很高,适合学习无刷电机FOC使用。本文使用最流行的stm32cube+hal库配置硬件资源。
用于FOC的硬件资源最重要的两个是:1.高级定时器。2.adc外设的高级用法。本节介绍stm32高级定时器的用法。如果需要实现电机力矩控制,那么需要使用到adc外设。
查看电机控制电路原理图,可以看到6个输入口控制了6个功率管(半桥*3)的开关,继而控制电机相线。从前文理论部分可知,FOC最终控制的是半桥的相线PWM占空比,对应上下桥PWM示意图如下:
在这里插入图片描述
从上图看到,半桥的上功率管和下功率管不能同时导通,否则功率管会由于短路流经大量电流被烧毁(电机绕组有电阻在,不算短路),因此上下两个的功率管的pwm要求互补导通。由于功率管不是理想器件,导通和关断不是瞬间完成的,有上升和跌落的时间,因此在互补状态下还要提供一个死区时间防止开关过程中的上下同时导通。
互补pwm以及死区时间的示意图如下,
在这里插入图片描述
下图是NCE6005AS的mos开关时间,从图中看出,死区时间应该至少设置为17+2.5=19.5ns。
在这里插入图片描述
stm32的高级定时器在硬件层面提供了生成互补pwm输出功能以及死区功能。下图是定时器配置为上下计数模式的pwm产生示意图,定时器当前计数值与设定的比较线(值)的比较关系控制定时器通道的输出。示意图中虽然计数值低于比较线时输出高电平,但是是否低于比较线才输出以及输出高电平还是低电平都是可以配置的。
在这里插入图片描述
将上下功率管的控制引脚分别接到单片机pwm输出通道的正通道以及互补通道,即可实现自动互补pwm输出以及自动插入死区时间。注意,有些功率管驱动器(半桥驱动器,比如ir2104)自带上下桥互补输出以及自带死区插入,这样只需pwm正通道即可控制上下桥功率管,也不必开启单片机的死区功能了。
stm32的高级定时器硬件还提供了刹车功能,意思是当某个引脚被配置为刹车引脚后,输入有效信号时会终止pwm输出。这个刹车信号的来源需要自己定义,比如有些功率管集成芯片就提供了发生异常时输出电平信号的能力,也可以通过比较电路将电机总电流超过阈值后产生一个电平信号。
下图标注的为本节要使用到的配置的和电机控制相关的定时器功能。还有几个功能也与电机控制相关,但是不在本节介绍:图中重复计数器功能与adc有关,下节再进行介绍;图中的增量(正交)编码器功能与abz编码器信号有关,以后再进行介绍。
在这里插入图片描述
为了尽量完整地展示TIM1的用法,接下来的stm32cube配置开启了pwm互补输出功能,仅供学习参考,请自行根据电路实际情况删减配置。本文实际电路选用自带互补和死区的半桥驱动器,开启的配置项更少,可前往本文开头提到的git仓库下载打开。
首先配置TIM1的模式,设置时钟源为内部时钟,设置通道为互补通道,设置刹车引脚:
在这里插入图片描述
接下来配置TIM1的参数,下图是stm32cube中关于高级定时器TIM1的参数选项解释:
在这里插入图片描述
根据选项说明,主要配置项为:

  • 为了减少谐波,配置定时器计数模式为中心对齐模式,这样pwm波的有效输出在周期内都是对称的。
  • 设置定时器计数容量为72*1000/20,也就是设置pwm频率为20KHz。
  • 设置了重复计数器以及输出事件来源,这个是下节adc采样用的,这里先不介绍。
  • 设置刹车引脚的电平以及死区时间。当配置项中的死区时间参数小于128时,实际产生的死区时间等于定时器计n个数的时间;当这个参数大于等于128时,实际产生的死区时间与定时器计n个数的时间有倍数关系。上下功率管实际所需死区时间很短,通常小于128个定时器计数时间,所以这里不用关心倍数关系。
  • 设置互补pwm输出的极性CH Polarity和CHN Polarity,注意这里指的是使功率管导通的控制引脚极性,比如上下桥都是nmos,那么都设置为High高电平。
  • 设置pwm模式为mode1,当定时器计数值小于比较线时,输出有效电平。配置为mode1时,比较线和占空比能够直观匹配上,比如代码设置比较线为20%的计数容量,那么占空比就为20%。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

从stm32cube生成代码后,在main函数的while(1)之前调用

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);

即可开启pwm输出。由于在定时器配置时设置初始比较值为0,因此此时各个通道的输出占空比为0,即没有输出。
通过调用

__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0.3*72*1000/20);

就可以设置pwm比较值,从而设置pwm的占空比,上面这个语句设置了pwm的占空比为30%。


本节对stm32高级定时器中可用于FOC控制的配置项进行了介绍,并尽量开启了TIM1的完整功能,请根据自己的电路环境以及配置项说明图进行配置项的删减,比如是否开启互补和死区功能、是否开启刹车功能、死区时间的修改等等。在本文完整的FOC工程中,由于本文的电路环境使用了自带互补和死区的半桥驱动器,没有开启互补、死区和刹车功能。
点击查看本文开源的完整FOC工程

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

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

相关文章

天环公益首发原创开发进度网站 带后台

天环公益计划首发原创开发进度网站 带后台 后台地址是:admin.php 后台没有账号密码 这个没有数据库 有能力的可以自己改 源码下载:https://download.csdn.net/download/m0_66047725/89520358 更多资源下载:关注我。

位图 、Max Sum、滑动窗口

这篇博客主要总结一下,这两天刷的算法题: 判断字符是否唯一 题目意思很简单不再解读,拿到这道题,其实不难看出哈希表可以直接秒了,注意这是一道面试题,在oj上可以哈希表秒了,如果面试官要求不使…

如何连接到公司的服务器?

1.下载FileZilla FileZilla的下载与安装以及简单使用(有图解超简单)-CSDN博客 2.打开 3.输入主机 用户名 密码 端口 注:主机支持的协议类型: 4.连接成功 其他方式也有很多,比如通过cmd,html网页等等 3个…

Apache Doris + Apache Hudi 快速搭建指南|Lakehouse 使用手册(一)

作者:SelectDB 技术团队 导读:湖仓一体(Data Lakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求。在过去多个版本中,Apache Doris…

下载动画人物

1、网址:动画 2、点击Characters 3、搜索人物 4、点击弹出的人物,弹出对话框选择USE THIS CHARACTER 5、下载 6、点击Animations,搜索walk 7、点击UPLOAD CHARACTER,看到男孩步行,选择In Place,点击下载&…

浅谈后置处理器组件提取器相关的Apply to

浅谈后置处理器组件提取器相关的Apply to 在Apache JMeter中,“提取器”(通常指的是正则表达式提取器、JSON路径提取器或CSS/JQuery提取器等)是用来从服务器响应中提取信息的重要组件。这些信息可以是cookies、session IDs、特定的文本或者任…

作业一:ER图 作业:二QQ项目思路 作业三:实现QQ的登录与注册界面

一、ER图 二、QQ项目思路:客户端功能,服务器端功能的实现 1.登录注册: 将基本信息如手机号码,验证码,还有已有的账号及账号相关信息等存入数据库中,登录方式为账号密码登录,还有忘记密码用邮箱…

023-GeoGebra中级篇-几何对象之圆锥曲线

圆锥曲线是解析几何中的重要部分,它们包括椭圆、双曲线、抛物线和圆。通过使用预先定义的变量(如数值、点和向量),我们可以动态地构建这些曲线的方程,并观察它们如何随变量的变化而变化。本文将介绍如何通过定义变量来…

TikTok 入局小游戏,小游戏出海赛道大热,开发者如何抢滩海外市场?

国内小游戏市场的竞争日益激烈,开发成本上涨、买量的投入成本飙升,对小团队和个人开发者的资金要求量高。除此以外,单款游戏从软著、备案、到认证所需要的时间和费用都大幅提升,也对小游戏市场造成重大影响。重压之下,…

旅游景区度假村展示型网站如何建设渠道品牌

景区、度假村、境外旅游几乎每天的人流量都非常高,还包括本地附近游等,对景区及度假村等固定高流量场所,品牌和客户赋能都是需要完善的,尤其是信息展示方面,旅游客户了解前往及查看信息等。 通过雨科平台建设景区度假…

[图解]分析模式-01-概述1

1 00:00:01,380 --> 00:00:01,770 好 2 00:00:02,340 --> 00:00:06,440 非常感谢大家能够来上我们 3 00:00:06,450 --> 00:00:07,960 分析模式高阶的课程 4 00:00:09,310 --> 00:00:13,440 这个内容之前在分析设计高阶 5 00:00:13,450 --> 00:00:17,840 也就…

客户反馈的智能分析:Kompas.ai如何转化用户声音为行动

客户反馈是企业改进产品和服务、提升客户满意度的重要资源。在数字化时代,如何有效收集和分析客户反馈,将其转化为实际行动,成为企业面临的挑战。Kompas.ai,一款智能客户反馈分析工具,正帮助品牌实现这一目标。 客户反…

nginx 正常访问,刷新404

问题描述: 部署完成前端服务,浏览器正常访问没有问题,但是F5刷新的时候,会提示404,丢失了资源。 解决办法: 在nginx配置中增加如下代码: try_files $uri $uri/ /index.html;

【Linux】进程间通信——命名管道和共享内存

目录 命名管道(named pipe) 命令行中使用 代码中使用 共享内存(shared memory) shmget ipcs命令 shmctl shmat/shmdt 简单通信 命名管道(named pipe) 之前我们说了匿名管道,但是匿名管道…

9717 取数对弈

首先,我们需要初始化两个数组,一个用于存储输入的数列a[],另一个用于动态规划过程中存储中间结果的二维数组dp[][]。dp[i][j]表示从数列的第i个数到第j个数时,当前玩家(甲方先手)能够获得的最大得分。 接下…

2023 N1CTF-n1canary

文章目录 参考n1canary模板类和模板函数make_unique和unique_ptrstd::unique_ptr示例: std::make_unique示例: 结合使用示例 operator->getrandom逆向源码思路exp 参考 https://nese.team/posts/n1ctf2023/ n1canary 模板类和模板函数 template &…

从汇编层看64位程序运行——栈帧(Stack Frame)入门

在《从汇编层看64位程序运行——程序中的栈(Stack)结构及其产生的历史原因》一文中,我们讲解了X86体系架构下,程序的栈结构的特点。本文将介绍另外一个非常重要的结构——栈帧。 A stack frame, often just called a ‘frame,’ is a section of the sta…

大众汽车入职SHL在线测评、英语口语、招聘笔试如何通过、考点分析|备考建议

大众汽车入职在线测验真题考点分析,通过技巧? 大众汽车集团(中国)在招聘过程中,认知能力测试是评估候选人是否适合某个职位的重要环节。候选人会收到带有线上测评链接的邮件,测评包括胜任力潜力测试(Compe…

MySQL数字相关数据处理函数

目录 1. 随机数生成 rand ( ) 2. 四舍五入 round() 3. 舍去 truncate ( ) 4. 向上/下取整 5. 空处理 ifnull( x , y ) 1. 随机数生成 rand ( ) rand ( ) 生成 0 到 1 的随机数; rand ( x ) 生成 0 到 1 的随机数…

Unity之Text组件换行\n没有实现+动态中英互换

前因:文本中的换行 \n没有换行而是打印出来了,解决方式 因为unity会默认把\n替换成\\n 面板中使用富文本这个选项啊 没有用 m_text.text m_text.text.Replace("\\n", "\n"); ###动态中英文互译 using System.Collections; using…