OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2603|回复: 4

求助大佬们,PWM调节频率保持占空比不变

[复制链接]

2

主题

13

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-6-27
在线时间
6 小时
发表于 2019-8-7 08:38:34 | 显示全部楼层 |阅读模式
5金钱
大佬们,有没有什么办法做到PWM输出在改变频率的同时保持占空比不会变化
这是我写的函数,在CCR的值较小的时候调节频率占空比就变了。
int main(void)

{
  u16 pa6pwmval=144;
u32 b=250000;
u16 z;
  u16 d;
  u8 key;
u16 a=288;
delay_init();       //ÑÓʱº¯Êý³õʼ»¯   
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
  KEY_Init();      //KEY³õʼ»¯
OUT_init();
TIM4_PWM_Init(a-1,0); //TIM4 PWM³õʼ»¯, Fpwm=72M/256=281.25Khz.
  TIM_SetCompare4(TIM4,pa6pwmval);//³õʼֵΪ0
while(1)
{
   
key=KEY_Scan(1);

  if(key==KEY1_PRES)
  {   
   if(pa6pwmval<(a+1))pa6pwmval+=10;
   TIM_SetCompare4(TIM4,pa6pwmval);   
  }else if(key==KEY2_PRES)
  {
   if(pa6pwmval>10)pa6pwmval-=10;
   else pa6pwmval=0;
   TIM_SetCompare4(TIM4,pa6pwmval);   
  }else if(key==KEY3_PRES)
  {z=a/pa6pwmval;
   
   if(b<300000)b+=1000;
  a=72000000/b;
   pa6pwmval=a/z;
   
   TIM4_PWM_Init(a-1,0);
   
   TIM_SetCompare4(TIM4,pa6pwmval);
      
  }  else if(key==KEY4_PRES)
  {z=a/pa6pwmval;

   if(b>200000)b-=1000;
  a=72000000/b;
   pa6pwmval=a/z;
   
   TIM4_PWM_Init(a-1,0);
   
   TIM_SetCompare4(TIM4,pa6pwmval);   
  }   
delay_ms(50);
  
  
  

}

}


最佳答案

查看完整内容[请看2#楼]

已经做出来了,虽然不是太完美,改变了计算的方法 #include "sys.h" #include "o.h" #include "t.h" #include "delay.h" #include "k.h" #include "sys.h" int main(void) { float pa6pwmval=144; u32 b=250000; u16 z=50; u8 key; float a=288; delay_init(); //ÑÓʱº¯Êý³õʼ»¯ NVIC_PriorityGroupConfig(N ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-6-27
在线时间
6 小时
 楼主| 发表于 2019-8-7 08:38:35 | 显示全部楼层
本帖最后由 WTC960522 于 2019-8-12 09:25 编辑

已经做出来了,虽然不是太完美,改变了计算的方法
#include "sys.h"
#include "o.h"
#include "t.h"
#include "delay.h"
#include "k.h"
#include "sys.h"

int main(void)
{
  float pa6pwmval=144;
u32 b=250000;
u16 z=50;
  u8 key;
float a=288;
delay_init();       //&Ntilde;&Oacute;&Ecirc;±&ordm;&macr;&Ecirc;&yacute;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;   
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //&Eacute;è&Ouml;&Atilde;NVIC&Ouml;&ETH;&para;&Iuml;·&Ouml;×é2:2&Icirc;&raquo;&Ccedil;&Agrave;&Otilde;&frac14;&Oacute;&Aring;&Iuml;&Egrave;&frac14;&para;&pound;&not;2&Icirc;&raquo;&Iuml;ì&Oacute;&brvbar;&Oacute;&Aring;&Iuml;&Egrave;&frac14;&para;
  KEY_Init();      //KEY&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
OUT_init();
TIM4_PWM_Init(a-1,0); //TIM4 PWM&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;, Fpwm=72M/256=281.25Khz.
  TIM_SetCompare4(TIM4,pa6pwmval);//&sup3;&otilde;&Ecirc;&frac14;&Ouml;&micro;&Icirc;&ordf;0


while(1)
{
  
key=KEY_Scan(1);

  if(key==KEY1_PRES)
  {  if(z<100)z+=1;
        pa6pwmval=a*z/100;   
   
   TIM_SetCompare4(TIM4,pa6pwmval);   
  }else if(key==KEY2_PRES)
  {
   if(z>0)z-=1;
   pa6pwmval=a*z/100;
   
   TIM_SetCompare4(TIM4,pa6pwmval);   
  }else if(key==KEY3_PRES)
  {
   
   if(b<300000)b+=1000;
  a=72000000/b;
   pa6pwmval=a*z/100;
   
   TIM4_PWM_Init(a-1,0);
   
   TIM_SetCompare4(TIM4,pa6pwmval);
      
  }  else if(key==KEY4_PRES)
  {
   if(b>200000)b-=1000;
  a=72000000/b;
   pa6pwmval=a*z/100;
   
   TIM4_PWM_Init(a-1,0);
   
   TIM_SetCompare4(TIM4,pa6pwmval);   
  }  else if(key==KEY5_PRES)
{
}  
delay_ms(50);
  
  
  

}

}


回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-6-27
在线时间
6 小时
 楼主| 发表于 2019-8-7 11:21:29 | 显示全部楼层
木有大佬在的吗?好难过
回复

使用道具 举报

9

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-6-11
在线时间
38 小时
发表于 2019-8-7 11:31:00 | 显示全部楼层
你修改预分频的值就行了
回复

使用道具 举报

2

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
639
金钱
639
注册时间
2017-7-24
在线时间
124 小时
发表于 2019-8-12 09:52:46 | 显示全部楼层
配置成为比较翻转输出可以很方便改变频率
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 16:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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