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.rhkb.cn/news/326225.html

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

相关文章

Docker学习(带图详细)

一、安装docker 参考官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 查看系统版本 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# [rootlocalhost ~]# uname -a Linux localhost.localdomai…

华为OD机试 - 密码输入检测(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

后端项目开发笔记

Maven打包与JDK版本不对应解决方法 我这里使用jdk8。 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configurat…

【适用全主题】WordPress原创插件:弹窗通知插件 支持内容自定义

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 适用于所有WordPress主题的弹窗插件 一款WordPress原创插件&#xff1a;弹窗通知插件 支持内容自定义 二、效果展示 1.部分代码 代码如下&#xff08;示例&#xff09;&#xff1…

BGP学习二:BGP通告原则,BGP反射器,BGP路径属性细致讲解,新手小白无负担

目录 一.AS号 二.BGP路由生成 1.network 2.import-route引入 三.BGP通告原则 1.只发布最优且有效的路由 2.从EBGP获取的路由&#xff0c;会发布给所有对等体 3.水平分割原则 4.IBGP学习BGP默认不发送给EBGP&#xff0c;但如果也从IGP学习到了这条路由&#xff0c;就发…

4. 分布式链路追踪客户端工具包Starter设计

前言 本文将从零搭建分布式链路追踪客户端工具包的Starter&#xff0c;并将在后续文章中逐步丰富支持的场景。这里首先将搭建一个最基础的Starter&#xff0c;能提供的功能和1. 看完这篇文章我奶奶都懂Opentracing了一文中的示例demo类似。 相关版本依赖如下。 opentracing-…

生成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;域名与服务器做…

vue3 自定义国际化、elementPlus 国际化

自定义国际化 1. 引入 vue-i18n 插件 pnpm install vue-i18nnext 2. 页面添加语言文件目录&#xff0c;添加自定义的语言文件 3.语言目录里添加 index.ts&#xff0c; 内容如下 import { createI18n } from "vue-i18n";// 自定义语言文件 import zhCN from "…

WordPress中插入视频的两种方法详解

最近我在建设WordPress网站的时候需要上传视频&#xff0c;我使用的是Hostease的主机安装的WordPress&#xff0c;随后在咨询了他们的技术支持后获得了一些解决方法。下面将介绍WordPress中插入视频的两种方法&#xff1a;本地上传和外部引用。 本地上传视频 使用WordPress的古…

【eclipse】如何在IDE里创建一个Java Web项目?

如何在eclipse中创建一个动态Web项目并成功运行&#xff1f; 一、 最终效果 懒得写那么多了…我也不知道该怎么写了&#xff0c;有点乱&#xff0c;有问题可以在评论里留言&#xff0c;我看到会解决的&#xff0c;在这个过程中也踩到了一些坑&#xff0c;但好在有CSDN帮助解决…

利用知识图谱提升RAG应用的准确性

文章目录 一、关于 GraphRAG二、Neo4j环境配置三、数据提取四、RAG混合检索1、非结构化数据检索器2、图谱检索器3、最终的检索器 五、定义RAG Chain 本文转载自&#xff1a;lucas大叔 : 利用知识图谱提升RAG应用的准确性 https://zhuanlan.zhihu.com/p/692595027 英文原文&…

网页版五子棋的自动化测试

目录 前言 一、主要技术 二、测试环境的准备部署 三、测试用例 四、执行测试 4.1、公共类设计 创建浏览器驱动对象 测试套件 释放驱动类 4.2、功能测试 登录页面 注册页面 游戏大厅页面 游戏房间页面 测试套件结果 4.3、界面测试 登录页面 注册页面 游戏大…

密码学《图解密码技术》 记录学习 第十五章

目录 十五章 15.1本章学习的内容 15.2 密码技术小结 15.2.1 密码学家的工具箱 15.2.2 密码与认证 15.2.3 密码技术的框架化 15.2.4 密码技术与压缩技术 15.3 虚拟货币——比特币 15.3.1 什么是比特币 15.3.2 P2P 网络 15.3.3地址 15.3.4 钱包 15.3.5 区块链 15.3.…

web安全之登录框渗透骚姿势,新思路

不管漏洞挖掘还是挖SRC&#xff0c;登录框都是重点关注对象&#xff0c;什么漏洞都有可能出现&#xff0c; 本篇文章做个总结&#xff0c;后面发现新思路后会继续更新 万能密码 or 弱口令 SQL注入 水平越权 垂直越权 逻辑漏洞 短信轰炸 邮箱轰炸 信息泄露 验证码DOS XSS万能密…

React:Router-2. createBrowserRouter函数式

参考文档&#xff1a;ReactRouter官网 前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式&#xff0c;在react-router6.4.0及以上版本&#xff0c;提供了 createBrowserRouter 函数式路由创建方式。 一、创建路由 1. 新建router.js文件&#xff0c;使用createBrow…

rac asm新增磁盘报0RA-15333或ORA-15075

虚拟化做的rac&#xff0c;发现原来加盘直接把sdb、sdc、sdd、sde加到asm里了&#xff0c;后面通过udev绑定的盘&#xff0c;增加到asm里就报错&#xff1a; [DBT-30007]Addition of disks to disk group DATA failed ORA-15032:not all alterations performed 0RA-15333: d…

迷宫中离入口最近的出口

题目链接 迷宫中离入口最近的出口 题目描述 注意点 maze[i][j] 要么是 ‘.’ &#xff0c;要么是 ‘’entrance.length 2entrance 一定是空格子出口的含义是 maze 边界上的空格子entrance格子不算出口 解答思路 广度优先遍历找到走i步时所能到达的所有节点位置&#xff0…

idea使用git不提示账号密码登录,而是输入token问题解决

idea 或者 webstream 等全家桶软件 使用git 推送代码时&#xff0c;不提示账号密码登录&#xff0c;而是输入token问题解决 你的代码仓库是gitlab 然后打开修改代码后推送时&#xff0c;会默认使用gitlab插件&#xff0c;所以提示数据token 解决方式就是把gitlab插件取消使用这…

ASP.NET MVC 如何使用 Form Authentication?

前言 .NET 的 Form Authentication 是一种基于表单的简单且灵活的身份验证机制&#xff0c;用户通过输入用户名和密码来登录应用程序&#xff0c;并且通过配置来控制用户访问权限。 在使用 Form Authentication 时&#xff0c;我们需要在 web.config 文件中配置身份验证和授权…