打印

STM8奇怪的PWM

[复制链接]
2973|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 y306512180 于 2011-11-28 19:08 编辑

今天要用TIM1做PWM,但是发现一个奇怪的问题,产生多个PWM波形后会有一段低电平时间,如图所示;
程序代码如下:
void TIM1_Init(void)
{//定时器1初始化
  CLK_PCKENR1|=0x80;//开启定时器1外设时钟  
  TIM1_EGR=0x01;//重新初始化TIM1
  TIM1_EGR|=0x20;//重新初始化TIM1
  TIM1_ARRH=0x00;//设定重装载值
  TIM1_ARRL=254;
  TIM1_PSCRH=0;//预分频
  TIM1_PSCRL=9;
  TIM1_CR1=0x01;//边沿对齐,向上计数
  TIM1_RCR=0;
}

void TIM1_PWM_Init()
{
  TIM1_CCER1=0x03;
  TIM1_CCMR1=0x70;//PWM模式2
  TIM1_CCR1H=0;//占空比
  TIM1_CCR1L=10;
  TIM1_BKR=0x80;
}

求解啊

DSC_00212.jpg (140.75 KB )

DSC_00212.jpg
沙发
y306512180|  楼主 | 2011-11-28 20:16 | 只看该作者
求教啊,求教

使用特权

评论回复
板凳
y306512180|  楼主 | 2011-11-28 21:07 | 只看该作者
怎么没人啊

使用特权

评论回复
地板
y306512180|  楼主 | 2011-11-28 21:26 | 只看该作者
等高手啊

使用特权

评论回复
5
香水城| | 2011-11-29 10:00 | 只看该作者
可能程序中有其他部分干扰。

使用特权

评论回复
6
y306512180|  楼主 | 2011-11-29 10:29 | 只看该作者
5# 香水城
#include <iostm8s105s4.h>
#define u8 unsigned char
#define u16 unsigned int
void CLK_Init(void)
{
  CLK_CKDIVR=0;//内部RC输出不分频,CPU亦分频
}

void GPIO_Init()
{
  PC_DDR|=0x02;
  PC_CR1|=0x02;
  PC_CR2|=0x02;
  PD_DDR|=0x10;
  PD_CR1|=0x10;
  PD_CR2|=0x10;
}

void TIM2_Init(void)
{//定时器1初始化
  CLK_PCKENR1|=0x20;//开启定时器2外设时钟
// TIM2_EGR|=0x01;//重新初始化TIM1
  //TIM2_ARRH=0x03;//设定重装载值
  //TIM2_ARRL=0xff;
  //TIM2_PSCR=3;//预分频
  //TIM2_CR1=0;//边沿对齐,向上计数
}
void TIM2_PWM_Init()
{
  TIM2_CCMR1=0x70;//PWM模式2
  TIM2_CCER1=0x03;
  TIM2_ARRH=0x00;//设定重装载值
  TIM2_ARRL=0xff;
  TIM2_CCR1H=0;//占空比
  TIM2_CCR1L=5;
  //TIM2_IER=0x01;
  TIM2_CR1=0x01;//向上计数,无缓存,使能
}

void main()
{
  CLK_Init();
  GPIO_Init();
  TIM2_Init();
  TIM2_PWM_Init();
  while(1);
}

香水版主,换用了定时器2还是这个情况,程序就这么简单,应该不会有干扰吧,想不通啊
}

使用特权

评论回复
7
香水城| | 2011-11-29 11:00 | 只看该作者
建议你把所有的 |= 都换成 =

使用特权

评论回复
8
bobo5650| | 2011-11-29 11:24 | 只看该作者
确定是不是发生了RST,可以看一下RST脚的信号。有些型号的看门狗能硬件使能,看看是不是被使能了。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
香水城 + 2 Good point !
9
香水城| | 2011-11-29 11:34 | 只看该作者
确定是不是发生了RST,可以看一下RST脚的信号。有些型号的看门狗能硬件使能,看看是不是被使能了。
bobo5650 发表于 2011-11-29 11:24


Good point !

使用特权

评论回复
10
y306512180|  楼主 | 2011-11-29 12:36 | 只看该作者
9# 香水城
刚接了示波器看RST的电平一直为高,查看RST_SR寄存器,只发现SWIMF为1,因为我接了ST-LINK,为了保险起见,我在while(1)中加了个32位变量计数,发现一直递增,并未复位,所以还是搞不懂~

使用特权

评论回复
11
y306512180|  楼主 | 2011-11-29 12:44 | 只看该作者
7# 香水城
换了

使用特权

评论回复
12
y306512180|  楼主 | 2011-11-29 13:01 | 只看该作者
9# 香水城
而且发现一个问题,如果ARR为255,那么CCR如果高于一个值比如20几,波形基本正常

使用特权

评论回复
13
香水城| | 2011-11-29 13:14 | 只看该作者
对于产生出来的PWM波形,频率和占空比正确吗?多少周期后会出现低电平?每次都是这么多周期吗?

现象比较奇怪,可惜我没有玩过,想不出具体原因。

使用特权

评论回复
14
y306512180|  楼主 | 2011-11-29 14:20 | 只看该作者
13# 香水城
用电压表量了下,电压基本正确,可能是示波器扫描的问题吧

使用特权

评论回复
15
z3571240| | 2011-11-29 14:57 | 只看该作者
:lol 求解。、

使用特权

评论回复
16
hm4243343| | 2011-11-29 16:13 | 只看该作者
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

使用特权

评论回复
17
leijie2001| | 2011-11-30 08:01 | 只看该作者
也许是示波器采样点刚好落在PWM的低电平位置,把波形展开一些观察,就可以确定。

使用特权

评论回复
18
bobo5650| | 2011-11-30 10:41 | 只看该作者
输出脚后面是不是接了其他电路?照你所说,脉宽加大之后就偏于正常,则有可能是后面的电路有干扰。
可以把这个输出脚悬空了来看一下波形不?

使用特权

评论回复
19
丑奴儿atl| | 2011-11-30 14:26 | 只看该作者
围观

使用特权

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

本版积分规则

0

主题

10

帖子

1

粉丝