STM32 PWM 计数器模式和对齐

STM32 PWM 计数器模式和对齐

  • 1. TIM高级定时器简介
  • 2. TIM计数模式
    • 2.1 向上计数
    • 2.2 向下计数
    • 2.3 中心对齐模式(向上/向下计数)
    • 2.4 重复计数
  • 3. PWM输出模式
    • 3.1 举例看下PWM中心对齐模式,设置参数如下:
  • 4. FOC中PWM相关设置说明
    • 4.1 Update Event 触发ADC采集
    • 4.2 Output Channel4触发ADC采集
    • 4.3 测试过程中发现的小问题
  • 5. 后记:TIM中心对齐与PWM中心对齐模式区别
    • 5.1 TIM中心对齐
    • 5.2 PWM中心对齐模式

1. TIM高级定时器简介

TIM1和TIM8高级定时器框图如下:

  • CCxI:capture/compare x interrupt,例如CC1I,表示CC1 interrupt
  • OCxREF:output compare reference,输出比较参考电平
    在这里插入图片描述

TIM中的中断如下图,除了DMA中断外,常用的几类中断:

  • BI:break interrupt 刹车中断
  • TI:Trigger interrupt 触发中断
  • COMI:COM interrupt COM中断
  • CCxI:capture/compare interrupt,捕获/比较中断
  • UI:update interrupt,更新中断
    在这里插入图片描述

2. TIM计数模式

2.1 向上计数

  • 计数器从0开始计数到自动加载值(TIMx_ARR),然后重新从0开始计数,并产生一个计数器溢出事件
  • 如果使用了重复计数器功能,在向上计数达到设置的重复计数次数(TIMx_RCR)时,产生更新时间(UEV),否则每次计数器溢出时才产生更新时间
    在这里插入图片描述

2.2 向下计数

  • 计数器从自动加载值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件
  • 如果使用了重复计数器功能,在向下计数达到设置的重复计数次数(TIMx_RCR)时,产生更新时间(UEV),否则每次计数器下溢时才产生更新时间
    在这里插入图片描述

2.3 中心对齐模式(向上/向下计数)

  • 在中心对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR)-1,产生一个计数器溢出时间,然后向下计数到1,并产生一个计数器下溢事件,然后再从0开始重新计数
  • 中心对齐模式下:不能写入TIMx_CR1中的DIR方向位。它由硬件更新并指示当前的计数方向
  • 可以在每次计数上溢和每次计数下溢时产生更新事件,对应产生UI(update interrupt)中断

在这里插入图片描述
在这里插入图片描述

2.4 重复计数

重复计数器在以下任一条件成立时递减:

  • 向上计数模式下每次计数器溢出时
  • 向下计数模式下每次计数器下溢时
  • 中心对齐模式下,每次上溢和每次下溢时

在这里插入图片描述
从上图中可以看出:对于中心对齐模式,RCR不同值的含义,此处产生UI(update interrupt)中断

  • 0: 每次上溢、下溢都会产生中断
  • 1:每次下溢时产生中断
  • 2:上溢、下溢间隔,产生中断
  • 3:每两次下溢产生中断
  • 3和重新同步:每两次下溢,或者同步时产生中断

在STM32CubeMX中设置Trigger Event为 UpdateEvent时,Repetition Counter才起作用
在这里插入图片描述

设置Trigger Event为其他模式时,Repetition Counter不起作用
在这里插入图片描述

3. PWM输出模式

PWM输出模式可以与TIM的对齐模式对应起来。
PWM模式寄存器TIMx_CR1中的CMS[1:0]:根据产生中断方式不同来区分,此处会产生CCxI(capture/compare interrupt),会影响输出比较中断触发时间点,但是不会影响PWM输出波形

  • 00: 边沿对齐模式。计数器依据方向位(DIR)向上或向下计数
  • 01:中心对齐模式1;输出比较中断标志位,向下计数时被设置
  • 10:中心对齐模式2;输出比较中断标志位,向上计数时被设置
  • 11:中心对齐模式3;输出比较中断标志位,向上计数和向下计数时被设置
    在这里插入图片描述
    对应设置的中断标志位。
    在这里插入图片描述

3.1 举例看下PWM中心对齐模式,设置参数如下:

  • ARR = 8, 自动重载寄存器,周期计数8
  • CCRx = 4,捕获/比较寄存器,计数值4
    • 不同CMS模式下,CCI触发的时间点:
      • CMS=01:中心对齐模式1,只在计数器向下计数时被设置。如图向下计数从5到4时触发CCxI
      • CMS=10:中心对齐模式2,只在计数器向上计数时被设置。如图向上计数从3到4时触发CCxI
      • CMS=11:中心对齐模式3,在计数器向上、向下计数时都会被设置。如图向上计数从3到4,向下计数从5到4时都会触发CCxI
    • 同时可以看到:计数器<CCR值时,OCxREF输出高电平,计数器>CCR值时,OCxREF输出低电平

在这里插入图片描述

  • 在极性为高时(CH polarity = High),得到如下图PWM波形。
    • 计数器Counter< CCR时,输出高电平
    • 计数器Counter> CCR时,输出低电平
      在这里插入图片描述

对应STM32CubeMX选择counter mode
在这里插入图片描述

4. FOC中PWM相关设置说明

4.1 Update Event 触发ADC采集

  1. 选择Trigger EVent Selection为:Update Event,这里用的TIM计数器Update interrupt
    在这里插入图片描述

  2. 设置Repetition Counter = 1,只在每次下溢时产生中断,每次上溢时不产生中断
    在这里插入图片描述

  3. 因为是中心对齐模式,所以Counter register从0向上计数ARR值(3500),再从ARR值(3500)向下计数到0。所以Update Event触发的时间只和ARR寄存器相关,和CCR值无关
    在这里插入图片描述

  4. 这里CCR的值,即pulse,触发的是ICxI,不会影响UI(Update interrupt)
    在这里插入图片描述

4.2 Output Channel4触发ADC采集

  1. 选择Trigger EVent Selection为:Output compare(OC4REF),这里用的PWM的ICxI 中断
    在这里插入图片描述

  2. 选择TIM1的Channel4为 PWM generation no Output
    在这里插入图片描述

  3. 设置Trigger EVent Selection为 Output compare(OC4REF)
    在这里插入图片描述

  4. 这里由CCR的值,即pulse触发中断,与ARR值,即period无关

    • 如果pulse=1,则计数Counter刚开始马上触发中断,刚好在PWM Channel N的低电平中心点
    • 如果pulse=ARR值-1,则计数Counter快到ARR值(3500)时才触发中断,刚好在PWM Channel N的高电平中心点
      在这里插入图片描述
  5. 设置PWM generation Channel4的 pulse,确定采用时间点:

  • 设置为3500-1时:PWM-Channel 1 N 高电平中心点采样。图中蓝色对应PWM-Channel 1 N ,黄色对应PC4(在ADC注入中断函数中toggle电平)
    在这里插入图片描述
  • 设置为1时: PWM-Channel 1 N 低电平中心点采样。图中蓝色对应PWM-Channel 1 N ,黄色对应PC4(在ADC注入中断函数中toggle电平)
    在这里插入图片描述

4.3 测试过程中发现的小问题

以上两种模式存在同样的问题:

PWM Channel1 N(蓝色)高电平中心点,与注入中断触发输出(黄色)始终有3us的延时,无法消除。可能原因是中断回调函数中,设置PC4电平需要花费时间

void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc)
{HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4);m0_phB = hadc->Instance->JDR1;m0_phC = hadc->Instance->JDR2;
}

请添加图片描述

请添加图片描述

5. 后记:TIM中心对齐与PWM中心对齐模式区别

两者的主要区别:

  1. 上溢、下溢触发的时间点不同
    • TIM中心对齐:上溢发生在计数器从ARR-1到ARR时,下溢发生在1到0时
    • PWM中心对齐:上溢发生在计数器从CCR-1到CCR时,下溢发生在从CCR+1到CCR时
  2. 上溢、下溢触发的中断事件不同
    • TIM中心对齐:上溢、下溢触发UI (Update interrupt)
    • PWM中心对齐:上溢、下溢触发CCxI (capture/compare interrupt)

5.1 TIM中心对齐

  • 触发时间点:ARR=0x6,(auto reload register)
    • 上溢发生在计数器从ARR-1到ARR时。如图发生在计数器从5到6时
    • 下溢发生在计数器从1到0时。如果发生在计数器从1到0时
      在这里插入图片描述
  • 触发的事件是Update event,如图UIF被置位(Update interrupt flag)
    在这里插入图片描述

5.2 PWM中心对齐模式

  • 触发时间点:ARR=0x08,(auto reload register),CCR=0x04,(capture/compare register)
    • 上溢发生在计数器从CCR-1到CCR时。如图发生在计数器从3到4时
    • 下溢发生在计数器从CCR+1到CCR时。如果发生在计数器从5到4时
      在这里插入图片描述
  • 触发的事件是CCxI,如图CCxIF被置位(capture/compare interrupt flag)
    在这里插入图片描述

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

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

相关文章

SpringBoot对接微信公众平台(1)--- 配置微信公众平台测试号URL并校检

SpringBoot对接微信公众平台&#xff08;1&#xff09;--- 配置微信公众平台测试号URL并校检 说明微信公众号接口测试号申请后端代码实现内网穿透接口测试 说明 这里记录下自己学习SpringBoot对接微信公众平台的成长过程&#xff0c;以防止后面继续踩坑且方便以后直接使用。这…

房价暴跌到头?中国楼市回调信号愈发强烈!

一、房地产市场的繁荣与萧条 在过去的几十年里&#xff0c;中国的房地产市场经历了多次繁荣与萧条的周期。自2015年第二季度起&#xff0c;全国房价开始逐渐攀升&#xff0c;这标志着新一轮房地产市场的繁荣期的开始。以深圳为例&#xff0c;新政出台后&#xff0c;这座城市的…

CSS 实现文本的渐变色

定义一个类 .text-color{/* 创建一个水平方向的颜色渐变 */background: linear-gradient(120deg, #bd34fe 30%,#5c34fe, #41d1ff);/* 将文本透明度设置为0&#xff0c;以便背景渐变可见 */color: transparent;/* 使用背景渐变来填充文本背景 */-webkit-background-clip: text;…

LeetCode 0994.腐烂的橘子:广度优先搜索(BFS)

【LetMeFly】994.腐烂的橘子&#xff1a;广度优先搜索(BFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/rotting-oranges/ 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子…

【Spring】GoF 之代理模式

一、代理模式 在 Java 程序中的代理模式的作用&#xff1a; 当一个对象需要受到保护的时候&#xff0c;可以考虑使用代理对象去完成某个行为 需要给某个对象的功能进行功能增强的时候&#xff0c;可以考虑找一个代理进行增强 A 对象无法和 B 对象直接交互时&#xff0c;也可以…

如何在 Python 中使变量不可继承

1. 问题背景 在 Python 中&#xff0c;子类可以继承父类的属性和方法。但是&#xff0c;有时我们希望子类不能继承父类的某些属性或方法。这种情况下&#xff0c;该如何做呢&#xff1f; 2. 解决方案 解决方案一&#xff1a;使用双下划线前缀 Python 中的双下划线前缀用于表…

仓库管理流程详解(附作业流程图)

仓库管理流程在企业的日常运营中至关重要。它不仅是物资流转的核心环节&#xff0c;更关乎着企业的运营效率、成本控制和客户服务水平。一个高效、规范的仓库管理流程能够确保货物从入库到出库的各个环节有序进行&#xff0c;减少资源浪费和时间成本&#xff0c;同时帮助企业实…

Hive Sampling 抽样函数

Hive Sampling 抽样函数 1.random随机抽样 2.数据块抽样 3.分桶表抽样

【静态分析】软件分析课程实验A2-常量传播和Worklist求解器

Tai-e官网&#xff1a; 概述 | Tai-e 参考&#xff1a; https://www.cnblogs.com/gonghr/p/17979609 -------------------------------------------------------- 1 作业导览 为 Java 实现常量传播算法。实现一个通用的 worklist 求解器&#xff0c;并用它来解决一些数据…

超便捷备忘录共享方法 文字文件都可共享

在这个信息爆炸的时代&#xff0c;备忘录已成为我们生活中不可或缺的小助手。它记录着我们的工作计划、待办事项、灵感闪现&#xff0c;甚至是那些温馨的家庭琐事。然而&#xff0c;当我们在不同的设备间穿梭&#xff0c;如何在手机、电脑&#xff0c;甚至是不同品牌的手机之间…

理解机器学习中的类别不平衡问题

大家好&#xff0c;实际世界的数据集通常是杂乱的,当不同类别之间的样本分布不均匀时&#xff0c;就会出现类别不平衡。或者说&#xff0c;某些类别的样本比其他类别多得多。例如&#xff0c;考虑一个信用卡违约数据集&#xff0c;信用卡违约是一个相对较少发生的事件&#xff…

速锐得深入解析吉利几何CAN总线数据通信网络的拓扑层级框架技术

在现代汽车工业中&#xff0c;车辆的电子控制单元&#xff08;ECU&#xff09;之间的通信至关重要。这种通信大多通过控制器局域网络&#xff08;CAN&#xff09;总线实现&#xff0c;它是德国BOSCH公司于20世纪80年代初开发的一种串行数据通信协议。随着技术的不断进步&#x…

读人工智能时代与人类未来笔记01_重塑人类社会秩序

1. AlphaZero 1.1. 2017年年底&#xff0c;由谷歌旗下DeepMind公司开发的人工智能程序AlphaZero击败了当时世界上最强大的国际象棋程序Stockfish 1.1.1. AlphaZero对Stockfish的百场战绩是28胜72平0负&#xff0c;可以说获得了压倒性的胜利 1.1.2. …

安卓手机数据恢复全攻略:从备份到专业软件一网打尽!

随着科技的飞速发展&#xff0c;我们的生活中越来越离不开手机。然而&#xff0c;在使用手机的过程中&#xff0c;我们可能会遇到数据丢失的问题。对于安卓手机用户来说&#xff0c;如何有效地恢复丢失的数据是一个值得探讨的问题。本文将为您介绍安卓手机数据恢复的全攻略&…

西部首个全域直播基地,打造西部直播基地领军形象

天府锋巢直播产业基地作为西部直播产业的领军者&#xff0c;以其前瞻性的战略布局和卓越的服务体系&#xff0c;正加速推动全域直播的快速发展&#xff0c;助力直播产业实现新升级。该基地作为成都规模最大的直播基地&#xff0c;以加快全域直播为核心目标&#xff0c;通过促进…

利用香港多IP服务器优化网站访问速度的关键策略?

利用香港多IP服务器优化网站访问速度的关键策略? 随着数字化时代的不断发展&#xff0c;网站的全球访问速度成为企业吸引用户、提升竞争力的重要因素。特别对于跨国企业而言&#xff0c;如何确保全球用户都能享受到稳定快速的访问体验显得尤为重要。在这一背景下&#xff0c;…

生成ssl证书并配置到nginx

生成ssl证书并配置到nginx 安装证书生成工具 apt-get update apt install software-properties-common add-apt-repository ppa:certbot/certbot apt-get update apt-get install certbot python3-certbot-nginx生成证书 首先在新网上创建一个A链接&#xff0c;域名与服务器做…

考研OSchap4文件管理chap5磁盘管理(部分)

目录 一、整体认知 1.文件的定义 250 2.文件的属性 251 3.文件内部应该如何被组织(逻辑结构) 256 4.文件之间应该如何被组织起来(目录结构) 252 5.OS应该向上提供哪些功能 253 6.文件应该如何存放在外存中(物理结构) 258 7.OS如何管理外存中的空闲块(存储空间的管理) 25…

牛客Java面试题【面试】

牛客Java面试题【面试】 前言推荐牛客Java面试题【面试】第2章 Java笔面试高频考点&解题技巧1. Java基础[2.1 一、java-基础-1](https://www.nowcoder.com/study/live/689/2/1)1.1 为什么Java代码可以实现一次编写、到处运行&#xff1f;1.2 一个Java文件里可以有多个类吗&…

有必要买超声波洗眼镜机吗?力荐四款实力超群超声波清洗机

在日常生活中&#xff0c;眼镜不仅仅是我们视野的延展&#xff0c;像太阳眼镜&#xff0c;也是有着独特的作用。但是&#xff0c;在每天的使用过程中&#xff0c;眼镜片表面难免会有灰尘&#xff0c;污迹&#xff0c;甚至油渍&#xff0c;这些都会对镜片的材质产生一定的损伤&a…