STM32—TIM输出比较

1.输出比较简介

  • OC(Output Compare):输出比较
  • 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
    • CNT计数器
    • CCR捕获/比较寄存器
  • 每个高级定时器和通用定时器都拥有4个输出比较通道
  • 高级定时器的前3个通道额外拥有死区生成和互补输出的功能

IC,全称是Input Capture,意为输入捕获

CC,全称是Capture/Compare,一般表示的是输入捕获和输出比较的单元

2.PWM简介

  • PWM(Pulse Width Modulation):脉冲宽度调制
  • 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域
  • PWM参数
    • 频率 =1/TS
    • 占空比 =ToN/TS
    • 分辨率(变化率)=占空比变化步距

使用PWM波形,就可以在数字系统等效输出模拟量

3.输出比较通道(通用)

左边就是CNT计数器和CCR1第一路的捕获/比较寄存器,它俩进行比较,当CNT>CCR1,或者CNT=CCR1时,就会给这个输出模式控制器传一个信号,然后输出模式控制器就会改变它输出OC1REF的高低电平,上面这里还有个ETRF输入,这个是定时器的一个小功能,一般不用

接着这个REF信号可以前往主模式控制器,你可以把这个REF映射到主模式的TRGO输出上去,不过ref主要去向是下面一路,这是一个极性选择,给这个寄存器写0,信号就会往上走,就是信号电平不翻转,写1的话,信号就会往下走,就是信号通过一个非门取反,那输出的信号就是输入信号高低电平反转的信号,那接着就是输出使能电路了,选择要不要输出,最后就是OC1引脚,这个引脚就是CH1通道的引脚,在引脚定义表里就可以知道具体是哪个GPIO口了

REF是reference的缩写,意思是参考信号

2.1输出模式控制器执行逻辑

2.2 PWM基本结构

2.3 计算

分辨率中ARR越小越好,也可以把CCR的范围定义成分辨率,那就是值越大越好

如果我现在要产生一个频率为1KHz,占空比为50%,分辨率为1%的PWM波形

void PWM_Init(void)
{
	//启用TIM2的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//配置TIM2使用内部时钟
	TIM_InternalClockConfig(TIM2);
	
	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;
	// 初始化定时器时钟基准配置
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 50;                                	//CCR
	TIM_OC1Init(TIM2, &TIM_OCInitStructure); 
	
	TIM_Cmd(TIM2, ENABLE);
}

3. 输出比较通道(高级)

OC1和OC1N就是两个互补的输出端口,分别控制上管和下管的导通和关闭,如果在上管关断的瞬间,下管立刻就打开,那可能会因为器件的不理想,上管还没完全关断,下管就已经导通了,出现了短暂的上下管同时导通的现象,这会导致功率损耗,引起器件发热,所以在这里为了避免这个问题,就有了死区生成电路,官会在上管关闭的时候,延迟一小段时间,再导通下管,下管关闭的时候,延时一小段时间,再导通上管,这样就可以避免上下管同时导通的现象了,这就是死区生成和互补输出的用途。

4. 舵机

  • 舵机是一种根据输入PWM信号占空比来控制输出角度的装置
  • 输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms

这里PWM波形,它其实是当做一个通信协议来使用的,跟之前说,用PWM等效一个模拟输出,关系不大,把PWM当成一个通信协议,也是一个比较常见的应用,因为很多控制器都有PWM输出的功能,而且PWM只需要一条线就行了

舵机其实并不是一种单独的电机,它的内部是由直流电机驱动的,它里面还有一个控制电路板,是一个电机的控制系统,PWM信号输入到控制板,给控制板一个指定的目标角度,然后,这个电位器检测输出轴的当前角度,如果大于目标角度,电机就会反转,如果小于目标角度,电机就会正转,最终使输出轴固定在指定角度,这就是舵机的内部工作流程。

4.1 硬件电路

5.直流电机及驱动简介

  • 直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转
  • 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作,TB6612、DRV8833、L9110、L298N等等,另外还有一些用分离元件MOS管搭建的电路,这个功率可以做的更大一些
  • TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向

5.1 TB6612硬件电路

AO1、AO2、BO1、BO2就是两路电机的输出了,AO1和AO2就是A路的两个输出,它的控制端就是上面的这三个,其中PWMA引脚要接脉宽调制信号输出端,其它两个引脚可以任意接两个普通的GPIO口,那这三个引脚给一个低功率的控制信号,驱动电路就会从VM汲取电流,来输出到电机,这样就能完成低功率的控制信号控制大功率设备的目的了

  • 如果IN1和IN2全都接高电平,两个输出就都为低电平,这样两个输出没有电压差,电机是不会转的,
  • 如果IN1和IN2全都接低电平,输出直接关闭,这样电机也是不会转的
  • 这里如果IN1给低电平,IN2给高电平,电机处于反转状态,那转还是不转呢,要取决于PWIM,
    • 如果PWM给高电平,那输出就是一低一高,有电压差了,电机可以转,这时候定义的是反转,开始转了
    • 如果PWM给低电平,那输出两个低电平,电机还是不转

IN1给低,IN2给高,PWM高转低不转,如果PWM是一个不断翻转的电平信号,那电机不就是快速地反转、停止、反转、停止了嘛,如果PWM频率足够快,那电机就可以连续稳定地反转了,并且速度取决于PWM信号的占空比,这就是反转的工作流程。

在这里的PWM,就是我们之前讲的,使用PWM来等效一个模拟量的功能了。

6.GPIO_Mode选择复用推挽输出

对于普通的开漏/推挽输出,引脚的控制权是来自于输出数据寄存器的,那如果想让定时器来控制引脚,那就需要使用复用开漏/推挽输出的模式

在这里输出数据寄存器将被断开,输出控制权将转移给片上外设,那通过刚才看到引脚定义表,我们就知道了,这里片上外设引脚连接的就是TM2的CH1通道,所以,只有把GPIO设置成复用推挽输出,引脚的控制权才能交给片上外设,PWM波形才能通过引脚输出

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值