智能车制作

标题: PWM模块周期问题 [打印本页]

作者: Aachen.    时间: 2015-2-1 11:42
标题: PWM模块周期问题
void MOTOR_PWM(void)
{
  PWMCTL_CON23=1;
  PWMCTL_CON45=1;
  PWME_PWME3=0;
  PWME_PWME5=0;
  PWMPRCLK=0x33;                //对时钟 A B 进行八分频  ClockA = ClockB = 3MHZ
  PWMSCLB=0x03;                 //对时钟SB继续分频  ClockSB=ClockB/(2*3)=500K
  PWMSCLA=0x03;                 //对时钟SA继续分频  ClockSA=ClockA/(2*3)=500K
  PWMCLK_PCLK3=1;               //选择SB时钟源
  PWMCLK_PCLK5=1;               //选择SA时钟源
  PWMPOL_PPOL3 = 1;             //起始为高电平
  PWMPOL_PPOL5 = 1;             //起始为高电平
  PWMCNT23 = 0;                  //计数器从零开始计数
  PWMCNT45 = 0;                  //计数器从零开始计数
  PWMPER23 = 2000;              //周期为1ms
  PWMPER45 = 2000;              //周期为2ms
  PWMDTY23 = 1000;              //占空比
  PWMDTY45 = 1000;               //占空比
  PWME_PWME3 = 1;               //Enable P3  
  PWME_PWME5 = 1;               //Enable P5
}
想问下PWME3和PWME5的周期和设置的频率有没有关系??我设置的 PWMPER23 = 2000;   PWMPER45 = 2000;  可是P3连接示波器显示的周期为1ms,而P5连接示波器显示的周期为2ms???这是怎么回事啊??~>.<~
作者: 空有一人    时间: 2015-2-1 12:09
锁相环配置的对否?和这段程序对应否?
作者: Aachen.    时间: 2015-2-1 12:11
空有一人 发表于 2015-2-1 12:09
锁相环配置的对否?和这段程序对应否?

这是锁相环的:
void PLL_Init(void)
{                               //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
   SYNR=2;                      //总线频率为24MHZ
   REFDV=1;
   _asm(nop);
   _asm(nop);
   _asm(nop);
   _asm(nop);
   _asm(nop);
   _asm(nop);
   while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
   CLKSEL_PLLSEL = 1;                        //engage PLL to system;           
}

作者: 空有一人    时间: 2015-2-1 13:08
[attach]74235[/attach][attach]74234[/attach]

你这个锁相环配的蛮简单哈,锁相环范围也有寄存器,最好也配置一下。
重点:
你配置的锁相环频率和PWM模块反推出来的频率不一样。
我没仔细演算,但根据你的注释,确实不对,你自己再理一下所有寄存器。

作者: Aachen.    时间: 2015-2-1 13:54
空有一人 发表于 2015-2-1 13:08
你这个锁相环配的蛮简单哈,锁相环范围也有寄存器,最好也配置一下。
重点:
你配置的锁相环频率和PW ...

怎么看出配置的锁相环频率和PWM模块反推出来的频率不一样的??求解释~>.<~
作者: 空有一人    时间: 2015-2-1 16:05
:L:L

我只是看了注释,没仔细仔细演算。


你自己一步一步推。先把锁相环相关寄存器配置好,再配置PWM的相关寄存器。

作者: Aachen.    时间: 2015-2-1 16:33
空有一人 发表于 2015-2-1 16:05
我只是看了注释,没仔细仔细演算。

根据公式PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=2*16*(1+1)/(2+1)=48MHZ    然后总线频率应该是24MHZ   时钟AB经过八分频是3MHZ  SA和SB再分频 【3MHZ/(2*3)】=500K    哪里有问题呀???>.<
作者: 空有一人    时间: 2015-2-1 16:47
Aachen. 发表于 2015-2-1 16:33
根据公式PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=2*16*(1+1)/(2+1)=48MHZ    然后总线频率应该是24MHZ   ...

[attach]74239[/attach]

作者: Aachen.    时间: 2015-2-1 19:48
空有一人 发表于 2015-2-1 16:47

额……不是。。我式子打错了,应该是PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=2*16*(1+2)/(1+1)=48MHZ 。。。最后的结果应该是对的。
作者: 空有一人    时间: 2015-2-1 20:07
Aachen. 发表于 2015-2-1 19:48
额……不是。。我式子打错了,应该是PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=2*16*(1+2)/(1+1)=48MHZ 。 ...

[attach]74253[/attach][attach]74252[/attach]
你把PWM Center Align Enable Register (PWMCAE) PWM 中央对齐使能寄存器
配置一下吧,这个寄存器你好像没有写。这个寄存器也能影响通道周期。
作者: Aachen.    时间: 2015-2-1 20:16
空有一人 发表于 2015-2-1 20:07
你把PWM Center Align Enable Register (PWMCAE) PWM 中央对齐使能寄存器
配置一下吧,这个寄存器你好 ...

哦哦    非常感谢O(∩_∩)O
作者: 空有一人    时间: 2015-2-1 20:17
Aachen. 发表于 2015-2-1 20:16
哦哦    非常感谢O(∩_∩)O

怎么样,解决了么?

作者: Aachen.    时间: 2015-2-2 10:01
空有一人 发表于 2015-2-1 20:17
怎么样,解决了么?

void MOTOR_PWM(void)
{
  PWMCTL_CON23=1;
  PWMCTL_CON45=1;
  PWME_PWME3=0;
  PWME_PWME5=0;
  PWMPRCLK=0x11;                //对时钟 A B 进行二分频  ClockA = ClockB = 12MHZ
  PWMSCLB=0x03;                 //对时钟SB继续分频  ClockSB=ClockB/(2*3)=2MHZ
  PWMSCLA=0x03;                 //对时钟SA继续分频  ClockSA=ClockA/(2*3)=2MHZ  
  PWMCLK_PCLK3=1;               //选择SB时钟源
  PWMCLK_PCLK5=1;               //选择SA时钟源
  PWMCAE_CAE3=0;                //选择输出模式为左对齐输出模式
  PWMCAE_CAE5=0;
  PWMPOL_PPOL3 = 1;             //起始为高电平
  PWMPOL_PPOL5 = 1;             //起始为高电平
  PWMCNT23 = 0;                 //计数器从零开始计数
  PWMCNT45 = 0;                 //计数器从零开始计数
  PWMPER23 = 2000;              //【周期为(1/2MHZ)*2000=1ms】
  PWMPER45 = 2000;              //周期为2ms【不知道为什么P5的左对齐输出是P3的左对齐输出的2倍???】
  PWMDTY23 = 1000;              //占空比
  PWMDTY45 = 1000;              //占空比
  PWME_PWME3 = 1;               //Enable P3  
  PWME_PWME5 = 1;               //Enable P5
}
我把输出模式全部调到左对齐了,可是P5的输出还是P3周期的二倍,按理说他们不应该周期相同么?好奇怪。。。




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