智能车制作

标题: 看PWM波形求教 [打印本页]

作者: aihao12345    时间: 2013-5-21 17:29
标题: 看PWM波形求教
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
void PLL(void)
{
  CLKSEL_PLLSEL=0;//选择系统时钟来自晶振
  PLLCTL_PLLON=1;//开启锁相环
  SYNR=0x40|0x04;//设置fvco=80M; SYNR=4;REFDIV=1; fvco=2*fosc*(SYNPIV+1)/(REFDIV+1)=80M
  REFDV=0x80|0x01; //fref=fosc/(REFDIV+1)=16/2=8M处于6~12M之间所以REFDV的前两位是10
  _asm(nop);
  _asm(nop);    //等待PLL稳定
  while(!(CRGFLG_LOCK==1));
  CLKSEL_PLLSEL=1;//选定锁相环时钟
}
//左对齐时PWM周期=通道时钟周期*PWMPERX  总线时钟40M PWM周期400ms 占空比50%的方波
//PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值
void PWM01_Init(void)
{
   
    PWME_PWME1=0;//禁止PWM的全部通道输出
    PWMCTL_CON01=1;//将PWM两两级联
    PWMCLK_PCLK1=1;//PWM全部选择SA或SB为时钟源
    PWMPRCLK_PCKA=7;//clock A,B=总线时钟/128  总线时钟是40M
    PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
   // 算出时钟周期1220HZ
    PWMPOL_PPOL1=1;//开始为高电平,到达占空比计数后输出低电平
    PWMCAE_CAE1=0;    //左对齐
    PWMPER01=488;  //PWM周期=通道时钟周期*PWMPER1  400=(1000/1220)*488
    PWMDTY01=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
    PWME_PWME1=1;//开启PWM通道
}
  void PWM23_Init(void)
{
   
    PWME_PWME3=0;//禁止PWM的全部通道输出
    PWMCTL_CON23=1;//将PWM两两级联
    PWMCLK_PCLK3=1;//PWM全部选择SA或SB为时钟源
    PWMPRCLK_PCKB=7;//clock A,B=总线时钟/128  总线时钟是40M
    PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
   // 算出时钟周期1220HZ
    PWMPOL_PPOL3=1;//开始为高电平,到达占空比计数后输出低电平
    PWMCAE_CAE3=0;    //左对齐
    PWMPER23=488;  //PWM周期=通道时钟周期*PWMPER1  400=(1000/1220)*488
    PWMDTY23=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
    PWME_PWME3=1;//开启PWM通道
}
  void PWM45_Init(void)
{
   
    PWME_PWME5=0;//禁止PWM的全部通道输出
    PWMCTL_CON45=1;//将PWM两两级联
    PWMCLK_PCLK5=1;//PWM全部选择SA或SB为时钟源
    PWMPRCLK_PCKA=7;//clock A,B=总线时钟/128  总线时钟是40M
   // 算出时钟周期1220HZ
    PWMPOL_PPOL5=1;//开始为高电平,到达占空比计数后输出低电平
    PWMCAE_CAE5=0;    //左对齐
    PWMPER45=488;  //PWM周期=通道时钟周期*PWMPER1  400=(1000/1220)*488
    PWMDTY45=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
    PWME_PWME5=1;//开启PWM通道
}
  void PWM67_Init(void)
{
   
    PWME_PWME7=0;//禁止PWM的全部通道输出
    PWMCTL_CON67=1;//将PWM两两级联
    PWMCLK_PCLK7=1;//PWM全部选择SA或SB为时钟源
    PWMPRCLK_PCKB=7;//clock A,B=总线时钟/128  总线时钟是40M
    PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
   // 算出时钟周期1220HZ
    PWMPOL_PPOL7=1;//开始为高电平,到达占空比计数后输出低电平
    PWMCAE_CAE7=0;    //左对齐
    PWMPER67=488;  //PWM周期=通道时钟周期*PWMPER1  400=(1000/1220)*488
    PWMDTY67=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
    PWME_PWME7=1;//开启PWM通道
}
  


void main(void) {
  /* put your own code here */

  PLL();
  PWM01_Init();
  PWM23_Init();
  PWM45_Init();
  PWM67_Init();
      
EnableInterrupts;
      
  for(;;) {
   
   PWMDTY01=244;
   PWMDTY23=244;
   PWMDTY45=244;
   PWMDTY67=244;
  } /* loop forever */
  /* please make sure that you never leave main */
}
不知道哪里有问题 就是出不了波形 求大神指导

作者: wangchuan    时间: 2013-5-21 18:37
沙发
作者: 飘o(≧v≦)o    时间: 2013-5-21 19:34
你把  
   PWMDTY01=244;
   PWMDTY23=244;
   PWMDTY45=244;
   PWMDTY67=244;
放到相应的子函数里,然后在主函数中调用子函数就行了。
作者: aihao12345    时间: 2013-5-21 19:41
飘o(≧v≦)o 发表于 2013-5-21 19:34
你把  
   PWMDTY01=244;
   PWMDTY23=244;

void PWM01_Init(void)
{
   
    PWME_PWME1=0;//禁止PWM的全部通道输出
    PWMPRCLK_PCKA=7;//clock A,B=总线时钟/128  总线时钟是40M
    PWMCTL_CON01=1;//将PWM两两级联
    PWMCLK_PCLK1=1;//PWM全部选择SA或SB为时钟源
   
    PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
   // 算出时钟周期1220HZ
    PWMPOL_PPOL1=1;//开始为高电平,到达占空比计数后输出低电平
    PWMCAE_CAE1=0;    //左对齐
    PWMCTL=0x00;
    PWMPER01=488;  //PWM周期=通道时钟周期*PWMPER1  400=(1000/1220)*488
    PWMDTY01=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
    PWME_PWME1=1;//开启PWM通道
     PWMDTY01=244;
}        这样么?试下还是不行
作者: 飘o(≧v≦)o    时间: 2013-5-22 16:10
  PWME_PWME1=1;//开启PWM通道
     PWMDTY01=244;
这两个,换一下位置
作者: wanglijie201209    时间: 2014-3-16 09:18
楼主的问题怎么解决的?




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2