32单片机基础:TIM输出比较

这个输出比较功能是非常重要的,它主要是用来输出PWM波形,PWM波形又是驱动电机的必要条件,所以你如果想用STM32做一些有电机的项目,比如智能车,机器人等。

IC:  Input Capture 输入捕获

CC:Capture/Compare一般表示输入捕获和输出比较的单元

CNT和CCR在哪里呢?下图所示就是我们的输出比较电路。

这个输入/比较寄存器是输入捕获和输出比较共用的,当输入捕获时,它就是捕获寄存器,当使用输出比较时,他就是比较寄存器,那在输出比较这里,这块电路会比较CNT和CCR(输入捕获和输出比较寄存器)的值。CNT计数自增,CCR是我们给定的一个值,当CNT大于CCR,小于CCR,或者等于CCR时,这里的输出就会对应的置1,置0,置1,置0.这样就可以输出一个电平不断跳变的PWM波形了,这就是输出比较的基本功能。

由图知,高级定时器和通用定时器都有四个输出比较的通道,可以同时输出四路PWM波形。这四个通道有各自的CCR寄存器,但是他们是共用一个CNT计数器的,

高级定时器还拥有额外死区生成,互补输出,这个是用于驱动三相无刷电机。

什么事PWM波形:

这个PWM波形是一个数字输出信号,也是由高低电平组成的。使用这个PWM波形,是用来等效地实现一个模拟信号的输出。

PWM的秘诀就是,天武功,唯快不破,只要我闪的足够快,你就发现不了我到底是闪着亮着。还是一个正常的,平稳的亮度。当然,PWM的应用场景必须要是一个惯性系统,就是说LED在熄灭的时候,由于余晖和人眼视觉暂留现象。LED不会立马熄灭,而是有一定的惯性,过一段时间才会熄灭,电机也是,当电机断电时,电机的转动不会立马停止,而是有一定的惯性,过一会才停。

PWM的频率越快,那它等效模拟的信号就越平稳,性能开销也就越大,一般来说PWM的频率都是在几K到几十KHz,这个频率就已经足够快了,

分辨率:比如有的占空比只能以1%,2%,3%等这样以1%的步距跳变,那它的分辨率就是1%,所以这个分辨率就是占空比变化的精细程度。这个分辨率需要多高,得看你实际项目的需求。

如果你既要高频率,又要高分辨率,这就对硬件电路要求比较高了。

不过一般要求不高的话,1%的分辨率就已经够用了。

定时器的输出比较模块是怎么来输出PWM波形的。

 在这个图里,左边就是CNT计数器和CCR1第一路的捕获/比较寄存器。他俩进行比较,当CNT>CCR1,或者相等时,它俩进行比较,就会给输出模式控制器传一个信号,然后输出模式控制器就会改变oc1ref的高低电平。REF信号实际上就是指这里信号的高低电平。REF是reference的缩写,意思是参考信号

上面有一个ETRF输入,这个是定时器的一个小功能,一般不用,不需要了解

接在这个REF信号可以前往主模式控制器,你可以把这个REF映射到主模式的TRGO输出上面。不过REF的主要去向还是下面那一条路。下图是一个极性选择。给这个寄存器写0,信号就会往上走,就是信号电平不翻转。进来啥用,出去也是啥样,写一的话,信号就会往下走,就是信号通过一个非门取反,那输出信号就是输入信号高低电平反转的信号这就是极性选择,就是选择是不是要把高低电平翻转一下。后面接的就是输出使能模式。决定要不要输出。最后就是OC1引脚,这个引脚就是CH1通道的引脚。在引脚定义表里就可以知道具体是哪个GPIO口了,

我们看一下输出模式控制器,它具体是怎么工作的,什么时候给REF高电平,什么时候给REF低电平,下面是八种模式,这个模式可以通过寄存器控制来进行配置。你需要哪个模式,就选择哪个模式,

第一个状态,冻结:维持原状态,就是CNT与CRR没有用,可以理解为CNT和CRR无效,REF保持为原状态。比如你正在输出PWM波,突然想暂停一会儿输出,那就可以设置成这个模式,一旦切换为冻结模式,输出就暂停了。并且高低电平也维持为暂停时刻的状态,保持不变。

下面三个模式,这个有效电平和无效电平,一般是高级定时器里面的一个说法,是和关断,刹车这些功能配合表述的,它说的比较严谨,所以叫有效电平和无效电平。为了理解方便,置有效电平就是置高电平,置无效电平就是置低电平这三个模式都是当CNT与CRR值相等时,执行操作,这些模式就可以用做波形输出了,比如相等时电平翻转这个模式,这个可以方便的输出一个频率可调,占空比始终为50%的PWM波形,比如你设置CCR为0时,那当CNT每次清零时,就会产生一次CNT =CCR的事件,这就会导致输出电平翻转一次,每更新两次,输出为一个周期。并且高电平和低电平的时间是始终相等的,也就是占空比始终为50%。当你改变定时器更新频率时,输出波形的频率也会随之改变。它俩的关系是输出波形的频率=更新频率/2;因为更新两次输出才为一个周期。这个就是匹配时电平翻转模式的用途。

强制为无效电平和强制为有效电平,这两个模式和冻结模式差不多,如果你想暂停波形输出,并且在暂停期间保持低电平和高电平,那你就可以设置这两个强制输出模式。

最后两个模式很重要,PWM模式1,PWM模式2,它们可以用来输出频率和占空比都可调的PWM波形。也是我们主要使用的模式,

一般我们只使用向上计数,PWM2实际就是PWM1输出取反。 有下图可知,REF输出之后还有一个极性的配置,所以使用PWM模式1的正极性和使用PWM模式2的反极性最终输出结果是一样的。

所以使用的话,我们可以只使用PWM模式1,并且向上计数,这一种模式就OK了,那这个模式是如何输出频率和占空比都可调的PWM波形的呢?

看下图:左上角是时基单元和运行控制部分,黑色箭头左边是时钟源选择,我们省略了,然后更新事件的中断申请,我们不需要了。输出PWM暂时还不需要中断,这就是时基单元的部分,配置好了时基单元,这里的CNT就可以开始不断地自增运行了。下面绿色的就是输出比较部分,总共四路, 

 这里是PWM模式1的执行逻辑

占空比是受CCR调控的,CCR高一些,,输出的占空比就变大,CCR低一些,输出的占空比就变小,

 这里的REF就是一个频率可调,占空比也可调的PWM波形,最终经过极性选择,输出使能,最终通向GPIO口,这样就能完成PWM波形的输出了。

我们看一下PWM的参数是如何计算的吧,

首先是PWM频率,它始终对应着计数器的一个溢出更新周期,所以PWM的频率就等于计数器的更新频率,

ARR越大,CCR的范围就越大,对应的分辨率就越大。定义的分辨率是占空比最小的变化步距。所以这个值越小越好。也可以吧CCR的值定义为分辨率,那就是值越大越好。总之,就是占空比变化越细腻越好。

如果我要求输出一个频率为1KHz,占空比课任意调节,且分辨率为1%的PWM波形,可以利用上面公式思考一下。

STM32的外部设备:

可以用PWM信号来控制舵机输出轴的角度,直流电机,可以用PWM来控制电机的速度。 

舵机有三根线,两根是电源线,一个是信号线,我们的PWM就是输如到这个信号线的,来控制舵机。有一个白色的输出轴,它的轴会固定在一个指定的角度不动,至于固定在哪个位置,是由信号线的PWM信号来决定的。低舵机还有个控制电路板,是一个电机控制系统,大概的执行逻辑是:PWM信号输入到控制板,给控制板一个指定的目标角度,然后电位器检测输出轴的当前角度,如果大于目标角度,电机就会反转,最终使输出轴固定在指定角度。

舵机的PWM波形,实际是当做一个通信协议来使用的,

一般电机都是大功率设备,它的驱动设备也必须是一个大功率的输出设备

TB6612驱动芯片:

VM电机电源的正极,要接一个可以输出大电流的电源。

AO1,AO2,BO1,BO2就是两路电机的输出了。AO1,AO2就是A路的两个输出,它的控制端就是上面的这三个,PWMA.AIN2,AIN1,这三个引脚控制A路的一个电机。那这三个引脚就直接接到单片机的GPIO口就行了,其中PWMA引脚要接PWM信号输出端,其他两个引脚可以接任意两个普通的GPIO口。那这三个给一个低功率的控制信号,驱动电路就会从VM汲取电流,来输出到电机。这样就能完成低功率的控制信号控制大功率设备了。

STBY(Stand By),待机控制脚。如果接GND,芯片就不工作,处于待机状态,接VCC,正常工作。

那这三个脚是如何控制电机正反转和速度的呢?

下图,输入必须为一高一低才行,有电压差,电机可以转,但是还是要看PWM的波形,PWM给低电平,输出两个低电平,电机还是不转,如果PWM是一个不断翻转的电平信号那电机不就是快速的反转,停止,反转,停止,如果PWM频率足够快,那电机就可以稳定的反转。并且速度取决于PWM信号的占空比。这里的PWM相当于一个模拟量的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爱心商城|爱心商城系统|基于Springboot的爱心商城系统设计与实现(源码+数据库+文档)

爱心商城系统目录 目录 基于Springboot的爱心商城系统设计与实现 一、前言 二、系统功能设计 三、系统功能设计 1、商品管理 2、捐赠管理 3、公告管理 4、公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#x…

spring boot学习第十三篇:使用spring security控制权限

该文章同时也讲到了如何使用swagger。 1、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

华为配置WLAN高密业务示例

配置WLAN高密业务示例 组网图形 图1 配置高密WLAN环境网络部署组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 体育场由于需要接入用户数量很大&#xff0c;AP间部署距离较小&#xff0c;因此AP间的干扰较大&#xff0c;可能导致用户上网网…

PostgreSQL从入门到精通教程 - 第45讲:poc-tpcc测试

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第45讲&#…

【知识整理】Git 使用实践问题整理

问题1、fatal: refusing to merge unrelated histories 一、Git 的报错 fatal: refusing to merge unrelated histories 新建了一个仓库之后&#xff0c;把本地仓库进行关联提交、拉取的时候&#xff0c;出现了如下错误&#xff1a; fatal: master does not appear to be a g…

状态码转文字!!!(表格数字转文字)

1、应用场景&#xff1a;在我们的数据库表中经常会有status这个字段&#xff0c;这个字段经常表示此类商品的状态&#xff0c;例如&#xff1a;0->删除&#xff0c;1->上架&#xff0c;0->下架&#xff0c;等等。 2、我们返回给前端数据时&#xff0c;如果在页面显示0…

C语言实现21点游戏【单人模式,双人模式,单-多电脑模式】,21点又名黑杰克(英文:Blackjack)

项目背景&#xff1a; 21点又名黑杰克&#xff08;英文&#xff1a;Blackjack&#xff09; &#xff0c;起源于法国&#xff0c;已流传到世界各地。21点&#xff0c;是一种使用扑克牌玩的赌博游戏。亦是唯一一种在赌场中可以在概率中战胜庄家的一种赌博游戏。 现在在世界各地…

计算机网络原理--传输层

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 TCP/IP五层&#xff08;或四层&#xff09;模型 传输层 TCP和UDP的区别 UDP协议 校验和 如何…

【Unity】如何设置Unity脚本的执行顺序?

在 Unity 编辑器中设置脚本执行顺序 在 Unity 中&#xff0c;如果有多个脚本&#xff0c;并且它们之间的执行顺序很重要&#xff0c;可以通过编辑器设置来确保它们按照自己期望的顺序执行。这对于确保某些脚本在其他脚本之前执行非常有用。在这篇文章中&#xff0c;将向会展示如…

Kubernetes IoTDB系列 | IoTDB数据库同步|IoTDB数据库高可用 | v1.3.0

目录 一、介绍二、应用场景三、IoTDB 数据库搭建四、数据同步一、介绍 IoTDB 数据同步功能可以将 IoTDB 的数据传输到另一个数据平台,我们将一个数据同步任务称为 Pipe。 一个 Pipe 包含三个子任务(插件): 抽取(Extract)处理(Process)发送(Connect)Pipe 允许用户自…

【MySQL】学习多表查询和笛卡尔积 - 副本

](https://img-blog.csdnimg.cn/21dd41dce63a4f2da07b9d879ad0120b.png#pic_center) ??个人主页: ??热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ??个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-N8PeTKG6uLu4bJuM {font-family:“trebuchet ms”,…

强化学习Agent系列(二)——PyGame虚拟环境创建与Python 贪吃蛇Agent制作实战教学

文章目录 一、前言二、gymnasium 简单虚拟环境创建1、gymnasium介绍2、gymnasium 贪吃蛇简单示例 三、基于gymnasium创建的虚拟环境训练贪吃蛇Agent1、虚拟环境2、虚拟环境注册3、训练程序4、模型测试 三、卷积虚拟环境1、卷积神经网络虚拟环境2、训练代码 一、前言 大家好&am…

300分钟吃透分布式缓存(拉钩教育总结)

开篇寄语 开篇寄语&#xff1a;缓存&#xff0c;你真的用对了吗&#xff1f; 你好&#xff0c;我是你的缓存老师陈波&#xff0c;可能大家对我的网名 fishermen 会更熟悉。 我是资深老码农一枚&#xff0c;经历了新浪微博从起步到当前月活数亿用户的大型互联网系统的技术演进…

NebulaGraph入门

感谢阅读 官方文档链接NebulaGraph简介nGQLnGQL简介占位标识符和占位符值注释实列大小写区分关键字 基本概念以及相关代码实现补充说明图空间语法以及列子创建克隆官方示例代码(创建并克隆)USE语句指定图空间时查看所有SPACESPACE详情CLEAR SPACE删库跑路&#xff08;看玩笑的说…

C语言:字符函数 字符串函数 内存函数

C语言&#xff1a;字符函数 & 字符串函数 & 内存函数 字符函数字符分类函数字符转换函数tolowertoupper 字符串函数strlenstrcpystrcatstrcmpstrstrstrtok 内存函数memcpymemmovememsetmemcmp 字符函数 顾名思义&#xff0c;字符函数就是作用于字符的函数&#xff0c;…

3dgs学习(二)—— 3d高斯与协方差矩阵及其几何意义

协方差矩阵与3d高斯 3d高斯与椭球与协方差矩阵 3d高斯&#xff0c;及3维空间内的正态分布。 通过一元正态分布的坐标系图像不难想象&#xff0c;3维空间中的正态分布点集中在一片椭球空间中&#xff0c;各方向长轴取决于各方向正态分布的方差。 而协方差矩阵通过计算多元之…

好物周刊#42:国产项目管理软件

https://github.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. 菠萝博客 基于 Java 的菠萝博客系统&#xff0c;简单易部署&#xff0c;精致主题&#xff0c;贴心服务&#xf…

本届挑战赛亚军方案:面向微服务架构系统中无标注、多模态运维数据的异常检测、根因定位与可解释性分析

CheerX团队来自于南瑞研究院系统平台研发中心&#xff0c;中心主要从事NUSP电力自动化通用软件平台的关键技术研究与软件研发。 选题分析 图1 研究现状 本次CheerX团队的选题紧密贴合了目前的运维现状。实际运维中存在多种问题导致运维系统的不可用。比如故障发生时&#xff…

【常用】【测速】ptflops库---速度FPS、参数Params、计算复杂度Flops

一、常用名字 中文名字 英文名字 简称 单位 模型参数量 number of parameters. param. (单位B M) 计算复杂度 computational…

【Spring Cloud 进阶】OpenFeign 底层原理解析

参考文章 万字33张图探秘OpenFeign核心架构原理 | 三友SpringCloud OpenFeign源码详细解析Java 代理机制 OpenFeign 是一个精彩的使用动态代理技术的典型案例&#xff0c;通过分析其底层实现原理&#xff0c;我们可以对动态代理技术有进一步的理解。 目录 1. Feign 与 OpenFeig…