野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9217|回复: 5

【TIM8_PWM】PWM变占空比程序

[复制链接]
发表于 2018-5-30 15:55:50 | 显示全部楼层 |阅读模式
(1)将TIM8配置为PWM输出模式,采集卡采集数据可看出波形正常,配置正确。

(2)配置NVIC[code]static void TIMx_NVIC_Config(void){
        NVIC_InitTypeDef NVIC_InitStruture;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
       
        NVIC_InitStruture.NVIC_IRQChannel=TIM8_UP_TIM13_IRQn;
        NVIC_InitStruture.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStruture.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStruture.NVIC_IRQChannelSubPriority=1;
       
        NVIC_Init(&NVIC_InitStruture);

}[code]

(3)开启TIM8更新中断
[code]
     TIM_ClearFlag (PWM_TIM,TIM_FLAG_Update);                                                                                                                                                                                //清除定时器更新中断标志位
     TIM_ITConfig (PWM_TIM,TIM_IT_Update,ENABLE);       

[code]
(4)在it.c中TIM8_UP_TIM13_IRQHandler编写TIM8中断函数
[code]

void BSP_PWMx_IRQHandler(void)
{
        if(TIM_GetITStatus(BSP_TIMx,TIM_IT_Update)==SET)
        {
               
//                TIM_Cmd (PWM_TIM,DISABLE);   //使能TIM8
                i=i+1;
                x=20*i;

                if(x>80)
                {
                        i=0;
                        x=0;
                }
                TIM_SetCompare1(PWM_TIM,x);
//                TIM_Cmd (PWM_TIM,ENABLE);   //使能TIM8
                TIM_ClearITPendingBit (PWM_TIM,TIM_IT_Update);       
        }

}

[code]

(5)打算他占空比按照0、20%、40%、60%、80%的规律进行变化,当PWM周期设置为100us及以下时:
        TIM_TimeBaseStructure.TIM_Period=100;                              
        TIM_TimeBaseStructure.TIM_Prescaler=1800-1;
      采集卡采集到的数据波形占空比变化为20%、20%、40%、40%、40%、60%、80%、80%类似于这样的变化。当PWM周期设置为1ms及以上时,波形就正常了,可以按照0、20%、40%、60%、80%的规律变化。
(6)想咨询一下有人在进行PWM波变占空比时遇到过类似于我这样的问题么?怎么样才可以解决这个问题,谢谢帮助。
回复

使用道具 举报

发表于 2018-5-30 16:11:28 | 显示全部楼层
周期不会影响占空比的配置哦, 对比PWM多彩流水灯的例程看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-30 16:28:44 | 显示全部楼层
要努力不要命 发表于 2018-5-30 16:11
周期不会影响占空比的配置哦, 对比PWM多彩流水灯的例程看看

恩,我程序里改变占空比是在中断程序调用TIM_SetCompare1(PWM_TIM,x);改变的。我的问题是说在周期较长时,占空比可以正常变化。但是如果在TIM_TimeBaseStructure.TIM_Prescaler改变,其余程序不变,就会变周期,当周期变得小于100us时,在1ms时正确运行的程序,就会出现我说的那些错误。
回复 支持 反对

使用道具 举报

发表于 2018-5-30 16:35:46 | 显示全部楼层
是不是中断太频繁了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-30 16:50:25 | 显示全部楼层
非谢家之宝树 发表于 2018-5-30 16:35
是不是中断太频繁了?

(1)按照TIM_TimeBaseStructure.TIM_Prescaler设置这个频率最小可以1/180M,我设置的1us(即180-1);TIM_TimeBaseStructure.TIM_Period设置的值为100-1;整个周期是100us就会出现我说的错误。
(2)TIM_TimeBaseStructure.TIM_Prescaler设置为1800-1;TIM_TimeBaseStructure.TIM_Period设置为100-1;整个周期是1ms,出来的波形变化就是正确的。
(3)猜想是可能调用TIM_SetCompare1函数来改变CCR1寄存器的值,CCR1寄存器是预装载寄存器,程序少了默写禁用预装载功能,导致不是直接修改CCR1值,它就可以立马使用的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-31 18:11:30 | 显示全部楼层
找到错误了,由于我使用的还有其他的定时器tim7,但是在PWM(tim8)的定时器中断程序里检查中断标志,却是对tim7进行检查,改正过以后,一切正常
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 12:32 , Processed in 0.036603 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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