您的位置 首页 知识

STM32开发板学习日记-[5]TIM的PMW形式

脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。在TIMx_CCMRx寄存器中的OCxM位写入rsquo;11

脉冲宽度调制形式能够发生一个由TIMx_ARR寄存器确认频率、由TIMx_CCRx寄存器确认占空比的信号。

在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM形式1)或’111’(PWM形式2),能够独登时设置每个OCx输出通道发生一路PWM。有必要设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最终还要设置TIMx_CR1寄存器的ARPE位使能主动重装载的预装载寄存器(在向上计数或中心对称形式中)。
由于仅当发生一个更新事情的时分,预装载寄存器才干被传送到影子寄存器,因此在计数器开端计数之前,有必要经过设置TIMx_EGR寄存器中的UG位来初始化一切的寄存器。
OCx的极性能够经过软件在TIMx_CCER寄存器中的CCxP位设置,它能够设置为高电平有用活或低电平有用。TIMx_CCER寄存器中的CCxE位操控OCx输出使能。

在PWM形式(形式1或形式2)下,TIMx_CNT和TIM1_CCRx一直在进行比较,(依据计数器的计数方向)以确认是否契合TIM1_CCRx≤TIM1_CNT或许TIM1_CNT≤TIM1_CCRx。但是为了与OCREF_CLR的功用(鄙人一个PWM周期之前,ETR信号上的一个外部事情能够铲除OCxREF)共同,OCxREF信号只能鄙人述条件下发生:
●当比较的成果改动

●当输出比较形式(TIMx_CCMRx寄存器中的OCxM位)从“冻住”(无比较,OCxM=’000’)切换到某个PWM形式(OCxM=’110’或’111’)。这样在运转中能够经过软件强置PWM输出。
依据TIMx_CR1寄存器中CMS位的状况,定时器能够发生边缘对齐的PWM信号或中心对齐的PWM信号。

110:PWM形式1-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有用电平(OC1REF=1)。
111:PWM形式2-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有用电平,否则为无效电平。

PWM 边缘对齐形式
向上计数装备
当TIMx_CR1寄存器中的DIR位为低的时分履行向上计数。参看13.3.2节。
下面是一个PWM形式1的比如。当TIMx_CNT

向下计数的装备

当TIMx_CR1寄存器的DIR位为高时履行向下计数。

在PWM形式1,当TIMx_CNT>TIMx_CCRx时参阅信号OCxREF为低,否则为高。假如TIMx_CCRx中的比较值大于TIMx_ARR中的主动重装载值,则OCxREF坚持为’1’。该形式下不能发生0%的PWM波形。
PWM 中心对齐形式
当TIMx_CR1寄存器中的CMS位不为’00’时为中心对齐形式(一切其他的装备对OCxREF/OCx信号都有相同的效果)。依据不同的CMS位的设置,比较标志能够在计数器向上计数时被置1、在计数器向下计数时被置1、或在计数器向上和向下计数时被置1。TIMx_CR1寄存器中的计数方向位(DIR)由硬件更新,不要用软件修正它。下图给出了一些中心对齐的PWM波形的比如
●TIMx_ARR=8
●PWM形式1
●TIMx_CR1寄存器中的CMS=01,在中心对齐形式1时,当计数器向下计数时设置比较标志。通用定时器(TIMx)

运用中心对齐形式的提示:
●进入中心对齐形式时,运用当时的上/下计数装备;这就意味着计数器向上仍是向下计数取决于TIMx_CR1寄存器中DIR位的当时值。此外,软件不能一起修正DIR和CMS位。
●不引荐当运转在中心对齐形式时改写计数器,由于会发生不行预知的成果。特别地:
─假如写入计数器的值大于主动重加载的值(TIMx_CNT>TIMx_ARR),则方向不会被更新。例如,假如计数器正在向上计数,它就会持续向上计数。
─假如将0或许TIMx_ARR的值写入计数器,方向被更新,但不发生更新事情UEV。
●运用中心对齐形式最稳妥的办法,就是在发动计数器之前发生一个软件更新(设置TIMx_EGR 位中的UG位),不要在计数进行过程中修正计数器的值。

本例展现了怎么设置TIM作业在脉冲宽度调制形式(PWM Pulse Width Modulation
mode)。

TIM3时钟设置为36MHz,预分频设置为0,TIM2计数器时钟可表达为:
TIM3 counter clock = TIMxCLK / (Prescaler +1) = 36 MHz

设置TIM3_CCR1寄存器值为500,则TIM3通道1发生一个频率为36MHz,占空比(duty cycle)为50%的PWM信号。

同理,依据寄存器TIM3_CCR2 、TIM3_CCR3和 TIM3_CCR4的值,TIM3通道2发生一个频率为36MHz,占空比(duty cycle)为37.5%的PWM信号;TIM3通道1发生一个频率为36MHz,占空比(duty cycle)为25%的PWM信号;TIM3通道1发生一个频率为36MHz,占空比(duty cycle)为12.5%的PWM信号。

能够经过示波器,在相应管脚观察到输出信号。

u16 CCR1_Val = 500;
u16 CCR2_Val = 375;
u16 CCR3_Val = 250;
u16 CCR4_Val = 125;



TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInit(TIM3, &TIM_OCInitStructure);

启用CCR1寄存器的影子寄存器(直到发生更新事情才更改设置)

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);


TIM_OCInitStructure.TIM_Channel = TIM_Channel_2;
TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

TIM_OCInit(TIM3, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);


TIM_OCInitStructure.TIM_Channel = TIM_Channel_3;
TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

TIM_OCInit(TIM3, &TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);


TIM_OCInitStructure.TIM_Channel = TIM_Channel_4;
TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

TIM_OCInit(TIM3, &TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3, ENABLE);


TIM_Cmd(TIM3, ENABLE);

while (1)
{
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/258857.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部