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

news2024/11/19 5:24:24

这个输出比较功能是非常重要的,它主要是用来输出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.coloradmin.cn/o/1478798.html

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

相关文章

【Leetcode每日一刷】哈希表|纲领、242.有效的字母异位词、349. 两个数组的交集

纲领 🔗代码随想录理论部分 关于哈希表这个数据结构就不再重复讲了,下面对几个关键点记录一下: 哈希碰撞 解决方法1:拉链法 解决方法2:线性探测法 下面针对做题要用到的三种结构讲一下(也是重复造轮子了…

解释一下前端框架中的虚拟DOM(virtual DOM)和实际DOM(real DOM)之间的关系。

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

windows server mysql 数据库停止 备份 恢复全流程操作方法

一,mysql备份 mysql最好是原工程文件备份.不需要sql查询的方式备份.安全高效. 比如,安装php与mysql组合后,我的mysql文件保存在: D:\phpstudy_pro\Extensions\MySQL5.7.26\data\dux 我只需要复制一份,保存起来就行. 二,mysql恢复 怎么恢复呢.我们一般是只恢复其中一个表,则找…

华为---RSTP(四)---RSTP的保护功能简介和示例配置

目录 1. 技术背景 2. RSTP的保护功能 3. BPDU保护机制原理和配置命令 3.1 BPDU保护机制原理 3.2 BPDU保护机制配置命令 3.3 BPDU保护机制配置步骤 4. 根保护机制原理和配置命令 4.1 根保护机制原理 4.2 根保护机制配置命令 4.3 根保护机制配置步骤 5. 环路保护机…

thefour--Love is like a tide

最后一部分了,要开始进行我们的训练了。 先上代码: import os import numpy as np from tqdm import tqdm import tensorflow as tf from thetwo import NeuralStyleTransferModel import theone import thethree #创建模型 modelNeuralStyleTransferM…

2.29IO进程线程

编写链表&#xff0c;链表里面随便搞点数据 使用 fprintf 将链表中所有的数据&#xff0c;保存到文件中 使用 fscanf 读取文件中的数据&#xff0c;写入链表中 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h>typed…

自定义View中的ListView和ScrollView嵌套的问题

当我们在使用到ScrollView和ListView的时候可能会出现显示不全的问题。那我们可以进行以下分析 ScrollView在测量子布局的时候会用UNSPECIFIED。通过源码观察&#xff0c; 在ScrollView的onMeasure方法中 Overrideprotected void onMeasure(int widthMeasureSpec, int heightMe…

git push提交后GitHub没有统计我的Contributions

我在家里的电脑上创建了一个仓库&#xff0c;然后在笔记本上录取下来并进行提交合并等操作&#xff0c;但是发现笔记本上提交的记录并没有被github记录&#xff0c;就是那个绿色的点没有 就是提交完之后 没有出现当天的绿色的点 通过git log 后发现&#xff0c;提交记录中存在…

计算机网络-网络互连与互联网(三)

1.地址解析协议ARP&#xff1a; IP查询MAC地址&#xff0c;询问/回答机制。ARP缓存表、ARP欺骗、ARP病毒、代理ARP、反向RARP。 ARP、RARP分组格式如下&#xff1a; 2.地址解析协议ARP&#xff1a; 缓存表&#xff1a;开始-运行-cmd&#xff0c;输入arp -a(-s&#xff08;绑…

【MySQL】MySQL复合查询--多表查询自连接子查询

文章目录 1.基本查询回顾2.多表查询3.自连接4.子查询 4.1单行子查询4.2多行子查询4.3多列子查询4.4在from子句中使用子查询4.5合并查询 4.5.1 union4.5.2 union all 1.基本查询回顾 表的内容如下&#xff1a; mysql> select * from emp; ----------------------------…

vue项目中使用antv X6新手教程,附demo案例讲解(可拖拽流程图、网络拓扑图)

前言&#xff1a; 之前分别做了vue2和vue3项目里的网络拓扑图功能&#xff0c;发现对antv X6的讲解博客比较少&#xff0c;最近终于得闲码一篇了&#xff01; 需求&#xff1a; 用户可以自己拖拽节点&#xff0c;节点之间可以随意连线&#xff0c;保存拓扑图数据后传给后端&…

Java学习笔记------权限修饰符和抽象类、抽象方法

权限修饰符的分类 代码块 局部代码块 public class test{public static void main(String[] args){int a10;System.out.println(a);} } { int a10; System.out.println(a); }即是局部代码块 构造代码块 构造代码块优先于构造方法执行 静态代码块 格式…

不要神话了AI / GPT(人工智能 和 GPT)-尽量用一张图说明(将持续更新)

很多人一听到 AI&#xff0c; GPT &#xff0c;Chat-GPT&#xff0c; 智能驾驶&#xff0c;智能这个&#xff0c;智能那个&#xff0c; ..... 就觉得 噢&#xff0c; 好 牛皮 呀&#xff0c; 其实这个东西算个啥&#xff1f; 争取 用一张图 把 他的 根 给 刨出来&#xff08;刨…

如何提取测试点

如何提取测试点 首先会想到从需求文档中提取测试点&#xff0c;每一次迭代之后&#xff0c;都会有需求&#xff0c;需求经理评审之后&#xff0c;我们要基于需求去写测试计划&#xff0c;包括梳理出来的测试点&#xff0c;梳理完测试点之后&#xff0c;编写对应的测试用例&…

面试笔记系列三之spring基础知识点整理及常见面试题

目录 如何实现一个IOC容器? 说说你对Spring 的理解&#xff1f; 你觉得Spring的核心是什么&#xff1f; 说一下使用spring的优势&#xff1f; Spring是如何简化开发的&#xff1f; IOC 运行时序 prepareRefresh() 初始化上下文环境 obtainFreshBeanFactory() 创建并…

阿里Java开发手册(黄山版) LeetCode刷题手册 免费下载

目录 一、阿里Java开发手册(黄山版) 二、LeetCode刷题手册 三、获取方式 今天给大家推荐两个程序员的辅助利器&#xff01;都是平时开发&#xff0c;刷算法能经常用到的书籍&#xff0c;怕百度云分享会失效&#xff0c;获取方式在最下面&#xff0c;永久有效。 一、阿里Jav…

网络编程作业day2

1.将TPC和UDP通信模型各敲两遍 &#xff08;1&#xff09;TPC通信模型&#xff1a; 服务器代码&#xff1a; #include <myhead.h> #define SERVER_IP "192.168.125.136" #define SERVER_PORT 1314 int main(int argc, const char *argv[]) {//1、创建用于监…

Python进阶学习:Pandas--查看DataFrame中每一列的数据类型

Python进阶学习&#xff1a;Pandas–查看DataFrame中每一列的数据类型 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希…

如何扫描试卷把它变成电子档?分享3个宝藏软件!

在数字化时代&#xff0c;纸质试卷的电子化已成为许多学生和工作人员的需求。将试卷扫描成电子档不仅方便存储和传输&#xff0c;还能提高学习效率。那么&#xff0c;如何将试卷快速、准确地转换成电子档呢&#xff1f;本文将为您介绍几种实用的扫描软件及其使用方法。 一、拍试…

基于51单片机的心率血压体温检测系统[proteus仿真]

基于51单片机的心率血压体温检测系统[proteus仿真] 健康检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的心率血压体温检测系统 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xff…