STM32高级定时器生成互补PWM的原理与代码实现

文章目录

  • 前言
  • 一 CubeMx配置
    • 1.1 TIM1 Mode and Configuration
    • 1.2 Paramter Settings
  • 二 程序代码
  • 三 仿真分析
  • 总结


前言

互补 PWM(Complementary PWM)是指一对逻辑状态互为反相的 PWM(脉冲宽度调制)信号。这种信号配置常见于电机控制领域,通过精确地控制桥臂上的功率晶体管(如 MOSFET 或 IGBT)的开关,来调节电机的转速和方向。

本文通过一个具体实例,详细阐述了STM32高级定时器产生互补PWM信号的原理。文章提供了生成互补PWM所需的代码实现,并利用Keil模拟器中的逻辑分析仪工具对生成的PWM信号进行了验证和分析。


一 CubeMx配置

本章将逐步引导您通过STM32CubeMX软件配置高级定时器,并在此过程中详细介绍高级定时器生成互补PWM信号的工作原理

1.1 TIM1 Mode and Configuration

(1)计数器时钟源选择:

在这里插入图片描述

  • Internal Clock(内部时钟): APB×总线时钟,具体时钟频率可见Clock Configuration配置。
  • ETR2(外部触发输入): 用于同步定时器的计数操作,可以是其他定时器输出。

这里我们选择内部时钟Internal Clock

(2)计数器通道配置

在这里插入图片描述

  • Output Compare(输出比较模式)
    在输出比较模式下,定时器的输出比较通道可以在计数值与比较值(CCRx)相等时触发电平变化。这种模式通常用于生成具有特定频率和相位差的脉冲序列,其中 ARR 值决定了脉冲的频率,而 CCRx 值决定了脉冲的相位。
    在这里插入图片描述
  • PWM Generation(PWM模式)
    在 PWM 模式下,定时器生成连续的PWM波形,其中 ARR 值决定了PWM信号的频率,CCR 值决定了信号的占空比。当定时器的计数值(CNT)小于 CCR 值时,输出高电平;当 CNT 大于 CCR 值时,输出低电平。

在这里插入图片描述

两者的区别可见博客链接:STM32单片机PWM模式和输出比较模式对比

这里我们选择PWM Generation CH1 CH1N,即互补PWM输出

(3)激活刹车输入
当刹车引脚输出有效电平时,PWM输出关闭。

在这里插入图片描述

这里我们暂且选择不激活刹车输入

1.2 Paramter Settings

(1)Counter Settings

在这里插入图片描述

  • Prescaler(预分频系数): 对定时器总线时钟进行分频,分频后的定时器的时钟频率为: f T I M = T c l k / ( p s c + 1 ) f_{TIM}=T_{clk}/(psc+1) fTIM=Tclk/(psc+1)
  • Counter Mode(计数模式):
    1. Center-aligned mode 1: 向下计数时产生比较中断
    2. Center-aligned mode 2: 向上计数时产生比较中断
    3. Center-aligned mode 3: 上下计数时产生比较中断
  • Counter Period(计数器周期): 即计数值arr,计数范围为0~65535

定时器溢出时间:
T o u t = ( a r r + 1 ) ∗ ( p s c + 1 ) / T c l k T_{out}=(arr+1)*(psc+1)/T_{clk} Tout=(arr+1)(psc+1)/Tclk (向上/向下计数模式)
T o u t = ( a r r ) ∗ ( p s c + 1 ) / T c l k T_{out}=(arr)*(psc+1)/T_{clk} Tout=(arr)(psc+1)/Tclk (中心计数模式)

  • CKD(内部时钟分频因子): 它用于进一步细分定时器的时钟频率。CKD 允许你设置时钟分频的比例,从而影响定时器的计数速度和事件触发频率。定时器最终时钟频率实际上为: f T I M = T c l k / ( ( p s c + 1 ) ∗ C K D ) f_{TIM}=T_{clk}/((psc+1)*CKD) fTIM=Tclk/((psc+1)CKD)
    1. No Division: 不分频
    2. Division by 2: 二分频
    3. Division by 4: 四分频
  • Repetition Counter(重复计数器): 当计数器发生TIMx_RCR+1次溢出事件(计数器上溢或下溢),会触发更新事件。

在这里插入图片描述

  • auto-reload-preload (自动重装载):
    1. 开启预装功能: 此时影子寄存器的数据更新必须且只能通过更新事件实现从预装寄存器到影子寄存器的数据拷贝。
    2. 关闭预装功能: 此时用户修改预装寄存器的数据后会立即被拷贝进影子寄存器【实际寄存器】。也就是说,此时我们用户操作预装寄存器就相当于访问实际影子寄存器。

我们配置定时器的预分频系数(Prescaler)为 64 - 1,并且选择内部时钟分频因子(CKD)为不分频模式。假设定时器的 APB1 总线时钟频率( T c l k T_{clk} Tclk)为64MHz,那么定时器的实际频率( f T I M f_{TIM} fTIM)计算如下: f T I M = T c l k ( P r e s c a l e r + 1 ) × C K D = 64 M H z 64 × 1 = 1 M H z f_{TIM} = \frac{T_{clk}}{(Prescaler + 1) \times CKD} = \frac{64MHz}{64 \times 1} = 1MHz fTIM=(Prescaler+1)×CKDTclk=64×164MHz=1MHz计数模式(Counter Mode)被设置为中心对齐模式 3(Center-aligned mode 3)。在这个模式下,计数器的周期(ARR)被设置为 1000。因此,定时器向上计数和向下计数的时间各为 1 ms。重复计数器(Repetition Counter)被设置为 0,表示不使用重复计数功能。

(2)Trigger Output(TRGO)Parameters

在这里插入图片描述

  • Master/Slave Mode: 在主模式下,定时器控制其他从定时器的同步操作。主定时器可以发送触发信号给连接的从定时器,从而同步启动、停止或重新同步它们的操作。在从模式下,定时器接收来自主定时器的触发信号,并根据这些信号来同步其操作。
  • Trigger Event Selection: 当定时器的定时时间到达的时候输出一个信号(如:定时器更新产生TRGO信号来触发ADC的同步转换)

这里我们选择Reset(复位事件)

(3)Break And Dead Time management - BRK Configuration

在这里插入图片描述

  • BRK State(刹车状态): 用于启用或禁用刹车功能。当刹车功能被启用时,如果检测到刹车事件(如外部引脚的触发或软件触发),定时器的输出将被立即禁用,从而实现快速停止。
  • BRK Polarity(刹车极性): 用于配置刹车输入信号的极性。根据硬件设计和应用需求,刹车输入可以配置为在高电平(High)或低电平(Low)触发。

这里我们按照默认的配置来

(4)Break And Dead Time management - Output Configuration

在这里插入图片描述

  • Dead Time(死区时间): 指的是在互补 PWM 信号中,一个输出关闭和另一个输出打开之间的时间间隔。

这里我们把死区时间设置为100,结合前文计算出的定时器实际频率 f T I M = 1 M H z f_{TIM}=1MHz fTIM=1MHz,可知死区时间为0.1ms

(5)PWM Generation Channel 1 and 1N

在这里插入图片描述

  • Mode :
    1. PWM mode1: 向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
    2. PWM mode2: 向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平(OC1REF=0),否则为无效电平(OC1REF=1)。
  • Pulse : 即寄存器CCR的值,可以控制PWM的占空比
  • CH Polarity(通道极性):
    1. High: 高电平为有效电平
    2. Low: 低电平为有效电平

要结合PWM mode理解通道极性,可参考链接PWM输出极性高低的区别以及TIM_OCMode_PWM1和TIM_OCMode_PWM2的区别

  • CHN idle State: 用于设置定时器的输出比较通道在定时器处于空闲状态时的输出状态。
    1. Set: 在定时器空闲时,输出通道输出高电平。
    2. Reset: 在定时器空闲时,输出通道输出低电平。

在定时器的 PWM 配置中,我们将比较捕获寄存器(CCR)的值设置为 500,而其他参数则保留为默认设置。结合之前为自动重载寄存器(ARR)设置的周期值为 1000 ,我们可以计算出 PWM 信号的占空比为 50%。

二 程序代码

完成CubeMx配置后,生成代码,在主函数中添加如下程序,以打开PWM输出通道和互补输出通道。

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);

三 仿真分析

使用Keil Simulator,将互补PWM输出IO口添加到Logic Analyzer中,具体步骤可参考我之前的博客:Keil的debug模式下使用simulator,用逻辑分析仪观察IO口输出波形的变换

注:开始仿真前,要确保晶振频率设置正确

在这里插入图片描述

仿真波形如下:

  1. 在中心对齐模式下,定时器的自动重载寄存器(ARR)设置为1000,这使得PWM信号的周期为2毫秒,与仿真图所示一致
    在这里插入图片描述
  2. 在定时器配置中,若计数器周期(ARR)设为1000,且死区时间设为100个定时器时钟周期,则对于1MHz的定时器频率,死区时间实际为0.1毫秒,与仿真图结果一致
    在这里插入图片描述
  3. 在中心对齐模式下,定时器的自动重载寄存器(ARR)配置为1000,捕获比较寄存器(CCR)设置为500,产生50%的PWM占空比。若仿真图显示高电平持续时间与死区时间之和为1毫秒,则与设定的周期相符,结果验证一致
    在这里插入图片描述

总结

本文通过实例深入解析了STM32高级定时器产生互补PWM信号的机制,并提供了相应的代码实现。同时,利用Keil模拟器的逻辑分析仪对PWM信号进行了验证,确保了分析的准确性

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

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

相关文章

数字人实战第三天——wav2lip部署教程

wav2lip数字人 一、wav2lip简介 Wav2Lip 是一种通过将音频与视频中的嘴唇动作同步的技术&#xff0c;旨在生成与音频内容高度匹配的口型动画。其主要应用是让视频中的人物嘴唇动作与配音或其他音频输入精确同步&#xff0c;这在电影配音、虚拟主持人、在线教学、影视后期处理等…

秋招最新大模型算法面试,熬夜都要肝完它

&#x1f4a5;大家在面试大模型LLM这个板块的时候&#xff0c;不知道面试完会不会复盘、总结&#xff0c;做笔记的习惯&#xff0c;这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助&#xff0c;都附有完整答案&#xff0c;熬夜…

CSS —— display属性

用于指定一个元素在页面中的显示方式 HTML中标签元素大体被分为三种类型&#xff1a;块元素、行内元素和行内块元素 块元素 &#xff1a;block 1.独占一行 2.水平方向&#xff0c;占满它父元素的可用空间&#xff08;宽度是父级的100%&#xff09; 3.垂直方向&#xff0c;占据的…

Idea 创建 Maven项目的时候卡死

文章目录 一、Archetype 和 Catalog1.1 Archetype&#xff08;原型&#xff09;1.2 Catalog&#xff08;目录&#xff09; 二、可能遇到的问题2.1 问题描述2.2 原因分析2.3 解决方案 参考资料 一、Archetype 和 Catalog 1.1 Archetype&#xff08;原型&#xff09; Archetype…

【自考zt】【软件工程】【21.10】

关键字&#xff1a; 软件需求基本性质、软件系统需求挑战、耦合&#xff08;高内容&#xff0c;低无直接&#xff09;、内聚&#xff08;初始化时间&#xff09;、uml包、rup边界类、测试首要目标、单元测试最后工作、性能需求 软件开发本质、软件需求规约三种风格、提炼、用…

9.7(QT.Day 1)

一、自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 要求&#xff1a;每行代码都有注释 【需要用到的图片或者动图&#xff0c;自己去网上找】 1.mywidget.h代码 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> //图…

2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)

一问题重述 1.1 问题背景 "板凳龙"&#xff0c;又称"盘龙"&#xff0c;是浙闽地区的传统地方民俗文化活动。这种独特的表演艺术形式融合了中国传统龙舞的精髓和地方特色&#xff0c;展现了人们对美好生活的向往和对传统文化的传承。 在板凳龙表演中&am…

为elementui的el-date-picker时间选择器添加快捷选项

1、效果图 2、实现方法 直接在elementui的时间选择器上修改&#xff0c;添加shorcuts选项&#xff0c;但是样式要自己修改。 有几个注意点&#xff1a; 1&#xff09;如图我是选中后有显示背景颜色的&#xff0c;也就意味着要给选中的选项添加类名&#xff0c;elementui没有…

一. 从Hive开始

1. 怎么理解Hive Hive不能理解成一个传统意义上的数据库&#xff0c;应该理解成一个解决方案。 是Hadoop在hdfs和mapreduce之后才出现的一个结构化数据处理的解决方案。 Hdfs解决了大数据的存储问题&#xff0c;mapreduce解决了数据的计算问题。 一切似乎很美好。 但是使用成本…

微信小程序页面制作——个人信息

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

探索fastFM:Python中的高效推荐系统库

文章目录 &#x1f680; 探索fastFM&#xff1a;Python中的高效推荐系统库背景&#xff1a;为何选择fastFM&#xff1f;快照&#xff1a;fastFM是什么&#xff1f;安装指南&#xff1a;如何将fastFM加入你的项目&#xff1f;快速入门&#xff1a;五个基础函数的使用实战演练&am…

【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?

目录 ✨播放一个视频的流程✨为什么要编码&#xff08;压缩&#xff09;视频数据&#xff1f;✨如何编码&#xff08;压缩&#xff09;数据&#x1f384;简单的例子&#x1f384;音视频编码方式&#x1f384;视频编码格式H264编码是什么&#xff1f;发展历程&#xff1f;H.264基…

解锁 macOS 剪贴板历史记录,高效复制、粘贴技巧

在Mac上&#xff0c;我们经常需要在不同文档之间复制和粘贴内容。然而&#xff0c;macOS自带的剪贴板只能保存最后一个复制项&#xff0c;这大大限制了我们的工作效率。幸运的是&#xff0c;一些第三方应用程序可以帮助我们查看和管理剪贴板的历史记录&#xff0c;从而提升我们…

关系的规范化与范式详解

在数据库设计中&#xff0c;关系的规范化是确保数据结构合理性、减少冗余和异常的关键步骤。如果你是一个数据库设计的初学者&#xff0c;这篇文章将为你深入浅出地讲解 关系规范化 和 范式 的核心概念&#xff0c;并通过简洁的示例帮助你加深理解。 关系的规范化&#xff1a;…

飞机制造5G智能工厂数字孪生工业物联平台,推进制造业数字化转型

飞机制造行业作为高端制造业的典范&#xff0c;正积极探索数字化转型的新路径。飞机制造5G智能工厂数字孪生工业物联平台&#xff08;以下简称“平台”&#xff09;的兴起&#xff0c;不仅为飞机制造业注入了强劲动力&#xff0c;更为整个制造业的数字化转型树立了新的标杆。 …

B: 小球反弹

目录 一&#xff1a; 二&#xff1a; 三&#xff1a; 四&#xff1a; 一&#xff1a;问题描述 有一长方形&#xff0c;长为343720 单位长度&#xff0c;宽为233333 单位长度。在其内部左上角顶点有一小球&#xff08;无视其体积&#xff09;&#xff0c;其初速度如图所示且…

Transformer预测 | 基于Transformer心率时间序列预测(tensorflow)

效果一览 基本介绍 Transformer预测 | 基于Transformer心率时间序列预测(tensorflow) 程序设计 import pandas as pd from pandas.plotting import lag_plot from statsmodels.graphics

变量数据类型 Day3

1. 变量 1.1 变量的概念 变量是计算机内存中的一块存储单元&#xff0c;是存储数据的基本单元变量的组成包括&#xff1a;数据类型、变量名、值&#xff0c;后文会具体描述变量的本质作用就是去记录数据的&#xff0c;比如说记录一个人的身高、体重、年龄&#xff0c;就需要去…

Verilog基础,原码,反码与补码的概念

Verilog模块初认识 1、Verilog模块(Module) Verilog中的module可以看成一个具有输入输出端口的黑盒子&#xff0c;该黑盒子有输入和输出接口(信号)&#xff0c;通过把输入在盒子中执行某些操作来实现某项功能。(类似于C语言中的函数) 图1 模块示意图 1.1 模块描述 图1 所示的…

2024年【防爆电气】试题及解析及防爆电气模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 防爆电气试题及解析考前必练&#xff01;安全生产模拟考试一点通每个月更新防爆电气模拟考试题库题目及答案&#xff01;多做几遍&#xff0c;其实通过防爆电气复审模拟考试很简单。 1、【单选题】()利用输送爆炸危险…