求助一下GD32F330动态调节PWM频率问题

[复制链接]
1343|3
手机看帖
扫描二维码
随时随地手机跟帖
爱随缘2013|  楼主 | 2020-8-4 10:06 | 显示全部楼层 |阅读模式
本帖最后由 爱随缘2013 于 2020-8-5 15:59 编辑

VID_20200804_095016_20200804095740.gif
最近尝试动态调节PWM频率,已经实现,代码如下
void TIMER13_IRQHandler(void)
{
   timer_interrupt_flag_clear(TIMER13, TIMER_INT_FLAG_UP);

   a++;
   if(a == 1)
       {
          // a = 0;
          if(flag == 0)
            {
                 PFM--;
                if(PFM <= 1000){PFM = 1000;flag = 1;}
            }
                                 
     }
   if(a == 50)
     {
          a = 0;
          if(flag == 1)
              {
                   PFM++;
                   if(PFM >= 1700){PFM = 1700;flag = 0;}
              }
     }
//timer_autoreload_value_config(TIMER0,PFM);
TIMER_CAR(TIMER0) = PFM;

}

但是发现在调节频率过程中,占空比会有丢失现象,图片如下
722195f28c25f96fc0.png

调试好几天均没有效果,只要一关闭频率动态调节就没问题了,占空比静态和动态都试了,均不行,动态调节PWM占空比没有这个问题。
定时器0,2都试了,也不行。大家帮我看下怎么回事。
已经解决,问题是:当动态调节频率的时候,会出现丢失波形问题。

使用特权

评论回复
sonicll| | 2020-8-4 10:32 | 显示全部楼层
看你的代码,是通过修改定时器的重载值CAR来改变频率的,而占空比=比较值/重载值,重载值变了,比较值也要做对应的改变啊,不知道你修改比较值的算法是怎么写的。
你可以尝试通过修改分频值PSC来改变频率,这样CAR不变,占空比比较容易计算

使用特权

评论回复
爱随缘2013|  楼主 | 2020-8-4 11:25 | 显示全部楼层
本帖最后由 爱随缘2013 于 2020-8-4 11:29 编辑
sonicll 发表于 2020-8-4 10:32
看你的代码,是通过修改定时器的重载值CAR来改变频率的,而占空比=比较值/重载值,重载值变了,比较值也要 ...

感谢回复哈,是这样的,我现在默认频率是75KHZ,频率±3KHZ变化,占空比始终是小于频率值的,应该是不受影响才对,因为我调节范围比较小,如果我去修改分频的话,那样变化比较大,图片是展示频率变化,我就是修改±1KHZ的话也是出现这种现象,其实也不算调节频率的时候占空比变化,我感觉像复位一样,或者TIMER0重启一样,时间不确定,不定时出现这个现象

使用特权

评论回复
ckjjj| | 2020-9-22 18:41 | 显示全部楼层
老哥,你这个调节PWM的经验能交流下么?

使用特权

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

本版积分规则

7

主题

18

帖子

0

粉丝