PWM输出在中央对齐模式下,当设置为PWM1时,可以正常输出,输出的有效电平在一个PWM周期的两端,即在计数器加阶段CNT<CCR时输出有效,
在计数器减阶段CNT<CCR时输出有效,这样得到的PWM第一个输出是不连续的半个PWM周期。代码如下:
//设置TIME计时值及计时方式,死区时间,
TIM1->CR1 |= 0x0080; //自动重装使能,时钟分频因子为0,TDTS=Tck
TIM1->CR1 &= 0xFF8F; //0=计数期向上计数,
TIM1->CR1 |= 0x0060; //3=中央对齐模式
TIM1->ARR = PWM_PERIOD_T; //设置自动重装值
TIM1->PSC = PWM_PERIOD_PSC; //设置计数器与分频寄存器
TIM1->BDTR |= 0x0040; //设置死区时间0.88uS,72MHz(T=0.0138uS),0.88uS/0.0138=36,36=0x24
//设置输出使能,输出有效电平和输出空闲电平
TIM1->CCER &= 0xFAAA; //初始化时关闭输出使能,在启动时或之后相位变化时再设置使能输出的引脚
TIM1->CCER &= 0x0DDD; //P高边MOS输出高电平导通,CCER.9,5,1设置为0,注:此处逻辑为反相
TIM1->CCER |= 0x0888; //N低边MOS输出低电平导通,CCER.11,7,3设置为1,注:此处逻辑为反相
TIM1->CR2 &= 0x2AFF; //P高边MOS输出空闲为低电平,CR2.12,10,8设置为0,注:此处逻辑为同相
TIM1->CR2 |= 0x2A00; //N低边MOS输出空闲为高电平,CR2.13,11,9设置为1,注:此处逻辑为同相
TIM1->BDTR |= (1<<11); //OSSR设置为1,保证CCxE,CCxNE为0禁止输出时,OCx,OCxN输出CCxP,CCxNP电平
//边沿对齐模式下,TIM_CNT<TIM_CCR时输出有效电平,有效电平在前,无效电平在后
//中央对齐模式下,TIM_CNT<TIM_CCR时输出有效电平,第一个有效电平出现半个有效波形输出
//设置捕获,比较,输出模式
TIM1->CCMR1 |= 0x6060; //设置输出比较模式为PWM模式1,TIM1_CNT<TIM1_CCRn时为有效电平,反之为死区电平
TIM1->CCMR2 |= 0x0060;
我想得到中间输出有效的PWM,即第一个PWM输出有效电平在中间,而不是两个半个有效电平分列两端,
于是将PWM模式1改为PWM模式2,CNT>CCR输出有效,但实际上没有输出,代码如下:
//设置TIME计时值及计时方式,死区时间,
TIM1->CR1 |= 0x0080; //自动重装使能,时钟分频因子为0,TDTS=Tck
TIM1->CR1 &= 0xFF8F; //0=计数期向上计数,
TIM1->CR1 |= 0x0060; //3=中央对齐模式
TIM1->ARR = PWM_PERIOD_T; //设置自动重装值
TIM1->PSC = PWM_PERIOD_PSC; //设置计数器与分频寄存器
TIM1->BDTR |= 0x0040; //设置死区时间0.88uS,72MHz(T=0.0138uS),0.88uS/0.0138=36,36=0x24
//设置输出使能,输出有效电平和输出空闲电平
TIM1->CCER &= 0xFAAA; //初始化时关闭输出使能,在启动时或之后相位变化时再设置使能输出的引脚
TIM1->CCER &= 0x0DDD; //P高边MOS输出高电平导通,CCER.9,5,1设置为0,注:此处逻辑为反相
TIM1->CCER |= 0x0888; //N低边MOS输出低电平导通,CCER.11,7,3设置为1,注:此处逻辑为反相
TIM1->CR2 &= 0x2AFF; //P高边MOS输出空闲为低电平,CR2.12,10,8设置为0,注:此处逻辑为同相
TIM1->CR2 |= 0x2A00; //N低边MOS输出空闲为高电平,CR2.13,11,9设置为1,注:此处逻辑为同相
TIM1->BDTR |= (1<<11); //OSSR设置为1,保证CCxE,CCxNE为0禁止输出时,OCx,OCxN输出CCxP,CCxNP电平
//边沿对齐模式下,TIM_CNT>TIM_CCR时输出有效电平,有效电平在后,无效电平在前
//中央对齐模式下,TIM_CNT>TIM_CCR时输出有效电平,有效输出背靠背,不出现半个有效波形输出,占空比需要反相
//设置捕获,比较,输出模式,中央对齐模式,两头输出无效电平,中间输入有效电平
TIM1->CCMR1 |= 0x7070; //设置输出比较模式为PWM模式2,TIM1_CNT>TIM1_CCRn时为有效电平,反之为死区电平
TIM1->CCMR2 |= 0x0070;
求高手赐教
|
|