打印
[应用相关]

PWM(脉宽调制)

[复制链接]
1192|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
捉虫天师|  楼主 | 2018-9-20 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PWM(脉宽调制)
占空比:
pwm占空比就是一个脉冲周期内高电平的所整个周期占的比例。

例如1秒高电平1秒低电平的PWM波占空比是50%。


TIM6和TIM7:不可以产生pwm输出

TIM1和TIM8:7路的PWM输出
其余TIM:4路PWM输出

控制PWM的三个寄存器
捕获/比较模式寄存器(TIMx_CCMR1/2)
捕获/比较使能寄存器(TIMx_CCER)
捕获/比较寄存器(TIMx_CCR1~4)

//捕获/比较模式寄存器(TIMx_CCMR1/2)
CCMR1控制CH1和2
CCMR2控制CH3和4

模式设置位OCxM
使用PWM模式必须设置为110/111(输出电平极性有区别)

//捕获/比较使能寄存器(TIMx_CCER)
CC2E是输入/捕获输出使能位
该位设置为1,PWM从IO口输出


//捕获/比较寄存器(TIMx_CCR1~4)
对应CH1~4
该寄存器的值与CNT的值比较,通过修改此寄存器的值就可以控制PWM的输出脉宽。


STM32的重映射控制(复用重映射和调试IO配置寄存器AFIO_MAPR)
TIM3_REMAP重映射表
如图

如果TIM3_REMAP设置为00,是没有映射
如果TIM3_REMAP设置为10,即部分映射,如图所示的箭头。
值得注意的是当我们设置TIM3_REMAP为10的时候PA6映射到PB4,同时PA7映射到PB5.
沙发
捉虫天师|  楼主 | 2018-9-20 21:06 | 只看该作者
//配置步骤
1.开启TIM时钟以及复用功能时钟,配置io口为复用输出
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx,ENABLE);//使能定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//复用时钟使能
GPIO_InitStructure.GPIO_Mode_AF_PP;//复用推挽输出

2.设置TIMx_CHx重映射
如TIM3部分重映射
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
#define GPIO_PartialRemap_TIM3      ((uint32_t)0x001A0800)

3.初始化TIM设置的ARR和PSC
PWM频率=时钟/(ARR+1)

4.设置TIMx_CHx的PWM模式,使能TIM的CH输出。
PWM的通道设置通过TIM_OC1Init~TIM_OC4Init()
/////////////////////////////////////////////////////
typedef struct
{
uint16_t TIM_OCMode;//模式设置,PWM,输出比较
uint16_t TIM_OutputState;//输出使能,输出到端口
uint16_t TIM_OutputNState;
uint16_t TIM_Pulse;
uint16_t TIM_OCPolarity;//设置极性的高低(就是设置比较输出的有效电平。你可以设置为高电平有效或者低电平有效。 )
uint16_t TIM_OCNPolarity;
uint16_t TIM_OCIdleState;
uint16_t TIM_OCNIdleState;
} TIM_OCInitTypeDef
其他的为高级定时器才会用到这里暂时不介绍。
/////////////////////////////////////////////////////
实现格式
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC2

5.使能TIM。

6.修改TIMx_CCRx来控制占空比。
假如不设置,那么其占空比和频率都是固定值。
void TIM_SetCompare2(TIM_TypeDef* TIMx,uint16_t Compare2);

使用特权

评论回复
板凳
wahahaheihei| | 2018-9-21 08:14 | 只看该作者
不懂原理不要紧,知道pwm包含哪些变量就好,就可以用库函数实现

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

178

主题

3007

帖子

7

粉丝