社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 1864|回复: 1

[求助] c8051f020 pwm只产生某一时刻的波形

[复制链接]

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-5-13 12:34:50 | 显示全部楼层 |阅读模式
问题:用以下程序产生占空比可变的pwm波,预期的是能够在示波器上观察到占空比变化的波形即每周期的占空比不同,但是实际观察到的波形却是某一时刻的占空比,但占空比是整体发生变化。请大神指点。。。。。。。。
#include"c8051f020.h"
#include "math.h"
#define PI 3.14
sbit SPWM_OUT1=P0^4;
signed char i_SPWM1;
unsigned int f=50;
unsigned int N;    //载波比      
unsigned int xdata  s_L[] ;
unsigned int k ;
double M=0.8 ;
void SysclkInit(void)
{
        OSCICN=0x86;           //设置SYSCLK为8MHz内部振荡器
}


void PortInit(void)
{
        XBR0=0x1d;                 //使CEX0和CEX1输出到P0.0、P0.1
        XBR1=0x14;                //外部中断0端脚来测频率,外部中断1端脚来测相位差
        XBR2=0x40;       //允许交叉开关和弱上拉
        P0MDOUT=0xff;           //端口引脚输出方式为推挽
}


void PCA0Init(void)
{
        PCA0MD=0x01;        //设置空闲等待方式,PCA时基=SYSCLK/12
                        //允许CF中断
        PCA0CPM0=0x42;        //PCA输出方式选择,8位pwm
}

void main()
{
        SysclkInit();
        PortInit();
        WDTCN = 0xde;          //禁止看门狗定时器
        WDTCN = 0xad;
        PCA0Init();
        i_SPWM1=0;
        N=1000000/(f*384);
    for(k=0;k<N;k++)
{
    s_L[k]=256*(0.5-0.5*M*sin((2*k+1)*PI/N));  //产生低电平的宽度}                        
        EIP1=0x08;                                       
        EIE1|=0x08;                                         //允许PCA中断
        EA=1;
        PCA0CPL0=s_L[0];
        PCA0CN=0x40;                        //允许PCA计数          ;
        while(1)
        {
        }       

}


void PCA_ISR(void) interrupt 9
{
                                        //CCF0:PCA0 模块0 捕捉/比较标志在发生一次匹配或捕捉时该位由硬件置位。当CCF 中断被允许时,该位置‘1’
                                                //将导致CPU 转向CCF 中断服务程序。该位不能由硬件自动清0,必须用软件清0

             CF=0;
                  i_SPWM1++;
                   if(i_SPWM1==N)
                    {
                          i_SPWM1=0;
              
                           PCA0CPH0=s_L[i_SPWM1];
                         }
          else{
                       PCA0CPH0=s_L[i_SPWM1];
                       }

}
此帖出自stm32/stm8论坛


回复

使用道具 举报

79

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2012-5-13 14:35:50 | 显示全部楼层
这个是示波器原理方面的问题吧
楼主观察到的波形是不是固定位置的方波,然后一个边沿扫描式的移动?
试一试改变步长,让占空比变化的剧烈一些,然后观察相邻的方波有没有不同


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-12-18 20:50 , Processed in 0.185105 second(s), 16 queries , Redis On.

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