STM32单片机入门教程---TIM输出比较

输出比较简介

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

PWM简介

  • PWM(Pulse Width Modulation)脉冲宽度调制
  • 具有惯性的系统中,可以通过一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域;
  • PWM参数:频率=1/TS ,占空比=TON/TS , 分辨率=占空比变化步距
  • 基本思想:利用余晖和人眼暂留现象,当给到一个足够快的频率时,控制LED不断亮灭就会出现在完全亮和完全灭之间的一个中等亮度,电机控速原理也是如此**【天下武功,唯快不破】**
    在这里插入图片描述
    在这里插入图片描述

输出比较通道

通用定时器

REF时reference的缩写,意思为参考信号;
CC1P寄存器的作用是极性选择,若寄存器写0,则输出信号与输入信号相同;若寄存器写1,则输出信号是输入信号高低电平反转;
在这里插入图片描述

高级定时器

死区发生器的作用是在上/下管关闭,下/上管导通时延迟一段时间,避免右边电路出现短路,剩下部分与通用定时器的结构相同
在这里插入图片描述

输出比较模式

输出比较模式就是输出比较控制器里面的执行逻辑
在这里插入图片描述
有效电平和无效电平是与关断、刹车等功能配合描述的,置有效电平即置高电平,置无效电平即置低电平

PWM模式2其实就是PWM模式1输出模式的取反,改变模式1或2就只是改变REF电平的极性而已

PWM基本结构

蓝色线是CNT的值,黄色线是ARR的值,红色线是CCR的值在这里插入图片描述

PWM参数运算

  • PWM频率:Freq=CK_PSC/(PSC+1)/(ARR+1)
    PWM频率=计数器的更新频率
  • PWM占空比:Duty=CCR/(ARR+1)
  • PWM分辨率:Reso=1/(ARR+1)
    ARR越大,CCR范围越大,对应分辨率越大
    在这里插入图片描述

舵机

简介

  • 舵机时一种根据输入PWM信号占空比来控制输出角****度的装置;
  • 输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms
    在这里插入图片描述
    在这里插入图片描述
    在舵机中PWM被当作一个通信协议来使用
    在这里插入图片描述

硬件电路

注意正极接的是5V的电源
在这里插入图片描述在这里插入图片描述

直流电机及驱动

简介

  • 直流电机时一种将电能转换为机械能的装置,有两个电机,当电机正接时,电机正转,当电机反接时,电机反转;
  • 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作;
  • TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向;在这里插入图片描述

在这里插入图片描述

硬件电路

在这里插入图片描述在这里插入图片描述

代码部分

PWM驱动LED呼吸灯

PWM初始化

在这里插入图片描述
代码思路:

  1. RCC开启时钟,把要用的TIM外设和GPIO外设的时钟打开;
  2. 配置时基单元和时钟源选择;
  3. 配置输出比较单元,包括CCR的值、输出比较模式、极性选择、输出使能等参数;
  4. 配置GPIO,把PWM对应的GPIO口初始化为复用推挽输出模式;
  5. 运行控制,启动计数器;

库函数:

TIM外设对应库函数

  • TIM_OC1Init等四个函数用来配置输出比较模块,OC即Out Compare输出比较,对应四个输出比较单元;
    【参数结构体的值有一些是高级定时器才需要使用的,这里我们选择Mode模式、Polarity极性、OutputState输出使能、Pulse设置CCR即可】
  • TIM_OCStructInit用来给输出比较结构体赋一个默认值;
  • TIM_ForcedOC1、2、3、4Config用来配置强制输出模式,在运行过程中暂停输出波形并且强制输出高低电平,即设置100%或0%占空比;
  • TIM_OC1、2、3、4PreloadConfig用来配置CCR寄存器预装功能,即影子寄存器;
  • TIM_OC1、2、3、4FastConfig配置快速使能,在使用手册单脉冲模式一节有介绍;
  • TIM_ClearOC1、2、3、4Ref在使用手册中外部事件清除REF信号一节有介绍;
  • TIM_OC1、2、3、4PolarityConfig和TIM_OC1、2、3NPolarityConfig用来单独设置输出比较的极性;(带N的即为高级定时器里互补通道的配置)
  • TIM_CCxCmd和TIM_CCxNCmd用来单独修改输出使能参数
  • TIM_SelectOCxM用来单独修改输出比较模式的函数;
  • TIM_SetCompare1、2、3、4用来单独更改CCR寄存器值,作用是更改占空比
  • TIM_CtrlPWMOutputs仅高级定时器使用,在使用高级定时器输出PWM时,需要调用该函数使能主输出,否则PWM不能正常输出;

为了避免由于初始化函数的顺序导致的输出问题,我们通常要给初始化函数中的结构体参数赋初始值,可以利用函数StructInit来配置;(基本每个初始化函数都有)

TIM_OCMode:
Timing冻结模式
Active相等时置有效电平
Inactive相等时置无效电平
Toggle相等时电平翻转

TIM_OCPolarity:
High高极性,即极性不翻转,REF波形直接输出,有效电平为高电平
Low低极性,即极性翻转,REF波形反转输出,有效电平为低电平

TIM_Pulse:
设置CCR寄存器值

通过引脚定义表的默认复用功能,可查定时器输出PWM的引脚对应的GPIO口;

在这里插入图片描述

重映射和解除调试端口(AFIO)
GPIO_PinRemapConfig引脚重映射配置,参数分为部分重映射和完全重映射;若想解除调试端口复用,NoJTRST解除JTRST引脚的复用,JTAGDisable是解除JTAG调试端口的复用,Disable是JTRST和JTAG端口全部变成普通GPIO口;
如果想使用PA15、PB3、PB4,通常就是解除JTAG复用,保留SWD的复用;
如果想重映射定时器或其他外设的复用引脚,用GPIO_PinRemapConfig重映射外设复用引脚即可;
若重映射引脚恰好是调试端口,需要解除JTAG复用并加上GPIO_PinRemapConfig重映射引脚;

PWM驱动舵机

在这里插入图片描述

PWM驱动直流电机

在这里插入图片描述

总结

本小结涉及使用手册中的14.3.4捕获/比较通道、14.3.7强制输出模式、14.3.8输出比较模式、14.3.9PWM模式

把功能描述和寄存器描述都对照来看,才比较好懂

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值