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

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信号进行了验证,确保了分析的准确性

相关文章:

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

文章目录 前言一 CubeMx配置1.1 TIM1 Mode and Configuration1.2 Paramter Settings 二 程序代码三 仿真分析总结 前言 互补 PWM&#xff08;Complementary PWM&#xff09;是指一对逻辑状态互为反相的 PWM&#xff08;脉冲宽度调制&#xff09;信号。这种信号配置常见于电机控…...

双指针题总结

双指针题总结 hot100移动零盛水最多的容器三数之和接雨水最小覆盖子串 hot100 移动零 题目链接&#xff1a; 283.移动零 代码&#xff1a; class Solution {public void moveZeroes(int[] nums) {int slow 0;for (int fast 0; fast < nums.length; fast ){if (nums[fas…...

[数据集][目标检测]人脸口罩佩戴目标检测数据集VOC+YOLO格式8068张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8068 标注数量(xml文件个数)&#xff1a;8068 标注数量(txt文件个数)&#xff1a;8068 标注…...

JVM3-双亲委派机制

目录 概述 作用 如何指定加载类的类加载器&#xff1f; 面试题 打破双亲委派机制 自定义类加载器 线程上下文类加载器 Osgi框架的类加载器 概述 由于Java虚拟机中有多个类加载器&#xff0c;双亲委派机制的核心是解决一个类到底由谁加载的问题 双亲委派机制&#xff…...

经典文献阅读之--DEviLOG(使用合成数据和真实世界数据的数据驱动占用网格映射基于Transformer的BEV方案量产方案)

0. 简介 在自动驾驶汽车&#xff08;AV&#xff09;的感知任务中&#xff0c;数据驱动的方法往往优于传统方法。这促使我们开发了一种基于数据的方法来从激光雷达测量中计算占用网格地图&#xff08;OGM&#xff09;。我们的方法扩展了之前的工作&#xff0c;使得估计的环境表…...

ssh之登录服务器后,自动进入目录(四十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…...

如何看待IBM中国研发部裁员?

背景&#xff1a; 近日&#xff0c;IBM中国宣布撤出在华两大研发中心&#xff0c;引发了IT行业对于跨国公司在华研发战略的广泛讨论。这一决定不仅影响了众多IT从业者的职业发展&#xff0c;也让人思考全球化背景下中国IT产业的竞争力和未来发展方向。面对这一突如其来的变化&…...

计算机毕业设计选题推荐-土地承包管理系统-Java/Python项目实战(亮点:数据可视化分析、账号锁定、智能推荐)

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

2024年高校辅导员考试题库及答案

一、判断题 121.高校学生身份权是基于高等教育的性质&#xff0c;学生应该获得的本体性权利。 答案&#xff1a;正确 122.学费占年生均教育培养成本的比例和标准由财政部制定。 答案&#xff1a;错误 123.享受国家专业奖学金的高校学生免缴学费。 答案&#xff1a;错误 124…...

使用python对股票市场进行数据挖掘的书籍资料有哪些

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…...

Python 将字典转换为 JSON

在 Python 中&#xff0c;可以使用 json 模块将字典转换为 JSON 格式的字符串。该模块提供了 json.dumps() 方法&#xff0c;用于将 Python 对象&#xff08;如字典、列表&#xff09;序列化为 JSON 字符串。 1、问题背景 用户想要将一个 Python 字典转换为 JSON 格式&#xf…...

就服务器而言,ARM架构与X86架构有什么区别?各自的优势在哪里?

一、服务器架构概述 在数字化时代&#xff0c;服务器架构至关重要。服务器是网络核心节点&#xff0c;存储、处理和提供数据与服务&#xff0c;是企业和组织信息化、数字化的关键基础设施。ARM 和 x86 架构为服务器领域两大主要架构&#xff0c;x86 架构服务器在市场占主导&…...

[论文笔记]Dimensionality Reduction by Learning an Invariant Mapping

引言 今天带来一篇真正远古(2005年)论文的笔记,论文是Dimensionality Reduction by Learning an Invariant Mapping。 该论文中提出的对比损失(2.1节)可以用于训练嵌入模型。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 降维涉及将一…...

链表算法题(下)

在链表算法题&#xff08;上&#xff09;长中我们已经学习了一系列的链表算法题&#xff0c;那么在本篇中我们将继续来学习链表的算法题&#xff0c;接下来就继续来破解链表的算法题吧&#xff01; 1.相交链表 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 通过以上…...

UE4_后期处理_后期处理材质及后期处理体积二

效果&#xff1a; 步骤&#xff1a; 1、创建后期处理材质,并设置参数。 2、回到主界面&#xff0c;找到需要发光的物体的细节面板。 渲染自定义深度通道&#xff0c;默认自定义深度模具值为10&#xff08;需要修改此值&#xff0c;此值影响物体的亮度&#xff09;。 3、添加…...

Linux系统与高效进程控制的实战技巧

Linux系统与高效进程控制的实战技巧 Linux&#xff0c;作为一种开源的Unix-like操作系统内核&#xff0c;自1991年由芬兰程序员Linus Torvalds首次发布以来&#xff0c;已成为全球范围内广泛使用的操作系统之一。其强大的功能、灵活的配置以及高度的可定制性&#xff0c;使得L…...

陈文自媒体:抖音创作者伙伴计划,你不知道的几点!

本月的2号开始&#xff0c;官方就下达了通知&#xff0c;各位西瓜创作者&#xff0c;大家要抓紧时间升级为抖音创作者伙伴计划&#xff0c;如果你不升级是吧&#xff0c;没问题&#xff0c;19号开始不发西瓜和中视频收益了。 在这个政策解读和操作过程中&#xff0c;我从同行、…...

便携式气象仪器的主要特点

TH-BQX9】便携式气象仪器&#xff0c;也称为便携式气象仪或便携式自动气象站&#xff0c;是一款高度集成、低功耗、可快速安装、便于野外监测使用的高精度自动气象观测设备。以下是关于便携式气象仪器的详细介绍&#xff1a; 主要特点 高精度与多功能&#xff1a;便携式气象仪器…...

【开源风云】从若依系列脚手架汲取编程之道(四)

&#x1f4d5;开源风云系列 &#x1f34a;本系列将从开源名将若依出发&#xff0c;探究优质开源项目脚手架汲取编程之道。 &#x1f349;从不分离版本开写到前后端分离版&#xff0c;再到微服务版本&#xff0c;乃至其中好玩的一系列增强Plus操作。 &#x1f348;希望你具备如下…...

华为 HCIP-Datacom H12-821 题库 (15)

有需要题库的可以看主页置顶 1.以下关于 OSPF 路由聚合的描述&#xff0c;错误的是哪一项&#xff1f; A、OSPF 中任意一台路由器都可以进行路由聚合的操作 B、OSPF 有两种路由聚合方式&#xff1a;ABR 聚合和ASBR 聚合 C、路由聚合是指将相同前缀的路由信息聚合一起&#xf…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...