高中生
最后登录1970-1-1
在线时间 小时
注册时间2019-6-14
|
请教一下大佬。
小弟我在做SPWM波的输出,采用中央对齐模式。我的正弦表有50个数,但是一个周期输出只有25个脉冲。不知道该如何解决,希望大佬们能帮帮小弟。
还有关于对中央模式的疑问:就是在中央对齐的三个模式当中,什么时候修改占空比会比较好呢。向上溢出,向下溢出,还是什么时候修改才能保证输出正确的占空比。
小弟不才,看了很久中央对齐模式,还是不能够完全理解这个模式的正确使用方法,希望有大佬指点指点。
下面是主要的代码
TIM_TimeBaseStructure.TIM_Period = 3600-1; //设置重装载周期值
TIM_TimeBaseStructure.TIM_Prescaler = 0; //设置预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分频因子,仅与输入捕获有关(定时器与滤波器的频率比)
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; //TIM向中央对齐模式1
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //重复溢出中断
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //初始化定时器基本配置
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; //TIM1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //主优先级3级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; //从优先级4级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
TIM_ClearFlag(TIM1, TIM_FLAG_Update); //清中断标志位
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE );
/* Channel_1 TIM_OCMode_PWM1模式 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //PWM互补输出使能
TIM_OCInitStructure.TIM_Pulse = Channel1Pulse; //占空比 = TIM_Pulse/TIM_Period;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //有效电平为高电平
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; //互补通道电平与普通通道电平相反
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //输出空闲状态
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset; //PWM互补输出空闲状态
void TIM1_UP_IRQHandler(void)
{
if (TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) //检查TIM1更新中断发生与否
{ static u16 i = 0;
i++;
TIM_SetCompare1(TIM1,spwmA[i]) ;
if(i == 51) //一周期采样50个点
{
i = 0;
}
TIM_ClearITPendingBit(TIM1, TIM_IT_Update); //清除TIM1更新中断标志
}
}
|
|