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

STM32CubeMx 配置三相互补PWM + 死区时间计算

在使用STM32作为控制器去开发电机FOC的时候,往往需要配置三相互补PWM的死区时间,如何快速确认死区时间的范围和配置呢?

(1)死区的概念:

在STM32中死区时间是由 CKD[1:0] 和 DTG[7:0] 这两个寄存器共同决定,CKD其实就是由于给时钟进行二次分频的使用的。

而DTG[7:0]是用于配置死区时间的计算值。

(2)死区时间的计算:

第一步:先计算Tdts = 1/Ft

而这个Ft其实就是分频后的时钟频率。先明确你的定时器的时钟时钟输入大小,如下图所示,我的TIM1的时钟输入是170MHz,而Internal Clock Division CKD = No Division表示不分频,那么 Tdts = 1/170000000 = 5.88ns

第二步:死区范围判断

明确自己的需要配置的死区时间是否在寄存器配置的范围内,如果达不到,需要回到上一步对CKD[1:0]进行分频,下面是DTG[7:0]寄存器表示的死区范围。

用你需要配置的死区时间去除以Tdts的值,比如我需要的死区大小是1us,Tdts = 1000/5.88 = 170左右,所以我的计算值是170左右。那么就是很快速明确了使用DTG[7:5] = 10x这个选项了。

第三步:计算DT值(DT = 计算值/倍频值 - 范围值)

这个计算值就是第而步计算出来的值,计算值 = 170。我需要的倍频值是2,范围值是64。所以我需要的DT = 170 / 2 - 64 = 21。

第四步:利用计算器去计算Dead Time时间

下面使用了逻辑分析仪去抓了一下死区时间,符合配置的大小。

(3)三相互补PWM + ADC中断配置:

下面开始解析一下一些与定时器配置相关的概念,个人认为还是很重要的,只有知道这些概念才能把需要的定时器模式配置好。

3.1中心对齐模式:

Center Aligned mode1对应着下溢出中断。

Center Aligned mode2对应上溢出中断。

Center Aligned mode3对应着上下溢出中断。

3.2Repetition Counter(RCR):

更新事件延后1周期。

建议:在实际配置CubeMX的过程中要避免使用定时器的更新中断,我个人的建议是使用定时器的第四个通道是触发ADC的采样。通过调整通道4的值去调整ADC采样是在上溢出采样还是下溢出采样。

3 .3 PWM Config配置:

这个互补PWM的输出是由PWM mode和CH/CHN Polarity共同决定的。

下面的波形中黄色的为CH(高侧MOS)、橙色为CHN(低MOS输出)。

建议:在实际开发过程中,在互补PWM的输出应该配置为PWM mode 1,然后再根据自己实际的逆变器电路去调整CH Polarity、CHN Polarity。

一般情况下我们的使能的逆变器都是上下都是NMOS,即高电平导通,配置PWM时候选择PWM mode 1、CH Polarity = High CHN Polarity = High即可。

其实到这里我要表达的意思差不多表达完成的,有些东西不太好描述,不知道大家能不能理解。

(4)STM32CubeMX的配置:

下面是定时器的配置

下面是ADC的配置

HAL_ADCEx_InjectedStart_IT(&hadc1); __HAL_ADC_ENABLE_IT(&hadc1, ADC_IT_JEOC); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4); HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3); HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2); HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3); __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,0.8*5312); __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0.8*5312); __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,0.8*5312);

正常情况下,只要你的逆变器是高电压导通的都是这个配置,唯一的区别就是你需要根据的实际情况去调整一下FOC的执行频率和SVPWM控制时的ADC触发时刻。


https://zhuanlan.zhihu.com/p/572855026

https://www.bilibili.com/read/cv25671144/?opus_fallback=1

http://www.jsqmd.com/news/476608/

相关文章:

  • 一、JavaScript 获取系统时间
  • 初始Python篇(10)—— 初识 类与对象
  • HTML5的结构、概述、优势
  • 基于Zabbix 6.4与Helm 3的Kubernetes 1.28集群监控实战指南
  • OpenClaw 生成测试用例
  • 前端工程化实践:前端项目打包命名策略全解析
  • 从对接构象到稳定轨迹:氧合血红素cpdI复合物Amber/Gromacs模拟全流程解析
  • Highcharts React v4.2.1 正式发布:更自然的React开发体验,更清晰的数据处理
  • 2026年性价比轿车托运服务商深度评测与选购指南 - 2026年企业推荐榜
  • No.905 S7-200 PLC和组态王组态温度PID控制加热 S7-200 PLC和组态王...
  • 2026年郑州黄金回收店深度测评:基于检测实力与资金安全的五维对比 - 品牌推荐
  • Windows 11 VBS与eNSP兼容性冲突:从原理到实战解决启动报错40
  • SQL优化新纪元:从索引策略到查询性能的全面提升
  • 推荐一个实用的网址导航站:jiafangbb.com
  • AI人机协同从前沿选题挖掘、智能写作工程、顶刊图表可视化、到精准选刊投稿与审稿博弈策略的一站式实践
  • 离散数学实战解析:命题公式类型判定与优化方法
  • openclaw v2026.3.11正式发布:安全强化、内核优化与跨平台体验全面升级
  • 现代密码学——第一章密码学基础
  • DeepSeek 与 Gemini:从架构到场景的深度技术选型指南
  • 使用 OpenClaw 时常见问题与解决方法:从安装到接入模型、飞书等工具的完整排查指南
  • Markdown 使用技巧大全:从入门到精通,一篇就够了
  • No.363 S7-200智能控制核心在船舶电站控制系统的应用与组态王软件的研究
  • OpenClaw引爆AI执行革命:低代码的下一个十年,从“拖拽“到“自主开发“
  • OpenClaw在windows中安装
  • 浏览器语音朗读插件:让文字“活”起来的前端黑科技
  • python+selenium 实现UI自动化框架
  • 工业现场的温度控制就像给锅炉装了个“智能体温计“,S7-200 PLC配组态王的组合特别适合中小型锅炉房。咱们直接上干货,先看个PLC端的温度采集程序
  • 双向rrt树路径规划MATLAB实现 双向rrt算法的三维路径规划 加入路径平滑处理 代码有详细注释
  • ARM数据处理指令(ARM处理器指令系统——ARM指令集初学,上篇)
  • 05-RAG 核心概念与向量存储:检索增强生成原理