OpenEdv-开源电子网

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

PWM占空比的极端问题

[复制链接]

76

主题

355

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2012-9-19
在线时间
5 小时
发表于 2013-1-31 11:19:02 | 显示全部楼层 |阅读模式
 1.输出比较极性High。 输出的波是高电平。当调整占空比为70%时。会形成。高电平30% 低电平70%。
(这一点难理解。不过大概是规定吧。因为我觉得70%应该是设定的极性。比如H。就是H70%。L就是L70%。可惜不是!)
2.PWM 的占空比100%或0%这两个极端。比较头晕。因为我设置。输出比较记性High。占空比为100%按我刚才说的。100%会是Low 电平。可我示波器出现了。类似
    “山山山山”这样的现象。我的波是这三个突出的毛刺一样长。就拿“山”来比喻吧。。。这一点求解释
具有资深STM32点灯技术,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-1-31 14:01:42 | 显示全部楼层
还是哪里配置问题吧, 
我PWM用示波器看,没有啊,

你的PWM占空比的值是不是 不是整形运算 或有余数 导致的啊
回复 支持 反对

使用道具 举报

76

主题

355

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2012-9-19
在线时间
5 小时
 楼主| 发表于 2013-1-31 14:06:36 | 显示全部楼层
回复【2楼】aleda303:
---------------------------------
en 我 的配置是 这样的。就用的原子的。 TIM3_PWM_Init(u16 arr,u16 psc,u16 zhankong);
参数是 400  360  400  帮我看看
具有资深STM32点灯技术,
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-1-31 14:11:55 | 显示全部楼层
不好意思 我是用自己的库 可以给你参考下
(C++的)

你改下试试。

void TIMType:WM_Config( 
u32 chn, 
const float freq, //输出频率  Hz
const float pul, //占空比
const u32 pwmmode, //PWM模式
const u16 cntmode, //计数模式 
u16 pol,   //输出极性
bool pulen,  //互补输出
bool en //使能
)
{
chn = chn - 1;

u32 clk=0;
if ((this == (TIMType*)TIM1_BASE) || (this == (TIMType*)TIM8_BASE))
clk = TIM1Clock ;
else
clk = TIMXClock ;
clk /= freq;

PSC = (u16)( clk>>16 );
ARR = clk /(PSC+1) -1 ;

u16 ccr =   (u16)((float)ARR * pul) ; 

switch(chn)
{
case 0: CCR1 = ccr; CCMR1 = CCMR1 & 0xff00 | (pwmmode<<0) |(1<<3); break;
case 1: CCR2 = ccr; CCMR1 = CCMR1 & 0x00ff | (pwmmode<<8)|(1<<11); break;
case 2: CCR3 = ccr; CCMR2 = CCMR2 & 0xff00 | (pwmmode<<0) |(1<<3); break;
case 3: CCR4 = ccr; CCMR2 = CCMR2 & 0x00ff | (pwmmode<<8)|(1<<11); break;
}

CR1 = CR1 & 0x08F | cntmode | (1<<7) ;
CCER |= ((u16)0x1 << (chn<<2)) | (pol?00x2 << (chn<<2)));

//if ((this == (TIMType*)TIM1_BASE) || (this == (TIMType*)TIM8_BASE))
if( pulen )
CCER |= ((u16)0x4 << (chn<<2)) | (pol?0(u16)0x8 << (chn<<2))); //互补输出
else
CCER &= ~(((u16)0x4 << (chn<<2)) | (pol?0(u16)0x8 << (chn<<2)))); //互补输出

PWMEnable(en);
Enable(en);

}

inline void Enable(bool en) { en? (CR1|=0x1)CR1&=~0x1); }
inline void WMEnable(bool en) { en? (BDTR|=0x8000)BDTR&=~0x8000); }
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-1-31 14:16:30 | 显示全部楼层
回复【4楼】aleda303:
---------------------------------
chn  输入范围 1~4 指的是 通道 T1和T8是 <1~4> T2T3T4T5 是2个<1~2>
频率 最小到0.18吧 <跟时钟频率有关>
pul 是 占空比 0~1.0

几个参数的设置如下:

enum _OCMode{ OM_Timing=0x00, OM_Active=0x10, OM_Inactive=0x20, //输出模式
OM_Toggle=0x30, OM_PWM1=0x60, OM_PWM2=0x70 };
enum _OC_Sta { OS_DIS = 0,  OS_EN }; //输出使能
enum _OC_Pol { OP_High = 0, OP_Low  }; //输出极性
enum _OC_IdlSta { OI_Reset = 0, OI_Set }; //输出空闲状态
回复 支持 反对

使用道具 举报

76

主题

355

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2012-9-19
在线时间
5 小时
 楼主| 发表于 2013-1-31 15:31:59 | 显示全部楼层
回复【5楼】aleda303:
---------------------------------
那么咱们的单片机能配置成带浮点数的波吗?比如要生成83.33HZ的波。。这怎么配置啊
具有资深STM32点灯技术,
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-1-31 15:39:49 | 显示全部楼层
可以 。 

你算下 ARR+1 频率变化多少  . 我式子里, SC = (u16)( clk>>16 ); 即 = TIMClock/freq/65536 取整;
freq = TIMClock/(PSC+1)/(ARR+1)
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-1-31 15:45:47 | 显示全部楼层
我是为了方便才输入频率的, 因为好多地方用的是频率。

你可以 改成周期 us 或ns  这样 就 可以全用整形计算了
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-1-31 15:49:26 | 显示全部楼层
回复【6楼】敌害:
---------------------------------
由于ARR 是递增为1 的 , 算起来可能不是正好那么多。 数字量嘛

就按下面这样调用 后面的就按需求配置就行了
PWM_Config(  1, 83.333, 0.5, WM2,.....);
回复 支持 反对

使用道具 举报

76

主题

355

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2012-9-19
在线时间
5 小时
 楼主| 发表于 2013-1-31 15:58:46 | 显示全部楼层
回复【9楼】aleda303:
---------------------------------
给力。我研究一下
具有资深STM32点灯技术,
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 01:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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