智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1976|回复: 5
打印 上一主题 下一主题

看PWM波形求教

[复制链接]

1

主题

4

帖子

0

精华

高级会员

Rank: 4

积分
830
威望
412
贡献
248
兑换币
261
注册时间
2012-11-12
在线时间
85 小时
跳转到指定楼层
1#
发表于 2013-5-21 17:29:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#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 */
}
不知道哪里有问题 就是出不了波形 求大神指导

1

主题

36

帖子

0

精华

高级会员

Rank: 4

积分
668
QQ
威望
326
贡献
174
兑换币
217
注册时间
2013-1-26
在线时间
84 小时
6#
发表于 2014-3-16 09:18:50 | 只看该作者
楼主的问题怎么解决的?
回复 支持 反对

使用道具 举报

6

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
445
威望
245
贡献
118
兑换币
123
注册时间
2012-11-7
在线时间
41 小时
毕业学校
Whatever
5#
发表于 2013-5-22 16:10:47 | 只看该作者
  PWME_PWME1=1;//开启PWM通道
     PWMDTY01=244;
这两个,换一下位置
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

高级会员

Rank: 4

积分
830
威望
412
贡献
248
兑换币
261
注册时间
2012-11-12
在线时间
85 小时
4#
 楼主| 发表于 2013-5-21 19:41:51 | 只看该作者
飘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;
}        这样么?试下还是不行
回复 支持 反对

使用道具 举报

6

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
445
威望
245
贡献
118
兑换币
123
注册时间
2012-11-7
在线时间
41 小时
毕业学校
Whatever
3#
发表于 2013-5-21 19:34:23 | 只看该作者
你把  
   PWMDTY01=244;
   PWMDTY23=244;
   PWMDTY45=244;
   PWMDTY67=244;
放到相应的子函数里,然后在主函数中调用子函数就行了。
回复 支持 反对

使用道具 举报

11

主题

191

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2705

活跃会员奖章优秀会员奖章

QQ
威望
1390
贡献
859
兑换币
848
注册时间
2012-5-16
在线时间
228 小时
2#
发表于 2013-5-21 18:37:55 | 只看该作者
沙发
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 21:44 , Processed in 0.047531 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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