野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12941|回复: 0

关于定时器中央对齐模式的疑问。

[复制链接]
发表于 2020-5-1 12:00:21 | 显示全部楼层 |阅读模式
请教一下大佬。
小弟我在做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更新中断标志
    }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-26 02:04 , Processed in 0.028727 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表