智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1393|回复: 9
打印 上一主题 下一主题

pwm问题 ,求解

[复制链接]

8

主题

58

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1175
威望
596
贡献
363
兑换币
353
注册时间
2013-7-16
在线时间
108 小时
跳转到指定楼层
1#
发表于 2013-9-20 17:50:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先上程序吧
#include <hidef.h>           /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

/*************主频设置**************************/
void Busclock(void)                //05,01 48MHz  06,01 56MHz  07,01 64MHz  08,01 72MHz  
{   
    CLKSEL=0X00;                                          //disengage PLL to system
    PLLCTL_PLLON=1;                                  //turn on PLL
    SYNR =0xc0 | 0x05;                        
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;                 //pllclock=2*osc*(1+SYNR)/(1+REFDV)=96MHz;
    _asm(nop);                    //BUS CLOCK=48M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));            //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;                             
}
void init_pwm(void)
{
     PWME_PWME0=0;    //禁止
     PWMPRCLK=0X07;   //对总线时钟进行预分频(128分),总线时钟为48M,分频后为375khz
     PWMCLK_PCLK0=0;  //设A为其时钟源
     PWMSCLA=0X7D;    //A时钟为1000Hz     7D=125  375/125
     PWMPOL_PPOL0=1;  //上升沿翻转
     PWMCAE_CAE0=0;   //左对齐输出
     PWMDTY0=0X05;    //占空比为25%的波形
     PWMPER0=0X14;    //输出为50Hz的波
     PWMCNT0=0X00;    //0通道计数器清0
     PWME_PWME0=1;    //0通道使能,0通道为输出通道
}

void main(void)  
{
  Busclock();
  init_pwm();
  while(1);


我自己计算的是pwm0输出50hz方波,但实际输出的不是,求教大神哪里问题

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
92
威望
51
贡献
31
兑换币
31
注册时间
2013-9-20
在线时间
6 小时
2#
发表于 2013-9-20 17:52:27 | 只看该作者
自己算
回复 支持 反对

使用道具 举报

8

主题

58

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1175
威望
596
贡献
363
兑换币
353
注册时间
2013-7-16
在线时间
108 小时
3#
 楼主| 发表于 2013-9-20 17:53:38 | 只看该作者
kgxy-freescale 发表于 2013-9-20 17:52
自己算

算了啊,计算的是,实际输出不是,不知道哪里问题
回复 支持 反对

使用道具 举报

1

主题

190

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6456

在线王奖章活跃会员奖章论坛元老奖章优秀会员奖章

QQ
威望
3092
贡献
1918
兑换币
1783
注册时间
2012-7-5
在线时间
723 小时
4#
发表于 2013-9-20 19:18:39 | 只看该作者
你写错了,你写出来的是150Hz的程序。。。
“PWMPER0=0X14;    //输出为50Hz的波”把这句改成PWMPER0=0X3C;
因为你算出来分频后的48000000/128/125=3000;
PWMx=通道时钟周期*PWMPERX;
回复 支持 反对

使用道具 举报

8

主题

58

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1175
威望
596
贡献
363
兑换币
353
注册时间
2013-7-16
在线时间
108 小时
5#
 楼主| 发表于 2013-9-22 19:32:45 | 只看该作者
君啸凤舞 发表于 2013-9-20 19:18
你写错了,你写出来的是150Hz的程序。。。
“PWMPER0=0X14;    //输出为50Hz的波”把这句改成PWMPER0=0X3C ...

改了还是不行,而且之前也不是输出150hz的波,是不是时钟那部分的问题
回复 支持 反对

使用道具 举报

1

主题

190

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6456

在线王奖章活跃会员奖章论坛元老奖章优秀会员奖章

QQ
威望
3092
贡献
1918
兑换币
1783
注册时间
2012-7-5
在线时间
723 小时
6#
发表于 2013-9-22 19:57:13 | 只看该作者
倾城☆北辰★强 发表于 2013-9-22 19:32
改了还是不行,而且之前也不是输出150hz的波,是不是时钟那部分的问题

有可能。
回复 支持 反对

使用道具 举报

2

主题

83

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1117
威望
541
贡献
312
兑换币
358
注册时间
2013-9-5
在线时间
132 小时
7#
发表于 2013-9-27 11:00:38 | 只看该作者
时钟照着手册上面写,那要这么复杂,有时候PWM波那样用这么复杂,写个小程序就行了,直接输出,上升下降时间都差不多
回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
威望
251
贡献
132
兑换币
144
注册时间
2013-9-17
在线时间
34 小时
毕业学校
西安邮电大学
8#
发表于 2013-9-27 16:44:49 | 只看该作者
A时钟应该为375khz吧。。。。
回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
威望
251
贡献
132
兑换币
144
注册时间
2013-9-17
在线时间
34 小时
毕业学校
西安邮电大学
9#
发表于 2013-9-27 16:47:59 | 只看该作者
它的输出应该是18.75khz的波,个人观点,仅供参考,不对的还望各大神指教。
回复 支持 反对

使用道具 举报

0

主题

21

帖子

0

精华

注册会员

Rank: 2

积分
187
威望
95
贡献
42
兑换币
54
注册时间
2014-3-6
在线时间
25 小时
毕业学校
西北民族大学
10#
发表于 2014-3-25 21:48:31 | 只看该作者
你的时钟换一个试试
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-7 00:33 , Processed in 0.084239 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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