STM32(五):定时器——输出比较

定时器输出比较功能:输出PWM波形

OC(Output Compare)输出比较

        输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形

        每个高级定时器和通用定时器都拥有4个输出比较通道。

        高级定时器的前3个通道额外拥有死区生成和互补输出的功能(三项电机)。

        CCR:捕获比较寄存器。IC(InputCompare):输入捕获 CC:Capture/Compare 

PWM(Pulse Width Modulation)脉冲宽度调制

        在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域

PWM参数:

        频率= 1 /TS (频率越快等效的模拟信号越平稳,开销越大)

        占空比= TON / TS(占空比越大,等效的模拟电压就越趋向于高电平,占空比越小,等效的模拟电压就越趋向于低电平)           分辨率= 占空比变化步距(例如:1%,2%,3%   这种分辨率是1%)

        当调控灯的点亮和熄灭的时间比例时,就能让LED呈现出不同的亮度级别。下1图,上长下短等效模拟量偏上。上短下长等效模拟模拟量偏上。

高级定时器前三个输出比较部分电路

通用定时器输出比较部分电路

        CNT>=CCR1,输出模式控制器收到信号会改变OC1REF的输出电平。该信号:1.可以前往主模式控制器,把REF信号映射到主模式的TRGO输出上去;2.通过下路到达极性选择。极性选择:给CC1P写0,即不反转,写1,电平翻转。上方的ETRF一般不用。

输出模式控制器(输出比较模式)

        冻结模式:输出PWM波形时候,想暂停一下, 切换为冻结模式,PWM波形输出停止,高低电平位置暂停时刻的状态,保持不变。

        有效电平和无效电平是高级定时器的说法,是和关断、刹车这些功能配和表述。

        匹配时翻转模式:可以输出一个频率可调,高低电平时间相等,占空比为50%的PWM波形;例如,如CCR为0,那CNT每次更新清0时,就会产生一次CNT=CCR的时间,每更新两次,输出为一个周期。当改变定时器更新频率时,输出波形频率也会随之改变。

        PWM模式1:可以输出频率和占空比都可调的PWM波形,一般只使用向上计数,由于输出模式里可以设置极性,所以PWM模式1的正极性和PWM模式2的反极性最终的输出是一样的。

输出PWM的基本结构:        

        ARR为黄色线;CCR为红色线;CCR设置大一点,占空比就大;CCR设置的小一点,占空比就小;

        PWM频率:  Freq= CK_PSC / (PSC +1) / (ARR +1)

        PWM占空比:  Duty= CCR / (ARR +1) // 因为30时刻已经变成低电平了,所以不是CCR+1

        PWM分辨率:  Reso= 1 / (ARR +1)

PWM使用步骤:

        第一步RCC开始时钟,把要用的TIM外设和GPIO的外设打开;

        第二步 配置时基单元,包括时钟源选择

        第三步 配置输出比较单元,包括CCR的值,输出比较模式,极性选择,输出使能这些参数。

        第四步 配置GPIO。

        第五步 启动计数器。

硬件:

舵机:

        舵机是一种根据输入PWM信号占空比来控制输出角度的装置.

        输入PWM信号要求:周期为20ms高电平宽度为0.5ms~2.5ms;舵机不是使用PWM等效模拟输入,而是把PWM当成一个通信协议;

 直流电机

        直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转

        直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作

        TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向。

 

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);输出比较模块初始化;

void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);配置CCR寄存器的预装功能(影子寄存器);

void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);用来配置快速使能,(单脉冲模式)

void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);

void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);

void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);

void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);外部事件时,清楚ref信号;

void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);

void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);

void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);

void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);用来单独设置输出比较的极性的

void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);N 为互补通道

void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);

void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);

void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);单独修改输出使能参数

void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);

void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);用来单独更改输出比较模式的函数

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);用来单独更改CCR寄存器值的函数

void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);

void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);

void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);

void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);仅在高级定时器使用,在使用该机定时器输出PWM时,需要调用这个函数,使能主输出,否则PWM将不能输出。

AFIO :配置引脚的重映射;

AF_PP复用推挽输出,只有把GPIO设置成复用推挽输出,才能输出到GPIO端口例如PA0;

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LightningJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值