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相当于一个模拟量的功能。

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

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

相关文章

【学习心得】浏览器开发者工具中出现的VM开头的JS文件是什么?

一、现象描述 在Chrome的开发者工具中,你可能会看到一些以“VM”开头的JavaScript文件(如“VM111.js”)。 二、VM文件到底是什么? “VM”表示的是Virtual Machine(虚拟机),这些文件通常表示由浏…

网站文章被百度快速收录的工具

百度是中国最主要的搜索引擎之一,对于网站管理员来说,网站文章被百度快速收录是至关重要的,因为这直接影响着文章的曝光和网站的流量。然而,许多网站管理员都会问一个常见的问题:文章百度收录需要几天?在这…

C语言基础17 判断

断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。 下面是…

MYSQL01高级_Linux版安装、各级别字符集、字符集与比较规则、SQL大小写规范

文章目录 ①. MySQL - linux版安装②. 字符集的相关操作③. 各级别的字符集④. 字符集与比较规则(了解)⑤. SQL大小写规范⑥. sql_mode的合理设置 ①. MySQL - linux版安装 ①. 进入mysql官网,找到安装文件 ②. 将抽取出来的文件放在linux下的opt下 MySQL Community Serv…

WebSocket介绍与应用

介绍 WebSocket 是基于TCP的一种的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP是短连接WebSocket是长连接…

Vue3 + MybatisPlus实现批量删除功能

目录 一、后端 1.1 编写后端接口 1.2 编写service和其实现类 二、前端 2.1 组件加多选样式 2.2 实现多选调用的方法 2.3 编写批量删除的按钮 2.4 执行批量删除请求代码 一、后端 1.1 编写后端接口 PostMapping("/batchDelete") public CommonResult<Boo…

Python中简单正则获取百度新闻页面所有超链接示例

一、示例代码&#xff1a; import re import requestsheaders {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/""85.0.4183.83 Safari/537.36"} resp requests.get(http://news.…

自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解

文章目录 前言一、Harbor的安装第一步&#xff1a;安装docker第二步&#xff1a;安装docker-compose第三步&#xff1a;安装Harbor 二、Harbor登录三、Harbor项目管理第一步&#xff1a;创建项目第二步&#xff1a;推送镜像 四、Harbor权限控制五、Harbor自动清理多余的镜像手动…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+图像缩放,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI纯verilog图像缩放视频拼接应用本方案的SDI HLS图像缩放视频拼接应用本方案的SDI视频编码动态字符叠加输出应用本方案的SDI视频编码多路视频融合视频叠加应用FPGA的SDI…

Python实现向量自回归移动平均模型(VARMA算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 向量自回归移动平均模型&#xff08;Vector Autoregressive Moving Average, VARMA&#xff09;是一种…

《商用密码应用安全性评估管理办法》解读

根据《中华人民共和国密码法》&#xff08;以下简称《密码法》&#xff09;、《商用密码管理条例》&#xff08;以下简称《条例》&#xff09;等法律法规&#xff0c;国家密码管理局研究制定了《商用密码应用安全性评估管理办法》&#xff08;国家密码管理局令第3号&#xff09…

基于springboot实现旅游路线规划系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游路线规划系统演示 摘要 随着互联网的飞速发展以及旅游产业的逐渐升温&#xff0c;越来越多人通过互联网获取更多的旅游信息&#xff0c;包括参考旅游文纪等内容。通过参考旅游博主推荐的旅游景点和规划线路&#xff0c;参考计划着自己的旅行&#xff0c…

Ubuntu整系统迁移到另一个硬盘中

以ubuntu20.04为例&#xff0c;之前使用的是1T的移动硬盘&#xff0c;每次进入后性能不太稳定&#xff0c;所以最近买了块1T的固态硬盘给我的笔记本装上了&#xff0c;但是如果重新进行各种软件安装及环境配置就太麻烦了&#xff0c;所以采用了系统迁移 1.首先制作一个Ubuntu系…

08、关于语法:resp?.data?.data 的含义与实际操作中可能遇到的问题

1、数据情况&#xff1a; 其一、从后端拿到的数据为&#xff1a; let resp.data {"data": [],"lag_mode": 3,"totol": 0 }或&#xff1a; let resp.data {"data": [],"totol": 0 }其二、目标数据为&#xff1a; // 想要…

Git保姆级使用教程

一、版本控制 1.1 团队开发问题 企业项目一般以团队形式实施开发&#xff0c;那团队开发中会出现哪些问题呢&#xff1f; 小明负责的模块就要完成了&#xff0c;就在即将Release之前的一瞬间&#xff0c;电脑突然蓝屏&#xff0c;硬盘光荣牺牲&#xff01;几个月来的努力付之…

数据库常见理论常见面试题(总结)

一、前言 这里呢&#xff0c;博主会介绍一些平时关于数据库的理论的问题&#xff0c;比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识&#xff0c;但是像索引、事务、锁等内容&#xff0c;之前的文章就讲解过了&#xff0c;这里就不作过多的介绍了&am…

android工程师面试题目,安卓开发面试宝典

一、前言 不知不觉自己已经做了几年开发了&#xff0c;由记得刚出来工作的时候感觉自己能牛逼&#xff0c;现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。 如果你的知识是一个圆&#xff0c;当你的圆越大时&#xff0c;圆外面的世界也就越大。 最近看到很多An…

Delegate动画案例(P30 5.6delegate动画)

一、ListElement&#xff0c;ListModel&#xff0c;ListView 1. ListElement ListElement 是 QML 中用于定义列表项的元素。它可以包含多个属性&#xff0c;每个属性对应列表项中的一个数据字段。通过在 ListModel 中使用 ListElement&#xff0c;可以定义一个列表的数据模型…

【leetcode】链表分割

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 方法1. 不用哨兵位方法2. 用哨兵位 点击查看题目 思路: 将链表分为2个链表list1和list2&#xff0c;…

物联网边缘计算云边协同

文章目录 一、物联网云边协同1.IoT云边协同设计2.物联网平台设计3.物联网平台实现 二、部署环境1.节点配置2.版本信息 三、IoT云边协同部署1.部署Kubernetes集群2.部署KubeEdge3.部署ThingsBoard集群4.部署Node-RED边缘网关4.1.边缘网关功能4.2.部署EMQX4.2.部署Node-RED 5.配置…