STM32:TIM定时器输出比较(OC)

您所在的位置:网站首页 单位oc是什么意思 STM32:TIM定时器输出比较(OC)

STM32:TIM定时器输出比较(OC)

2024-06-24 19:45:16| 来源: 网络整理| 查看: 265

一、输出比较简介 1、输出比较 OC(Output Comapre)输出比较输出比较可以通过比较CNT(时基单元)和CCR(捕获单元)寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率的占空比的PWM波形(CC是捕获/比较的意思,R是Register,寄存器的意思),这个捕获/比较寄存器是输入捕获和输出比较共用的,当使用输入捕获时,他就是捕获寄存器,当时用输出比较时,它就是比较寄存器。 每个高级定时器和通用定时器都有4个输出比较通道 高级定时器的前3个通道额外拥有死区生成和互补输出的功能注:简单来说就是在输出比较这里这块电路会比较CNT和CCR的值,CNT计数自增,CCR是我们给定的一个值,当CNT大于CCR、小于CCR、等于CCR时,输出就会输出对应的置1或置0。

 

 对应的数字电路框图为红圈部分

 

2、PWM简介

PWM(Pluse Width Modulation)脉冲宽度调制在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟量,常用于电机控速等领域,也就是说,使用这个PWM波形,是用来等效地实现一个模拟信号的输出,也就是以一个很快的频率,给电机通电、断电,也就使电机维持在一个中等速度 PWM参数:频率=1/Ts     占空比=Ton/Ts   分辨率=占空比变化步距

 

3、定时器的结构 1、输出比较(OC)通道(通用定时器模块)

 图解:在这个图里,左边就是CNT计数器(时基单元模块中的)和CCR1第一路的捕获/比较寄存器 ,他俩进行比较,当CNT>CCR1或者CNT=CCR1时就会给输出模式控制器传一个信号,然后输出模式控制器就会改变它输出OC1REF的高低电平(REF时reference的缩写,意思是参考信号),然后上面还有个ETRF输入,这是定时器的一个小功能一般不用了解,接着REF信号可以前往主模式控制器,你可以把这个REF映射到主模式的TRGO输出上去,但主要还是下面那一路(极性选择部分),给这个寄存器写0,信号会往上走,就是信号电平不翻转进来啥样出去啥样,写1的话,信号就会往下走,就是信号通过一个非门取反,那输出信号就是输入信号高低电平反转的信号,再往后就是输出使能电路就是选择要不要输出,最后就是OC1引脚,这个引脚就是CH1的通道的引脚。

2、输出比较通道(高级定时器)

 

 右侧为外围电路,则OC1和OC1N为互补输出,分别控制上管和下管的导通和截止 理想情况下,上管导通的瞬间下管要在同一瞬间关闭,但是实际情况下可能会因为器件的不理想导致上管未完全关闭,下管就导通了,出现了短暂的上下管短暂导通的情况,引起器件发热,所以有了死区生成电路,它会在上管关闭的时候延迟一小段,再导通下管,下管导通的时候,延迟一小段,在导通上管。

4、输出模式控制器模式

下图为输出模式控制器可以设置的模式(就是通用定时器的输出模式控制器模块的功能)

1:第一个模式是冻结,描述的实CNT=CCR时,REF保持原态,比如在输出PWM波,突然想暂停一会儿输出,就可以设置成这个模式,高低电平维持在暂停时刻 2:匹配时值置有效电平,匹配时值置无效电平,匹配时值电平翻转,就是CNT=CCR时,REF分别置高电平,低电平,电平翻转,在匹配时值电平翻转模式下,可以产生一个占空比为50%的方波 3:强制为无效电平和强制为有效电平两个模式和冻结模式相似,如果你想暂停波形输出,并且在暂停期间保持低电平或者高电平,那你就可以设置这两个模式4:PWM2就是PWM1的取反。最常用的就是PWM1模式。

5、PWM 产生原理及输出比较的抽象出来主要模块

 

首先左上角这里,是时基单元和运行控制的部分,再左边是时钟源选择,这里省略了,配置好时基单元,这里的CNT就可以开始不断地自增运行。

输出比较单元电路最开始,是CCR捕获/比较寄存器,CCR是我们自己设置的,CNT不断自增运行同时他俩还在不断的比较,后面就是输出模式控制器,以PWM1模式为例,在右上角的图中,在CNT还未计数到CCR时,置高电平,大于CCR时,置低电平,当计数到ARR然后归零时,又置高电平,往复循环,且占空比随CCR改变,如果CCR设置的高,那么输出的占空比就大,CCR设置的低一些,占空比就小一些,最后经过极性选择和输出使能就可以输出了。  

6、参数计算

 

注:PWM的频率等于计数器的更新频率

二、外部设备 1、舵机

 

型号SG90

执行逻辑:PWM信号输入到控制板,给控制板一个指定的目标角度,然后,电位器检测输出轴的当前角度,如果大于目标角度,电机会反转,如果小于目标角度,电机会正转最终使输出轴固定在指定角度

 

2、直流电机

 

 

代码部分: 1、PWM驱动LED呼吸灯

初始化步骤

RCC开启时钟,把我们要用的TIM外设和GPIO外设的时钟打开配置时基单元,包括前面的时钟源选择配置输出比较单元包括CCR的值、极性选择、输出使能配置GPIO(复用推挽输出) 运行控制

PWM.C

#include "stm32f10x.h" // Device header void PWM_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE); // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //对应输出比较的GPIO口配置 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_InternalClockConfig(TIM2); //用内部72MHZ时钟 选择时基单元的时钟,选择内部时钟,可以不写,因为定时器上电后默认选择内部时钟 //时基单元配置 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; //PSC TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //0:不重复计数,高级定时器用的 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); //输出比较模块配置 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); //用默认值填充每个TIM_OCInitStruct成员。因为只需要配置部分结构体参数 给结构体赋初始值 里面定义默认给的初始值,防止高级定时器出错 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出比较极性 high 高级性 极性不翻转 有效电平为高电平 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //输出比较使能 TIM_OCInitStructure.TIM_Pulse = 0; //CCR 指定要加载到捕获比较寄存器的脉冲值 TIM_OC1Init(TIM2, &TIM_OCInitStructure);//PA0口对应第一个输出比较通道OC1 TIM_Cmd(TIM2, ENABLE); } void PWM_SetCompare1(uint16_t Compare) { TIM_SetCompare1(TIM2, Compare); //设置TIM2捕获Compare1寄存器值。CCR为0,通过setcompare可以设置CCR的值,单独更改通道1的CCR的值 }

main.c

#include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "PWM.h" uint8_t i; int main(void) { OLED_Init(); PWM_Init(); while (1) { for (i = 0; i


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭