智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 585|回复: 1
打印 上一主题 下一主题

kL25 PWM

[复制链接]

11

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2311
威望
1210
贡献
743
兑换币
775
注册时间
2013-8-11
在线时间
179 小时
跳转到指定楼层
1#
发表于 2015-5-20 14:17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
KL25 调pwm遇到了问题,初始化成功了,改变占空比时用的改变 TPM C3V 的值可是发现跟变不是  if(left>=1999)        left=1999;  TPM_CnV_REG(TPMN[tpmn], ch) = (unsigned int)left;  

  ch=TPM_CH4;
  if(right>=1999)       right=1999;
  TPM_CnV_REG(TPMN[tpmn], ch) = (unsigned int)right;


这样就能行的,监视CnV发现它压根没变,除非在每次改变CnV是来一句
TPM_CNT_REG(TPMN[tpmn])   = 0;  

但这样对于有深度强迫症的我是没法接受的,因为这样的话每次调用这个函数就会影响周期与波形,
KL系列同学们有无遇到类似问题啊?



回复

使用道具 举报

11

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2311
威望
1210
贡献
743
兑换币
775
注册时间
2013-8-11
在线时间
179 小时
2#
 楼主| 发表于 2015-5-20 14:18:10 | 只看该作者
CODE
void  DiverMotorsAndPluse_Init(void)
{
      TPMn_e tpmn=TPM0;
      TPM_CHn_e ch=TPM_CH3;

      gpio_init(PTB16 ,GPO,LOW) ;  
      gpio_init(PTC0 ,GPO,LOW) ;  

      tpm_port_mux(tpmn,ch);

      TPM_SC_REG(TPMN[tpmn])    = ( 0
                                    | TPM_SC_CPWMS_MASK         //0:上升沿计数模式 ,1: 跳变沿计数模式选择 (注释了表示 0)
                                    | TPM_SC_PS(2)             //分频因子,分频系数 = 2^PS
                                    | TPM_SC_CMOD(1)      
                                  );
      TPM_MOD_REG(TPMN[tpmn])   = 1999;                        //模数, EPWM的周期为 :MOD - CNTIN + 0x0001
      TPM_CNT_REG(TPMN[tpmn])   = 0;                          //计数器。只有低16位可用(写任何值到此寄存器,都会清0)

      TPM_CnSC_REG(TPMN[tpmn], ch) &= ~TPM_CnSC_ELSB_MASK;
      TPM_CnSC_REG(TPMN[tpmn], ch)  = TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK;
      // MSnB:MSnA = 1x       边沿对齐PWM
      // ELSnB:ELSnA = 10     先高后低
      // ELSnB:ELSnA = 11     先低后高


      TPM_CnV_REG(TPMN[tpmn], ch) = 2;

      ch=TPM_CH4;
      tpm_port_mux(tpmn,ch);
      TPM_CnSC_REG(TPMN[tpmn], ch) &= ~TPM_CnSC_ELSB_MASK;
      TPM_CnSC_REG(TPMN[tpmn], ch)  = TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK;
      TPM_CnV_REG(TPMN[tpmn], ch) = 2;
}
void  DirectMotor_Init(void)
{

}

void  DiverMotors(int left,int right)
{  
      TPMn_e tpmn=TPM0;
      TPM_CHn_e ch=TPM_CH3;
      //TPM_CNT_REG(TPMN[tpmn])   = 0;   
  if(left>=0)
  {
    left+=LeftAdd;     

    //ELSnB:ELSnA  10 高真脉冲    x1 低真脉冲
  //  TPM_CnSC_REG(TPMN[TPM0], TPM_CH3)|= TPM_CnSC_ELSB_MASK;  
   // TPM_CnSC_REG(TPMN[TPM0], TPM_CH3) &= ~TPM_CnSC_ELSA_MASK;   
    MOTOR_L=0;
  }
  else
  {
    left=LeftAdd-left;  
  //  TPM_CnSC_REG(TPMN[TPM0], TPM_CH3) &= ~TPM_CnSC_ELSB_MASK;
  //  TPM_CnSC_REG(TPMN[TPM0], TPM_CH3)|= TPM_CnSC_ELSA_MASK;  
    MOTOR_L=1;
  }

  if(right>=0)
  {
    right+=RightAdd;     
  //  TPM_CnSC_REG(TPMN[TPM0], TPM_CH4) |= TPM_CnSC_ELSB_MASK;
   // TPM_CnSC_REG(TPMN[TPM0], TPM_CH4) &= ~TPM_CnSC_ELSA_MASK;   
    MOTOR_R=0;
  }
  else
  {
    right=RightAdd-right;
  //  TPM_CnSC_REG(TPMN[TPM0], TPM_CH4) &= ~TPM_CnSC_ELSB_MASK;   
  //  TPM_CnSC_REG(TPMN[TPM0], TPM_CH4) |= TPM_CnSC_ELSA_MASK;  
    MOTOR_R=1;
  }

  if(left>=1999)        left=1999;
  TPM_CnV_REG(TPMN[tpmn], ch) = (unsigned int)left;  

  ch=TPM_CH4;
  if(right>=1999)       right=1999;
  TPM_CnV_REG(TPMN[tpmn], ch) = (unsigned int)right;

}


回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 21:36 , Processed in 0.041000 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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