news 2026/8/20 20:00:05

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 16:29:51

4 openclaw与同类框架对比:为什么它是你的不二之选

背景/痛点在微服务架构的演进过程中,服务治理框架的选择直接影响系统的可扩展性、稳定性和开发效率。目前市面上主流的服务治理框架包括Spring Cloud、Dubbo、gRPC等,但它们在多语言支持、动态配置、流量治理等方面存在明显短板。例如:Spring…

作者头像 李华
网站建设 2026/7/14 16:29:53

人工智能混合编程实践:C++调用封装好的DLL进行PP-OCR字符识别

人工智能混合编程实践:C++调用封装好的DLL进行PP-OCR字符识别 前言 相关介绍 C++简介 ONNX简介 ONNX Runtime 简介 **核心特点** DLL 简介 **核心特点** **创建与使用** **应用场景** **优点与挑战** OCR字符识别简介 1. 核心工作原理 2. 技术演进 3. 主要应用场景 4. 当前面临…

作者头像 李华
网站建设 2026/7/14 16:29:55

hot100 链表专题

1 相交链表 先遍历两个链表,统计各自长度。 让长的链表先走diff步 再往后各走一步,直到两个链表相交,或者是走到了末尾(null)。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* …

作者头像 李华
网站建设 2026/7/14 16:30:08

Unreal Engine 4核心概念解析:GameState(游戏状态)——多人游戏的权威数据中心

掌握UE4中的GameState,深入理解多人游戏状态同步、数据管理与客户端信息共享的核心机制 引言:从游戏规则到游戏状态的转变 在之前的UE4核心概念系列中,我们已经深入探讨了GameMode(游戏模式)——游戏规则的制定者。现在,我们来到这个架构中同样重要的另一部分:GameStat…

作者头像 李华