智能车制作

标题: 冷火PWM与PIT结合不能正常输出 [打印本页]

作者: e23    时间: 2014-4-8 00:15
标题: 冷火PWM与PIT结合不能正常输出
为什么把PWM放进PIT定时器中PWM不能正常输出,这是什么原因????????????????????

作者: tonystark    时间: 2014-4-8 08:57
我去,你的问题好像跟我一样。我在PIT定时中断里面放了PWM函数(让车轮不转),结果,车轮根本停不下来。你是定时什么?
作者: 暗影飞    时间: 2014-4-8 09:00
我可以肯定你们的PWM那里IO口初始化不对。
作者: 小布的梦    时间: 2014-4-8 10:51
暗影飞 发表于 2014-4-8 09:00
我可以肯定你们的PWM那里IO口初始化不对。

端口设置 还是pwm一些分频啥的没有配置好?


作者: 暗影飞    时间: 2014-4-8 11:15
小布的梦 发表于 2014-4-8 10:51
端口设置 还是pwm一些分频啥的没有配置好?

你把MCF_GPIO_PTAPAR寄存器的配置发来看看就知道了。

作者: 小布的梦    时间: 2014-4-8 11:19
        MCF_GPIO_PTAPAR=MCF_GPIO_PTAPAR_ICOC1_PWM3
                                   |MCF_GPIO_PTAPAR_ICOC2_PWM5;
                                  
作者: 小布的梦    时间: 2014-4-8 11:21
#define MCF_GPIO_PTAPAR_ICOC1_PWM3           (0xC)
作者: 小布的梦    时间: 2014-4-8 11:21
#define MCF_GPIO_PTAPAR_ICOC2_PWM5           (0x30)

作者: 小布的梦    时间: 2014-4-8 11:22
使用的23 45 级联16位

作者: 小布的梦    时间: 2014-4-8 11:23
暗影飞 发表于 2014-4-8 11:15
你把MCF_GPIO_PTAPAR寄存器的配置发来看看就知道了。

我加你qq啦 你同意下呗


作者: e23    时间: 2014-4-8 14:06
暗影飞 发表于 2014-4-8 09:00
我可以肯定你们的PWM那里IO口初始化不对。

单个测试时没有问题的,就是PIT与PWM一结合就不能正常的输出

作者: e23    时间: 2014-4-8 14:08
暗影飞 发表于 2014-4-8 11:15
你把MCF_GPIO_PTAPAR寄存器的配置发来看看就知道了。

我加你QQ吧,我把底层发给你
作者: e23    时间: 2014-4-8 14:12
tonystark 发表于 2014-4-8 08:57
我去,你的问题好像跟我一样。我在PIT定时中断里面放了PWM函数(让车轮不转),结果,车轮根本停不下来。你 ...

我们单用PWM的时候没有问题,只要一用PIT之后,不管用PIT干什么,PWM就不能正常工作,

作者: e23    时间: 2014-4-8 15:00
暗影飞 发表于 2014-4-8 09:00
我可以肯定你们的PWM那里IO口初始化不对。

#include "PWM.h"
void djfan()
{
MCF_GPIO_PORTTJ|=PORTTJ4_ON ;
MCF_GPIO_PORTTJ&=PORTTJ5_OFF;
}
void djzheng()
{
MCF_GPIO_PORTTJ|=PORTTJ5_ON ;
MCF_GPIO_PORTTJ&=PORTTJ4_OFF;
}

void PWM_init(void)
{

MCF_GPIO_PTCPAR=MCF_GPIO_PTCPAR_DTIN0_PWM0    //PWMEn=1,使能 PWM 通道 n 输出
       |MCF_GPIO_PTCPAR_DTIN1_PWM2
       |MCF_GPIO_PTCPAR_DTIN2_PWM4;
                                            

MCF_GPIO_PTAPAR=MCF_GPIO_PTAPAR_ICOC0_PWM1
       |MCF_GPIO_PTAPAR_ICOC1_PWM3
       |MCF_GPIO_PTAPAR_ICOC2_PWM5;

      
//pwm Polarity Register
//PWM 极性寄存器 1:高,0:低
//PPOLn=1,PWM 通道 n 的信号在周期的开始时输出高电平,到达占空比计数后输出低电平;
MCF_PWM_PWMPOL=MCF_PWM_PWMPOL_PPOL0   
      |MCF_PWM_PWMPOL_PPOL1
      |MCF_PWM_PWMPOL_PPOL2
      |MCF_PWM_PWMPOL_PPOL3   //起始时输出高电平
      |MCF_PWM_PWMPOL_PPOL4
      |MCF_PWM_PWMPOL_PPOL5;

//pwm Clock select register:1-SA or SB  0-A or B
//PWM 时钟选择寄存器 1:SA / SB , 0:A / B
MCF_PWM_PWMCLK=MCF_PWM_PWMCLK_PCLK0
      |MCF_PWM_PWMCLK_PCLK1
      |MCF_PWM_PWMCLK_PCLK2
      |MCF_PWM_PWMCLK_PCLK3
      |MCF_PWM_PWMCLK_PCLK4
      |MCF_PWM_PWMCLK_PCLK5
;
//pwm prescale clock select register bit[6:4]PCKB  bit[2:0]PCKA
//PWM 预分频寄存器 fA=fBUS/2^PCKA,fB=fBUS/2^PCKB
MCF_PWM_PWMPRCLK=MCF_PWM_PWMPRCLK_PCKA(2)     //fA=fB=20M
     |MCF_PWM_PWMPRCLK_PCKB(2);

     MCF_PWM_PWME = 0; //只有当相应的 PWM 通道禁止时,才能进行设置对齐方式
     
     
//pwm center align enable register:1-center-aligned 0-left-aligned
//PWM 中心对齐使能寄存器    CAEn=1,PWM 脉冲对齐方式为中心对齐;CAEn=0,PWM 脉冲对齐方式为左对齐。
MCF_PWM_PWMCAE=MCF_PWM_PWMCAE_CAE0
      |MCF_PWM_PWMCAE_CAE1
      |MCF_PWM_PWMCAE_CAE2
      |MCF_PWM_PWMCAE_CAE3      //PWM 中心对齐  
      |MCF_PWM_PWMCAE_CAE4
      |MCF_PWM_PWMCAE_CAE5
;
//pwm control register:0-separate
//PWM 控制寄存器    CONxy=0,通道 x 与通道y是独立的8位PWM通道;CONxy=1,x与通道y合并为1路16位的 PWM 通道
// MCF_PWM_PWMCTL=0x00;
MCF_PWM_PWMCTL =MCF_PWM_PWMCTL_CON01
                |MCF_PWM_PWMCTL_CON23
                |MCF_PWM_PWMCTL_CON45  //合并为1路16位的PWM通道
                   &(~MCF_PWM_PWMCTL_PFRZ)              
                   &(~MCF_PWM_PWMCTL_PSWAI);                 
//pwm scale A&B register Clock SA=Clock A/2*PWMSCLA
//PWM 分频寄存器 A/B fSA=fA/(2*PWMSCLA)
MCF_PWM_PWMSCLA=2;  //设置时钟SA    fSA = 5M
MCF_PWM_PWMSCLB=2;  //设置时钟SB   fSB = 5M
//pwm channel counter register
//PWM 通道计数寄存器 (PWMCNTn)
//PWM 通道禁止时,相应通道的计数寄存器将停止计数,当 PWM 通道重新使能时,PWM计数器将从计数寄存器的值开始继续计数
MCF_PWM_PWMCNT0=0;  
MCF_PWM_PWMCNT1=0;
MCF_PWM_PWMCNT2=0;
MCF_PWM_PWMCNT3=0;
MCF_PWM_PWMCNT4=0;
MCF_PWM_PWMCNT5=0;

//pwm channel period register
//PWM 通道周期寄存器  (PWMPERn)
// 当 PWM 脉冲对齐方式为左对齐时:PWM 信号周期  =  周期寄存器值  ÷  时钟频率
//  当 PWM 脉冲对齐方式为中心对齐时:PWM 信号周期  =  周期寄存器值  ÷  时钟频率  ×  2   
MCF_PWM_PWMPER(0)=500;             //   1k               500             1M           
MCF_PWM_PWMPER(1)=500;             //   5k               100             1M
MCF_PWM_PWMPER(2)=500;             //   10k              50              1M
MCF_PWM_PWMPER(3)=500;             //   15k              33              1M
MCF_PWM_PWMPER(4)=1000>>8;          //   1k               2500            5M
MCF_PWM_PWMPER(5)=1000;              //   10k              250             5M

//pwm channel duty register
//PWM 通道占空比寄存器 (PWMDTYn)
//当 PWM 脉冲初始时输出高电平时:PWM 信号占空比  =         占空比寄存器值  ÷  周期寄存器值  ×  100%
//当 PWM 脉冲初始时输出低电平时:PWM 信号占空比  = (1  -  占空比寄存器值  ÷  周期寄存器值)  ×  100%
MCF_PWM_PWMDTY(0)=10;
MCF_PWM_PWMDTY(1)=20;
MCF_PWM_PWMDTY(2)=30;
MCF_PWM_PWMDTY(3)=40;  //PWM 信号占空比  =  占空比寄存器值  ÷  周期寄存器值
MCF_PWM_PWMDTY(4)=100>>8;
MCF_PWM_PWMDTY(5)=100;

//pwm shutdown register
//PWM 关闭寄存器
MCF_PWM_PWMSDN=MCF_PWM_PWMSDN_IF;

//PWM 使能寄存器 (PWME)
//PWMEn=1,使能 PWM 通道 n 输出; PWMEn=0,禁止 PWM 通道 n 输出。其中 n=0~7。
MCF_PWM_PWME=MCF_PWM_PWME_PWME0
    |MCF_PWM_PWME_PWME1
    |MCF_PWM_PWME_PWME2
    |MCF_PWM_PWME_PWME3
    |MCF_PWM_PWME_PWME4
    |MCF_PWM_PWME_PWME5;
}
/*============================================================================
函数名称:MotorRun
函数返回:无
参数说明:
功能概要:电机转动函数
=============================================================================*/
//倒转
void SteerUpdatePWM23(unsigned int PwmValue)
{
MCF_PWM_PWMDTY(2) = PwmValue>>8;
MCF_PWM_PWMDTY(3) = PwmValue;
}

void SteerUpdatePWM45(unsigned int PwmValue)
{
MCF_PWM_PWMDTY(4) = PwmValue>>8;
MCF_PWM_PWMDTY(5) = PwmValue;
}


作者: 暗影飞    时间: 2014-4-8 17:02
e23 发表于 2014-4-8 15:00
#include "PWM.h"
void djfan()
{

我已经在QQ里说了,你们的初始化不对,而且QQ里面给我发的还不一样。。。。。
MCF_GPIO_PTCPAR=MCF_GPIO_PTCPAR_DTIN0_PWM0    //PWMEn=1,使能 PWM 通道 n 输出
       |MCF_GPIO_PTCPAR_DTIN1_PWM2
       |MCF_GPIO_PTCPAR_DTIN2_PWM4;
                                            

MCF_GPIO_PTAPAR=MCF_GPIO_PTAPAR_ICOC0_PWM1
       |MCF_GPIO_PTAPAR_ICOC1_PWM3
       |MCF_GPIO_PTAPAR_ICOC2_PWM5;

我说了,这里不要这么写,看手册,用哪个功能就使能哪里,别用赋值语句,用位操作!

作者: tonystark    时间: 2014-4-8 18:55
e23 发表于 2014-4-8 15:00
#include "PWM.h"
void djfan()
{

你的电机转动函数是怎么写出来的,给个思路吧。我一头雾水,不用知道该从何下手。。

作者: 雷克斯丶LUX    时间: 2014-4-10 17:16
先保证没有信号干扰锁相环频率都设置对了
作者: e23    时间: 2014-4-13 23:39
雷克斯丶LUX 发表于 2014-4-10 17:16
先保证没有信号干扰锁相环频率都设置对了

恩,是时钟设置的问题





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