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

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

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,可以直接看出效果现象

相关文章:

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

PWM 输出比较通道 在这里以通用定时器的通道1作为介绍。 如图&#xff0c;左边就是CNT计数器和CCR1第一路的捕获/比较寄存器&#xff0c;它俩进行比较&#xff0c;当CNT>CCR1, 或者CNTCCR1时&#xff0c;就会给输出模式控制器传送一个信号&#xff0c;然后输出模式控制器就…...

易优cms伪静态,EyouCms去除URL中的index.php

针对不同服务器、虚拟空间,运行PHP的环境也有所不同,目前主要分为:Nginx、apache、IIS以及其他服务器。下面分享如何去掉URL上的index.php字符,记得在管理后台清除缓存,对于一些ECS服务器可能要重启nginx等服务! 【Nginx服务器】 在原有的nginx重写文件里新增以下代码片…...

【自然语言处理】【大模型】CodeGeeX:用于代码生成的多语言预训练模型

CodeGeeX&#xff1a;用于代码生成的多语言预训练模型 《CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X》 论文地址&#xff1a;https://arxiv.org/pdf/2303.17568.pdf 相关博客 【自然语言处理】【大模型】CodeGen&#x…...

Open3D 非线性最小二乘拟合二维多项式曲线

目录 一、算法原理二、代码实现三、结果展示一、算法原理 多项式曲线表示为: p ( x ) = p 1 x n + p 2 x n...

kafka消息队列的两种模式

第一种模式&#xff1a; 点对点模式&#xff08;一对一&#xff0c;消费者主动拉取数据&#xff0c;消息收到后消息清除&#xff09; 1.消息生产者生产消息发送给队列&#xff0c;然后消费者从队列中取出并且消费消息 2.消息被消费以后&#xff0c;queue中不再有存储&#xff0…...

python语法复习

print&#xff1a;输出函数 print(520)效果&#xff1a;输出520. print(hello)效果&#xff1a;输出hello. print(1020)【效果&#xff1a;输出了:1020】注&#xff1a;“ ”在print里面是一个连接符。 print(1020)【效果&#xff1a;输出了30】注&#xff1a; 在此处…...

02-Java基础编程

Java基础编程 Java 基础语法Java 标识符变量变量的类型Java 基本数据类型基本数据类型转换 运算符常见运算符运算符的优先级 程序流程控制分支语句循环结构常用的循环结构循环的嵌套break 和 continue 关键字 数组一维数组多维数组的使用Arrays 工具类的使用数组中常见的异常 J…...

武忠祥老师每日一题||定积分基础训练(十)

已知f(x)连续 ∫ 0 x t f ( x − t ) d t 1 − cos ⁡ x , 求 ∫ 0 π 2 f ( x ) d x 的值。 \int_{0}^{x}tf(x-t)\,{\rm d}t1-\cos x,求\int_{0}^{\frac{\pi}{2}}f(x)dx的值。 ∫0x​tf(x−t)dt1−cosx,求∫02π​​f(x)dx的值。 已知一个关于f的变上限积分等式&#xff0c;&…...

C/C++趣味程序设计百例(41~50)

C/C语言经典、实用、趣味程序设计编程百例精解&#xff08;5&#xff09; 41.马克思手稿中的数学题 马克思手稿中有一道趣味数学问题&#xff1a;有30个人&#xff0c;其中有男人、女人和小孩&#xff0c;在一家饭馆吃饭花了50先令&#xff1b;每个男人花3先令&#xff0c;每个…...

论文阅读-2-DeepSMOTE Fusing Deep Learning and SMOTE for Imbalanced Data

文章目录 Abstract1. Introduction2. Learning From Imbalanced Data1. 数据级2. 算法级3. 集成方法 3. Deep Learning From Imbalanced Data基于深度神经网络的实例生成损失函数适应长尾识别 4. DeepSMOTEA. 动机B. 描述C. encoder-decoder框架D. 增强的损失函数E. 人工图像生…...

三种方法教你让模糊照片秒变高清图

现在随着数字相机和智能手机的普及&#xff0c;我们拍摄的照片数量越来越多&#xff0c;但是有些照片可能因为环境或技术等原因导致模糊不清&#xff0c;这时候我们就需要使用一些软件或工具来让照片变得清晰&#xff0c;以满足我们的需求。 下面介绍三种常用的照片变清晰的方…...

PyTorch深度学习实战 | 基于线性回归、决策树和SVM进行鸢尾花分类

鸢尾花数据集是机器学习领域非常经典的一个分类任务数据集。它的英文名称为Iris Data Set&#xff0c;使用sklearn库可以直接下载并导入该数据集。数据集总共包含150行数据&#xff0c;每一行数据由4个特征值及一个标签组成。标签为三种不同类别的鸢尾花&#xff0c;分别为&…...

服务端接口优化方案

一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xff0c;其中发现最多的就是接口耗时过长的问题&#xff0c;就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。 二、接口优化方案总结 1. 批处理 批量思想&#xff1a;批量操作数据…...

【并发基础】Happens-Before模型详解

目录 一、Happens-Before模型简介 二、组成Happens-Before模型的八种规则 2.1 程序顺序规则&#xff08;as-if-serial语义&#xff09; 2.2 传递性规则 2.3 volatile变量规则 2.4 监视器锁规则 2.5 start规则 2.6 Join规则 一、Happens-Before模型简介 除了显示引用vo…...

Kubernetes系列---Kubernetes 理论知识 | 初识

Kubernetes系列---Kubernetes 理论知识 | 初识 1.K8s 是什么&#xff1f;2.K8s 特性3.小拓展&#xff08;业务升级&#xff09;4.K8s 集群架构与组件①架构拓扑图&#xff1a;②Master 组件③Node 组件 五 K8s 核心概念六 官方提供的三种部署方式总结 1.K8s 是什么&#xff1f…...

KingbaseES 原生XML系列三--XML数据查询函数

KingbaseES 原生XML系列三--XML数据查询函数(EXTRACT,EXTRACTVALUE,EXISTSNODE,XPATH,XPATH_EXISTS,XMLEXISTS) XML的简单使其易于在任何应用程序中读写数据&#xff0c;这使XML很快成为数据交换的一种公共语言。在不同平台下产生的信息&#xff0c;可以很容易加载XML数据到程序…...

【51单片机】点亮一个LED灯(看开发板原理图十分重要)

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The Right Path】 &#x1f970;大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;基础内容 &#x1f3f3…...

数据可视化工具 - ECharts以及柱状图的编写

1 快速上手 引入echarts 插件文件到html页面中 <head><meta charset"utf-8"/><title>ECharts</title><!-- step1 引入刚刚下载的 ECharts 文件 --><script src"./echarts.js"></script> </head>准备一个…...

【AI绘画】——Midjourney关键词格式解析(常用参数分享)

目前在AI绘画模型中&#xff0c;Midjourney的效果是公认的top级别&#xff0c;但同时也是相对较难使用的&#xff0c;对小白来说比较难上手&#xff0c;主要就在于Mj没有webui&#xff0c;不能选择参数&#xff0c;怎么找到这些隐藏参数并且触发它是用好Mj的第一步。 今天就来…...

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

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

华工研究生语音课

这门课讲啥 语音蕴含的信息、语音识别的目的 语音的准平稳性、分帧、预加重、时域特征分析&#xff08;能量和过零率&#xff09;、端点检测&#xff08;双门限法&#xff09; 语音的基频及检测&#xff08;主要是自相关法、野点的处理&#xff09; 声音的产生过程&#xf…...

KingbaseES 原生XML系列二 -- XML数据操作函数

KingbaseES 原生XML系列二--XML数据操作函数(DELETEXML,APPENDCHILDXML,INSERTCHILDXML,INSERTCHILDXMLAFTER,INSERTCHILDXMLBEFORE,INSERTXMLAFTER,INSERTXMLBEFORE,UPDATEXML) XML的简单使其易于在任何应用程序中读写数据&#xff0c;这使XML很快成为数据交换的一种公共语言。…...

【Flink】DataStream API使用之源算子(Source)

源算子 创建环境之后&#xff0c;就可以构建数据的业务处理逻辑了&#xff0c;Flink可以从各种来源获取数据&#xff0c;然后构建DataStream进项转换。一般将数据的输入来源称为数据源&#xff08;data source&#xff09;&#xff0c;而读取数据的算子就叫做源算子&#xff08…...

树莓派硬件介绍及配件选择

目录 树莓派Datasheet下载地址&#xff1a; Raspberry 4B 外观图&#xff1a; 技术规格书&#xff1a; 性能介绍&#xff1a; 树莓派配件选用 电源的选用&#xff1a; 树莓派外壳选用&#xff1a; 内存卡/U盘选用 树莓派Datasheet下载地址&#xff1a; Raspberry Pi …...

O2OA (翱途) 平台 V8.0 发布新增数据台账能力

亲爱的小伙伴们&#xff0c;O2OA (翱途) 平台开发团队经过几个月的持续努力&#xff0c;实现功能的新增、优化以及问题的修复。2023 年度 V8.0 版本已正式发布。欢迎大家到 O2OA 的官网上下载进行体验&#xff0c;也希望大家在藕粉社区里多提宝贵建议。本篇我们先为大家介绍应用…...

数控解锁怎么解 数控系统解锁解密

Amazon Fargate 在中国区正式落地&#xff0c;因 数控解锁使用 Serverless 架构&#xff0c;更加适合对性能要求不敏感的服务使用&#xff0c;Pyroscope 是一款基于 Golang 开发的应用程序性能分析工具&#xff0c;Pyroscope 的服务端为无状态服务且性能要求不敏感&#xff0c;…...

3.0 响应式系统的设计与实现

1、Proxy代理对象 Proxy用于对一个普通对象代理&#xff0c;实现对象的拦截和自定义&#xff0c;如拦截其赋值、枚举、函数调用等。里面包含了很多组捕获器&#xff08;trap&#xff09;&#xff0c;在代理对象执行相应的操作时捕获&#xff0c;然后在内部实现自定义。 const…...

Rust 快速入门60分① 看完这篇就能写代码了

Rust 一门赋予每个人构建可靠且高效软件能力的语言https://hannyang.blog.csdn.net/article/details/130467813?spm1001.2014.3001.5502关于Rust安装等内容请参考上文链接&#xff0c;写完上文就在考虑写点关于Rust的入门文章&#xff0c;本专辑将直接从Rust基础入门内容开始讲…...

【5.JS基础-JavaScript的DOM操作】

1 认识DOM和BOM 所以我们学习DOM&#xff0c;就是在学习如何通过JavaScript对文档进行操作的&#xff1b; DOM Tree的理解 DOM的学习顺序 DOM的继承关系图 2 document对象 3 节点&#xff08;Node&#xff09;之间的导航&#xff08;navigator&#xff09; 4 元素&#xff0…...

【大数据之Hadoop】二十九、HDFS存储优化

纠删码和异构存储测试需要5台虚拟机。准备另外一套5台服务器集群。 环境准备&#xff1a; &#xff08;1&#xff09;克隆hadoop105为hadoop106&#xff0c;修改ip地址和hostname&#xff0c;然后重启。 vim /etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/hostname r…...