TIM输出比较
文章目录
- 前言
- 一、TIM输出比较简介
- 二、PWM简介
- 2.1 PWM基本概念
- 2.2 PWM参数
- 2.3 PWM波形
- 2.4 PWM基本结构
- 2.5 PWM参数计算
- 三、舵机简介
- 3.1 舵机的工作原理
- 3.2 输入PWM信号的要求
- 3.3 硬件电路
- 四、直流电机及驱动简介
- 4.1 直流电机
- 4.2 TB6612电机驱动芯片
前言
提示:本文主要用作在学习江科大自化协STM32入门教程后做的归纳总结笔记,旨在学习记录,如有侵权请联系作者
本文主要探讨STM32定时器的输出比较功能。它主要是用来输出PWM波形的,PWM波形又是驱动电机的必要条件,我们可以利用这一特性做一些电机相关的项目,比如智能车、机器人等。
一、TIM输出比较简介
输出比较,它的英文是OC,全称是Output Compare,直译就是输出比较的意思(另外,还有IC,全称是Input Capture,意为输入捕获。还有CC,全称为Capture/Compare,一般表示的是输入捕获和输出比较的单元)。输出比较可以通过比较CNT计数器与CCR捕获/比较寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形,这就是输出比较模块最主要的功能。
每个高级定时器和通用定时器都拥有4个输出比较的通道,可以同时输出4路PWM波形,并且高级定时器的前3个通道额外拥有死区生成电路和互补输出的功能(用于驱动三相无刷电机)。4个输出比较通道都有独立的CCR寄存器,但是它们共用同一个CNT计数器。

二、PWM简介
2.1 PWM基本概念
PWM(Pulse Width Modulation),即脉冲宽度调制。PWM波形是一个数字输出信号,是由高低电平组成的,是一种对模拟电平信号进行数字编码的方法。在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制来等效地获得所需要的模拟参量,常应用于电机控速等领域。也就是说,使用PWM波形可以用来等效地实现一个模拟信号的输出。
以LED呼吸灯为例,按理来说LED只能有完全亮和完全灭两种状态,怎么来实现控制亮度大小呢?那通过这个PWM波形就能实现。我们可以让LED不断点亮、熄灭、点亮、熄灭。当点亮、熄灭的频率足够大时,由于LED的余晖和人眼的视觉暂留效应,LED就会呈现出一个中等亮度,当调控点亮和熄灭的时间比例时就能让LED呈现出不同的亮度级别,这就是通过控制PWM输出频率以及占空比实现LED呼吸灯的原理。对于电机调速也是一样的,我们以一个很快的频率给电机通电、断电、通电、断电,那么电机的速度就能维持在一个中等速度,这就是PWM的基本思想。
使用PWM波形,就可以在数字系统等效输出模拟量,就能实现LED控制亮度、电机控速等功能了。PWM的秘诀就是:天下武功,唯快不破(注意:只有在具有惯性的系统中,才能用PWM对模拟信号进行编码)
如下图所示,高低电平跳变的数字信号可以被等效地表示为中间虚线所表示的模拟量。当上面电平时间长一点,下面电平短一点的时候,等效的模拟量就偏向于上面。当下面电平时间长一点,上面电平时间短一点的时候,等效的模拟量就偏向于下面。也就是说,占空比越大,等效的模拟量就越趋近于数字量的高电平。占空比越小,等效的模拟量就越趋近于数字量的低电平,且这个等效关系一般而言是线性一一对应的。

2.2 PWM参数
如下图所示,Ts代表一个高低电平变换周期的时间。

在使用PWM对模拟量进行编码时,以下三个参数尤其重要:
频率 :f = 1 / Ts(周期的倒数就是频率),PWM的频率越快,它等效模拟的信号就越平稳,不过同时性能开销就越大,一般来说PWM的频率在几KHz到几十KHz之间。
占空比:q = Ton / Ts( Ton是高电平的时间,Ts是一个周期的时间。q就是高电平时间相对于整个周期时间的比例),占空比决定了PWM等效出的模拟电压的大小。一般用百分比表示。
分辨率:占空比的变化步距。分辨率就是占空比变化的精细程度,比如占空比变化为1%、1.1%、1,2%、1.3%这样子,那分辨率就是0.1%。
2.3 PWM波形
接下来我们就来分析一下定时器的输出比较模块是怎么来输出PWM波形的。下图红圈位置就是通用定时器的输出比较部分电路,左边就是CNT计数器和CCR1比较的结果,然后经过红圈位置的输出比较电路,最后通过TIMx_CH1输出到GPIO引脚上。然后下面还有三个同样的单元,分别输出到TIMx_CH2、TIMx_CH3以及TIMx_CH4。

那我们重点来看一下输出比较部分电路,如下所示就是通用定时器的输出比较部分电路。

如上图所示,左边是CNT计数器和CCR1第一路的捕获/比较寄存器,它俩进行比较。当CNT = CCR1或者CNT > CCR1时,就会给这个输出模式控制器传递一个信号,然后输出模式控制器就会改变它输出oc1REF的高低电平。接着这个REF信号可以前往主模式控制器(你可以把这个REF映射到主模式的TRGO输出上去),不过REF的主要去向还是下面这一路,通过下面这一路到达极性选择。给这个极性选择寄存器写0,信号就会往上走,就是信号电平不翻转,进来是什么样,出去还是什么样。写1的话,信号就会往下走,就是信号通过一个非门取反,那输出的信号就是输入信号高低电平反转的信号,这就是极性选择,就是选择是不是要把高低电平反转一下。那接着就是输出使能电路了,选择要不要输出。最后就是OC1引脚,这个引脚就是CH1通道的引脚,在引脚定义表里就可以知道具体是哪个GPIO口了。
接下来我们还需要看一下这个输出模式控制器,它具体是怎么工作的呢?什么时候给REF高电平,什么时候给低电平呢?我们来看一下下面这个表,这就是输出比较的8种模式,也就是这个输出模式控制器里面的执行逻辑。

这个模式控制器的输入是CNT和CCR的大小关系,输出是REF的高低电平,里面可以选择多种模式来更加灵活地控制REF输出。这个模块可以通过寄存器来配置。这个有效电平和无效电平为了方便理解可以直接认为有效电平就是高电平,无效电平是低电平。一般我们使用比较多的是PWM1模式、向上计数。
2.4 PWM基本结构
以PWM模式1、向上计数模式为例,PWM波形产生原理(输出PWM的基本结构)如下图所示

如图右上角所示,假如ARR的值为99,CCR为30。CNT计数器从0开始自增,当CNT < CCR时,REF置有效电平,当CNT >= CCR时,REF置无效电平,当CNT自增至99然后清零又开始下一个周期。下面对应的绿色线就是实际的REF输出的电平信号,可以看到REF的输出电平信号占空比是受到CCR值影响的。如果CCR设置大一些,输出的占空比就大一点,反之就小一点,这就是PWM模式的工作流程。这里的REF就是一个频率可调,占空比也可调的PWM波形,再经过极性选择,输出使能,最终通向GPIO口,这样就能完成PWM波形的输出了。
那接下来,我们就来看一下PWM的参数是如何计算的吧。
2.5 PWM参数计算

其中,假设CCR为30,ARR为99。
- PWM频率: 即计数器的更新频率 Freq = CK_PSC / (PSC + 1) / (ARR + 1)
- PWM占空比: Duty = CCR / (ARR + 1)
- PWM分辨率: Reso = 1 / (ARR + 1)
三、舵机简介
3.1 舵机的工作原理
舵机是一种根据输入PWM信号占空比来控制输出角度的装置。它有三根输入线,其中两根是电源线,一根是PWM信号输入线。白色输出轴会固定在一个指定的角度不动,固定的位置是由信号线的PWM信号来决定的,这就是舵机的工作方式。

从上边右图中可以看出,舵机其实并不是一种单独的电机,可以发现它是由一个直流电机、一个减速齿轮组、一个电位器(电压编码器)和一个控制板组成的整体。舵机并不是一种单独的电机,它的内部是由直流电机驱动的,内部的控制电路板是一个电机的控制系统,整个舵机内部形成了一个闭环的控制系统。
大概得执行逻辑是,PWM信号输入到控制板,给控制板一个指定的目标角度,然后这个电位器检测输出轴的当前角度,如果大于目标角度,电机就会反转,如果小于目标角度,电机就会正转,最终使输出轴固定在指定的角度,这就是舵机的内部工作流程。
简而言之:输入一个PWM波形,输出轴固定在一个角度。
3.2 输入PWM信号的要求
舵机对输入的PWM信号的要求如下:周期为20ms(对应频率为50Hz),高电平宽度为0.5 ~ 2.5ms(占空比取值范围,对应的输出角度如下所示)。那如何理解在STM32中周期为20ms对应的频率就是50Hz呢?
首先需要明确PWM(脉冲宽度调制)的频率是指1秒钟内信号从高电平到低电平再回到高电平的次数。换句话说,频率表示的是单位时间内PWM周期的重复次数。因此,如果PWM的周期为20ms,那么在一秒钟(1000ms)内,这样的周期会重复出现50次,即频率为50Hz。这是因为1秒除以每个周期的时间(20ms)等于50,所以周期为20ms的PWM信号对应的频率就是50Hz。频率的计算公式为:f = 1 / Ts(其中Ts单位为秒)

3.3 硬件电路

上图所示是舵机的引脚定义图,在舵机上有三根线,分别是黑(电源负极GND)、红(电源正极+5V)、黄(PWM信号线)。

如上所示为舵机电路图,在实际应用中,GND就接GND,电源+5V是电机的驱动电源(一般电机都是大功率设备,驱动电源也必须是大功率的输出设备,我们可以直接从STLINK的5v输出脚引一根线使用USB的5V供电),信号线PWM就直接接到STM32任意一个GPIO引脚上就行了,PWM只是一个通信线,是不需要大功率的。
四、直流电机及驱动简介
4.1 直流电机

上图所示的电机是130直流电机,直流电机是一种将电能转换为机械能的装置。它有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。(注意:直流电机是一个单独的电机,里面是没有驱动电路的,所以我们就要外挂一个驱动电路来控制。直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作,本次我们将使用TB6612电机驱动芯片来驱动电机)
4.2 TB6612电机驱动芯片

TB6612是一款双路H桥型的直流电机驱动芯片,其中有两个驱动电路,可以独立地驱动两个直流电机并且控制其转速和方向。如上左图,是电机驱动板,芯片是TB6612,外围电路只需三个滤波电容就行了。如上右图是H桥电路的基本结构,是由两路推挽电路组成的。比如左边上管导通,下管断开,那左边输出就是接在VM的电机电源正极。下管导通,上管断开,那就是接在PGND的电源负极。如果有两路推挽电路,中间接一个电机,左上和右下导通,电流就是从左流向右,右上和左下导通,电流的方向就反过来从右边流向左边,H桥可以控制电流流过的方向,所以它能控制电机的正反转。
TB6612电机驱动模块的连接电路图和引脚定义图如下所示:

- VM就是电机电源的正极。和舵机的电源要求是一样的,要接一个可以输出大电流的电源,电压和电机的额定电压保持一致,比如是5v的电机就接5v电压。
- VCC是逻辑电平输入端,一般和控制器的电源保持一致。比如使用STM32,是3.3v的器件,就接3.3v。
- GND直接接系统的负极就行。
- AO1、AO2、BO1、BO2是两路电机的输出,可以分别接两个电机。AO1和AO2就是A路的两个输出,它的控制端是上面的三个PWMA、AIN1和AIN2。这三个引脚控制下面的A路电机,对应关系如上图的灰色填充,其中PWMA引脚要接PWM信号输出端,AIN1和AIN2引脚可以任意接两个普通的GPIO口。这三个引脚给一个低功率的控制信号,驱动电路就会从VM汲取电流来输出到电机,这样就能完成低功率的控制信号控制大功率设备的目的。同理,右边的BO1及BO2也是一样的道理。
- STBY引脚意为StandBy,为待机控制引脚。如果接GND,芯片就不工作,处于待机状态。如果接到逻辑高电平VCC(3.3V)芯片就正常工作。如果不需要待机模式的话可以直接接VCC 3.3v,如果需要控制可以接入任意一个GPIO口,给高低电平就可以进行控制。
我们以A路驱动电路为例,那PWMA、AIN1、AIN2这三个引脚是怎么控制正反转和速度的呢?我们先来看一下下面这个表。

在这里,如果IN1和IN2都接高电平,两个输出O1、O2就都为低电平。这样两个输出没有电压差,电机是不会转的。如果IN1和IN2都接低电平,输出直接关闭,这样电机也是不会转的。
假如说IN1给低电平,IN2给高电平,那转还是不转就取决于PWM了。如果PWM给高电平,那输出就是一低一高,这时候电机反转。如果PWM给低电平,那两个输出都是电平,电机就不转了。
总结一下就是,IN1给低、IN2给高。PWM高转低不转。如果PWM是一个不断翻转的电平信号,那电机不就是快速地反转、停止、反转、停止了吗?如果PWM频率足够快,那电机就可以持续稳定地反转了,并且速度取决于PWM信号的占空比,这就是反转的工作流程。这里讲的PWM就是我们之前讲过的使用PWM来等效一个模拟量的功能了。正转的道理也是一样的,这里就不再累述了。
相关文章:
TIM输出比较
文章目录 前言一、TIM输出比较简介二、PWM简介2.1 PWM基本概念2.2 PWM参数2.3 PWM波形2.4 PWM基本结构2.5 PWM参数计算 三、舵机简介3.1 舵机的工作原理3.2 输入PWM信号的要求3.3 硬件电路 四、直流电机及驱动简介4.1 直流电机4.2 TB6612电机驱动芯片 前言 提示:本…...
JNPF 5.0升级钜惠,感恩回馈永远在路上
尊敬的JNPF用户们: 经过引迈团队数月的辛勤努力和不断的技术创新,JNPF快速开发平台迎来全新升级——5.0版本!此次5.0版本的迭代革新,不仅代表着我们技术实力的进一步提升,是我们对用户需求的深度理解和积极回应。为了…...
三维平面电磁铁、交流电磁铁、显微镜磁场北京大学方案
根据用户北京大学需求设计制造方案如下 三维平面电磁铁产品规格 5MPS63-25型三维平面电磁铁,X、Y方向磁场由2对正交的磁极产生,Z轴由一组同轴线圈产生; 每轴对应的两个线圈正接产生均匀磁场,反接产生梯度磁场; …...
awk引号转义问题
这是我在终端运行的脚本: for ib1 in $(seq 0 999);do ibstr$(printf sample52-%d $ib1);calculate_rmsd --reorder Motif52.pdb ${ibstr}.pdb | awk "{printf "%d %8f\n", $ib1, $0}" >> sample52_hotspots; done 但是报错: …...
C语言典型例题46
《C程序设计教程(第四版)——谭浩强》 题目: 习题3.6 企业发放的奖金根据利润提成。利润I低于或等于100 000元的,奖金可提成10%; 利润高于100 000元,低于200000元&…...
【目标检测】AGMF-Net:遥感目标检测的无注意力全局多尺度融合网络
《Attention-Free Global Multiscale Fusion Network for Remote Sensing Object Detection》 遥感目标检测的无注意力全局多尺度融合网络 原文:https://ieeexplore.ieee.org/document/10371366 摘要 遥感目标检测(RSOD)在复杂背景和小目标…...
2007-2022年上市公司资源节约数据
2007-2022年上市公司资源节约数据 1、时间:2007-2022年 2、来源:上市公司年报、社会责任报告、上市公司网站信息 3、指标:水资源节约、电力节约、原煤节约、天然气节约、汽油节约、柴油节约、集中供热节约、折算成统一标准煤共计节约 4、…...
onlyoffice连接器(connector)开发使用精讲 二次开发 深入开发【一】
连接器是onlyoffice调用web api的一个基础工具,可以方便开发者或者用户与业务系统结合使用web功能。 关于connector官方说明文档在这里:Automation API - ONLYOFFICE Api Documentation 注意:该功能针对开发者版、企业版,社区版常…...
VAuditDemo安装漏洞
目录 VAuditDemo安装漏洞 index.php header.php config.php lib.php install.php 分析结果 漏洞利用 第一步:删除install.lock文件,访问 install.php 抓包 第二步:通过审计构造payload 第三步:修改抓包请求内容&#x…...
算法学习-2024.8.16
一、Tensorrt学习补充 TensorRT支持INT8和FP16的计算。深度学习网络在训练时,通常使用 32 位或 16 位数据。TensorRT则在网络的推理时选用不这么高的精度,达到加速推断的目的。 TensorRT对于网络结构进行了重构,把一些能够合并的运算合并在了…...
ansible环境搭建
任务背景 公司的服务器越来越多, 维护⼀些简单的事情都会变得很繁琐。⽤ shell脚本来管理少量服务器效率还⾏, 服务器多了之后, shell脚本⽆ 法实现⾼效率运维。这种情况下,我们需要引⼊⾃动化运维⼯具, 对 多台服务器实现⾼效运维。 任务要求 通过管理服务器能够…...
在线陪玩App小程序源码开发:技术挑战与解决方案
随着互联网技术的飞速发展和用户需求的多样化,在线陪玩App小程序逐渐在游戏娱乐领域占据了一席之地。这类小程序不仅为用户提供了丰富的娱乐体验,也为开发者带来了新的机遇。然而,在开发过程中,数据处理、性能优化、系统扩展性和安…...
iOS profiles文件过期如何更新
创建发布用的Certificates 首先进入到https://developer.apple.com/account页面选择【证书】进入【新建证书】页面 点击【新建证书】按钮: 根据需求选中对应的【证书类型】,我选的是【Apple Distribution】, 开发者证书选择【Apple Devel…...
C/C++|C++标准库 string 流之std::ostringstream 和 std::istringstream 流
我们在 sstream 头文件中定义了三个类型来支持内存IO(ostringstream\istringstream\stringstream),这些类型可以向 string 写入数据,这里我们主要讲: std::ostringstream 和 std::istringstream( C Primer 中文版第五版) 以上的两个类型都继…...
Java-Redis
文章目录 基础基础内容使用场景/功能常见数据类型下载与安装可视化(多个)发布订阅功能事务两种持久化主从模式哨兵模式集群模式Cluster缓存淘汰过期删除缓存一致 Cache Aside缓存击穿缓存穿透缓存雪崩 实战内容配置文件配置Redis的BeanRedis为什么这么快…...
requests快速入门
1 安装requests库 如果你还没有安装requests库,可以通过pip安装: pip install requests 2 GET请求 GET请求通常用于从服务器请求数据。使用requests.get()函数可以发送GET请求。 2.1 基本使用 import requests url https://api.example.com/da…...
企业高性能web服务器——Nginx
# 企业高性能web服务器 1、Nginx 编译安装 1.1 编译安装 Nginx 这里下载nginx-1.24.0.tar.gz和nginx-1.26.1.tar.gz可以在官方网站上下载:https://nginx.org/en/download.html 示例:nginx-1.24.0.tar.gz #提前将编译安装出现问题的安装包下载好&…...
FreeSWITCH Java ESL Client Demo
1简介 在开启Java ESL Client编程之前,请先阅读《FreeSWITCH权威指南》学习什么是FreeSWITCH Event Socket。 Java连接FreeSWITCH的ESL可以采用两种模式:inbound和outbound。 Inbound模式:Java应用作为客户端主动连接到FreeSWITCH的内置TCP…...
手摸手系列之Linux下根据自己的jdk包构建docker镜像
项目在本地导出PDF文件正常,部署到Linux服务器docker容器中导出就报错,百撕不得姐,经查,docker依赖的openjdk版本是8u112版本,而我本地是8u421版本,那就升级jdk的小版本试试。 在docker的中央仓库[点我直达…...
tomcat相关
一、部署安装tomcat 在10和20上安装tomcat [root10 ~]# dnf install java-1.8.0-openjdk.x86_64 -y #安装java环境 [root10 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ #安装并启动tomcat [root10 ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
