STM32F4的输出比较极性和PWM1,PWM2的关系

news2024/10/7 3:21:22

PWM

在这里插入图片描述

输出比较通道

在这里以通用定时器的通道1作为介绍。
如图,左边就是CNT计数器和CCR1第一路的捕获/比较寄存器,它俩进行比较,当CNT>CCR1,
或者CNT=CCR1时,就会给输出模式控制器传送一个信号,然后输出模式控制器就会改变它的
输出OC1ref的高低电平(这里ref是referencel的缩写,意思是参考信号)。
上面还有个ETRF输入,这个是定时器的一个小功能,一般不用。
接着这个ref信号有两条路可以走,一路可以前往主模式控制器,把这个ref信号映射到主模式的
TRGO输出上去。而另一路先到达极性选择模块,由寄存器TIMx_CCER控制,给TIMx_CCER的
CC1P写0,信号往上走,输入信号不反相;写1,信号就会往下走,信号会通过一个非门取反,

那输出的信号就是输入信号高低电平反转的信号。
接着就是输出使能电路,选择要不要输出,由寄存器TIMx_CCER的CC1E控制。
最后就是0C1引脚,这个引脚就是CH1通道的引脚。
在这里插入图片描述

输出比较模式

输出比较模式的选择是通过改变输出模式控制器的执行逻辑实现的,由寄存器TIMx_CCMR1的OC1M控制。
在这里插入图片描述
输出比较模式总共有8种,我们这里只介绍最常用的PWM模式。PWM输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器ARR的值决定,占空比由比较寄存器CCR的值决定。PWM模式分为两种,PWM1和PWM2,总得来说是差不多的。
在这里插入图片描述
配置好了时基单元,CNT就开始不断地自增运行了。然后就是输出比较单元,总共有四路。输出比较单元的最开始是CCR,它的值由我们自己设定,CNT不断自增运行,同时与CCR进行比较。后面就是输出模式控制器,以PWM模式1向上计数为例,CNT小于CCR时,REF置有效电平,CNT大于等于CCR时,REF置无效电平。再经过极性选择,使能输出,最终通向GPIO口,输出波形。

PWM波的实现:

如上图右上角所示,CNT从O开始自增,一直增到ARR(这里值为99),之后清零继续自增。设定下面绿色线为输出状态,在这个过程中,CNT小于CCR(这里值为30),输出置高电平,反之,置低电平。这样一直持续下去,REF的电平就会不断变化,

PWM参数计算:

1.PWM频率:Freq=CK_PSC/(PSC+1)/(ARR+1)
2.PWM占空比:Duty=CCR/(ARR+1)
3.PWM分辨率:Reso=1/(ARR+1)
PWM的周期对应着计数器的溢出更新周期,所以PWM的频率就等于计数器的更新频率。
分辨率就是占空比变化的步距。CCR的值应该设置在O到ARR+1这个范围里,当CCR=ARR+1
时,占空比刚好为100%。如果CCR再大一些,占空比依然为100%,没有意义。所以CCR的变化范围取决于ARR的值,ARR越大,CCR的范围就越大,对应的分辨率就越大。对于同一个定时器的不同通道输出的PWM,因为不同通道是共用一个计数器的,所以它们的频率是一样的。而它们的占空比是由各自的CC决定的,所以占空比可以各自设定它们的相位,由于计数器更新,所有PWM同时跳变,所以它们的相位是同步的.

区别

PWM1中空控制的是高电平的占空比,外接LED的时候灯光是随着TIMx_SetComparex()函数中占空比的增大由最亮逐渐变最暗,当达到100%的占空比的时候最暗。

PWM2中空控制的是低电平的占空比,外接LED的时候灯光是随着TIMx_SetComparex()函数中占空比的增大由最暗逐渐变最亮,当达到100%的占空比的时候最亮
在这里插入图片描述

输出极性

PWM模式1-*在向上计数时,*一旦TIMx_CNT<TIMx_CCR1时,通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时,通道Q1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
PWM模式2-*在向上计数时,一旦TIMx_CNT<TIMx_CCR1时,通道1为无效电平,*否则为有效电平;在向下计数时,一旦TIMx CNT>TIMx CCR1时,通道1为有效电平,否则为无效电平
输出比较极性,指的是你在比较匹配之后输出口(比如LED灯)输出的极性。
就是让你设置LED灯有效极性,你可以设置为高电平有效或者低电平有效
理解后,正题开始:
首先只看向上计数,别的都不看。
再看下面的图:
在这里插入图片描述
根据上面的图举例,正点原子板子上的LED灯一股都是低电平有效,而我们想达到的效果是随着占空比的增加(向上计数模式),灯的亮
度增加(低电平)。
根据上面的图,能实现的方式有两种:
1.低极性,PWM1
2.高极性,PWM2
如果我们自己画的板子,硬件LED设计是高电平有效,那么就是随着占空比的增加(向上计数模式),灯的亮度增加(高电平)。
根据上面的图,能实现的方式有两种:
1.高极性,PM12.低极性,PWM2

输出极性

http://www.openedv.com/forum.php?mod=viewthread&tid=285008&highlight=%CA%E4%B3%F6%BC%AB%D0%D4

定义:TIM_OCNPolarity_High为高极性
TIM_OCNPolarity_Low为低极性
在这里插入图片描述
110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为
无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否
则为有效电平(OC1REF=1)。
111:PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为
有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电

首先要先理解好这一句话:
当PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时
通道1为无效电平,否则为有效电平;
TIM_SetCompare2(TIM3,0);
1)为什么在高极性时,灯会灭呢
因为TIMx_CNT<TIMx_CCR1,通道1为无效电平
战舰板的LED是低电平亮,而TIM_SetCompare2(TIM3,0);即TIMx_CCR1的值为0,也就是TIMx_CCR1
<=TIM3_CNT时通道2输出是高电平
不符合LED灯低电平亮,LED灯是不亮的。
2)那么把高极性改为低极性,为什么灯会亮
如TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
因为CC1P=0时:OC1高电平有效 TIM_OCNPolarity_High
CC1P=1时:OC1低电平有效 TIM_OCNPolarity_Low
在这里插入图片描述
由于低极性输出的是低电平有效所以灯可以点亮
3)为什么把PWM2改成了PWM1,别的什么都没动,灯就亮了
“PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平”
4)考虑到设置CCR的值设置为300到500效果不是很明显
所以CCR取0和899,可以直接看出效果现象

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

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

相关文章

基于TextCNN、LSTM与Transformer模型的疫情微博情绪分类

基于TextCNN、LSTM与Transformer模型的疫情微博情绪分类 任务概述 微博情绪分类任务旨在识别微博中蕴含的情绪&#xff0c;输入是一条微博&#xff0c;输出是该微博所蕴含的情绪类别。在本次任务中&#xff0c;我们将微博按照其蕴含的情绪分为以下六个类别之一&#xff1a;积…

Docker部署nacos2.1版本集群

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服…

spring发送qq邮件 + 模板引擎

文章目录 学习链接邮箱配置开启qq邮箱服务相关配置文件 freemarker模板引擎引入依赖配置freemarker编写模板registerTpl.ftl 发送带内嵌图片的邮件 附件效果 学习链接 java邮件发送 Java实现邮件发送 springboot发送QQ邮件&#xff08;最简单方式&#xff09; 刘java-Java使用…

css - 盒子水平垂直居中的几种方式

前端盒子水平垂直居中的几种方式 实现效果图如下&#xff1a; 首先是父元素的基本样式&#xff1a; .container {width: 600px;height: 600px;border: 1px solid red;background-color: antiquewhite;margin: 0 auto;/* 父盒子开启相对定位 */position: relative;}1&#xf…

【Linux】Linux入门学习之常用命令三

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

Python每日一练(20230511) 跳跃游戏 I\II\III\IV

目录 1. 跳跃游戏 Jump Game I 2. 跳跃游戏 Jump Game II 3. 跳跃游戏 Jump Game III 4. 跳跃游戏 Jump Game IV &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 跳跃游戏 Jump Game …

操作符知识点大全(简洁,全面,含使用场景,演示,代码)

目录 一.算术操作符 1.要点&#xff1a; 二.负数原码&#xff0c;反码&#xff0c;补码的互推 1.按位取反操作符&#xff1a;~&#xff08;二进制位&#xff09; 2.原反补互推演示 三.进制位的表示 1.不同进制位的特征&#xff1a; 2.二进制位表示 3.整型的二进制表…

如何利用python实现灰色关联分析?

1.灰色关联分析简介 灰色系统这个概念是相对于白色系统和黑色系统而言的。从控制论的知识里&#xff0c;颜色一般代表对于一个系统我们已知信息的多少&#xff0c;白色代表信息量充足&#xff0c;黑色代表我们其中的构造并不清楚的系统&#xff0c;而灰色介于两者之间&#xf…

WhatsApp如何让客户参与变得更简单?

WhatsApp对你的品牌来说可能和Twitter和Facebook一样重要&#xff0c;你可能已经把它们纳入你的社交媒体战略。 是的&#xff0c;WhatsApp不仅仅可以用来给同事发短信或与远方的亲戚视频聊天&#xff0c;它也适用于商业。 在发展WhatsApp业务时&#xff0c;小企业主得到了最优…

K8s基础9——服务发现Coredns、Ingress Controller多种暴露方式、TLS+DaemonSet、Headless Services

文章目录 一、服务发现机制1.1 环境变量注入1.2 DNS解析 二、Ingress4.1 部署Ingress controller4.2 暴露Ingress Controller4.2.1 SVC NodePort方式4.2.2 共享宿主机网络方式 4.3 默认后端4.4 同域名不同URL转不同服务4.5 不同域名转不同服务4.6 使用https4.6.1 安装cfssl4.6.…

如何用 Serverless 一键部署 Stable Diffusion?

作者 | 寒斜&#xff08;阿里云智能技术专家&#xff09; 思路 其实很简单&#xff0c; 我们只需要将镜像里面的动态路径映射到 NAS文件存储里面即可&#xff0c;利用 NAS 独立存储文件模型&#xff0c;扩展&#xff0c;语言包等&#xff0c;并且我们可以为管理 NAS 单独配置…

使用Python和Django构建一个全功能的在线医疗问诊平台

在线医疗问诊平台应运而生&#xff0c;为患者和医生之间提供了一个便捷的交流平台。本文将介绍如何使用Python和Django构建一个全功能的在线医疗问诊平台。 功能 在我们的平台上&#xff0c;患者可以注册账户、查询医生、预约诊断、支付费用并与医生沟通。医生可以创建个人档…

【.NET CORE】使用Rotativa.AspNetCore将网页转换为PDF

插件功能&#xff1a;将在线网页转换为PDF显示&#xff0c;文件保存 组件配置&#xff1a; 1、在NuGet管理中搜索Rotativa.AspNetCore并安装稳定版&#xff0c;项目github地址&#xff1a;GitHub - webgio/Rotativa.AspNetCore: Rotativa for Asp.Net Core 2、github下载项目…

Docker安装部署MySQL

1、拉取镜像 docker pull mysql:8.0 2、查看镜像 docker images 3、创建文件夹 mkdir ~/mysql cd mysql/ 4、创建并启动MySQL容器 docker run -id \ > -p 3306:3306 \ > --namec_mysql \ > -v $PWD/conf:/etc/mysql/conf.d \ > -v $PWD/logs:/logs \ > -…

Vue Emelent-UI表格合并行或列rowspan和colspan的作用

Vue Element-UI的table组件支持合并行或者列&#xff0c;在这里做个简单的学习笔记。 我们可以通过rowspan和colspan来进行单元格合并&#xff0c;那么这两个属性是什么意思呢&#xff0c;通过官方给的demo来探讨下。 上述单元格将行index为奇数的第一列和第二列合并为一个单…

python dict 取值方法

在日常工作中&#xff0c;我们经常会遇到需要将一些数据转换为 dict格式的情况。比如&#xff1a; 1、想要将多个数组按照某种规则进行排列&#xff0c;形成有序的数据表&#xff0c;这时需要使用 dict函数。 3、想要将数据按照指定的方式进行存储&#xff0c;比如&#xff1a;…

Maven自定义配置

修改maven默认字符编码 maven默认编码为GBK 注:配好MAVEN_HOME的环境变量后,在运行cmd. 打开cmd 运行mvn -v命令即可. 修改UTF-8为默认编码.设置系统环境变量 变量名MAVEN_OPTS 变量值-Dfile.encodingUTF-8 还可以添加其他配置&#xff0c;比如&#xff1a; -Xms256m -Xmx512m…

IDEA编译JDK1.8源码及运行测试

———————————————— 版权声明&#xff1a;本文为CSDN博主「神韵499」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接及本声明。 原文链接&#xff1a;https://blog.csdn.net/qq_41055045/article/details/112002440 ————…

【Qt编程之Widgets模块】-004:QTableWidget及基本操作

QTableWidget及基本操作 1. 概述2. 主要操作函数2.1 QTableWidgets实例化2.2 设置表头 setHorizontalHeaderLabels2.3 单元格选择&#xff1a;setSelectionBehavior2.4 设置列数 setColumnCount2.5 设置行数 setRowCount2.6 网格的显示 setShowGrid2.7 添加表项 setItem2.8 表项…

常见的锁和zookeeper

zookeeper 本文由 简悦 SimpRead 转码&#xff0c; 原文地址 zhuanlan.zhihu.com 前言 只有光头才能变强。 文本已收录至我的 GitHub 仓库&#xff0c;欢迎 Star&#xff1a;https://github.com/ZhongFuCheng3y/3y 上次写了一篇 什么是消息队列&#xff1f;以后&#xff0c;本来…