智能车制作

标题: 产生20ms周期的PWM波,错误,PWM波的周期如何设定? [打印本页]

作者: kemi450    时间: 2010-4-18 18:45
标题: 产生20ms周期的PWM波,错误,PWM波的周期如何设定?
我用示波器检测出来我的PWM波的周期是60ms,为什么呀?PWM波的周期如何计算呢?望给出事例......



void PLL_Init(void)      //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{                                 //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
  REFDV=1;                 //总线时钟=48/2=24MHz
  SYNR=2;
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;        //选定锁相环时钟
}
void PWM(void)
{
    PWME=0;
    PWMPRCLK=3;          //24M总线时钟8分频,得3M
    PWMSCLA=150;       //SA=A/2/150=10K
    PWMCLK_PCLK0=1;  //选SA
    PWMPOL_PPOL0=1;
    PWMCAE_CAE0=0;
    PWMPER0=200;       //10k/200=50Hz=20ms
    PWMDTY0=100;
   PWME=1;
}
作者: 王怀玉    时间: 2010-4-18 18:45
#include <hidef.h>      
#include <MC9S12XS128.h>   
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"  


void PWM_int(void)

{
  
  PWME = 0x00;       //关闭PWM各通道输出
  PWMCTL = 0xF0;     //01.23.45.67分别级联  
                     //01 23舵机
                     //45 67电机
                     
    // PWMCLK = 0x00;     //时钟选择寄存器  
  PWMCLK_PCLK1 = 1;
  PWMCLK_PCLK3 = 1;
  PWMCLK_PCLK5 = 0;
  PWMCLK_PCLK7 = 0;
  
  
  PWMPRCLK = 0x22;   //预分频寄存器  2分频
  
  PWMSCLA = 0x0a;     //二次分频
  PWMSCLB = 0x0a;
   
  //PWMPOL = 0x00;     //极性选择寄存器
  PWMPOL_PPOL1 = 1;
  PWMPOL_PPOL3 = 1;
  
  PWMPOL_PPOL5 = 0;
  PWMPOL_PPOL7 = 0;
  
  PWMCAE = 0x00;     //波形对齐寄存器
                  //通道周期寄存器
  PWMPER01 = 0x4E1F;//20000-1=19999
  PWMPER23 = 0x4E1F;//20000-1=19999
  
  PWMPER45 = 0x07CF;//2000-1
  PWMPER67 = 0x07CF;//2000-1
  
                 //通道占空比寄存器
  PWMDTY01 = 1640;
  PWMDTY23 = 2000;
  
  PWMDTY45 = 0x03E8;
  PWMDTY67 = 0x0000;  //0-2000
  PWME = 0xff;       //打开PWM各通道输出
  
}


/***********************后期直接赋值不需要在调用***************/
void PWM_01_out(int out)

{
  PWMDTY01 = out;
}
void PWM_23_out(int out)

{
  PWMDTY23 = out;
}
void PWM_45_out(int out)

{
  PWMDTY45 = out;
}
void PWM_67_out(int out)

{
  PWMDTY67 = out;
}
作者: 王怀玉    时间: 2010-4-18 19:19
说明一下,我用的总线频率是80 m
作者: francis    时间: 2010-4-18 21:54
80m !!
作者: 王怀玉    时间: 2010-4-19 08:53
回复 4# francis


    应该不高吧, 我看别的论坛生用这个频率的挺多的
作者: nonfreedom    时间: 2010-4-19 12:21
回复 2# 王怀玉


    里面 的那个pwm—in函数和pwm—out函数是什么啊,实现的是什么功能啊 ?刚学的,知道每句话的意思,就是不太明白具体实现的功能!求解。谢谢
作者: 王怀玉    时间: 2010-4-19 13:01
回复 6# nonfreedom


    就是你想输出多少占空比 就给out多少的数值
作者: nonfreedom    时间: 2010-4-19 22:01
回复 7# 王怀玉


    好想明白了,谢谢 啊
作者: 王怀玉    时间: 2010-4-20 18:58
回复 8# nonfreedom


    我用的pwm001控制舵机 函数PWM_01_out(int out);这个周期是20ms 你可也在 int out 那里写数字0到2000;即表示0到2ms注意要看你的舵机适合多少的占空比
   我用pwm45控制电机 周期是1k,输入值是0到2000;
作者: sunnylee    时间: 2010-5-16 10:19
看过
作者: linyujin    时间: 2011-2-18 13:34
路过!
作者: mashaokang1111    时间: 2011-2-20 19:45
BUS除以各种分频..然后得到的数值是1秒的脉冲数..然后设定周期寄存器..数值为20MS对应的脉冲数..周期就成20MS了..1S=1000MS这个你知道的吧
作者: liuofsanzhong    时间: 2011-10-26 20:10
楼主是个好淫!!
作者: 754512926    时间: 2011-10-29 11:09
学习一下




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