> 文章列表 > 嵌入式学习笔记——PWM与输入捕获

嵌入式学习笔记——PWM与输入捕获

嵌入式学习笔记——PWM与输入捕获

输出比较与输入捕获

  • 前言
  • 输出比较(PWM)
    • PWM简介
    • 输出比较详细框图
      • 1. 定时器部分
      • 2. 比较器控制部分
      • 3.输出控制部分

前言

上一篇中,主要介绍了有关通用定时器的一些概述性内容,本文主要是具体介绍一下输出比较与输入捕获的使用过程,包括其详细结构以及寄存器;其中输出捕获以常用的PWM为例,输入捕获以捕获按下按键的时间为例。

输出比较(PWM)

嵌入式学习笔记——PWM与输入捕获
首先来看看输出比较部分,前面提到了通用定时器的通道具有输入捕获、输出比较、PWM模式、单脉冲输出模式,本质上除了输入捕获以外,其他三个都是属于输出比较,都是通过编程控制输出高低电平的具体时间、周期,循环或者单次,只是具体配置的输出方式不一样;其中,PWM是最常用的控制方式,在电机控制、调节LED、屏幕亮度、电源电压控制等等邻域都有应用。那么什么是PWM呢?

PWM简介

PWM名称叫做脉冲宽度调制技术,是一种常用于电子电路和控制系统中的信号调制技术
在实际应用中,PWM广泛运用于电机驱动、灯光控制、电源电压控制等地方。因为PWM技术能够提供精准的控制,使得输出信号的质量更加高效和稳定,同时也减少了系统能耗和噪声干扰。
其实,通俗点说,PWM就是一个一直循环的方波信号,只是这个方波信号的周期,以及高低电平的时间都是可以调节的,也正是由于其周期性,所以需要借助定时器来实现,使用定时器去操作PWM控制的本质是操作高低电平的时间。
嵌入式学习笔记——PWM与输入捕获

输出比较详细框图

在编程手册的15.3.4 捕获/比较通道有关于输入输出的详细电路图,如下所示是通道1的主电路图,其中左侧是输入捕获部分的,右侧是输出比较部分的,这里先看输出比较部分的。
嵌入式学习笔记——PWM与输入捕获
仔细观察会发现在这个框图的内容应该不全,上一篇的中的输出部分还有一个输出控制器,在这个图中找不到,实际上不是少了,只是为了方便排版,官方分为了几个图,找到“图 146. 捕获/比较通道的输出阶段(通道 1)”,它所对应的电路就是输出的剩下部分,这里笔者直接将两者做个拼接,拼接后如下图所示:
嵌入式学习笔记——PWM与输入捕获
这个电路图才是输出比较的实际框图,还是老规矩,为了好理解进行分块介绍。
嵌入式学习笔记——PWM与输入捕获

1. 定时器部分

首先还是来看定时器的部分,其实定时器部分的配置和框图和之前的基本定时一样的,这里只是更详细了,对照下图再捋一下定时器的配置流程:
1.开启对应的时钟使能;
2.进行时基配置,包括计数器、预分频和重装载的配置;
关于计数器的配置其实很简单,没有什么多说的,这里要补充一点计数器和比较器的工作方式。
嵌入式学习笔记——PWM与输入捕获
如上图所示,计数器的计数器会和比较器的CCR1进行比较,假设我们编程控制,要求当计数器的CNT大于CCR1的时候输出高电平;当CNT<=CCR1时输出低电平,这在对应通道的IO口我们就可以看见右侧IO逻辑的输出波形。
同样的,我们也可以编程为当CNT小于CCR1时输出高电平,当CNT大于等于CCR1时输出低电平,此时IO的输出波形如下图所示:
嵌入式学习笔记——PWM与输入捕获
也就是说,GPIO在啥时候输出啥电平是可以由我们进行编程控制的。

2. 比较器控制部分

关于比较器的控制部分,其实和基本定时器的流程差不多,这里我们先看下图中的红框位置,他的输出是指向比较预装载寄存器和比较影子寄存器之间的,这就说明,由他来控制是否将预装在寄存器里面的值写入影子寄存器进而是参数对计数器产生效果。
嵌入式学习笔记——PWM与输入捕获

  1. 要让这个与门输出为真,才可以让预装载值写入影子寄存器,那么要让与门输出为真,就要求后面的三个输入都是真才行;
  2. 接下来看与门后面的三个输入,首先是1号位置,它的输出在进入与门之前会有一个非对它进行取反,也就说如果1号位置是非0的时候 ,第一个输入红框与门的信号就是0,这样是无法写入数据的,那么1号位置代表的是什么呢,查询对应的寄存器就可以知道了,如下图所示:
    嵌入式学习笔记——PWM与输入捕获
    可以发现这个寄存器就是写入预装载值的,在写入CCR1数据的时候1号位置会输出1,使得红框的与门被卡住,避免将错误数据写入影子寄存器;而写入完成后1号位置会输出0,此时1号输入红框与门的为真,可以写入,对于编程人员来说,只需要对CCR1进行赋值就可以了,写入完成这些不需要我们判断。
  3. 然后是2号位置,这里是一个或非门,它的逻辑是输入全为假则为真,输入有真则为真,也就是说,此路想要让红框的与门输出为真的话,就必须保证CC1S这个寄存器的值为0才可以,那么这个寄存器的值为0代表了什么呢
    还是在编程手册中对应搜索即可。
    嵌入式学习笔记——PWM与输入捕获
    可以发现,这个寄存器是用来选择配置为输入模式还是输出模式的,由于PWM是输出比较,所以得配置为“00”,这样也就使得或非门输出为真,进而使得与门的第二个数为真。
    4 .最后就是红框与门的第三个输入了,也就是图中的3号位置,可以看出它是一个或门,有两个输入,且上面的输入也是带有非门标志的,那么这个或门要输出真的话就要求上面的输入事件为假或者下面的输入为真,那么这两个输入的事件对应的是什么呢,还是看编程手册,如下图所示:
    首先是OCIPE,这一位就是使能预装载的,也就是说编程时可以通过控制这一位来实现预装载要不要开启。
    嵌入式学习笔记——PWM与输入捕获
    然后是下面这个事件,我们先不看,猜一下,既然上个事件是使能或者禁止预装载,那么这个预装载配套的还有个东西——就是我们前面使用基本定时器的时候提到过的更新事件;如果开启了预装载寄存器,那么我们要想真正的将数据写入计数器的话,就必须手动产生一次更新时间才可以,所以最后一个肯定是和更新事件有关的UEV(更新事件)。
    这里的配置一般都会开启预装载寄存器的。

3.输出控制部分

经过计数器和比较比较后的输出结果会来到下图所示的输出模式控制器,这部分的电路主要就是控制输出的模式,是高有效还是低有效这些那么具体怎么控制的呢。
嵌入式学习笔记——PWM与输入捕获

  1. 首先需要看的就是1号框内,有一个数据选择器,这里要注意,原本的编程手册这个地方有点小问题,就是选择器的选择寄存器,原图中标的寄存器找不到,实际是笔者图中改的TIMx_CCMR1的OC1CK,描述如下:
    嵌入式学习笔记——PWM与输入捕获
    ETRF前面提到过叫做外部触发输入 (ETRF),由于PWM输出过程中不需要由外部触发的作用,所以默认配置为0;
  2. 然后是2号框对应的OC1M,这位对应位置也在CCMR1上,可以发现这个寄存器分为了两部分功能,其中上面第一列是控制输出功能的,中间第二列是控制输入模式的,他们是共用一个寄存器的。
    嵌入式学习笔记——PWM与输入捕获
    关于OC1M的作用,如下图所示:
    嵌入式学习笔记——PWM与输入捕获
    此三位是用来选择模式的,由于我们要使用PWM模式,所以就需要配置为110或者111,关于PWM的模式1和PWM的模式2,其实就是上面提到的有效电平的不同罢了,当计数器为向上计数时:
    PWM模式1 CNT<CCR的时候为有效电平
    PWM模式2 CNT>CCR的时候为有效电平
    也就是说,这两个模式,在其他配置都一样的情况下会生成互补的输出波形。
  3. 然后就是3号红框的位置这里又是一个数据选择器,但是输入信号是同一个,只是其中一个进行了取反操作,猜一下,这个位是用来控制输出极性的
    具体描述如下图所示:
    嵌入式学习笔记——PWM与输入捕获
    此位就是用来控制输出博信是高有效还是低有效的,那么需要注意的是,上面的PWM模式最终也是控制高低电平的,这个也是用来控制高低电平在配置的过程中要小心。
  4. 最后就是4号框所在的控制器,使能位,置一才可以开启对应的输出。
    嵌入式学习笔记——PWM与输入捕获
    输出比较需要配置的流程:
    输出通道需要配置的
    ①选择输出模式
    ②比较寄存器的影子寄存器
    ③选择PWM模式
    ④选择有效电平
    ⑤输出使能

八度软件下载